From 2f01fe57a8d37767827d6db42850aef86a767c53 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 15 Nov 2010 10:39:52 +0300 Subject: add dijit/dojo stuff; initial ui mockup --- lib/dijit/_editor/plugins/FontChoice.js | 265 ++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 lib/dijit/_editor/plugins/FontChoice.js (limited to 'lib/dijit/_editor/plugins/FontChoice.js') diff --git a/lib/dijit/_editor/plugins/FontChoice.js b/lib/dijit/_editor/plugins/FontChoice.js new file mode 100644 index 000000000..c5578e3fb --- /dev/null +++ b/lib/dijit/_editor/plugins/FontChoice.js @@ -0,0 +1,265 @@ +/* + 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}); +} +}); +} -- cgit v1.2.3