📄 htmlarea-gecko.js
字号:
// If an event of a parent tab ("nested tabs") is triggered, the following lines should not be // processed, because this causes some trouble on all event handlers... if (!noOpenCloseAction) { editor._doc.open(); editor._doc.close(); } editor.initIframe(); } }, 50); } HTMLArea._stopEvent(ev); } }, 50);};/* * Handle statusbar element events */HTMLArea.statusBarHandler = function (ev) { if(!ev) var ev = window.event; var target = (ev.target) ? ev.target : ev.srcElement; var editor = target.editor; target.blur(); editor.selectNode(target.el); editor.updateToolbar(true); switch (ev.type) { case "click" : case "mousedown" : HTMLArea._stopEvent(ev); return false; case "contextmenu" : return editor.plugins["ContextMenu"] ? editor.plugins["ContextMenu"].instance.popupMenu(ev,target.el) : false; }};/* * Paste exception handler */HTMLArea.prototype._mozillaPasteException = function(cmdID, UI, param) { // Mozilla lauches an exception, but can paste anyway on ctrl-V // UI is false on keyboard shortcut, and undefined on button click if(typeof(UI) != "undefined") { this._doc.execCommand(cmdID, UI, param); if (cmdID == "Paste" && this.config.killWordOnPaste) HTMLArea._wordClean(this._doc.body); } else if (this.config.enableMozillaExtension) { if (confirm(HTMLArea.I18N.msg["Allow-Clipboard-Helper-Extension"])) { if (InstallTrigger.enabled()) { HTMLArea._mozillaXpi = new Object(); HTMLArea._mozillaXpi["AllowClipboard Helper"] = _editor_mozAllowClipboard_url; InstallTrigger.install(HTMLArea._mozillaXpi,HTMLArea._mozillaInstallCallback); } else { alert(HTMLArea.I18N.msg["Mozilla-Org-Install-Not-Enabled"]); HTMLArea._appendToLog("WARNING [HTMLArea::execCommand]: Mozilla install was not enabled."); return; } } } else if (confirm(HTMLArea.I18N.msg["Moz-Clipboard"])) { window.open("http://mozilla.org/editor/midasdemo/securityprefs.html"); }}HTMLArea._mozillaInstallCallback = function(url,returnCode) { if (returnCode == 0) { if (HTMLArea._mozillaXpi["TYPO3 htmlArea RTE Preferences"]) alert(HTMLArea.I18N.msg["Moz-Extension-Success"]); else alert(HTMLArea.I18N.msg["Allow-Clipboard-Helper-Extension-Success"]); return; } else { alert(HTMLArea.I18N.msg["Moz-Extension-Failure"]); HTMLArea._appendToLog("WARNING [HTMLArea::execCommand]: Mozilla install return code was: " + returnCode + "."); return; }};/* * Backspace event handler */HTMLArea.prototype._checkBackspace = function() { var self = this; self.focusEditor(); var sel = self._getSelection(); var range = self._createRange(sel); var SC = range.startContainer; var SO = range.startOffset; var EC = range.endContainer; var EO = range.endOffset; var newr = SC.nextSibling; while (SC.nodeType == 3 || /^a$/i.test(SC.tagName)) SC = SC.parentNode; if (!self.config.disableEnterParagraphs && /^td$/i.test(SC.parentNode.tagName) && SC.parentNode.firstChild == SC && SO == 0 && range.collapsed) return true; window.setTimeout(function() { // Remove br tag inserted by Mozilla if (!self.config.disableEnterParagraphs && (/^p$/i.test(SC.tagName) || !/\S/.test(SC.tagName)) && SO == 0) { if (SC.firstChild && /^br$/i.test(SC.firstChild.tagName)) { HTMLArea.removeFromParent(SC.firstChild); return true; } } if (!/\S/.test(SC.tagName)) { var p = document.createElement("p"); while (SC.firstChild) p.appendChild(SC.firstChild); SC.parentNode.insertBefore(p, SC); HTMLArea.removeFromParent(SC); var r = range.cloneRange(); r.setStartBefore(newr); r.setEndAfter(newr); r.extractContents(); if(HTMLArea.is_safari) { sel.empty(); sel.setBaseAndExtent(r.startContainer,r.startOffset,r.endContainer,r.endOffset); } else { sel.removeAllRanges(); sel.addRange(r); } return true; } },10); return false;};/* * Enter event handler */HTMLArea.prototype._checkInsertP = function(ev) { var editor = this; this.focusEditor(); var i, left, right, rangeClone, sel = this._getSelection(), range = this._createRange(sel), p = this.getAllAncestors(), block = null, a = null, doc = this._doc; for (i = 0; i < p.length; ++i) { if (HTMLArea.isBlockElement(p[i]) && !/html|body|table|tbody|tr/i.test(p[i].tagName)) { block = p[i]; break; } } if (!range.collapsed) range.deleteContents(); if (HTMLArea.is_safari) sel.empty(); else sel.removeAllRanges(); if (!block || /^(td|div)$/i.test(block.tagName)) { if (!block) var block = doc.body; if (/\S/.test(HTMLArea.getInnerText(block))) { rangeClone = range.cloneRange(); rangeClone.setStartBefore(block.firstChild); rangeClone.surroundContents(left = doc.createElement('p')); if (!/\S/.test(HTMLArea.getInnerText(left))) { // Remove any element created empty a = left.lastChild; if (a && !/\S/.test(HTMLArea.getInnerText(a))) HTMLArea.removeFromParent(a); left.appendChild(doc.createElement('br')); } left.normalize(); range.setEndAfter(block.lastChild); range.surroundContents(right = doc.createElement('p')); // Remove any element created empty a = right.previousSibling; if (a && !/\S/.test(HTMLArea.getInnerText(a))) HTMLArea.removeFromParent(a); if (!/\S/.test(HTMLArea.getInnerText(right))) { // Remove any element created empty a = right.lastChild; if (a && !/\S/.test(HTMLArea.getInnerText(a))) HTMLArea.removeFromParent(a); right.appendChild(doc.createElement('br')); } right.normalize(); } else { range = doc.createRange(); var first = block.firstChild; block.removeChild(first); block.appendChild(right = doc.createElement('p')); right.appendChild(first); } range.selectNodeContents(right); } else { range.setEndAfter(block); var df = range.extractContents(), left_empty = false; if(!/\S/.test(HTMLArea.getInnerText(block))) { block.innerHTML = "<br />"; left_empty = true; } p = df.firstChild; if (p) { if(!/\S/.test(HTMLArea.getInnerText(p))) { if (/^h[1-6]$/i.test(p.tagName)) p = this.convertNode(p,"p"); p.innerHTML = "<br />"; } if(/^li$/i.test(p.tagName) && left_empty && !block.nextSibling) { left = block.parentNode; left.removeChild(block); range.setEndAfter(left); range.collapse(false); p = this.convertNode(p, /^li$/i.test(left.parentNode.tagName) ? "br" : "p"); } range.insertNode(df); // Remove any anchor created empty var a = p.previousSibling.lastChild; if (a && /^a$/i.test(a.tagName) && !/\S/.test(a.innerHTML)) HTMLArea.removeFromParent(a); range.selectNodeContents(p); } } range.collapse(true); if (HTMLArea.is_safari) sel.setBaseAndExtent(r.startContainer,r.startOffset,r.endContainer,r.endOffset); else sel.addRange(range); this.scrollToCaret(); return true;};/* * Detect emails and urls as they are typed in Mozilla * Borrowed from Xinha (is not htmlArea) - http://xinha.gogo.co.nz/ */HTMLArea.prototype._detectURL = function(ev) { var editor = this; var s = this._getSelection(); var autoWrap = function (textNode, tag) { var rightText = textNode.nextSibling; if (typeof(tag) == 'string') tag = editor._doc.createElement(tag); var a = textNode.parentNode.insertBefore(tag, rightText); HTMLArea.removeFromParent(textNode); a.appendChild(textNode); rightText.data += " "; s.collapse(rightText, rightText.data.length); HTMLArea._stopEvent(ev); editor._unLink = function() { var t = a.firstChild; a.removeChild(t); a.parentNode.insertBefore(t, a); HTMLArea.removeFromParent(a); t.parentNode.normalize(); editor._unLink = null; editor._unlinkOnUndo = false; }; editor._unlinkOnUndo = true; return a; }; switch(ev.which) { // Space or Enter or >, see if the text just typed looks like a URL, or email address and link it accordingly case 13: // Enter if(ev.shiftKey || editor.config.disableEnterParagraphs) break; //Space case 32: if(s && s.isCollapsed && s.anchorNode.nodeType == 3 && s.anchorNode.data.length > 3 && s.anchorNode.data.indexOf('.') >= 0) { var midStart = s.anchorNode.data.substring(0,s.anchorOffset).search(/[a-zA-Z0-9]+\S{3,}$/); if(midStart == -1) break; if(this._getFirstAncestor(s, 'a')) break; // already in an anchor var matchData = s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/, '$1'); if (matchData.indexOf('@') != -1) { var m = matchData.match(HTMLArea.RE_email); if(m) { var leftText = s.anchorNode; var rightText = leftText.splitText(s.anchorOffset); var midText = leftText.splitText(midStart); var midEnd = midText.data.search(/[^a-zA-Z0-9\.@_\-]/); if (midEnd != -1) var endText = midText.splitText(midEnd); autoWrap(midText, 'a').href = 'mailto:' + m[0]; break; } } var m = matchData.match(HTMLArea.RE_url); if(m) { var leftText = s.anchorNode; var rightText = leftText.splitText(s.anchorOffset); var midText = leftText.splitText(midStart); var midEnd = midText.data.search(/[^a-zA-Z0-9\._\-\/\&\?=:@]/); if (midEnd != -1) var endText = midText.splitText(midEnd); autoWrap(midText, 'a').href = (m[1] ? m[1] : 'http://') + m[2]; break; } } break; default: if(ev.keyCode == 27 || (editor._unlinkOnUndo && ev.ctrlKey && ev.which == 122) ) { if(this._unLink) { this._unLink(); HTMLArea._stopEvent(ev); } break; } else if(ev.which || ev.keyCode == 8 || ev.keyCode == 46) { this._unlinkOnUndo = false; if(s.anchorNode && s.anchorNode.nodeType == 3) { // See if we might be changing a link var a = this._getFirstAncestor(s, 'a'); if(!a) break; // not an anchor if(!a._updateAnchTimeout) { if(s.anchorNode.data.match(HTMLArea.RE_email) && (a.href.match('mailto:' + s.anchorNode.data.trim()))) { var textNode = s.anchorNode; var fn = function() { a.href = 'mailto:' + textNode.data.trim(); a._updateAnchTimeout = setTimeout(fn, 250); }; a._updateAnchTimeout = setTimeout(fn, 250); break; } var m = s.anchorNode.data.match(HTMLArea.RE_url); if(m && a.href.match(s.anchorNode.data.trim())) { var textNode = s.anchorNode; var fn = function() { var m = textNode.data.match(HTMLArea.RE_url); a.href = (m[1] ? m[1] : 'http://') + m[2]; a._updateAnchTimeout = setTimeout(fn, 250); } a._updateAnchTimeout = setTimeout(fn, 250); } } } } break; }};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -