📄 editor2toolbar.js
字号:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.Editor2Toolbar");dojo.require("dojo.lang.*");dojo.require("dojo.widget.*");dojo.require("dojo.event.*");dojo.require("dojo.html.layout");dojo.require("dojo.html.display");dojo.require("dojo.widget.RichText");dojo.require("dojo.widget.PopupContainer");dojo.require("dojo.widget.ColorPalette");// Object: Manager available editor2 toolbar itemsdojo.widget.Editor2ToolbarItemManager = { _registeredItemHandlers: [], registerHandler: function(/*Object*/obj, /*String*/func){ // summary: register a toolbar item handler // obj: object which has the function to call // func: the function in the object if(arguments.length == 2){ this._registeredItemHandlers.push(function(){return obj[func].apply(obj, arguments);}); }else{ /* obj: Function func: null pId: f */// for(i in this._registeredItemHandlers){// if(func === this._registeredItemHandlers[i]){// dojo.debug("Editor2ToolbarItemManager handler "+func+" is already registered, ignored");// return;// }// } this._registeredItemHandlers.push(obj); } }, removeHandler: function(func){ // summary: remove a registered handler for(var i in this._registeredItemHandlers){ if(func === this._registeredItemHandlers[i]){ delete this._registeredItemHandlers[i]; return; } } dojo.debug("Editor2ToolbarItemManager handler "+func+" is not registered, can not remove."); }, destroy: function(){ for(var i in this._registeredItemHandlers){ delete this._registeredItemHandlers[i]; } }, getToolbarItem: function(/*String*/name){ // summary: return a toobar item with the given name var item; name = name.toLowerCase(); for(var i in this._registeredItemHandlers){ item = this._registeredItemHandlers[i](name); if(item){ break; } } if(!item){ switch(name){ //button for builtin functions case 'bold': case 'copy': case 'cut': case 'delete': case 'indent': case 'inserthorizontalrule': case 'insertorderedlist': case 'insertunorderedlist': case 'italic': case 'justifycenter': case 'justifyfull': case 'justifyleft': case 'justifyright': case 'outdent': case 'paste': case 'redo': case 'removeformat': case 'selectall': case 'strikethrough': case 'subscript': case 'superscript': case 'underline': case 'undo': case 'unlink': case 'createlink': case 'insertimage': //extra simple buttons case 'htmltoggle': item = new dojo.widget.Editor2ToolbarButton(name); break; case 'forecolor': case 'hilitecolor': item = new dojo.widget.Editor2ToolbarColorPaletteButton(name); break; case 'plainformatblock': item = new dojo.widget.Editor2ToolbarFormatBlockPlainSelect("formatblock"); break; case 'formatblock': item = new dojo.widget.Editor2ToolbarFormatBlockSelect("formatblock"); break; case 'fontsize': item = new dojo.widget.Editor2ToolbarFontSizeSelect("fontsize"); break; case 'fontname': item = new dojo.widget.Editor2ToolbarFontNameSelect("fontname"); break; case 'inserttable': case 'insertcell': case 'insertcol': case 'insertrow': case 'deletecells': case 'deletecols': case 'deleterows': case 'mergecells': case 'splitcell': dojo.debug(name + " is implemented in dojo.widget.Editor2Plugin.TableOperation, please require it first."); break; //TODO: case 'inserthtml': case 'blockdirltr': case 'blockdirrtl': case 'dirltr': case 'dirrtl': case 'inlinedirltr': case 'inlinedirrtl': dojo.debug("Not yet implemented toolbar item: "+name); break; default: dojo.debug("dojo.widget.Editor2ToolbarItemManager.getToolbarItem: Unknown toolbar item: "+name); } } return item; }};dojo.addOnUnload(dojo.widget.Editor2ToolbarItemManager, "destroy");// summary:// dojo.widget.Editor2ToolbarButton is the base class for all toolbar item in Editor2Toolbardojo.declare("dojo.widget.Editor2ToolbarButton", null,{ initializer: function(name){ // summary: constructor this._name = name; this._command = dojo.widget.Editor2Manager.getCommand(name); }, create: function(/*DomNode*/node, /*dojo.widget.Editor2Toolbar*/toolbar, /*Boolean*/nohover){ // summary: create the item // node: the dom node which is the root of this toolbar item // toolbar: the Editor2Toolbar widget this toolbar item belonging to // nohover: whether this item in charge of highlight this item this._domNode = node; //make this unselectable: different browsers //use different properties for this, so use //js do it automatically this.disableSelection(this._domNode); this._parentToolbar = toolbar; dojo.event.connect(this._domNode, 'onclick', this, 'onClick'); if(!nohover){ dojo.event.connect(this._domNode, 'onmouseover', this, 'onMouseOver'); dojo.event.connect(this._domNode, 'onmouseout', this, 'onMouseOut'); } }, disableSelection: function(/*DomNode*/rootnode){ // summary: disable selection on the passed node and all its children dojo.html.disableSelection(rootnode); var nodes = rootnode.all || rootnode.getElementsByTagName("*"); for(var x=0; x<nodes.length; x++){ dojo.html.disableSelection(nodes[x]); } }, onMouseOver: function(){ if(this._command.getState() != dojo.widget.Editor2Manager.commandState.Disabled){ this.highlightToolbarItem(); } }, onMouseOut: function(){ this.unhighlightToolbarItem(); }, destroy: function(){ // summary: destructor this._domNode = null; delete this._command; this._parentToolbar = null; }, onClick: function(e){ if(this._domNode && !this._domNode.disabled && this._command){ e.preventDefault(); e.stopPropagation(); this._command.execute(); } }, refreshState: function(){ // summary: update the state of the toolbar item if(this._domNode && this._command){ var em = dojo.widget.Editor2Manager; var state = this._command.getState(); if(state != this._lastState){ switch(state){ case em.commandState.Latched: this.latchToolbarItem(); break; case em.commandState.Enabled: this.enableToolbarItem(); break; case em.commandState.Disabled: default: this.disableToolbarItem(); } this._lastState = state; } return state; } }, latchToolbarItem: function(){ this._domNode.disabled = false; this.removeToolbarItemStyle(this._domNode); dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarLatchedItemStyle); }, enableToolbarItem: function(){ this._domNode.disabled = false; this.removeToolbarItemStyle(this._domNode); dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarEnabledItemStyle); }, disableToolbarItem: function(){ this._domNode.disabled = true; this.removeToolbarItemStyle(this._domNode); dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarDisabledItemStyle); }, highlightToolbarItem: function(){ dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarHighlightedItemStyle); }, unhighlightToolbarItem: function(){ dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarHighlightedItemStyle); }, removeToolbarItemStyle: function(){ dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarEnabledItemStyle); dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarLatchedItemStyle); dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarDisabledItemStyle); this.unhighlightToolbarItem(); }});// summary: dojo.widget.Editor2ToolbarDropDownButton extends the basic button with a dropdown listdojo.declare("dojo.widget.Editor2ToolbarDropDownButton", dojo.widget.Editor2ToolbarButton,{ onClick: function(){ if(this._domNode){ if(!this._dropdown){ this._dropdown = dojo.widget.createWidget("PopupContainer", {}); this._domNode.appendChild(this._dropdown.domNode); } if(this._dropdown.isShowingNow){ this._dropdown.close(); }else{ this.onDropDownShown(); this._dropdown.open(this._domNode, null, this._domNode); } } }, destroy: function(){ this.onDropDownDestroy(); if(this._dropdown){ this._dropdown.destroy(); } dojo.widget.Editor2ToolbarDropDownButton.superclass.destroy.call(this); }, onDropDownShown: function(){}, onDropDownDestroy: function(){}});// summary: dojo.widget.Editor2ToolbarColorPaletteButton provides a dropdown color palette pickerdojo.declare("dojo.widget.Editor2ToolbarColorPaletteButton", dojo.widget.Editor2ToolbarDropDownButton,{ onDropDownShown: function(){ if(!this._colorpalette){ this._colorpalette = dojo.widget.createWidget("ColorPalette", {}); this._dropdown.addChild(this._colorpalette); this.disableSelection(this._dropdown.domNode); this.disableSelection(this._colorpalette.domNode); //do we need a destory to delete this._colorpalette manually? //I assume as it is added to this._dropdown via addChild, it //should be deleted when this._dropdown is destroyed dojo.event.connect(this._colorpalette, "onColorSelect", this, 'setColor'); dojo.event.connect(this._dropdown, "open", this, 'latchToolbarItem');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -