📄 richtext.js
字号:
/* Copyright (c) 2004-2008, 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.RichText"]){dojo._hasResource["dijit._editor.RichText"]=true;dojo.provide("dijit._editor.RichText");dojo.require("dijit._Widget");dojo.require("dijit._editor.selection");dojo.require("dijit._editor.range");dojo.require("dijit._editor.html");dojo.require("dojo.i18n");dojo.requireLocalization("dijit.form","Textarea",null,"zh,ca,pt,da,tr,ru,de,ROOT,sv,ja,he,fi,nb,el,ar,pt-pt,cs,fr,es,ko,nl,zh-tw,pl,th,it,hu,sk,sl");if(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"]){if(dojo._postLoad){(function(){var _1=dojo.doc.createElement("textarea");_1.id=dijit._scopeName+"._editor.RichText.savedContent";var s=_1.style;s.display="none";s.position="absolute";s.top="-100px";s.left="-100px";s.height="3px";s.width="3px";dojo.body().appendChild(_1);})();}else{try{dojo.doc.write("<textarea id=\""+dijit._scopeName+"._editor.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");}catch(e){}}}dojo.declare("dijit._editor.RichText",dijit._Widget,{constructor:function(_3){this.contentPreFilters=[];this.contentPostFilters=[];this.contentDomPreFilters=[];this.contentDomPostFilters=[];this.editingAreaStyleSheets=[];this._keyHandlers={};this.contentPreFilters.push(dojo.hitch(this,"_preFixUrlAttributes"));if(dojo.isMoz){this.contentPreFilters.push(this._fixContentForMoz);this.contentPostFilters.push(this._removeMozBogus);}if(dojo.isSafari){this.contentPostFilters.push(this._removeSafariBogus);}this.onLoadDeferred=new dojo.Deferred();},inheritWidth:false,focusOnLoad:false,name:"",styleSheets:"",_content:"",height:"300px",minHeight:"1em",isClosed:true,isLoaded:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,isTabIndent:false,postCreate:function(){if("textarea"==this.domNode.tagName.toLowerCase()){console.warn("RichText should not be used with the TEXTAREA tag. See dijit._editor.RichText docs.");}dojo.publish(dijit._scopeName+"._editor.RichText::init",[this]);this.open();this.setupDefaultShortcuts();},setupDefaultShortcuts:function(){var _4=dojo.hitch(this,function(_5,_6){return function(){return !this.execCommand(_5,_6);};});var _7={b:_4("bold"),i:_4("italic"),u:_4("underline"),a:_4("selectall"),s:function(){this.save(true);},m:function(){this.isTabIndent=!this.isTabIndent;},"1":_4("formatblock","h1"),"2":_4("formatblock","h2"),"3":_4("formatblock","h3"),"4":_4("formatblock","h4"),"\\":_4("insertunorderedlist")};if(!dojo.isIE){_7.Z=_4("redo");}for(var _8 in _7){this.addKeyHandler(_8,true,false,_7[_8]);}},events:["onKeyPress","onKeyDown","onKeyUp","onClick"],captureEvents:[],_editorCommandsLocalized:false,_localizeEditorCommands:function(){if(this._editorCommandsLocalized){return;}this._editorCommandsLocalized=true;var _9=["div","p","pre","h1","h2","h3","h4","h5","h6","ol","ul","address"];var _a="",_b,i=0;while((_b=_9[i++])){if(_b.charAt(1)!="l"){_a+="<"+_b+"><span>content</span></"+_b+"><br/>";}else{_a+="<"+_b+"><li>content</li></"+_b+"><br/>";}}var _d=dojo.doc.createElement("div");dojo.style(_d,{position:"absolute",left:"-2000px",top:"-2000px"});dojo.doc.body.appendChild(_d);_d.innerHTML=_a;var _e=_d.firstChild;while(_e){dijit._editor.selection.selectElement(_e.firstChild);dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_e.firstChild]);var _f=_e.tagName.toLowerCase();this._local2NativeFormatNames[_f]=document.queryCommandValue("formatblock");this._native2LocalFormatNames[this._local2NativeFormatNames[_f]]=_f;_e=_e.nextSibling.nextSibling;}dojo.body().removeChild(_d);},open:function(_10){if((!this.onLoadDeferred)||(this.onLoadDeferred.fired>=0)){this.onLoadDeferred=new dojo.Deferred();}if(!this.isClosed){this.close();}dojo.publish(dijit._scopeName+"._editor.RichText::open",[this]);this._content="";if((arguments.length==1)&&(_10["nodeName"])){this.domNode=_10;}var dn=this.domNode;var _12;if((dn["nodeName"])&&(dn.nodeName.toLowerCase()=="textarea")){var ta=this.textarea=dn;this.name=ta.name;_12=this._preFilterContent(ta.value);dn=this.domNode=dojo.doc.createElement("div");dn.setAttribute("widgetId",this.id);ta.removeAttribute("widgetId");dn.cssText=ta.cssText;dn.className+=" "+ta.className;dojo.place(dn,ta,"before");var _14=dojo.hitch(this,function(){with(ta.style){display="block";position="absolute";left=top="-1000px";if(dojo.isIE){this.__overflow=overflow;overflow="hidden";}}});if(dojo.isIE){setTimeout(_14,10);}else{_14();}if(ta.form){dojo.connect(ta.form,"onsubmit",this,function(){ta.value=this.getValue();});}}else{_12=this._preFilterContent(dijit._editor.getChildrenHtml(dn));dn.innerHTML="";}if(_12==""){_12=" ";}var _15=dojo.contentBox(dn);this._oldHeight=_15.h;this._oldWidth=_15.w;this.savedContent=_12;if((dn["nodeName"])&&(dn.nodeName=="LI")){dn.innerHTML=" <br>";}this.editingArea=dn.ownerDocument.createElement("div");dn.appendChild(this.editingArea);if(this.name!=""&&(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"])){var _16=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");if(_16.value!=""){var _17=_16.value.split(this._SEPARATOR),i=0,dat;while((dat=_17[i++])){var _1a=dat.split(":");if(_1a[0]==this.name){_12=_1a[1];_17.splice(i,1);break;}}}this.connect(window,"onbeforeunload","_saveContent");}this.isClosed=false;if(dojo.isIE||dojo.isSafari||dojo.isOpera){var _1b=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"");var ifr=this.editorObject=this.iframe=dojo.doc.createElement("iframe");ifr.id=this.id+"_iframe";ifr.src=_1b;ifr.style.border="none";ifr.style.width="100%";ifr.frameBorder=0;this.editingArea.appendChild(ifr);var h=null;var _1e=dojo.hitch(this,function(){if(h){dojo.disconnect(h);h=null;}this.window=ifr.contentWindow;var d=this.document=this.window.document;d.open();d.write(this._getIframeDocTxt(_12));d.close();if(this._layoutMode){ifr.style.height="100%";}else{if(dojo.isIE>=7){if(this.height){ifr.style.height=this.height;}if(this.minHeight){ifr.style.minHeight=this.minHeight;}}else{ifr.style.height=this.height?this.height:this.minHeight;}}if(dojo.isIE){this._localizeEditorCommands();}this.onLoad();this.savedContent=this.getValue(true);});if(dojo.isIE&&dojo.isIE<=7){var t=setInterval(function(){if(ifr.contentWindow.isLoaded){clearInterval(t);_1e();}},100);}else{h=dojo.connect(((dojo.isIE)?ifr.contentWindow:ifr),"onload",_1e);}}else{this._drawIframe(_12);this.savedContent=this.getValue(true);}if(dn.nodeName=="LI"){dn.lastChild.style.marginTop="-1.2em";}if(this.domNode.nodeName=="LI"){this.domNode.lastChild.style.marginTop="-1.2em";}dojo.addClass(this.domNode,"RichTextEditable");},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_localizedIframeTitles:null,_getIframeDocTxt:function(_21){var _cs=dojo.getComputedStyle(this.domNode);if(dojo.isIE||(!this.height&&!dojo.isMoz)){_21="<div>"+_21+"</div>";}var _23=[_cs.fontWeight,_cs.fontSize,_cs.fontFamily].join(" ");var _24=_cs.lineHeight;if(_24.indexOf("px")>=0){_24=parseFloat(_24)/parseFloat(_cs.fontSize);}else{if(_24.indexOf("em")>=0){_24=parseFloat(_24);}else{_24="1.0";}}var _25="";this.style.replace(/(^|;)(line-|font-?)[^;]+/g,function(_26){_25+=_26.replace(/^;/g,"")+";";});return [this.isLeftToRight()?"<html><head>":"<html dir='rtl'><head>",(dojo.isMoz?"<title>"+this._localizedIframeTitles.iframeEditTitle+"</title>":""),"<style>","body,html {","\tbackground:transparent;","\tpadding: 1em 0 0 0;","\tmargin: -1em 0 0 0;","\theight: 100%;","}","body{","\ttop:0px; left:0px; right:0px;","\tfont:",_23,";",((this.height||dojo.isOpera)?"":"position: fixed;"),"\tmin-height:",this.minHeight,";","\tline-height:",_24,"}","p{ margin: 1em 0 !important; }",(this.height?"":"body,html{height:auto;overflow-y:hidden;/*for IE*/} body > div {overflow-x:auto;/*for FF to show vertical scrollbar*/}"),"li > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; } ","li{ min-height:1.2em; }","</style>",this._applyEditingAreaStyleSheets(),"</head><body style='"+_25+"'>"+_21+"</body></html>"].join("");},_drawIframe:function(_27){if(!this.iframe){var ifr=this.iframe=dojo.doc.createElement("iframe");ifr.id=this.id+"_iframe";var _29=ifr.style;_29.border="none";_29.lineHeight="0";_29.verticalAlign="bottom";this.editorObject=this.iframe;this._localizedIframeTitles=dojo.i18n.getLocalization("dijit.form","Textarea");var _2a=dojo.query("label[for=\""+this.id+"\"]");if(_2a.length){this._localizedIframeTitles.iframeEditTitle=_2a[0].innerHTML+" "+this._localizedIframeTitles.iframeEditTitle;}}this.iframe.style.width=this.inheritWidth?this._oldWidth:"100%";if(this._layoutMode){this.iframe.style.height="100%";}else{if(this.height){this.iframe.style.height=this.height;}else{this.iframe.height=this._oldHeight;}}var _2b;if(this.textarea){_2b=this.srcNodeRef;}else{_2b=dojo.doc.createElement("div");_2b.style.display="none";_2b.innerHTML=_27;this.editingArea.appendChild(_2b);}this.editingArea.appendChild(this.iframe);var _2c=dojo.hitch(this,function(){if(!this.editNode){if(!this.document){try{if(this.iframe.contentWindow){this.window=this.iframe.contentWindow;this.document=this.iframe.contentWindow.document;}else{if(this.iframe.contentDocument){this.window=this.iframe.contentDocument.window;this.document=this.iframe.contentDocument;}}}catch(e){}if(!this.document){setTimeout(_2c,50);return;}var _2d=this.document;_2d.open();if(dojo.isAIR){_2d.body.innerHTML=_27;}else{_2d.write(this._getIframeDocTxt(_27));}_2d.close();dojo._destroyElement(_2b);}if(!this.document.body){setTimeout(_2c,50);return;}this.onLoad();}else{dojo._destroyElement(_2b);this.editNode.innerHTML=_27;this.onDisplayChanged();}this._preDomFilterContent(this.editNode);});_2c();},_applyEditingAreaStyleSheets:function(){var _2e=[];if(this.styleSheets){_2e=this.styleSheets.split(";");this.styleSheets="";}_2e=_2e.concat(this.editingAreaStyleSheets);this.editingAreaStyleSheets=[];var _2f="",i=0,url;while((url=_2e[i++])){var _32=(new dojo._Url(dojo.global.location,url)).toString();this.editingAreaStyleSheets.push(_32);_2f+="<link rel=\"stylesheet\" type=\"text/css\" href=\""+_32+"\"/>";}return _2f;},addStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}if(dojo.indexOf(this.editingAreaStyleSheets,url)>-1){return;}this.editingAreaStyleSheets.push(url);if(this.document.createStyleSheet){this.document.createStyleSheet(url);}else{var _35=this.document.getElementsByTagName("head")[0];var _36=this.document.createElement("link");with(_36){rel="stylesheet";type="text/css";href=url;}_35.appendChild(_36);}},removeStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}var _39=dojo.indexOf(this.editingAreaStyleSheets,url);if(_39==-1){return;}delete this.editingAreaStyleSheets[_39];dojo.withGlobal(this.window,"query",dojo,["link:[href=\""+url+"\"]"]).orphan();},disabled:true,_mozSettingProps:["styleWithCSS","insertBrOnReturn"],_setDisabledAttr:function(_3a){if(!this.editNode||"_delayedDisabled" in this){this._delayedDisabled=_3a;return;}_3a=Boolean(_3a);if(dojo.isIE||dojo.isSafari||dojo.isOpera){var _3b=dojo.isIE&&(this.isLoaded||!this.focusOnLoad);if(_3b){this.editNode.unselectable="on";}this.editNode.contentEditable=!_3a;if(_3b){var _3c=this;setTimeout(function(){_3c.editNode.unselectable="off";},0);}}else{if(_3a){this._mozSettings=[false,this.blockNodeForEnter==="BR"];}this.document.designMode=(_3a?"off":"on");if(!_3a&&this._mozSettingProps){var ps=this._mozSettingProps;for(var n in ps){if(ps.hasOwnProperty(n)){try{this.document.execCommand(n,false,ps[n]);}catch(e){}}}}}this.disabled=_3a;},_isResized:function(){return false;},onLoad:function(e){if(!this.window.__registeredWindow){this.window.__registeredWindow=true;dijit.registerWin(this.window);}if(!dojo.isIE&&(this.height||dojo.isMoz)){this.editNode=this.document.body;}else{this.editNode=this.document.body.firstChild;var _40=this;if(dojo.isIE){var _41=this.tabStop=dojo.doc.createElement("<div tabIndex=-1>");this.editingArea.appendChild(_41);this.iframe.onfocus=function(){_40.editNode.setActive();};}}this.focusNode=this.editNode;try{this.attr("disabled",false);}catch(e){var _42=dojo.connect(this,"onClick",this,function(){this.attr("disabled",false);dojo.disconnect(_42);});}this._preDomFilterContent(this.editNode);var _43=this.events.concat(this.captureEvents);var ap=(this.iframe)?this.document:this.editNode;dojo.forEach(_43,function(_45){this.connect(ap,_45.toLowerCase(),_45);},this);if(dojo.isIE){this.connect(this.document,"onmousedown","_onIEMouseDown");this.editNode.style.zoom=1;}if(this.focusOnLoad){dojo.addOnLoad(dojo.hitch(this,"focus"));}this.onDisplayChanged(e);if("_delayedDisabled" in this){var d=this._delayedDisabled;delete this._delayedDisabled;this.attr("disabled",d);}this.isLoaded=true;if(this.onLoadDeferred){this.onLoadDeferred.callback(true);}},onKeyDown:function(e){if(e.keyCode===dojo.keys.TAB&&this.isTabIndent){dojo.stopEvent(e);if(this.queryCommandEnabled((e.shiftKey?"outdent":"indent"))){this.execCommand((e.shiftKey?"outdent":"indent"));}}if(dojo.isIE){if(e.keyCode==dojo.keys.TAB&&!this.isTabIndent){if(e.shiftKey&&!e.ctrlKey&&!e.altKey){this.iframe.focus();}else{if(!e.shiftKey&&!e.ctrlKey&&!e.altKey){this.tabStop.focus();}}}else{if(e.keyCode===dojo.keys.BACKSPACE&&this.document.selection.type==="Control"){dojo.stopEvent(e);this.execCommand("delete");}else{if((65<=e.keyCode&&e.keyCode<=90)||(e.keyCode>=37&&e.keyCode<=40)){e.charCode=e.keyCode;this.onKeyPress(e);}}}}else{if(dojo.isMoz&&!this.isTabIndent){if(e.keyCode==dojo.keys.TAB&&!e.shiftKey&&!e.ctrlKey&&!e.altKey&&this.iframe){var _48=dojo.isFF<3?this.iframe.contentDocument:this.iframe;_48.title=this._localizedIframeTitles.iframeFocusTitle;this.iframe.focus();dojo.stopEvent(e);}else{if(e.keyCode==dojo.keys.TAB&&e.shiftKey){if(this.toolbar){this.toolbar.focus();}dojo.stopEvent(e);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -