/* Copyright (c) 2004-2010, 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["dijit._editor.plugins.FontChoice"]){ dojo._hasResource["dijit._editor.plugins.FontChoice"]=true; dojo.provide("dijit._editor.plugins.FontChoice"); dojo.require("dijit._editor._Plugin"); dojo.require("dijit._editor.range"); dojo.require("dijit._editor.selection"); dojo.require("dijit.form.FilteringSelect"); dojo.require("dojo.data.ItemFileReadStore"); dojo.require("dojo.i18n"); dojo.requireLocalization("dijit._editor","FontChoice",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"); dojo.declare("dijit._editor.plugins._FontDropDown",[dijit._Widget,dijit._Templated],{label:"",widgetsInTemplate:true,plainText:false,templateString:""+""+""+"",postMixInProperties:function(){ this.inherited(arguments); this.strings=dojo.i18n.getLocalization("dijit._editor","FontChoice"); this.label=this.strings[this.command]; this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_")); this.selectId=this.id+"_select"; this.inherited(arguments); },postCreate:function(){ var _1=dojo.map(this.values,function(_2){ var _3=this.strings[_2]||_2; return {label:this.getLabel(_2,_3),name:_3,value:_2}; },this); this.select.store=new dojo.data.ItemFileReadStore({data:{identifier:"value",items:_1}}); this.select.set("value","",false); this.disabled=this.select.get("disabled"); },_setValueAttr:function(_4,_5){ _5=_5!==false?true:false; this.select.set("value",dojo.indexOf(this.values,_4)<0?"":_4,_5); if(!_5){ this.select._lastValueReported=null; } },_getValueAttr:function(){ return this.select.get("value"); },focus:function(){ this.select.focus(); },_setDisabledAttr:function(_6){ this.disabled=_6; this.select.set("disabled",_6); }}); dojo.declare("dijit._editor.plugins._FontNameDropDown",dijit._editor.plugins._FontDropDown,{generic:false,command:"fontName",postMixInProperties:function(){ if(!this.values){ this.values=this.generic?["serif","sans-serif","monospace","cursive","fantasy"]:["Arial","Times New Roman","Comic Sans MS","Courier New"]; } this.inherited(arguments); },getLabel:function(_7,_8){ if(this.plainText){ return _8; }else{ return "
"+_8+"
"; } },_setValueAttr:function(_9,_a){ _a=_a!==false?true:false; if(this.generic){ var _b={"Arial":"sans-serif","Helvetica":"sans-serif","Myriad":"sans-serif","Times":"serif","Times New Roman":"serif","Comic Sans MS":"cursive","Apple Chancery":"cursive","Courier":"monospace","Courier New":"monospace","Papyrus":"fantasy"}; _9=_b[_9]||_9; } this.inherited(arguments,[_9,_a]); }}); dojo.declare("dijit._editor.plugins._FontSizeDropDown",dijit._editor.plugins._FontDropDown,{command:"fontSize",values:[1,2,3,4,5,6,7],getLabel:function(_c,_d){ if(this.plainText){ return _d; }else{ return ""+_d+""; } },_setValueAttr:function(_e,_f){ _f=_f!==false?true:false; if(_e.indexOf&&_e.indexOf("px")!=-1){ var _10=parseInt(_e,10); _e={10:1,13:2,16:3,18:4,24:5,32:6,48:7}[_10]||_e; } this.inherited(arguments,[_e,_f]); }}); dojo.declare("dijit._editor.plugins._FormatBlockDropDown",dijit._editor.plugins._FontDropDown,{command:"formatBlock",values:["noFormat","p","h1","h2","h3","pre"],postCreate:function(){ this.inherited(arguments); this.set("value","noFormat",false); },getLabel:function(_11,_12){ if(this.plainText){ return _12; }else{ return "<"+_11+">"+_12+""; } },_execCommand:function(_13,_14,_15){ if(_15==="noFormat"){ var _16; var end; var sel=dijit.range.getSelection(_13.window); if(sel&&sel.rangeCount>0){ var _17=sel.getRangeAt(0); var _18,tag; if(_17){ _16=_17.startContainer; end=_17.endContainer; while(_16&&_16!==_13.editNode&&_16!==_13.document.body&&_16.nodeType!==1){ _16=_16.parentNode; } while(end&&end!==_13.editNode&&end!==_13.document.body&&end.nodeType!==1){ end=end.parentNode; } var _19=dojo.hitch(this,function(_1a,_1b){ if(_1a.childNodes&&_1a.childNodes.length){ var i; for(i=0;i<_1a.childNodes.length;i++){ var c=_1a.childNodes[i]; if(c.nodeType==1){ if(dojo.withGlobal(_13.window,"inSelection",dijit._editor.selection,[c])){ var tag=c.tagName?c.tagName.toLowerCase():""; if(dojo.indexOf(this.values,tag)!==-1){ _1b.push(c); } _19(c,_1b); } } } } }); var _1c=dojo.hitch(this,function(_1d){ if(_1d&&_1d.length){ _13.beginEditing(); while(_1d.length){ this._removeFormat(_13,_1d.pop()); } _13.endEditing(); } }); var _1e=[]; if(_16==end){ var _1f; _18=_16; while(_18&&_18!==_13.editNode&&_18!==_13.document.body){ if(_18.nodeType==1){ tag=_18.tagName?_18.tagName.toLowerCase():""; if(dojo.indexOf(this.values,tag)!==-1){ _1f=_18; break; } } _18=_18.parentNode; } _19(_16,_1e); if(_1f){ _1e=[_1f].concat(_1e); } _1c(_1e); }else{ _18=_16; while(dojo.withGlobal(_13.window,"inSelection",dijit._editor.selection,[_18])){ if(_18.nodeType==1){ tag=_18.tagName?_18.tagName.toLowerCase():""; if(dojo.indexOf(this.values,tag)!==-1){ _1e.push(_18); } _19(_18,_1e); } _18=_18.nextSibling; } _1c(_1e); } _13.onDisplayChanged(); } } }else{ _13.execCommand(_14,_15); } },_removeFormat:function(_20,_21){ if(_20.customUndo){ while(_21.firstChild){ dojo.place(_21.firstChild,_21,"before"); } _21.parentNode.removeChild(_21); }else{ dojo.withGlobal(_20.window,"selectElementChildren",dijit._editor.selection,[_21]); var _22=dojo.withGlobal(_20.window,"getSelectedHtml",dijit._editor.selection,[null]); dojo.withGlobal(_20.window,"selectElement",dijit._editor.selection,[_21]); _20.execCommand("inserthtml",_22||""); } }}); dojo.declare("dijit._editor.plugins.FontChoice",dijit._editor._Plugin,{useDefaultCommand:false,_initButton:function(){ var _23={fontName:dijit._editor.plugins._FontNameDropDown,fontSize:dijit._editor.plugins._FontSizeDropDown,formatBlock:dijit._editor.plugins._FormatBlockDropDown}[this.command],_24=this.params; if(this.params.custom){ _24.values=this.params.custom; } var _25=this.editor; this.button=new _23(dojo.delegate({dir:_25.dir,lang:_25.lang},_24)); this.connect(this.button.select,"onChange",function(_26){ this.editor.focus(); if(this.command=="fontName"&&_26.indexOf(" ")!=-1){ _26="'"+_26+"'"; } if(this.button._execCommand){ this.button._execCommand(this.editor,this.command,_26); }else{ this.editor.execCommand(this.command,_26); } this.editor.customUndo=this.editor.customUndo||dojo.isWebKit; }); },updateState:function(){ var _27=this.editor; var _28=this.command; if(!_27||!_27.isLoaded||!_28.length){ return; } if(this.button){ var _29; try{ _29=_27.queryCommandValue(_28)||""; } catch(e){ _29=""; } var _2a=dojo.isString(_29)&&_29.match(/'([^']*)'/); if(_2a){ _29=_2a[1]; } if(_28==="formatBlock"){ if(!_29||_29=="p"){ _29=null; var _2b; var sel=dijit.range.getSelection(this.editor.window); if(sel&&sel.rangeCount>0){ var _2c=sel.getRangeAt(0); if(_2c){ _2b=_2c.endContainer; } } while(_2b&&_2b!==_27.editNode&&_2b!==_27.document){ var tg=_2b.tagName?_2b.tagName.toLowerCase():""; if(tg&&dojo.indexOf(this.button.values,tg)>-1){ _29=tg; break; } _2b=_2b.parentNode; } if(!_29){ _29="noFormat"; } }else{ if(dojo.indexOf(this.button.values,_29)<0){ _29="noFormat"; } } } if(_29!==this.button.get("value")){ this.button.set("value",_29,false); } } }}); dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){ if(o.plugin){ return; } switch(o.args.name){ case "fontName": case "fontSize": case "formatBlock": o.plugin=new dijit._editor.plugins.FontChoice({command:o.args.name,plainText:o.args.plainText?o.args.plainText:false}); } }); }