//>>built
define("dojox/editor/plugins/EntityPalette", [
"dojo",
"dijit",
"dojox",
"dijit/_Widget",
"dijit/_TemplatedMixin",
"dijit/_PaletteMixin",
"dojo/_base/connect",
"dojo/_base/declare",
"dojo/i18n",
"dojo/i18n!dojox/editor/plugins/nls/latinEntities"
], function(dojo, dijit, dojox) {
dojo.experimental("dojox.editor.plugins.EntityPalette");
dojo.declare("dojox.editor.plugins.EntityPalette",
[dijit._Widget, dijit._TemplatedMixin, dijit._PaletteMixin],
{
// summary:
// A keyboard accessible HTML entity-picking widget (for inserting symbol characters)
// description:
// Grid showing various entities, so the user can pick a certain entity.
// Can be used standalone, or as a popup.
//
// example:
// |
//
// example:
// | var picker = new dojox.editor.plugins.EntityPalette({ },srcNode);
// | picker.startup();
// templateString: [protected] String
// The basic template used to render the palette.
// Should generally be over-ridden to define different classes.
templateString: '\n' +
'
\n' +
' \n' +
' \n' +
' \n' +
' \n' +
' | \n' +
'
\n' +
' \n' +
' \n'+
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' | \n' +
' | \n' +
' | \n' +
' | \n' +
' \n' +
' \n' +
' \n' +
' | \n' +
'
\n' +
' \n' +
'
\n' +
'
',
baseClass: "dojoxEntityPalette",
// showPreview: [public] Boolean
// Whether the preview pane will be displayed, to show details about the selected entity.
showPreview: true,
// showCode: [public] boolean
// Show the character code for the entity.
showCode: false,
// showentityName: [public] boolean
// Show the entity name for the entity.
showEntityName: false,
// palette: [public] String
// The symbol pallete to display. The only current one is 'latin'.
palette: "latin",
dyeClass: 'dojox.editor.plugins.LatinEntity',
// domNodeClass [protected] String
paletteClass: 'editorLatinEntityPalette',
cellClass: "dojoxEntityPaletteCell",
postMixInProperties: function(){
// Convert hash of entities into two-dimensional rows/columns table (array of arrays)
var choices = dojo.i18n.getLocalization("dojox.editor.plugins", "latinEntities");
var numChoices = 0;
var entityKey;
for(entityKey in choices){numChoices++;}
var choicesPerRow = Math.floor(Math.sqrt(numChoices));
var numRows = choicesPerRow;
var currChoiceIdx = 0;
var rows = [];
var row = [];
for(entityKey in choices){
currChoiceIdx++;
row.push(entityKey);
if(currChoiceIdx % numRows === 0){
rows.push(row);
row = [];
}
}
if(row.length > 0){
rows.push(row);
}
this._palette = rows;
},
buildRendering: function(){
// Instantiate the template, which makes a skeleton table which we'll insert the entities
this.inherited(arguments);
var i18n = dojo.i18n.getLocalization("dojox.editor.plugins", "latinEntities");
this._preparePalette(
this._palette,
i18n
);
var cells = dojo.query(".dojoxEntityPaletteCell", this.gridNode);
dojo.forEach(cells, function(cellNode){
this.connect(cellNode, "onmouseenter", "_onCellMouseEnter");
}, this);
},
_onCellMouseEnter: function(e){
// summary:
// Simple function to handle updating the display at the bottom of
// the palette.
// e:
// The event.
// tags:
// private
this._displayDetails(e.target);
},
postCreate: function(){
this.inherited(arguments);
// Show the code and entity name (if enabled to do so.)
dojo.style(this.codeHeader, "display", this.showCode?"":"none");
dojo.style(this.codeNode, "display", this.showCode?"":"none");
dojo.style(this.entityHeader, "display", this.showEntityName?"":"none");
dojo.style(this.entityNode, "display", this.showEntityName?"":"none");
if(!this.showPreview){
dojo.style(this.previewNode,"display","none");
}
},
_setCurrent: function(/*DOMNode*/ node){
// summary:
// Called when a entity is hovered or focused.
// description:
// Removes highlight of the old entity, and highlights
// the new entity.
// tags:
// protected
this.inherited(arguments);
if(this.showPreview){
this._displayDetails(node);
}
},
_displayDetails: function(/*DOMNode*/ cell){
// summary:
// Display the details of the currently focused entity in the preview pane
var dye = this._getDye(cell);
if(dye){
var ehtml = dye.getValue();
var ename = dye._alias;
this.previewNode.innerHTML=ehtml;
this.codeNode.innerHTML="&#"+parseInt(ehtml.charCodeAt(0), 10)+";";
this.entityNode.innerHTML="&"+ename+";";
var i18n = dojo.i18n.getLocalization("dojox.editor.plugins", "latinEntities");
this.descNode.innerHTML=i18n[ename].replace("\n", "
");
}else{
this.previewNode.innerHTML="";
this.codeNode.innerHTML="";
this.entityNode.innerHTML="";
this.descNode.innerHTML="";
}
}
});
dojo.declare("dojox.editor.plugins.LatinEntity",
null,
{
// summary:
// Represents a character.
// Initialized using an alias for the character (like cent) rather
// than with the character itself.
constructor: function(/*String*/ alias){
// summary:
// Construct JS object representing an entity (associated w/a cell
// in the palette)
// value: String
// alias name: 'cent', 'pound' ..
this._alias = alias;
},
getValue: function(){
// summary:
// Returns HTML representing the character, like &
//
return "&" + this._alias + ";";
},
fillCell: function(/*DOMNode*/ cell){
// Deal with entities that have keys which are reserved words.
cell.innerHTML = this.getValue();
}
});
return dojox.editor.plugins.EntityPalette;
});