📄 tiny_mce_src.js
字号:
tinyMCE.hideMenus();
return;
// Workaround for drag drop/copy paste base href bug
case "drop":
case "beforepaste":
if (tinyMCE.selectedInstance)
tinyMCE.selectedInstance.setBaseHREF(null);
// Fixes odd MSIE bug where drag/droping elements in a iframe with height 100% breaks
// This logic forces the width/height to be in pixels while the user is drag/dropping
if (tinyMCE.isRealIE) {
var ife = tinyMCE.selectedInstance.iframeElement;
/*if (ife.style.width.indexOf('%') != -1) {
ife._oldWidth = ife.width.height;
ife.style.width = ife.clientWidth;
}*/
if (ife.style.height.indexOf('%') != -1) {
ife._oldHeight = ife.style.height;
ife.style.height = ife.clientHeight;
}
}
window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings.base_href);tinyMCE._resetIframeHeight();", 1);
return;
case "submit":
tinyMCE.formSubmit(tinyMCE.isMSIE ? window.event.srcElement : e.target);
return;
case "reset":
var formObj = tinyMCE.isIE ? window.event.srcElement : e.target;
for (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.instances[e.target.editorId].select();
} else {
if (e.target.ownerDocument.editorId)
tinyMCE.instances[e.target.ownerDocument.editorId].select();
}
if (tinyMCE.selectedInstance)
tinyMCE.selectedInstance.switchSettings();
// Insert P element
if ((tinyMCE.isGecko || tinyMCE.isOpera || tinyMCE.isSafari) && 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");
return tinyMCE.cancelEvent(e);
}
}
// Handle backspace
if ((tinyMCE.isGecko && !tinyMCE.isSafari) && 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");
return tinyMCE.cancelEvent(e);
}
}
// Return key pressed
if (tinyMCE.isIE && tinyMCE.settings.force_br_newlines && e.keyCode == 13) {
if (e.target.editorId)
tinyMCE.instances[e.target.editorId].select();
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;
case "keyup":
case "keydown":
tinyMCE.hideMenus();
tinyMCE.hasMouseMoved = false;
if (inst && inst.handleShortcut(e))
return false;
inst._fixRootBlocks();
if (inst.settings.remove_trailing_nbsp)
inst._fixTrailingNbsp();
if (e.target.editorId)
tinyMCE.instances[e.target.editorId].select();
if (tinyMCE.selectedInstance)
tinyMCE.selectedInstance.switchSettings();
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;
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.isIE && e.type == "keydown" && e.keyCode == 13)
tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();
// Fix empty elements on return/enter
if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) {
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
keys = tinyMCE.posKeyCodes;
var posKey = false;
for (i=0; i<keys.length; i++) {
if (keys[i] == e.keyCode) {
posKey = true;
break;
}
}
// MSIE custom key handling
if (tinyMCE.isIE && tinyMCE.settings.custom_undo_redo) {
keys = [8, 46]; // Backspace,Delete
for (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
if (tinyMCE.isGecko) {
// Start typing (not a position key or ctrl key, but ctrl+x and ctrl+p is ok)
if (!posKey && e.type == "keyup" && !e.ctrlKey || (e.ctrlKey && (e.keyCode == 86 || e.keyCode == 88)))
tinyMCE.execCommand("mceStartTyping");
} else {
// IE seems to be working better with this setting
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.isIE && e.ctrlKey)
window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
break;
case "mousedown":
case "mouseup":
case "click":
case "dblclick":
case "focus":
tinyMCE.hideMenus();
if (tinyMCE.selectedInstance) {
tinyMCE.selectedInstance.switchSettings();
tinyMCE.selectedInstance.isFocused = true;
}
// Check instance event trigged on
var targetBody = tinyMCE.getParentElement(e.target, "html");
for (var instanceName in tinyMCE.instances) {
if (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))
continue;
inst = tinyMCE.instances[instanceName];
// Reset design mode if lost (on everything just in case)
inst.autoResetDesignMode();
// Use HTML element since users might click outside of body element
if (inst.getBody().parentNode == targetBody) {
inst.select();
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 && (e.type == "mouseup" || e.type == "dblclick"))
tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();
// 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.instances[e.target.editorId].select();
return false;
}
},
getButtonHTML : function(id, lang, img, cmd, ui, val) {
var h = '', m, x, io = '';
cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
if (typeof(ui) != "undefined" && ui != null)
cmd += ',' + ui;
if (typeof(val) != "undefined" && val != null)
cmd += ",'" + val + "'";
cmd += ');';
// Patch for IE7 bug with hover out not restoring correctly
if (tinyMCE.isRealIE)
io = 'onmouseover="tinyMCE.lastHover = this;"';
// 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.isIE || 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;" ' + io + ' class="mceTiledButton mceButtonNormal" target="_self">';
h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" alt="{$'+lang+'}" title="{$' + lang + '}" />';
h += '</a>';
} else {
// Normal button
h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceButtonNormal" target="_self">';
h += '<img src="' + img + '" alt="{$'+lang+'}" title="{$' + lang + '}" />';
h += '</a>';
}
return h;
},
getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) {
var h = '', m, x;
mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');';
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.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
if (tinyMCE.isRealIE)
h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
else
h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';
h += '<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: ' + x + 'px 0" title="{$' + lang + '}" /></a>';
h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
h += '</a></span>';
} else {
if (tinyMCE.isRealIE)
h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
else
h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton">';
h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';
h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
h += '</a></span>';
}
return h;
},
_menuButtonEvent : function(e, o) {
if (o.className == 'mceMenuButtonFocus')
return;
if (e == 'over')
o.className = o.className + ' mceMenuHover';
else
o.className = o.className.replace(/\s.*$/, '');
},
addButtonMap : function(m) {
var i, a = m.replace(/\s+/, '').split(',');
for (i=0; i<a.length; i++)
this.buttonMap[a[i]] = i;
},
formSubmit : function(f, p) {
var n, inst, found = false;
if (f.form)
f = f.form;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -