HTMLArea.ContextMenu=HTMLArea.Plugin.extend({constructor:function(editor,pluginName){this.base(editor,pluginName);},configurePlugin:function(editor){this.pageTSConfiguration=this.editorConfiguration.contextMenu;if(!this.pageTSConfiguration){this.pageTSConfiguration={};}
if(this.pageTSConfiguration.showButtons){this.showButtons=this.pageTSConfiguration.showButtons;}
if(this.pageTSConfiguration.hideButtons){this.hideButtons=this.pageTSConfiguration.hideButtons;}
var pluginInformation={version:'3.1',developer:'Mihai Bazon & Stanislas Rolland',developerUrl:'http://www.sjbr.ca/',copyrightOwner:'dynarch.com & Stanislas Rolland',sponsor:'American Bible Society & SJBR',sponsorUrl:'http://www.sjbr.ca/',license:'GPL'};this.registerPluginInformation(pluginInformation);return true;},onGenerate:function(){this.menu=new Ext.menu.Menu(Ext.applyIf({cls:'htmlarea-context-menu',defaultType:'menuitem',listeners:{itemClick:{fn:this.onItemClick,scope:this},show:{fn:this.onShow,scope:this},hide:{fn:this.onHide,scope:this}},items:this.buildItemsConfig()},this.pageTSConfiguration));this.menu.mon(Ext.get(this.editor.document.documentElement),'contextmenu',this.show,this);this.menu.mon(this.editor,'beforedestroy',this.onBeforeDestroy,this,{single:true});},buildItemsConfig:function(){var itemsConfig=[];var firstInGroup=true,convertedItemId;Ext.each(this.editor.config.toolbar,function(row){firstInGroup=true;Ext.each(row,function(group){if(!firstInGroup){itemsConfig.push({xtype:'menuseparator',cls:'separator'});}
firstInGroup=true;Ext.each(group,function(itemId){convertedItemId=this.editorConfiguration.convertButtonId[itemId];if((!this.showButtons||this.showButtons.indexOf(convertedItemId)!==-1)&&(!this.hideButtons||this.hideButtons.indexOf(convertedItemId)===-1)){var button=this.getButton(itemId);if(button&&button.getXType()==='htmlareabutton'&&!button.hideInContextMenu){var itemId=button.getItemId();itemsConfig.push({itemId:itemId,cls:'button',overCls:'hover',text:(button.contextMenuTitle?button.contextMenuTitle:button.tooltip.title),iconCls:button.iconCls,helpText:(button.helpText?button.helpText:this.localize(itemId+'-tooltip')),hidden:true});firstInGroup=false;}}
return true;},this);return true;},this);return true;},this);if(!firstInGroup){itemsConfig.push({xtype:'menuseparator',cls:'separator'});}
var itemId='DeleteTarget';itemsConfig.push({itemId:itemId,cls:'button',overCls:'hover',iconCls:'htmlarea-action-delete-item',helpText:this.localize('Remove this node from the document')});return itemsConfig;},onShow:function(){this.menu.mon(Ext.get(this.editor.document.documentElement),'mousedown',this.menu.hide,this.menu,{single:true});},onHide:function(){this.menu.mun(Ext.get(this.editor.document.documentElement),'mousedown',this.menu.hide,this.menu);},show:function(event,target){event.stopEvent();this.showMenu.defer(150,this,[target]);},showMenu:function(target){this.showContextItems(target);if(!Ext.isIE){this.ranges=this.editor.getSelectionRanges();}
var iframeEl=this.editor.iframe.getEl();this.menu.showAt([Ext.fly(target).getX()+iframeEl.getX(),Ext.fly(target).getY()+iframeEl.getY()]);},showContextItems:function(target){var lastIsSeparator=false,lastIsButton=false,xtype,lastVisible;this.menu.cascade(function(menuItem){xtype=menuItem.getXType();if(xtype==='menuseparator'){menuItem.setVisible(lastIsButton);lastIsButton=false;}else if(xtype==='menuitem'){var button=this.getButton(menuItem.getItemId());if(button){var text=button.contextMenuTitle?button.contextMenuTitle:button.tooltip.title;if(menuItem.text!=text){menuItem.setText(text);}
menuItem.helpText=button.helpText?button.helpText:menuItem.helpText;menuItem.setVisible(!button.disabled);lastIsButton=lastIsButton||!button.disabled;}else{this.deleteTarget=target;if(/^(html|body)$/i.test(target.nodeName)){this.deleteTarget=null;}else if(/^(table|thead|tbody|tr|td|th|tfoot)$/i.test(target.nodeName)){this.deleteTarget=Ext.fly(target).findParent('table');}else if(/^(ul|ol|dl|li|dd|dt)$/i.test(target.nodeName)){this.deleteTarget=Ext.fly(target).findParent('ul')||Ext.fly(target).findParent('ol')||Ext.fly(target).findParent('dl');}
if(this.deleteTarget){menuItem.setVisible(true);menuItem.setText(this.localize('Remove the')+' <'+this.deleteTarget.nodeName.toLowerCase()+'> ');lastIsButton=true;}else{menuItem.setVisible(false);}}}
if(!menuItem.hidden){lastVisible=menuItem;}},this);if(!lastIsButton){lastVisible.setVisible(false);}},onItemClick:function(item,event){if(!Ext.isIE){this.editor.setSelectionRanges(this.ranges);}
var button=this.getButton(item.getItemId());if(button){button.fireEvent('HTMLAreaEventContextMenu',button,event);}else if(item.getItemId()==='DeleteTarget'){var parent=this.deleteTarget.parentNode;parent.normalize();if(!Ext.isIE&&/^(td|th)$/i.test(parent.nodeName)&&parent.childNodes.length==1){parent.appendChild(this.editor.document.createElement('br'));}
var nextSibling=this.deleteTarget.nextSibling;var previousSibling=this.deleteTarget.previousSibling;if(nextSibling){this.editor.selectNode(nextSibling,true);}else if(previousSibling){this.editor.selectNode(previousSibling,false);}
HTMLArea.removeFromParent(this.deleteTarget);this.editor.updateToolbar();}},onBeforeDestroy:function(){this.menu.items.each(function(menuItem){Ext.QuickTips.unregister(menuItem);});this.menu.removeAll(true);this.menu.destroy();}});