dijit._editor.plugins.EnterKeyHandling.handleEnterKey
dojo.require("dijit._editor.plugins.EnterKeyHandling");
defined in dijit/_editor/plugins/EnterKeyHandling.js
manually handle enter key event to make the behavior consistant across all supported browsers. See property blockNodeForEnter for available options
Usage
function (e) (view source)
if(!this.blockNodeForEnter){ return true; } //let browser handle this var selection, range, newrange; if(e.shiftKey //shift+enter always generates <br> || this.blockNodeForEnter=='BR'){ var parent = dojo.withGlobal(this.editor.window, "getParentElement", dijit._editor.selection); var header = dijit.range.getAncestor(parent,this.editor.blockNodes); if(header){ if(header.tagName=='LI'){ return true; //let brower handle } selection = dijit.range.getSelection(this.editor.window); range = selection.getRangeAt(0); if(!range.collapsed){ range.deleteContents(); } if(dijit.range.atBeginningOfContainer(header, range.startContainer, range.startOffset)){ dojo.place(this.editor.document.createElement('br'), header, "before"); }else if(dijit.range.atEndOfContainer(header, range.startContainer, range.startOffset)){ dojo.place(this.editor.document.createElement('br'), header, "after"); newrange = dijit.range.create(); newrange.setStartAfter(header); selection.removeAllRanges(); selection.addRange(newrange); }else{ return true; //let brower handle } }else{ //don't change this: do not call this.execCommand, as that may have other logic in subclass // FIXME dijit._editor.RichText.prototype.execCommand.call(this.editor, 'inserthtml', '<br>'); } return false; } var _letBrowserHandle = true; //blockNodeForEnter is either P or DIV //first remove selection selection = dijit.range.getSelection(this.editor.window); range = selection.getRangeAt(0); if(!range.collapsed){ range.deleteContents(); } var block = dijit.range.getBlockAncestor(range.endContainer, null, this.editor.editNode); if((this._checkListLater = (block.blockNode && block.blockNode.tagName == 'LI'))){ return true; } //text node directly under body, let's wrap them in a node if(!block.blockNode){ this.editor.document.execCommand('formatblock', false, this.blockNodeForEnter); //get the newly created block node // FIXME block = {blockNode:dojo.withGlobal(this.editor.window, "getAncestorElement", dijit._editor.selection, [this.blockNodeForEnter]), blockContainer: this.editor.editNode}; if(block.blockNode){ if(!(block.blockNode.textContent || block.blockNode.innerHTML).replace(/^\s+|\s+$/g, "").length){ this.removeTrailingBr(block.blockNode); return false; } }else{ block.blockNode = this.editor.editNode; } selection = dijit.range.getSelection(this.editor.window); range = selection.getRangeAt(0); } var newblock = this.editor.document.createElement(this.blockNodeForEnter); newblock.innerHTML=this.bogusHtmlContent; this.removeTrailingBr(block.blockNode); if(dijit.range.atEndOfContainer(block.blockNode, range.endContainer, range.endOffset)){ if(block.blockNode === block.blockContainer){ block.blockNode.appendChild(newblock); }else{ dojo.place(newblock, block.blockNode, "after"); } _letBrowserHandle = false; //lets move caret to the newly created block newrange = dijit.range.create(); newrange.setStart(newblock,0); selection.removeAllRanges(); selection.addRange(newrange); if(this.editor.height){ newblock.scrollIntoView(false); } }else if(dijit.range.atBeginningOfContainer(block.blockNode, range.startContainer, range.startOffset)){ dojo.place(newblock, block.blockNode, block.blockNode === block.blockContainer ? "first" : "before"); if(this.editor.height){ //browser does not scroll the caret position into view, do it manually newblock.scrollIntoView(false); } _letBrowserHandle = false; }else{ //press enter in the middle of P if(dojo.isMoz){ //press enter in middle of P may leave a trailing <br/>, let's remove it later this._pressedEnterInBlock = block.blockNode; } } return _letBrowserHandle;
parameter | type | description |
---|---|---|
e |