SemanticScuttle/includes/js/dijit/_editor/_Plugin.js

101 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);
}
});
}