New file |
0,0 → 1,201 |
/* |
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.Editor2Plugin.ContextMenu"); |
dojo.require("dojo.widget.Menu2"); |
dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function (editor) { |
dojo.widget.Editor2Plugin.ContextMenuManager.getContextMenu(editor); |
}); |
dojo.widget.Editor2Plugin.ContextMenuManager = {menuGroups:["Generic", "Link", "Anchor", "Image", "List", "Table"], _contextMenuGroupSets:{}, _registeredGroups:{}, _menus:{}, registerGroup:function (name, handler) { |
if (this._registeredGroups[name]) { |
alert("dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup: menu group " + name + "is already registered. Ignored."); |
return; |
} |
this._registeredGroups[name] = handler; |
}, removeGroup:function (name) { |
delete this._registeredGroups[name]; |
}, getGroup:function (name, contextmenuplugin) { |
if (this._registeredGroups[name]) { |
var item = this._registeredGroups[name](name, contextmenuplugin); |
if (item) { |
return item; |
} |
} |
switch (name) { |
case "Generic": |
case "Link": |
case "Image": |
return new dojo.widget.Editor2Plugin[name + "ContextMenuGroup"](contextmenuplugin); |
case "Anchor": |
case "List": |
} |
}, registerGroupSet:function (name, set) { |
this._contextMenuGroupSets[name] = set; |
}, removeGroupSet:function (name) { |
var set = this._contextMenuGroupSets[name]; |
delete this._contextMenuGroupSets[name]; |
return set; |
}, getContextMenu:function (editor) { |
var set = editor.contextMenuGroupSet || "defaultDojoEditor2MenuGroupSet"; |
if (this._menus[set]) { |
this._menus[set].bindEditor(editor); |
return this._menus[set]; |
} |
var gs = (editor.contextMenuGroupSet && this._contextMenuGroupSets[editor.contextMenuGroupSet]) || this.menuGroups; |
var menu = new dojo.widget.Editor2Plugin.ContextMenu(editor, gs); |
this._menus[set] = menu; |
return menu; |
}}; |
dojo.declare("dojo.widget.Editor2Plugin.ContextMenu", null, function (editor, gs) { |
this.groups = []; |
this.separators = []; |
this.editor = editor; |
this.editor.registerLoadedPlugin(this); |
this.contextMenu = dojo.widget.createWidget("PopupMenu2", {}); |
dojo.body().appendChild(this.contextMenu.domNode); |
this.bindEditor(this.editor); |
dojo.event.connect(this.contextMenu, "aboutToShow", this, "aboutToShow"); |
dojo.event.connect(this.editor, "destroy", this, "destroy"); |
this.setup(gs); |
}, {bindEditor:function (editor) { |
this.contextMenu.bindDomNode(editor.document.body); |
}, setup:function (gs) { |
for (var i in gs) { |
var g = dojo.widget.Editor2Plugin.ContextMenuManager.getGroup(gs[i], this); |
if (g) { |
this.groups.push(g); |
} |
} |
}, aboutToShow:function () { |
var first = true; |
for (var i in this.groups) { |
if (i > 0 && this.separators.length != this.groups.length - 1) { |
this.separators.push(dojo.widget.createWidget("MenuSeparator2", {})); |
this.contextMenu.addChild(this.separators[this.separators.length - 1]); |
} |
if (this.groups[i].refresh()) { |
if (i > 0) { |
if (first) { |
this.separators[i - 1].hide(); |
} else { |
this.separators[i - 1].show(); |
} |
} |
if (first) { |
first = false; |
} |
} else { |
if (i > 0) { |
this.separators[i - 1].hide(); |
} |
} |
} |
}, destroy:function () { |
this.editor.unregisterLoadedPlugin(this); |
delete this.groups; |
delete this.separators; |
this.contextMenu.destroy(); |
delete this.contextMenu; |
}}); |
dojo.widget.defineWidget("dojo.widget.Editor2ContextMenuItem", dojo.widget.MenuItem2, {command:"", buildRendering:function () { |
var curInst = dojo.widget.Editor2Manager.getCurrentInstance(); |
this.caption = curInst.getCommand(this.command).getText(); |
dojo.widget.Editor2ContextMenuItem.superclass.buildRendering.apply(this, arguments); |
}, onClick:function () { |
var curInst = dojo.widget.Editor2Manager.getCurrentInstance(); |
if (curInst) { |
var _command = curInst.getCommand(this.command); |
if (_command) { |
_command.execute(); |
} |
} |
}, refresh:function () { |
var curInst = dojo.widget.Editor2Manager.getCurrentInstance(); |
if (curInst) { |
var _command = curInst.getCommand(this.command); |
if (_command) { |
if (_command.getState() == dojo.widget.Editor2Manager.commandState.Disabled) { |
this.disable(); |
return false; |
} else { |
this.enable(); |
return true; |
} |
} |
} |
}, hide:function () { |
this.domNode.style.display = "none"; |
}, show:function () { |
this.domNode.style.display = ""; |
}}); |
dojo.declare("dojo.widget.Editor2Plugin.SimpleContextMenuGroup", null, function (contextmenuplugin) { |
this.contextMenu = contextmenuplugin.contextMenu; |
this.items = []; |
dojo.event.connect(contextmenuplugin, "destroy", this, "destroy"); |
}, {refresh:function () { |
if (!this.items.length) { |
this.createItems(); |
for (var i in this.items) { |
this.contextMenu.addChild(this.items[i]); |
} |
} |
return this.checkVisibility(); |
}, destroy:function () { |
this.contextmenu = null; |
delete this.items; |
delete this.contextMenu; |
}, createItems:function () { |
}, checkVisibility:function () { |
var show = false; |
for (var i in this.items) { |
show = show || this.items[i].refresh(); |
} |
var action = show ? "show" : "hide"; |
for (var i in this.items) { |
this.items[i][action](); |
} |
return show; |
}}); |
dojo.declare("dojo.widget.Editor2Plugin.GenericContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () { |
this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"cut", iconClass:"dojoE2TBIcon dojoE2TBIcon_Cut"})); |
this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"copy", iconClass:"dojoE2TBIcon dojoE2TBIcon_Copy"})); |
this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"paste", iconClass:"dojoE2TBIcon dojoE2TBIcon_Paste"})); |
}}); |
dojo.declare("dojo.widget.Editor2Plugin.LinkContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () { |
this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"createlink", iconClass:"dojoE2TBIcon dojoE2TBIcon_Link"})); |
this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"unlink", iconClass:"dojoE2TBIcon dojoE2TBIcon_UnLink"})); |
}, checkVisibility:function () { |
var show = this.items[1].refresh(); |
if (show) { |
this.items[0].refresh(); |
for (var i in this.items) { |
this.items[i].show(); |
} |
} else { |
for (var i in this.items) { |
this.items[i].hide(); |
} |
} |
return show; |
}}); |
dojo.declare("dojo.widget.Editor2Plugin.ImageContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () { |
this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"insertimage", iconClass:"dojoE2TBIcon dojoE2TBIcon_Image"})); |
}, checkVisibility:function () { |
var curInst = dojo.widget.Editor2Manager.getCurrentInstance(); |
var img = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection); |
if (img && img.tagName.toLowerCase() == "img") { |
this.items[0].show(); |
return true; |
} else { |
this.items[0].hide(); |
return false; |
} |
}}); |
|