]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dijit/_editor/_Plugin.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dijit / _editor / _Plugin.js
diff --git a/static/dojo-release-1.1.1/dijit/_editor/_Plugin.js b/static/dojo-release-1.1.1/dijit/_editor/_Plugin.js
new file mode 100644 (file)
index 0000000..32fde3b
--- /dev/null
@@ -0,0 +1,101 @@
+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);
+       }
+});
+
+}