| /* |
| Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. |
| Available via Academic Free License >= 2.1 OR the modified BSD license. |
| see: http://dojotoolkit.org/license for details |
| */ |
| |
| |
| if(!dojo._hasResource["dojox.editor.plugins.Breadcrumb"]){ |
| dojo._hasResource["dojox.editor.plugins.Breadcrumb"]=true; |
| dojo.provide("dojox.editor.plugins.Breadcrumb"); |
| dojo.require("dijit._editor._Plugin"); |
| dojo.require("dijit._editor.range"); |
| dojo.require("dojo.i18n"); |
| dojo.require("dojo.string"); |
| dojo.require("dijit.Toolbar"); |
| dojo.require("dijit.form.Button"); |
| dojo.require("dijit._editor.selection"); |
| dojo.require("dijit.Menu"); |
| dojo.require("dijit.MenuItem"); |
| dojo.require("dijit.MenuSeparator"); |
| dojo.experimental("dojox.editor.plugins.Breadcrumb"); |
| dojo.requireLocalization("dojox.editor.plugins","Breadcrumb",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw"); |
| dojo.declare("dojox.editor.plugins._BreadcrumbMenuTitle",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:"<tr><td dojoAttachPoint=\"title\" colspan=\"4\" class=\"dijitToolbar\" style=\"font-weight: bold; padding: 3px;\"></td></tr>",menuTitle:"",postCreate:function(){ |
| dojo.setSelectable(this.domNode,false); |
| var _1=this.id+"_text"; |
| dijit.setWaiState(this.domNode,"labelledby",_1); |
| },_setMenuTitleAttr:function(_2){ |
| this.title.innerHTML=_2; |
| },_getMenuTitleAttr:function(_3){ |
| return this.title.innerHTML; |
| }}); |
| dojo.declare("dojox.editor.plugins.Breadcrumb",dijit._editor._Plugin,{_menu:null,breadcrumbBar:null,setEditor:function(_4){ |
| this.editor=_4; |
| this._buttons=[]; |
| this.breadcrumbBar=new dijit.Toolbar(); |
| dojo.style(this.breadcrumbBar.domNode,"height","1.5em"); |
| var _5=dojo.i18n.getLocalization("dojox.editor.plugins","Breadcrumb"); |
| this._titleTemplate=_5.nodeActions; |
| dojo.place(this.breadcrumbBar.domNode,this.editor.iframe,"after"); |
| this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){ |
| this._menu=new dijit.Menu({}); |
| dojo.addClass(this.breadcrumbBar.domNode,"dojoxEditorBreadcrumbArrow"); |
| var _6=this; |
| var _7=new dijit.form.ComboButton({showLabel:true,label:"body",_selNode:_4.editNode,dropDown:this._menu,onClick:dojo.hitch(this,function(){ |
| this._menuTarget=_4.editNode; |
| this._selectContents(); |
| })}); |
| this._menuTitle=new dojox.editor.plugins._BreadcrumbMenuTitle({menuTitle:_5.nodeActions}); |
| this._selCMenu=new dijit.MenuItem({label:_5.selectContents,onClick:dojo.hitch(this,this._selectContents)}); |
| this._delCMenu=new dijit.MenuItem({label:_5.deleteContents,onClick:dojo.hitch(this,this._deleteContents)}); |
| this._selEMenu=new dijit.MenuItem({label:_5.selectElement,onClick:dojo.hitch(this,this._selectElement)}); |
| this._delEMenu=new dijit.MenuItem({label:_5.deleteElement,onClick:dojo.hitch(this,this._deleteElement)}); |
| this._moveSMenu=new dijit.MenuItem({label:_5.moveStart,onClick:dojo.hitch(this,this._moveCToStart)}); |
| this._moveEMenu=new dijit.MenuItem({label:_5.moveEnd,onClick:dojo.hitch(this,this._moveCToEnd)}); |
| this._menu.addChild(this._menuTitle); |
| this._menu.addChild(this._selCMenu); |
| this._menu.addChild(this._delCMenu); |
| this._menu.addChild(new dijit.MenuSeparator({})); |
| this._menu.addChild(this._selEMenu); |
| this._menu.addChild(this._delEMenu); |
| this._menu.addChild(new dijit.MenuSeparator({})); |
| this._menu.addChild(this._moveSMenu); |
| this._menu.addChild(this._moveEMenu); |
| _7._ddConnect=dojo.connect(_7,"openDropDown",dojo.hitch(this,function(){ |
| this._menuTarget=_7._selNode; |
| this._menuTitle.attr("menuTitle",dojo.string.substitute(this._titleTemplate,{"nodeName":"<body>"})); |
| this._selEMenu.attr("disabled",true); |
| this._delEMenu.attr("disabled",true); |
| this._selCMenu.attr("disabled",false); |
| this._delCMenu.attr("disabled",false); |
| this._moveSMenu.attr("disabled",false); |
| this._moveEMenu.attr("disabled",false); |
| })); |
| this.breadcrumbBar.addChild(_7); |
| this.connect(this.editor,"onNormalizedDisplayChanged","updateState"); |
| })); |
| this.breadcrumbBar.startup(); |
| },_selectContents:function(){ |
| this.editor.focus(); |
| if(this._menuTarget){ |
| var _8=this._menuTarget.tagName.toLowerCase(); |
| switch(_8){ |
| case "br": |
| case "hr": |
| case "img": |
| case "input": |
| case "base": |
| case "meta": |
| case "area": |
| case "basefont": |
| break; |
| default: |
| try{ |
| dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[null]); |
| dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[this._menuTarget]); |
| this.editor.onDisplayChanged(); |
| } |
| catch(e){ |
| } |
| } |
| } |
| },_deleteContents:function(){ |
| if(this._menuTarget){ |
| this.editor.beginEditing(); |
| this._selectContents(); |
| dojo.withGlobal(this.editor.window,"remove",dijit._editor.selection,[this._menuTarget]); |
| this.editor.endEditing(); |
| this._updateBreadcrumb(); |
| this.editor.onDisplayChanged(); |
| } |
| },_selectElement:function(){ |
| this.editor.focus(); |
| if(this._menuTarget){ |
| dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[null]); |
| dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[this._menuTarget]); |
| this.editor.onDisplayChanged(); |
| } |
| },_deleteElement:function(){ |
| if(this._menuTarget){ |
| this.editor.beginEditing(); |
| this._selectElement(); |
| dojo.withGlobal(this.editor.window,"remove",dijit._editor.selection,[this._menuTarget]); |
| this.editor.endEditing(); |
| this._updateBreadcrumb(); |
| this.editor.onDisplayChanged(); |
| } |
| },_moveCToStart:function(){ |
| this.editor.focus(); |
| if(this._menuTarget){ |
| this._selectContents(); |
| dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[true]); |
| } |
| },_moveCToEnd:function(){ |
| this.editor.focus(); |
| if(this._menuTarget){ |
| this._selectContents(); |
| dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[false]); |
| } |
| },_updateBreadcrumb:function(){ |
| var ed=this.editor; |
| if(ed.window){ |
| var _9=dijit.range.getSelection(ed.window); |
| if(_9&&_9.rangeCount>0){ |
| var _a=_9.getRangeAt(0); |
| var _b=dojo.withGlobal(ed.window,"getSelectedElement",dijit._editor.selection)||_a.startContainer; |
| var _c=[]; |
| if(_b&&_b.ownerDocument===ed.document){ |
| while(_b&&_b!==ed.editNode){ |
| if(_b.nodeType===1){ |
| _c.push({type:_b.tagName.toLowerCase(),node:_b}); |
| } |
| _b=_b.parentNode; |
| } |
| _c=_c.reverse(); |
| while(this._buttons.length){ |
| var db=this._buttons.pop(); |
| dojo.disconnect(db._ddConnect); |
| this.breadcrumbBar.removeChild(db); |
| } |
| this._buttons=[]; |
| var i; |
| var _d=this; |
| for(i=0;i<_c.length;i++){ |
| var bc=_c[i]; |
| var b=new dijit.form.ComboButton({showLabel:true,label:bc.type,_selNode:bc.node,dropDown:this._menu,onClick:function(){ |
| _d._menuTarget=this._selNode; |
| _d._selectContents(); |
| }}); |
| b._ddConnect=dojo.connect(b,"openDropDown",dojo.hitch(b,function(){ |
| _d._menuTarget=this._selNode; |
| var _e=_d._menuTarget.tagName.toLowerCase(); |
| var _f=dojo.string.substitute(_d._titleTemplate,{"nodeName":"<"+_e+">"}); |
| _d._menuTitle.attr("menuTitle",_f); |
| switch(_e){ |
| case "br": |
| case "hr": |
| case "img": |
| case "input": |
| case "base": |
| case "meta": |
| case "area": |
| case "basefont": |
| _d._selCMenu.attr("disabled",true); |
| _d._delCMenu.attr("disabled",true); |
| _d._moveSMenu.attr("disabled",true); |
| _d._moveEMenu.attr("disabled",true); |
| _d._selEMenu.attr("disabled",false); |
| _d._delEMenu.attr("disabled",false); |
| break; |
| default: |
| _d._selCMenu.attr("disabled",false); |
| _d._delCMenu.attr("disabled",false); |
| _d._selEMenu.attr("disabled",false); |
| _d._delEMenu.attr("disabled",false); |
| _d._moveSMenu.attr("disabled",false); |
| _d._moveEMenu.attr("disabled",false); |
| } |
| })); |
| this._buttons.push(b); |
| this.breadcrumbBar.addChild(b); |
| } |
| if(dojo.isIE){ |
| this.breadcrumbBar.domNode.className=this.breadcrumbBar.domNode.className; |
| } |
| } |
| } |
| } |
| },updateState:function(){ |
| if(dojo.style(this.editor.iframe,"display")==="none"){ |
| dojo.style(this.breadcrumbBar.domNode,"display","none"); |
| }else{ |
| if(dojo.style(this.breadcrumbBar.domNode,"display")==="none"){ |
| dojo.style(this.breadcrumbBar.domNode,"display","block"); |
| } |
| this._updateBreadcrumb(); |
| } |
| },destroy:function(){ |
| if(this.breadcrumbBar){ |
| this.breadcrumbBar.destroy(); |
| this.breadcrumbBar=null; |
| } |
| this._buttons=null; |
| delete this.editor.breadcrumbBar; |
| this.inherited(arguments); |
| }}); |
| dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){ |
| if(o.plugin){ |
| return; |
| } |
| var _10=o.args.name.toLowerCase(); |
| if(_10==="breadcrumb"){ |
| o.plugin=new dojox.editor.plugins.Breadcrumb({}); |
| } |
| }); |
| } |