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/EnterKeyHandling.js | 423 ++++++++++++++++++++++++++ 1 file changed, 423 insertions(+) create mode 100644 lib/dijit/_editor/plugins/EnterKeyHandling.js (limited to 'lib/dijit/_editor/plugins/EnterKeyHandling.js') diff --git a/lib/dijit/_editor/plugins/EnterKeyHandling.js b/lib/dijit/_editor/plugins/EnterKeyHandling.js new file mode 100644 index 000000000..51a8fdde8 --- /dev/null +++ b/lib/dijit/_editor/plugins/EnterKeyHandling.js @@ -0,0 +1,423 @@ +/* + 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.EnterKeyHandling"]){ +dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]=true; +dojo.provide("dijit._editor.plugins.EnterKeyHandling"); +dojo.require("dojo.window"); +dojo.declare("dijit._editor.plugins.EnterKeyHandling",dijit._editor._Plugin,{blockNodeForEnter:"BR",constructor:function(_1){ +if(_1){ +dojo.mixin(this,_1); +} +},setEditor:function(_2){ +this.editor=_2; +if(this.blockNodeForEnter=="BR"){ +if(dojo.isIE){ +_2.contentDomPreFilters.push(dojo.hitch(this,"regularPsToSingleLinePs")); +_2.contentDomPostFilters.push(dojo.hitch(this,"singleLinePsToRegularPs")); +_2.onLoadDeferred.addCallback(dojo.hitch(this,"_fixNewLineBehaviorForIE")); +}else{ +_2.onLoadDeferred.addCallback(dojo.hitch(this,function(d){ +try{ +this.editor.document.execCommand("insertBrOnReturn",false,true); +} +catch(e){ +} +return d; +})); +} +}else{ +if(this.blockNodeForEnter){ +dojo["require"]("dijit._editor.range"); +var h=dojo.hitch(this,this.handleEnterKey); +_2.addKeyHandler(13,0,0,h); +_2.addKeyHandler(13,0,1,h); +this.connect(this.editor,"onKeyPressed","onKeyPressed"); +} +} +},onKeyPressed:function(e){ +if(this._checkListLater){ +if(dojo.withGlobal(this.editor.window,"isCollapsed",dijit)){ +var _3=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,["LI"]); +if(!_3){ +dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter); +var _4=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]); +if(_4){ +_4.innerHTML=this.bogusHtmlContent; +if(dojo.isIE){ +var r=this.editor.document.selection.createRange(); +r.move("character",-1); +r.select(); +} +}else{ +console.error("onKeyPressed: Cannot find the new block node"); +} +}else{ +if(dojo.isMoz){ +if(_3.parentNode.parentNode.nodeName=="LI"){ +_3=_3.parentNode.parentNode; +} +} +var fc=_3.firstChild; +if(fc&&fc.nodeType==1&&(fc.nodeName=="UL"||fc.nodeName=="OL")){ +_3.insertBefore(fc.ownerDocument.createTextNode(" "),fc); +var _5=dijit.range.create(this.editor.window); +_5.setStart(_3.firstChild,0); +var _6=dijit.range.getSelection(this.editor.window,true); +_6.removeAllRanges(); +_6.addRange(_5); +} +} +} +this._checkListLater=false; +} +if(this._pressedEnterInBlock){ +if(this._pressedEnterInBlock.previousSibling){ +this.removeTrailingBr(this._pressedEnterInBlock.previousSibling); +} +delete this._pressedEnterInBlock; +} +},bogusHtmlContent:" ",blockNodes:/^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,handleEnterKey:function(e){ +var _7,_8,_9,_a=this.editor.document,br; +if(e.shiftKey){ +var _b=dojo.withGlobal(this.editor.window,"getParentElement",dijit._editor.selection); +var _c=dijit.range.getAncestor(_b,this.blockNodes); +if(_c){ +if(!e.shiftKey&&_c.tagName=="LI"){ +return true; +} +_7=dijit.range.getSelection(this.editor.window); +_8=_7.getRangeAt(0); +if(!_8.collapsed){ +_8.deleteContents(); +_7=dijit.range.getSelection(this.editor.window); +_8=_7.getRangeAt(0); +} +if(dijit.range.atBeginningOfContainer(_c,_8.startContainer,_8.startOffset)){ +if(e.shiftKey){ +br=_a.createElement("br"); +_9=dijit.range.create(this.editor.window); +_c.insertBefore(br,_c.firstChild); +_9.setStartBefore(br.nextSibling); +_7.removeAllRanges(); +_7.addRange(_9); +}else{ +dojo.place(br,_c,"before"); +} +}else{ +if(dijit.range.atEndOfContainer(_c,_8.startContainer,_8.startOffset)){ +_9=dijit.range.create(this.editor.window); +br=_a.createElement("br"); +if(e.shiftKey){ +_c.appendChild(br); +_c.appendChild(_a.createTextNode(" ")); +_9.setStart(_c.lastChild,0); +}else{ +dojo.place(br,_c,"after"); +_9.setStartAfter(_c); +} +_7.removeAllRanges(); +_7.addRange(_9); +}else{ +return true; +} +} +}else{ +dijit._editor.RichText.prototype.execCommand.call(this.editor,"inserthtml","
"); +} +return false; +} +var _d=true; +_7=dijit.range.getSelection(this.editor.window); +_8=_7.getRangeAt(0); +if(!_8.collapsed){ +_8.deleteContents(); +_7=dijit.range.getSelection(this.editor.window); +_8=_7.getRangeAt(0); +} +var _e=dijit.range.getBlockAncestor(_8.endContainer,null,this.editor.editNode); +var _f=_e.blockNode; +if((this._checkListLater=(_f&&(_f.nodeName=="LI"||_f.parentNode.nodeName=="LI")))){ +if(dojo.isMoz){ +this._pressedEnterInBlock=_f; +} +if(/^(\s| |\xA0|]*\bclass=['"]Apple-style-span['"][^>]*>(\s| |\xA0)<\/span>)?(
)?$/.test(_f.innerHTML)){ +_f.innerHTML=""; +if(dojo.isWebKit){ +_9=dijit.range.create(this.editor.window); +_9.setStart(_f,0); +_7.removeAllRanges(); +_7.addRange(_9); +} +this._checkListLater=false; +} +return true; +} +if(!_e.blockNode||_e.blockNode===this.editor.editNode){ +try{ +dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter); +} +catch(e2){ +} +_e={blockNode:dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]),blockContainer:this.editor.editNode}; +if(_e.blockNode){ +if(_e.blockNode!=this.editor.editNode&&(!(_e.blockNode.textContent||_e.blockNode.innerHTML).replace(/^\s+|\s+$/g,"").length)){ +this.removeTrailingBr(_e.blockNode); +return false; +} +}else{ +_e.blockNode=this.editor.editNode; +} +_7=dijit.range.getSelection(this.editor.window); +_8=_7.getRangeAt(0); +} +var _10=_a.createElement(this.blockNodeForEnter); +_10.innerHTML=this.bogusHtmlContent; +this.removeTrailingBr(_e.blockNode); +if(dijit.range.atEndOfContainer(_e.blockNode,_8.endContainer,_8.endOffset)){ +if(_e.blockNode===_e.blockContainer){ +_e.blockNode.appendChild(_10); +}else{ +dojo.place(_10,_e.blockNode,"after"); +} +_d=false; +_9=dijit.range.create(this.editor.window); +_9.setStart(_10,0); +_7.removeAllRanges(); +_7.addRange(_9); +if(this.editor.height){ +dojo.window.scrollIntoView(_10); +} +}else{ +if(dijit.range.atBeginningOfContainer(_e.blockNode,_8.startContainer,_8.startOffset)){ +dojo.place(_10,_e.blockNode,_e.blockNode===_e.blockContainer?"first":"before"); +if(_10.nextSibling&&this.editor.height){ +_9=dijit.range.create(this.editor.window); +_9.setStart(_10.nextSibling,0); +_7.removeAllRanges(); +_7.addRange(_9); +dojo.window.scrollIntoView(_10.nextSibling); +} +_d=false; +}else{ +if(_e.blockNode===_e.blockContainer){ +_e.blockNode.appendChild(_10); +}else{ +dojo.place(_10,_e.blockNode,"after"); +} +_d=false; +if(_e.blockNode.style){ +if(_10.style){ +if(_e.blockNode.style.cssText){ +_10.style.cssText=_e.blockNode.style.cssText; +} +} +} +var rs=_8.startContainer; +if(rs&&rs.nodeType==3){ +var _11,_12; +var txt=rs.nodeValue; +var _13=_a.createTextNode(txt.substring(0,_8.startOffset)); +var _14=_a.createTextNode(txt.substring(_8.startOffset,txt.length)); +dojo.place(_13,rs,"before"); +dojo.place(_14,rs,"after"); +dojo.destroy(rs); +var _15=_13.parentNode; +while(_15!==_e.blockNode){ +var tg=_15.tagName; +var _16=_a.createElement(tg); +if(_15.style){ +if(_16.style){ +if(_15.style.cssText){ +_16.style.cssText=_15.style.cssText; +} +} +} +_11=_14; +while(_11){ +_12=_11.nextSibling; +_16.appendChild(_11); +_11=_12; +} +dojo.place(_16,_15,"after"); +_13=_15; +_14=_16; +_15=_15.parentNode; +} +_11=_14; +if(_11.nodeType==1||(_11.nodeType==3&&_11.nodeValue)){ +_10.innerHTML=""; +} +while(_11){ +_12=_11.nextSibling; +_10.appendChild(_11); +_11=_12; +} +} +_9=dijit.range.create(this.editor.window); +_9.setStart(_10,0); +_7.removeAllRanges(); +_7.addRange(_9); +if(this.editor.height){ +dijit.scrollIntoView(_10); +} +if(dojo.isMoz){ +this._pressedEnterInBlock=_e.blockNode; +} +} +} +return _d; +},removeTrailingBr:function(_17){ +var _18=/P|DIV|LI/i.test(_17.tagName)?_17:dijit._editor.selection.getParentOfType(_17,["P","DIV","LI"]); +if(!_18){ +return; +} +if(_18.lastChild){ +if((_18.childNodes.length>1&&_18.lastChild.nodeType==3&&/^[\s\xAD]*$/.test(_18.lastChild.nodeValue))||_18.lastChild.tagName=="BR"){ +dojo.destroy(_18.lastChild); +} +} +if(!_18.childNodes.length){ +_18.innerHTML=this.bogusHtmlContent; +} +},_fixNewLineBehaviorForIE:function(d){ +var doc=this.editor.document; +if(doc.__INSERTED_EDITIOR_NEWLINE_CSS===undefined){ +var _19=dojo.create("style",{type:"text/css"},doc.getElementsByTagName("head")[0]); +_19.styleSheet.cssText="p{margin:0;}"; +this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS=true; +} +return d; +},regularPsToSingleLinePs:function(_1a,_1b){ +function _1c(el){ +function _1d(_1e){ +var _1f=_1e[0].ownerDocument.createElement("p"); +_1e[0].parentNode.insertBefore(_1f,_1e[0]); +dojo.forEach(_1e,function(_20){ +_1f.appendChild(_20); +}); +}; +var _21=0; +var _22=[]; +var _23; +while(_21=0;i--){ +_26=el.childNodes[i]; +if(_26.nodeName=="BR"){ +var _29=_26.ownerDocument.createElement("p"); +dojo.place(_29,el,"after"); +if(_27.length==0&&i!=_28){ +_29.innerHTML=" "; +} +dojo.forEach(_27,function(_2a){ +_29.appendChild(_2a); +}); +dojo.destroy(_26); +_27=[]; +}else{ +_27.unshift(_26); +} +} +}; +var _2b=[]; +var ps=_1a.getElementsByTagName("p"); +dojo.forEach(ps,function(p){ +_2b.push(p); +}); +dojo.forEach(_2b,function(p){ +var _2c=p.previousSibling; +if((_2c)&&(_2c.nodeType==1)&&(_2c.nodeName=="P"||dojo.style(_2c,"display")!="block")){ +var _2d=p.parentNode.insertBefore(this.document.createElement("p"),p); +_2d.innerHTML=_1b?"":" "; +} +_25(p); +},this.editor); +_1c(_1a); +return _1a; +},singleLinePsToRegularPs:function(_2e){ +function _2f(_30){ +var ps=_30.getElementsByTagName("p"); +var _31=[]; +for(var i=0;i