⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlarea-gecko.js

📁 Typo3, 开源里边最强大的
💻 JS
📖 第 1 页 / 共 2 页
字号:
							// 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 + -