102 lines
2.8 KiB
JavaScript
102 lines
2.8 KiB
JavaScript
|
if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["dijit._editor._Plugin"] = true;
|
||
|
dojo.provide("dijit._editor._Plugin");
|
||
|
dojo.require("dijit._Widget");
|
||
|
dojo.require("dijit.Editor");
|
||
|
dojo.require("dijit.form.Button");
|
||
|
|
||
|
dojo.declare("dijit._editor._Plugin", null, {
|
||
|
// summary
|
||
|
// This represents a "plugin" to the editor, which is basically
|
||
|
// a single button on the Toolbar and some associated code
|
||
|
constructor: function(/*Object?*/args, /*DomNode?*/node){
|
||
|
if(args){
|
||
|
dojo.mixin(this, args);
|
||
|
}
|
||
|
this._connects=[];
|
||
|
},
|
||
|
|
||
|
editor: null,
|
||
|
iconClassPrefix: "dijitEditorIcon",
|
||
|
button: null,
|
||
|
queryCommand: null,
|
||
|
command: "",
|
||
|
commandArg: null,
|
||
|
useDefaultCommand: true,
|
||
|
buttonClass: dijit.form.Button,
|
||
|
getLabel: function(key){
|
||
|
return this.editor.commands[key];
|
||
|
},
|
||
|
_initButton: function(props){
|
||
|
if(this.command.length){
|
||
|
var label = this.getLabel(this.command);
|
||
|
var className = this.iconClassPrefix+" "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
|
||
|
if(!this.button){
|
||
|
props = dojo.mixin({
|
||
|
label: label,
|
||
|
showLabel: false,
|
||
|
iconClass: className,
|
||
|
dropDown: this.dropDown,
|
||
|
tabIndex: "-1"
|
||
|
}, props || {});
|
||
|
this.button = new this.buttonClass(props);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
destroy: function(f){
|
||
|
dojo.forEach(this._connects, dojo.disconnect);
|
||
|
},
|
||
|
connect: function(o, f, tf){
|
||
|
this._connects.push(dojo.connect(o, f, this, tf));
|
||
|
},
|
||
|
updateState: function(){
|
||
|
var _e = this.editor;
|
||
|
var _c = this.command;
|
||
|
if(!_e){ return; }
|
||
|
if(!_e.isLoaded){ return; }
|
||
|
if(!_c.length){ return; }
|
||
|
if(this.button){
|
||
|
try{
|
||
|
var enabled = _e.queryCommandEnabled(_c);
|
||
|
this.button.setAttribute('disabled', !enabled);
|
||
|
if(typeof this.button.checked == 'boolean'){
|
||
|
this.button.setAttribute('checked', _e.queryCommandState(_c));
|
||
|
}
|
||
|
}catch(e){
|
||
|
console.debug(e);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
setEditor: function(/*Widget*/editor){
|
||
|
// FIXME: detatch from previous editor!!
|
||
|
this.editor = editor;
|
||
|
|
||
|
// FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
|
||
|
this._initButton();
|
||
|
|
||
|
// FIXME: wire up editor to button here!
|
||
|
if(this.command.length &&
|
||
|
!this.editor.queryCommandAvailable(this.command)
|
||
|
){
|
||
|
// console.debug("hiding:", this.command);
|
||
|
if(this.button){
|
||
|
this.button.domNode.style.display = "none";
|
||
|
}
|
||
|
}
|
||
|
if(this.button && this.useDefaultCommand){
|
||
|
this.connect(this.button, "onClick",
|
||
|
dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
|
||
|
);
|
||
|
}
|
||
|
this.connect(this.editor, "onNormalizedDisplayChanged", "updateState");
|
||
|
},
|
||
|
setToolbar: function(/*Widget*/toolbar){
|
||
|
if(this.button){
|
||
|
toolbar.addChild(this.button);
|
||
|
}
|
||
|
// console.debug("adding", this.button, "to:", toolbar);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
}
|