Type.registerNamespace("Sys.Extended.UI.HtmlEditor"); Sys.Extended.UI.HtmlEditor.DesignPanelEventHandler = function(ev) { try { var editor = this; if(editor._editPanel != Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) return true; if(Sys.Extended.UI.HtmlEditor.isIE) { try { var selka = this._doc.selection, rrr = this._createRange(selka); } catch(e) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } if(ev.type == "mousedown" || ev.type == "dblclick") this._focus(true); if(!Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keydown" && ev.keyCode == Sys.UI.Key.tab && this._editPanel.get_suppressTabInDesignMode()) { Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel = null; return true; } if(this.isPopup()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } // if there is opened Context menu var contextMenuRemoved = false; if(editor._contextElement && editor._contextElement != null) { Function.createDelegate(this, Sys.Extended.UI.HtmlEditor.RemoveContextMenu)(); if(ev.type == "keydown" || ev.type == "keypress") { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return; } contextMenuRemoved = true; } if(typeof editor.captureInDesign == "function") if(editor.captureInDesign(ev) === false) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return; } // try to emulate "Ctrl + mouse click" in IE if(Sys.Extended.UI.HtmlEditor.isIE && ev.type == "mousedown" && ev.ctrlKey) { var sel = editor._getSelection(), savedX = ev.clientX, savedY = ev.clientY; setTimeout(function() { var sel = editor._getSelection(); if(sel.type.toLowerCase() != "control") { var range = editor._doc.body.createTextRange(); range.moveToPoint(savedX, savedY); range.select(); } sel = editor._getSelection(); var range = editor._createRange(sel), parent = Sys.Extended.UI.HtmlEditor.getSelParent(editor); while(parent != null && parent.tagName.toUpperCase() != "BODY") { if(parent.tagName.toUpperCase() == "A" && parent.href != null && typeof parent.href != "undefined" && parent.href.length > 0) { window.open(parent.href, "LinkViewWindow"); break; } parent = parent.parentNode; } }, 0); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } var el = (!Sys.Extended.UI.HtmlEditor.isIE) ? ev.target : ev.srcElement; if(el.tagName != null && typeof el.tagName != "undefined" && (el.tagName.toUpperCase() == "HTML" || el.tagName.toUpperCase() == "BODY")) { if(editor.__kkoka != true) { editor.__kkoka = true; setTimeout(function() { if(editor._editPanel == Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) { if(!editor.toEndOfProtected()) try { editor.focusEditor(); } catch(ex) { } } editor.__kkoka = false; }, 0); } } else { if(Sys.Extended.UI.HtmlEditor.contentEditable(el) != null) { setTimeout(function() { if(editor._editPanel == Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) editor.toEndOfProtected(); }, 0); } } if(contextMenuRemoved && (Sys.Extended.UI.HtmlEditor.isIE)) { var sss = this._getSelection(), rrr; try { rrr = this._createRange(sss); if(sss.type.toLowerCase() == "control") { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } catch(ex) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } var keyEvent = (Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keydown") || (ev.type == "keypress"), rere = ev.type + "--" + keyEvent; if(keyEvent && !this._editPanel.get_keyboardEnabled()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } var key = String.fromCharCode(Sys.Extended.UI.HtmlEditor.isIE ? ev.keyCode : ev.charCode).toLowerCase();; if(keyEvent && editor._editPanel.get_hotkeys() != null) { if(editor._editPanel.get_hotkeys().length > 0) { var keysn = editor._editPanel.get_hotkeys().length, cake = key; if(ev.keyCode == 18 || ev.keyCode == 17 || ev.keyCode == 16) cake = null; for(var i = 0; i < keysn; i++) { var item = editor._editPanel.get_hotkeys()[i]; if(item[1] == cake && item[2] == ev.altKey && item[3] == ev.shiftKey && item[4] == ev.ctrlKey) { if(typeof item[0] == "function") { setTimeout(function() { (item[0])(editor); editor.onContentChanged(); editor.focusEditor(); }, 0); } Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } } } if(keyEvent && ev.shiftKey && ev.keyCode == 45) { this._commonPaste(ev); } else { if(keyEvent && ev.ctrlKey && ev.altKey && ev.keyCode == Sys.UI.Key.home) { var prot = null, el = Sys.Extended.UI.HtmlEditor.getSelParent(editor); while(el && (el.nodeType == 3 || (el.tagName && el.tagName.toUpperCase() != "BODY"))) { if(el.nodeType == 3 || !el.tagName) { el = el.parentNode; continue; } var tagName = el.tagName.toUpperCase(); if(!Sys.Extended.UI.HtmlEditor.canBeInsideP(el) && tagName != "P") { if(tagName == "TD") { while(tagName != "TABLE") { el = el.parentNode; tagName = el.tagName.toUpperCase(); } } else { if(tagName == "LI") { while(tagName != "OL" && tagName != "UL") { el = el.parentNode; tagName = el.tagName.toUpperCase(); } } } prot = el; break; } el = el.parentNode; } if(prot != null) { var sel = editor._getSelection(), range = editor._createRange(sel), tempText = editor._doc.createTextNode(""); prot.parentNode.insertBefore(tempText, prot); if(Sys.Extended.UI.HtmlEditor.isIE) { var range1 = editor._createRange(sel), range2 = editor._createRange(sel), span1 = editor._doc.createElement("span"), span2 = editor._doc.createElement("span"); tempText.parentNode.insertBefore(span1, tempText); if(tempText.nextSibling) tempText.parentNode.insertBefore(span2, tempText.nextSibling); else tempText.parentNode.appendChild(span2); try { range1.moveToElementText(span1); range2.moveToElementText(span2); range1.setEndPoint("EndToEnd", range2); range1.select(); } catch(e) { } tempText.parentNode.removeChild(span1); tempText.parentNode.removeChild(span2); } else { editor._removeAllRanges(sel); range.setStart(tempText, 0); range.setEnd(tempText, 0); editor._selectRange(sel, range); } } } else if(Sys.Extended.UI.HtmlEditor.isIE && ev.keyCode >= 33 && ev.keyCode <= 40 && !ev.shiftKey) { var after_pos = (ev.keyCode == Sys.UI.Key.pageDown || ev.keyCode == Sys.UI.Key.end || ev.keyCode == Sys.UI.Key.right || ev.keyCode == Sys.UI.Key.down); setTimeout(function() { var sel = editor._getSelection(), range = editor._createRange(sel); if(sel.type.toLowerCase() == "control") { var el = range.item(0); if(!el.contentEditable || el.contentEditable == "false") { range.remove(0); sel.empty(); range = editor._createRange(sel); var span = editor._doc.createElement("SPAN"); span.appendChild(editor._doc.createTextNode("")); if(after_pos) { if(el.nextSibling == null) el.parentNode.appendChild(span); else el.parentNode.insertBefore(span, el.nextSibling); } else { el.parentNode.insertBefore(span, el); } range.moveToElementText(span); range.select(); setTimeout(function() { editor.focusEditor(); span.parentNode.removeChild(span); }, 0); } } }, 0); } else if(((keyEvent && !Sys.Extended.UI.HtmlEditor.isSafari) || (Sys.Extended.UI.HtmlEditor.isSafari && ev.type == "keydown")) && ev.ctrlKey && !ev.altKey) { editor._a_prize = false; var sel = null, range = null, key = String.fromCharCode((Sys.Extended.UI.HtmlEditor.isIE || Sys.Extended.UI.HtmlEditor.isOpera || Sys.Extended.UI.HtmlEditor.isSafari) ? ev.keyCode : ev.charCode).toLowerCase(), cmd = null, value = null; if((Sys.Extended.UI.HtmlEditor.isIE || Sys.Extended.UI.HtmlEditor.isSafari) && ev.keyCode == 17) { // Ctrl return false; } else if(!Sys.Extended.UI.HtmlEditor.isIE && ev.keyCode == Sys.UI.Key.end && !ev.shiftKey) { editor._setToEnd(); } else if(ev.keyCode == 46 && this.isShadowed()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } else if(ev.keyCode == 46 || ev.keyCode == Sys.UI.Key.backspace) { if((Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keydown") || (!Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keypress")) this._saveContent(); } else { switch(key) { case "a": if(!Sys.Extended.UI.HtmlEditor.isIE) { // KEY select all sel = this._getSelection(); this._removeAllRanges(sel); range = this._createRange(); range.selectNodeContents(this._doc.body); this._selectRange(sel, range); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } else { editor._a_prize = true; } break; case "z": this.undo(); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; case "p": if(!Sys.Extended.UI.HtmlEditor.isIE) { setTimeout(function() { editor._contextMenuCallP(); }, 0); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } break; case "y": this.redo(); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; break; case "x": if(this.isShadowed()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } this._saveContent(); if(Sys.Extended.UI.HtmlEditor.isIE) { if(ev.type == "keydown") { editor.openWait(); setTimeout(function() { editor._copyCut(key, false); editor.closeWait(); }, 0); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } break; case "c": if(this.isShadowed()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } if(Sys.Extended.UI.HtmlEditor.isIE) { if(ev.type == "keydown") { editor.openWait(); setTimeout(function() { editor._copyCut(key, false); editor.closeWait(); setTimeout(function() { editor._ifShadow(); }, 0); }, 0); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } break; case "v": if(this.isShadowed()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } // This was added on 5 Feb 2009 : "Let's paste it as it is" in IE // Not a good idea, but in this case some Word's markup will not be lost if(Sys.Extended.UI.HtmlEditor.isIE) { this._saveContent(); return true; } this._commonPaste(ev); break; // simple key commands follow case "b": // KEY bold this._execCommand("bold", false, value); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; case "i": // KEY italic this._execCommand("italic", false, value); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; case "u": // KEY underline this._execCommand("underline", false, value); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; case "s": // KEY strike through this._execCommand("strikethrough", false, value); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; case "l": // KEY justify left cmd = "justifyleft"; break; case "e": // KEY justify center cmd = "justifycenter"; break; case "r": // KEY justify right cmd = "justifyright"; break; case "j": // KEY justify full cmd = "justifyfull"; break; case "q": // test KEY alert(this._doc.body.innerHTML); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; break; case "0": // test KEY var str1 = "Your browser:\n\n" + navigator.userAgent; alert(str1); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; break; case "9": if(!Sys.Extended.UI.HtmlEditor.isIE) { var sel = editor._getSelection(), range = editor._createRange(sel), p1 = range.startContainer, p2 = range.endContainer, Str = ""; Str += "startContainer: " + (p1.nodeType == 1 ? p1.tagName : "text") + "\n"; Str += "endContainer : " + (p2.nodeType == 1 ? p2.tagName : "text") + "\n"; if(p1 == p2) { Str += "startOffset: " + range.startOffset + "\n"; Str += "endOffset : " + range.endOffset + "\n"; if(p1.nodeType == 1) { p1 = p1.childNodes.item(range.startOffset); if(p1 && p1.nodeType) { Str += "startOffset node: " + (p1.nodeType == 1 ? p1.tagName : "text") + "\n"; if(range.startOffset != range.endOffset) { p1 = p2.childNodes.item(range.endOffset); if(p1 && p1.nodeType) Str += "endOffset node: " + (p1.nodeType == 1 ? p1.tagName : "text") + "\n"; } } else { Str += p1; } } } alert(Str); } else { var sel = editor._getSelection(), range = editor._createRange(sel); alert("boundingLeft: " + range.boundingLeft + " boundingTop: " + range.boundingTop + "\n" + "boundingWidth: " + range.boundingWidth + " boundingHeight: " + range.boundingHeight); } Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; break; } } if(cmd) { // execute simple command this._execCommand(cmd, false, value); if(cmd == "formatblock" && !Sys.Extended.UI.HtmlEditor.isIE) { this._saveContent(); this._undo(false); } Sys.Extended.UI.HtmlEditor._stopEvent(ev); if(cmd == "delete" || cmd == "paste") this._clearP(); } } else if(keyEvent || ((Sys.Extended.UI.HtmlEditor.isSafari || Sys.Extended.UI.HtmlEditor.isOpera) && ev.type == "keydown")) { // other keys here if(Sys.Extended.UI.HtmlEditor.isIE && this._tryForward) { var range = this._createRange(this._getSelection()); range.select(); this._tryForward = false; } var key = String.fromCharCode(Sys.Extended.UI.HtmlEditor.isIE ? ev.keyCode : ev.charCode).toLowerCase(); if(editor._a_prize) { editor._a_prize = false; function test_a() { var r = editor._createRange(editor._getSelection()), parent = r.parentElement(); if(parent && parent.nodeType == 1 && parent.tagName.toUpperCase() == "P") { while(parent.firstChild) parent.parentNode.insertBefore(parent.firstChild, parent); parent.parentNode.removeChild(parent); } } // wait for the IE stops operating this event setTimeout(test_a, 0); } if(this.isShadowed()) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } switch(ev.keyCode) { case Sys.UI.Key.tab: if((Sys.Extended.UI.HtmlEditor.isSafari || Sys.Extended.UI.HtmlEditor.isOpera) && ev.type != "keydown") break; if(!this._editPanel.get_suppressTabInDesignMode()) { if(!this.isControl()) this.insertHTML("        "); Sys.Extended.UI.HtmlEditor._stopEvent(ev); } else { if(Sys.Extended.UI.HtmlEditor.isSafari) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); } Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel = null; return true; } break; case 46: case Sys.UI.Key.backspace: if((Sys.Extended.UI.HtmlEditor.isSafari || Sys.Extended.UI.HtmlEditor.isOpera) && ev.type != "keydown") break; if(((Sys.Extended.UI.HtmlEditor.isIE || Sys.Extended.UI.HtmlEditor.isSafari) && ev.type == "keydown") || (!Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keypress")) this._saveContent(); if(!Sys.Extended.UI.HtmlEditor.isIE) { var range = this._createRange(this._getSelection()), p1 = range.startContainer, p2 = range.endContainer; if(ev.type == "keypress") if(Sys.Extended.UI.HtmlEditor.contentEditable(p1) != null || Sys.Extended.UI.HtmlEditor.contentEditable(p2) != null) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } // inside TD if(p1 == p2 && p1.nodeType == 1 && p1.tagName.toUpperCase() == "TD" && range.startOffset == range.startOffset && p1.childNodes.item(range.startOffset) && p1.childNodes.item(range.startOffset).tagName && p1.childNodes.item(range.startOffset).tagName.toUpperCase() == "BR") { var span = p1.childNodes.item(range.startOffset), left = 0, right = 0, nb; nb = span.previousSibling; while(nb) { left++; nb = nb.previousSibling; } nb = span.nextSibling; while(nb) { right++; nb = nb.nextSibling; } if((ev.keyCode == 46 && right == 0) || (ev.keyCode == Sys.UI.Key.backspace && left == 0)) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } else { if(ev.keyCode == 46 && p1.firstChild == p1.lastChild && p1.firstChild.nodeType == 1) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } } // inside TEXTNODE if(p1 == p2 && p1.nodeType == 3 && range.startOffset == range.endOffset && !Sys.Extended.UI.HtmlEditor.isOpera) { var data = p1.data + ""; if(ev.keyCode == 46) { if(range.startOffset == data.length && !(p1.nextSibling && p1.nextSibling.nodeType == 3)) { if(p1.nextSibling) { p1.parentNode.removeChild(p1.nextSibling); editor.onContentChanged(); } Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } if(ev.keyCode == Sys.UI.Key.backspace) if(range.startOffset == 0 && !(p1.previousSibling && p1.previousSibling.nodeType == 3)) { if(p1.previousSibling) { p1.parentNode.removeChild(p1.previousSibling); editor.onContentChanged(); } Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } if(ev.keyCode == Sys.UI.Key.backspace && p1.nodeType == 1 && p1 == p2 && range.startOffset == range.endOffset) { var mel = p1.childNodes.item(range.startOffset); if(mel != null && mel.nodeType == 1 && mel.tagName.toUpperCase() == "BR") { mel = mel.previousSibling; if(mel != null && mel.nodeType != 3) { mel.parentNode.removeChild(mel); editor.onContentChanged(); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } } setTimeout(function() { var sel = editor._getSelection(), range = editor._createRange(sel), p1 = range.startContainer, p2 = range.endContainer; if(Sys.Extended.UI.HtmlEditor.contentEditable(p1) != null || Sys.Extended.UI.HtmlEditor.contentEditable(p2) != null) { editor._undo(false); return; } if(Sys.Extended.UI.HtmlEditor.isOpera && p1 == p2 && p1.nodeType == 3 && (p1.data).length == 0) { p1.parentNode.removeChild(p1); } else if(p1 == p2 && p1.nodeType == 1 && Sys.Extended.UI.HtmlEditor.isStyleTag(p1.tagName) && range.startOffset == range.endOffset && p1.childNodes.length == 0) { while(p1.parentNode.nodeType == 1 && Sys.Extended.UI.HtmlEditor.isStyleTag(p1.parentNode.tagName) && p1.parentNode.childNodes.length == 1) p1 = p1.parentNode; var next = p1.nextSibling, prev = p1.previousSibling, parent = p1.parentNode; parent.removeChild(p1); editor.onContentChanged(); if(next == null && prev == null) { range.setStart(parent, 0); range.setEnd(parent, 0); } else if(next != null && prev != null) { if(next.nodeType == 3 && prev.nodeType == 3) { var l = ("" + prev.data + "").length; prev.appendData(next.data); parent.removeChild(next); range.setStart(prev, l); range.setEnd(prev, l); } else { if(prev.nodeType == 3) { var l = ("" + prev.data + "").length; range.setStart(prev, l); range.setEnd(prev, l); } else { if(next.nodeType == 3) { range.setStart(next, 0); range.setEnd(next, 0); } else { if(next.childNodes.length > 0) { range.setStart(next, 0); range.setEnd(next, 0); } else { var l = Sys.Extended.UI.HtmlEditor.__getIndex(next); range.setStart(parent, l); range.setEnd(parent, l); } } } } } else { if(prev != null) { if(prev.nodeType == 3) { var l = ("" + prev.data + "").length; range.setStart(prev, l); range.setEnd(prev, l); } else { var l = prev.childNodes.length; if(l > 0) { range.setStart(prev, l); range.setEnd(prev, l); } else { l = Sys.Extended.UI.HtmlEditor.__getIndex(prev); range.setStart(parent, l); range.setEnd(parent, l); } } } else { if(next != null) { if(next.nodeType == 3) { range.setStart(next, 0); range.setEnd(next, 0); } else { var l = next.childNodes.length; if(l > 0) { range.setStart(next, l); range.setEnd(next, l); } else { l = Sys.Extended.UI.HtmlEditor.__getIndex(next); range.setStart(parent, l); range.setEnd(parent, l); } } } } } editor._removeAllRanges(sel); editor._selectRange(sel, range); } }, 0); } else { // IE var sel = editor._getSelection(); if(sel.type.toLowerCase() == "control") { if(ev.keyCode == 8) { setTimeout(function() { editor._ifShadow(); editor.onContentChanged(); }, 0); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return; } var r = editor._createRange(sel), eln = r.item(0); if(eln.tagName.toUpperCase() == "EMBED") { eln.src = ""; eln.parentNode.removeChild(eln); while(r.length > 0) r.remove(0); try { r.collapse(false); } catch(e) { } Sys.Extended.UI.HtmlEditor._stopEvent(ev); editor._saveContent(); setTimeout(function() { editor._undo(false); editor.onContentChanged(); }, 0); return; } } var tempCollectionLength = editor._doc.body.getElementsByTagName("EMBED").length; if(tempCollectionLength > 0) { var popup = editor._body.ownerDocument.createElement("div"); editor._body.appendChild(popup); var evKeyCode = ev.keyCode; setTimeout(function() { editor._body.removeChild(popup); var tempCollectionNew = editor._doc.body.getElementsByTagName("EMBED"); if(tempCollectionLength != tempCollectionNew.length) { editor._saveContent(); setTimeout(function() { editor._undo(false); editor.onContentChanged(); }, 0); } }, 0); } setTimeout(function() { editor._clearP(); }, 0); } break; case Sys.UI.Key.enter: if((Sys.Extended.UI.HtmlEditor.isSafari || Sys.Extended.UI.HtmlEditor.isOpera) && ev.type == "keydown") break; if((!Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keypress") || (Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keydown")) this._saveContent(); if(Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keydown") { var sel = editor._getSelection(); if(sel.type.toLowerCase() == "control") break; var r = editor._createRange(sel); if(!ev.shiftKey) { var prnt = r.parentElement(); if(prnt.tagName.toUpperCase() == "TEXTAREA") break; while(prnt && prnt.tagName && prnt.tagName.toUpperCase() != "BODY" && Sys.Extended.UI.HtmlEditor.isStyleTag(prnt.tagName)) prnt = prnt.parentNode; if(prnt && prnt.tagName) { var tagName = prnt.tagName.toUpperCase(); if(tagName == "P" || tagName == "LI") { if(tagName == "LI") { function test() { r = editor._createRange(editor._getSelection()); var parent = r.parentElement(); while(parent && parent.tagName && parent.tagName.toUpperCase() != "BODY" && Sys.Extended.UI.HtmlEditor.isStyleTag(parent.tagName)) parent = parent.parentNode; if(parent && parent.nodeType == 1 && parent.tagName.toUpperCase() == "P") { var span1 = editor._doc.createElement("span"), tempText = editor._doc.createTextNode(" "), inner = parent; while(inner.firstChild != null && inner.firstChild.nodeType == 1) inner = inner.firstChild; if(inner.nodeType == 1) { inner.appendChild(tempText); inner.appendChild(span1); while(parent.firstChild) parent.parentNode.insertBefore(parent.firstChild, parent); } else { parent.parentNode.insertBefore(tempText, parent); parent.parentNode.insertBefore(span1, parent); } parent.parentNode.removeChild(parent); r.moveToElementText(span1); r.select(); span1.parentNode.removeChild(span1); editor.onContentChanged(); } } setTimeout(test, 0); } break; } } try { var mn = Sys.Extended.UI.HtmlEditor.smartClassName + "_middle_add", mn_element = null, mn_span_text = ""; function testNextBlockElement() { var sel = editor._getSelection(), range = editor._createRange(sel); if(mn_element != null) { mn_element.innerHTML = " "; range.moveToElementText(mn_element); range.select(); mn_element.parentNode.insertBefore(mn_element.firstChild, mn_element); mn_element.parentNode.removeChild(mn_element); editor.onContentChanged(); } } r.pasteHTML(mn_span_text); var needTest = false; mn_element = editor._doc.getElementById(mn); if(mn_element != null) { var nextSibling = mn_element.nextSibling, curPar = mn_element.parentNode; while(nextSibling == null && curPar != null && Sys.Extended.UI.HtmlEditor.isStyleTag(curPar.tagName)) { nextSibling = curPar.nextSibling; curPar = curPar.parentNode; } if(nextSibling != null && !Sys.Extended.UI.HtmlEditor.isInlineElement(nextSibling) && nextSibling.tagName != null && typeof nextSibling.tagName != "undefined") { var tag = nextSibling.tagName.toUpperCase(); if(tag != "BR" && tag != "UL" && tag != "OL" && tag != "P") needTest = true; } mn_element.parentNode.removeChild(mn_element); } r.pasteHTML("
" + (needTest ? mn_span_text : "")); if(needTest) mn_element = editor._doc.getElementById(mn); r.select(); if(needTest) { setTimeout(testNextBlockElement, 0); Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } } catch(ex) { } } else { break; } Sys.Extended.UI.HtmlEditor._stopEvent(ev); } else { if(!ev.shiftKey && (Sys.Extended.UI.HtmlEditor.isSafari || Sys.Extended.UI.HtmlEditor.isOpera)) { var prnt = Sys.Extended.UI.HtmlEditor.getSelParent(this); if(prnt.nodeType == 3) prnt = prnt.parentNode; while(prnt && prnt.tagName && prnt.tagName.toUpperCase() != "BODY" && Sys.Extended.UI.HtmlEditor.isStyleTag(prnt.tagName)) prnt = prnt.parentNode; if(prnt && prnt.tagName && (prnt.tagName.toUpperCase() == "P" || prnt.tagName.toUpperCase() == "LI")) break; var mn_span_text = "
"; if(Sys.Extended.UI.HtmlEditor.isOpera) { var sel = editor._getSelection(), range = editor._createRange(sel); if(range.startContainer == range.endContainer) if(range.startContainer.nodeType == 1) { var firstCh = range.startContainer.childNodes.item(range.startOffset); if(firstCh.nodeType == 1 && firstCh.tagName.toUpperCase() == "BR") mn_span_text += "
"; } else if(range.startContainer.nodeType == 3 && range.startOffset == range.endOffset && (range.startContainer.data).length == range.endOffset && !(range.startContainer.nextSibling && range.startContainer.nextSibling.nodeType == 3)) { mn_span_text += " "; } } this.insertHTML(mn_span_text); Sys.Extended.UI.HtmlEditor._stopEvent(ev); if(Sys.Extended.UI.HtmlEditor.isOpera) { var sel = editor._getSelection(), range = editor._createRange(sel); if(range.startContainer == range.endContainer && range.startContainer.nodeType == 3 && range.startOffset == range.endOffset && (range.startContainer.data).length == 0) { var nbsp = range.startContainer.previousSibling; range.startContainer.parentNode.removeChild(range.startContainer); editor._removeAllRanges(sel); range = editor._createRange(); range.setStart(nbsp, 0); range.setEnd(nbsp, 1); editor._selectRange(sel, range); } } editor.onContentChanged(); } else if(Sys.Extended.UI.HtmlEditor.isSafari) { this.insertHTML("
"); Sys.Extended.UI.HtmlEditor._stopEvent(ev); editor.onContentChanged(); } } break; } } else { editor._a_prize = false; } } // Struggle with bad behavior of IE when text is typing inside SPAN and when some text is selected if(Sys.Extended.UI.HtmlEditor.isIE && ev.type == "keypress" && !ev.ctrlKey) { var key = ev.keyCode, selT = editor._getSelection(), rangeT = editor._createRange(selT); if(rangeT.text.length > 0) { var chr = String.fromCharCode(key), caps = Sys.Extended.UI.HtmlEditor.capLock(ev), upper = (ev.shiftKey && !caps) || caps; if(!upper) chr = chr.toLowerCase(); var tid = Sys.Extended.UI.HtmlEditor.smartClassName + "StyleForTyping", elT = editor._doc.getElementById(tid); if(elT != null) { chr = "" + chr + ""; elT.parentNode.removeChild(elT); } rangeT.pasteHTML(chr); if(elT != null) { editor.trickWithStyles(tid); elT = editor._doc.getElementById(tid + tid); elT.parentNode.removeChild(elT); } Sys.Extended.UI.HtmlEditor._stopEvent(ev); editor.onContentChanged(); return false; } } if(ev.type == "mouseup" || ev.type == "mousedown" || ev.type == "keydown") { var need_update = true; if(ev.type == "keydown" && !ev.ctrlKey) { var key = ev.keyCode; if((key >= 0x30 && key <= 0x5a) || (key == 0x20) || (key == 0x0d) || (key >= 0xba && key <= 0xde) || (key >= 0x60 && key <= 0x6f)) { if(editor._StyleForTyping != null) { editor.n_arr = []; for(var im = 0; im < editor._StyleForTyping.length; im++) editor.n_arr.push(editor._StyleForTyping[im]); var tid = Sys.Extended.UI.HtmlEditor.smartClassName + "StyleForTyping", needItNow = true; if(!Sys.Extended.UI.HtmlEditor.isIE) { editor.insertHTML(""); } else { editor.insertHTML(" "); var elT = editor._doc.getElementById(tid); if(elT && elT.nextSibling && elT.nextSibling.nodeType == 3) { needItNow = false; var selT = editor._getSelection(), rangeT = editor._createRange(selT); rangeT.moveToElementText(editor._doc.getElementById(tid)); rangeT.select(); } else { if(elT) elT.removeChild(elT.firstChild); } } if(needItNow) { setTimeout(function() { editor.trickWithStyles(tid); editor.onContentChanged(); }, 0); } } } } if(need_update || !Sys.Extended.UI.HtmlEditor.isIE) { if(!editor._updated_now) { if(editor._updateTimer) { clearTimeout(editor._updateTimer); editor._updateTimer = null; } editor._updateTimerLimit = 3; function xyz() { if(editor._editPanel == Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) { try { if(Sys.Extended.UI.HtmlEditor.isIE) { try { var selka = editor._doc.selection; } catch(e) { return false; } if(editor._getSelection().type == "None" && editor._doc.queryCommandValue("backcolor") == 0 && editor._doc.queryCommandValue("forecolor") == 0) { editor._updateTimerLimit--; if(editor._updateTimerLimit > 0) { editor._updateTimer = setTimeout(xyz, 100); // delay for toolbars updating return; } } } editor._updated_now = true; editor._editPanel.updateToolbar(); editor._updated_now = false; editor._updateTimer = null; if(!Sys.Extended.UI.HtmlEditor.isIE) editor.focusEditor(); } catch(e) { } } } editor._updateTimer = setTimeout(xyz, 300); // delay for toolbars updating } } } if(!((!Sys.Extended.UI.HtmlEditor.isIE && (ev.type == "keydown" || ev.type == "keyup")) || (Sys.Extended.UI.HtmlEditor.isIE && (ev.type == "keydown" || ev.type == "keyup") && (ev.keyCode == 16 || ev.keyCode == 20)))) editor._StyleForTyping = null; if(Sys.Extended.UI.HtmlEditor.isSafari) setTimeout(function() { editor._createRange(editor._getSelection()); }, 0); if(!Sys.Extended.UI.HtmlEditor.isIE) { setTimeout(function() { if(editor._editPanel == Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) { var sel = editor._getSelection(), range = editor._createRange(sel); if(range.startContainer.nodeType != 3 && range.startContainer == range.endContainer) if(range.startOffset == range.endOffset) if(range.startContainer.childNodes.item(range.startOffset)) if(range.startContainer.childNodes.item(range.startOffset).nodeType == 3) { var container = range.startContainer.childNodes.item(range.startOffset); sel.collapseToEnd(); editor._removeAllRanges(sel); sel = editor._getSelection(); range = editor._createRange(sel); range.setStart(container, 0); range.setEnd(container, 0); editor._selectRange(sel, range); } } }, 0); } if(!Sys.Extended.UI.HtmlEditor.isIE) { var sel = editor._getSelection(), range = editor._createRange(sel); editor._saved_startContainer = range.startContainer; editor._saved_startOffset = range.startOffset; } setTimeout(function() { try { if(editor._editPanel == Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) editor._ifShadow(); } catch(e) { } }, 0); if(ev.type == "keydown") { if(editor._AfterOnContentChanged == null || typeof editor._AfterOnContentChanged == "undefined" || !editor._AfterOnContentChanged) { editor._AfterOnContentChanged = true; setTimeout(function() { if(editor._editPanel == Sys.Extended.UI.HtmlEditor.LastFocusedEditPanel) { editor.onContentChanged(); editor._AfterOnContentChanged = false; } }, 0); } } return true; } catch(ex) { Sys.Extended.UI.HtmlEditor._stopEvent(ev); return false; } };