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 = " "; else elm.innerHTML = " "; } } } // 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 + -
显示快捷键?