tiny_mce_src.js

来自「很棒的在线教学系统」· JavaScript 代码 · 共 2,013 行 · 第 1/5 页

JS
2,013
字号
		// Re-add design mode on mozilla		if (!tinyMCE.isMSIE)			tinyMCE.addEventHandlers(editor_id);		// Add blur handler		if (tinyMCE.isMSIE) {			tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch);			// Workaround for drag drop/copy paste base href bug			if (!tinyMCE.isOpera) {				tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove);				tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch);				tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch);			}		}		// Trigger node change, this call locks buttons for tables and so forth		tinyMCE.selectedInstance = inst;		tinyMCE.selectedElement = inst.contentWindow.document.body;		// Call custom DOM cleanup		tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody());		tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody());		tinyMCE._setEventsEnabled(inst.getBody(), false);		tinyMCE.cleanupAnchors(inst.getDoc());		if (tinyMCE.getParam("convert_fonts_to_spans"))			tinyMCE.convertSpansToFonts(inst.getDoc());		inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);		inst.undoRedo.add({ content : inst.startContent });		tinyMCE.selectedInstance = inst;		tinyMCE.triggerNodeChange(false, true);	},	storeAwayURLs : function(s) {		// Remove all mce_src, mce_href and replace them with new ones	//	s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');	//	s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');		if (!s.match(/(mce_src|mce_href)/gi, s)) {			s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"');			s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"');		}		return s;	},	removeTinyMCEFormElements : function(form_obj) {		// Check if form is valid		if (typeof(form_obj) == "undefined" || form_obj == null)			return;		// If not a form, find the form		if (form_obj.nodeName != "FORM") {			if (form_obj.form)				form_obj = form_obj.form;			else				form_obj = tinyMCE.getParentElement(form_obj, "form");		}		// Still nothing		if (form_obj == null)			return;		// Disable all UI form elements that TinyMCE created		for (var i=0; i<form_obj.elements.length; i++) {			var elementId = form_obj.elements[i].name ? form_obj.elements[i].name : form_obj.elements[i].id;			if (elementId.indexOf('mce_editor_') == 0)				form_obj.elements[i].disabled = true;		}	},	handleEvent : function(e) {		var inst = tinyMCE.selectedInstance;		// Remove odd, error		if (typeof(tinyMCE) == "undefined")			return true;		//tinyMCE.debug(e.type + " " + e.target.nodeName + " " + (e.relatedTarget ? e.relatedTarget.nodeName : ""));		if (tinyMCE.executeCallback(tinyMCE.selectedInstance, 'handle_event_callback', 'handleEvent', e))			return false;		switch (e.type) {			case "blur":				if (tinyMCE.selectedInstance)					tinyMCE.selectedInstance.execCommand('mceEndTyping');				return;			// Workaround for drag drop/copy paste base href bug			case "drop":			case "beforepaste":				if (tinyMCE.selectedInstance)					tinyMCE.selectedInstance.setBaseHREF(null);				window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings['base_href']);", 1);				return;			case "submit":				tinyMCE.removeTinyMCEFormElements(tinyMCE.isMSIE ? window.event.srcElement : e.target);				tinyMCE.triggerSave();				tinyMCE.isNotDirty = true;				return;			case "reset":				var formObj = tinyMCE.isMSIE ? window.event.srcElement : e.target;				for (var i=0; i<document.forms.length; i++) {					if (document.forms[i] == formObj)						window.setTimeout('tinyMCE.resetForm(' + i + ');', 10);				}				return;			case "keypress":				if (inst && inst.handleShortcut(e))					return false;				if (e.target.editorId) {					tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];				} else {					if (e.target.ownerDocument.editorId)						tinyMCE.selectedInstance = tinyMCE.instances[e.target.ownerDocument.editorId];				}				if (tinyMCE.selectedInstance)					tinyMCE.selectedInstance.switchSettings();				// Insert P element				if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && e.keyCode == 13 && !e.shiftKey) {					// Insert P element instead of BR					if (TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance, e)) {						// Cancel event						tinyMCE.execCommand("mceAddUndoLevel");						tinyMCE.cancelEvent(e);						return false;					}				}				// Handle backspace				if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {					// Insert P element instead of BR					if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {						// Cancel event						tinyMCE.execCommand("mceAddUndoLevel");						tinyMCE.cancelEvent(e);						return false;					}				}				// Return key pressed				if (tinyMCE.isMSIE && tinyMCE.settings['force_br_newlines'] && e.keyCode == 13) {					if (e.target.editorId)						tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];					if (tinyMCE.selectedInstance) {						var sel = tinyMCE.selectedInstance.getDoc().selection;						var rng = sel.createRange();						if (tinyMCE.getParentElement(rng.parentElement(), "li") != null)							return false;						// Cancel event						e.returnValue = false;						e.cancelBubble = true;						// Insert BR element						rng.pasteHTML("<br />");						rng.collapse(false);						rng.select();						tinyMCE.execCommand("mceAddUndoLevel");						tinyMCE.triggerNodeChange(false);						return false;					}				}				// Backspace or delete				if (e.keyCode == 8 || e.keyCode == 46) {					tinyMCE.selectedElement = e.target;					tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a");					tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img");					tinyMCE.triggerNodeChange(false);				}				return false;			break;			case "keyup":			case "keydown":				tinyMCE.hasMouseMoved = false;				if (inst && inst.handleShortcut(e))					return false;				if (e.target.editorId)					tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];				else					return;				if (tinyMCE.selectedInstance)					tinyMCE.selectedInstance.switchSettings();				var inst = tinyMCE.selectedInstance;				// Handle backspace				if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {					// Insert P element instead of BR					if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {						// Cancel event						tinyMCE.execCommand("mceAddUndoLevel");						e.preventDefault();						return false;					}				}				tinyMCE.selectedElement = null;				tinyMCE.selectedNode = null;				var elm = tinyMCE.selectedInstance.getFocusElement();				tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a");				tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img");				tinyMCE.selectedElement = elm;				// Update visualaids on tabs				if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9)					tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);				// Fix empty elements on return/enter, check where enter occured				if (tinyMCE.isMSIE && e.type == "keydown" && e.keyCode == 13)					tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();				// Fix empty elements on return/enter				if (tinyMCE.isMSIE && e.type == "keyup" && e.keyCode == 13) {					var elm = tinyMCE.enterKeyElement;					if (elm) {						var re = new RegExp('^HR|IMG|BR$','g'); // Skip these						var dre = new RegExp('^H[1-6]$','g'); // Add double on these						if (!elm.hasChildNodes() && !re.test(elm.nodeName)) {							if (dre.test(elm.nodeName))								elm.innerHTML = "&nbsp;&nbsp;";							else								elm.innerHTML = "&nbsp;";						}					}				}				// Check if it's a position key				var keys = tinyMCE.posKeyCodes;				var posKey = false;				for (var i=0; i<keys.length; i++) {					if (keys[i] == e.keyCode) {						posKey = true;						break;					}				}				// MSIE custom key handling				if (tinyMCE.isMSIE && tinyMCE.settings['custom_undo_redo']) {					var keys = new Array(8,46); // Backspace,Delete					for (var i=0; i<keys.length; i++) {						if (keys[i] == e.keyCode) {							if (e.type == "keyup")								tinyMCE.triggerNodeChange(false);						}					}				}				// If Ctrl key				if (e.keyCode == 17)					return true;				// Handle Undo/Redo when typing content				// Start typing (non position key)				if (!posKey && e.type == "keyup")					tinyMCE.execCommand("mceStartTyping");				// Store undo bookmark				if (e.type == "keydown" && (posKey || e.ctrlKey) && inst)					inst.undoBookmark = inst.selection.getBookmark();				// End typing (position key) or some Ctrl event				if (e.type == "keyup" && (posKey || e.ctrlKey))					tinyMCE.execCommand("mceEndTyping");				if (posKey && e.type == "keyup")					tinyMCE.triggerNodeChange(false);				if (tinyMCE.isMSIE && e.ctrlKey)					window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);			break;			case "mousedown":			case "mouseup":			case "click":			case "focus":				if (tinyMCE.selectedInstance) {					tinyMCE.selectedInstance.switchSettings();					tinyMCE.selectedInstance.isFocused = true;				}				// Check instance event trigged on				var targetBody = tinyMCE.getParentElement(e.target, "body");				for (var instanceName in tinyMCE.instances) {					if (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))						continue;					var inst = tinyMCE.instances[instanceName];					// Reset design mode if lost (on everything just in case)					inst.autoResetDesignMode();					if (inst.getBody() == targetBody) {						tinyMCE.selectedInstance = inst;						tinyMCE.selectedElement = e.target;						tinyMCE.linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");						tinyMCE.imgElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "img");						break;					}				}				// Add first bookmark location				if (!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark)					tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();				if (tinyMCE.isSafari) {					tinyMCE.selectedInstance.lastSafariSelection = tinyMCE.selectedInstance.selection.getBookmark();					tinyMCE.selectedInstance.lastSafariSelectedElement = tinyMCE.selectedElement;					var lnk = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");					// Patch the darned link					if (lnk && e.type == "mousedown") {						lnk.setAttribute("mce_real_href", lnk.getAttribute("href"));						lnk.setAttribute("href", "javascript:void(0);");					}					// Patch back					if (lnk && e.type == "click") {						window.setTimeout(function() {							lnk.setAttribute("href", lnk.getAttribute("mce_real_href"));							lnk.removeAttribute("mce_real_href");						}, 10);					}				}				// Reset selected node				if (e.type != "focus")					tinyMCE.selectedNode = null;				tinyMCE.triggerNodeChange(false);				tinyMCE.execCommand("mceEndTyping");				if (e.type == "mouseup")					tinyMCE.execCommand("mceAddUndoLevel");				// Just in case				if (!tinyMCE.selectedInstance && e.target.editorId)					tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];				return false;			break;		}	},	getButtonHTML : function(id, lang, img, cmd, ui, val) {		var h = '', m, x;		cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';		if (typeof(ui) != "undefined" && ui != null)			cmd += ',' + ui;		if (typeof(val) != "undefined" && val != null)			cmd += ",'" + val + "'";		cmd += ');';		// Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled		if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = this.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {			// Tiled button			x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);			h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';			h += '<img src="' + this.themeURL + '/images/spacer.gif" style="background-position: ' + x + 'px 0" title="{$' + lang + '}" />';			h += '</a>';		} else {			// Normal button			h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceButtonNormal" target="_self">';			h += '<img src="' + img + '" title="{$' + lang + '}" />';			h += '</a>';		}		return h;	},	addButtonMap : function(m) {		var i, a = m.replace(/\s+/, '').split(',');

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?