📄 tiny_mce_src.js
字号:
if (tinyMCE.isGecko && tinyMCE.settings['remove_lt_gt'])
content = content.replace(new RegExp('<>', 'g'), "");
if (tinyMCE.settings['cleanup_on_startup'])
tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement));
else {
// Convert all strong/em to b/i
content = tinyMCE.regexpReplace(content, "<strong", "<b", "gi");
content = tinyMCE.regexpReplace(content, "<em(/?)>", "<i$1>", "gi");
content = tinyMCE.regexpReplace(content, "<em ", "<i ", "gi");
content = tinyMCE.regexpReplace(content, "</strong>", "</b>", "gi");
content = tinyMCE.regexpReplace(content, "</em>", "</i>", "gi");
tinyMCE.setInnerHTML(inst.getBody(), content);
}
tinyMCE.convertAllRelativeURLs(inst.getBody());
} else {
if (tinyMCE.settings['cleanup_on_startup']) {
tinyMCE._setHTML(inst.getDoc(), content);
// Produces permission denied error in MSIE 5.5
eval('try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}');
} else
tinyMCE._setHTML(inst.getDoc(), content);
}
// Fix for bug #957681
//inst.getDoc().designMode = inst.getDoc().designMode;
// Setup element references
var parentElm = document.getElementById(inst.editorId + '_parent');
inst.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual'], inst);
tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc());
// 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -