📄 wysiwyg.js
字号:
else {
toolbar += '<td style="width: 22px;"><img src="' +buttonImage+ '" border=0 unselectable="on" title="' +buttonTitle+ '" id="' +buttonID+ '" class="button" onClick="formatText(this.id,\'' + n + '\');" onmouseover="if(className==\'button\'){className=\'buttonOver\'}; this.src=\'' + buttonImageRollover + '\';" onmouseout="if(className==\'buttonOver\'){className=\'button\'}; this.src=\'' + buttonImage + '\';" unselectable="on" width="20" height="20"></td>';
}
}
i++;
}
toolbar += '<td> </td></tr></table>';
// Generate WYSIWYG toolbar two
var toolbar2;
toolbar2 = '<table cellpadding="0" cellspacing="0" border="0" class="toolbar2" style="width:' + toolbarWidth + 'px;"><tr><td style="width: 6px;"><img src="' +imagesDir+ 'seperator2.gif" alt="" hspace="3"></td>';
// Output all command buttons that belong to toolbar two
for (var j = 0; j <= buttonName2.length;) {
if (buttonName2[j]) {
var buttonObj = ToolbarList[buttonName2[j]];
var buttonID = buttonObj[0];
var buttonTitle = buttonObj[1];
var buttonImage = buttonObj[2];
var buttonImageRollover = buttonObj[3];
if (buttonName2[j] == "seperator") {
toolbar2 += '<td style="width: 12px;" align="center"><img src="' +buttonImage+ '" border=0 unselectable="on" width="2" height="18" hspace="2" unselectable="on"></td>';
}
else if (buttonName2[j] == "viewSource"){
toolbar2 += '<td style="width: 22px;">';
toolbar2 += '<span id="HTMLMode' + n + '"><img src="' +buttonImage+ '" border=0 unselectable="on" title="' +buttonTitle+ '" id="' +buttonID+ '" class="button" onClick="formatText(this.id,\'' + n + '\');" onmouseover="if(className==\'button\'){className=\'buttonOver\'}; this.src=\'' +buttonImageRollover+ '\';" onmouseout="if(className==\'buttonOver\'){className=\'button\'}; this.src=\'' + buttonImage + '\';" unselectable="on" width="20" height="20"></span>';
toolbar2 += '<span id="textMode' + n + '"><img src="' +imagesDir+ 'view_text.gif" border=0 unselectable="on" title="viewText" id="ViewText" class="button" onClick="formatText(this.id,\'' + n + '\');" onmouseover="if(className==\'button\'){className=\'buttonOver\'}; this.src=\'' +imagesDir+ 'view_text_on.gif\';" onmouseout="if(className==\'buttonOver\'){className=\'button\'}; this.src=\'' +imagesDir+ 'view_text.gif\';" unselectable="on" width="20" height="20"></span>';
toolbar2 += '</td>';
}
else {
toolbar2 += '<td style="width: 22px;"><img src="' +buttonImage+ '" border=0 unselectable="on" title="' +buttonTitle+ '" id="' +buttonID+ '" class="button" onClick="formatText(this.id,\'' + n + '\');" onmouseover="if(className==\'button\'){className=\'buttonOver\'}; this.src=\'' +buttonImageRollover+ '\';" onmouseout="if(className==\'buttonOver\'){className=\'button\'}; this.src=\'' + buttonImage + '\';" unselectable="on" width="20" height="20"></td>';
}
}
j++;
}
toolbar2 += '<td> </td></tr></table>';
// Create iframe which will be used for rich text editing
var iframe = '<table cellpadding="0" cellspacing="0" border="0" style="width:' + wysiwygWidth + 'px; height:' + wysiwygHeight + 'px;border: 1px solid #000;"><tr><td valign="top">\n'
+ '<iframe frameborder="0" id="wysiwyg' + n + '"></iframe>\n'
+ '</td></tr></table>\n';
// Insert after the textArea both toolbar one and two
document.getElementById(n).insertAdjacentHTML("afterEnd", toolbar + toolbar2 + iframe);
// Insert the Font Type and Size drop downs into the toolbar
outputFontSelect(n);
outputFontSizes(n);
// Hide the dynamic drop down lists for the Font Types and Sizes
hideFonts(n);
hideFontSizes(n);
// Hide the "Text Mode" button
document.getElementById("textMode" + n).style.display = 'none';
// Give the iframe the global wysiwyg height and width
document.getElementById("wysiwyg" + n).style.height = wysiwygHeight + "px";
document.getElementById("wysiwyg" + n).style.width = wysiwygWidth + "px";
// Pass the textarea's existing text over to the content variable
var content = document.getElementById(n).value;
var doc = document.getElementById("wysiwyg" + n).contentWindow.document;
// Write the textarea's content into the iframe
doc.open();
doc.write(content);
doc.close();
// Make the iframe editable in both Mozilla and IE
doc.body.contentEditable = true;
doc.designMode = "on";
// Update the textarea with content in WYSIWYG when user submits form
var browserName = navigator.appName;
if (browserName == "Microsoft Internet Explorer") {
for (var idx=0; idx < document.forms.length; idx++) {
document.forms[idx].attachEvent('onsubmit', function() { updateTextArea(n); });
}
}
else {
for (var idx=0; idx < document.forms.length; idx++) {
document.forms[idx].addEventListener('submit',function OnSumbmit() { updateTextArea(n); }, true);
}
}
};
/* ---------------------------------------------------------------------- *\
Function : formatText()
Description : replace textarea with wysiwyg editor
Usage : formatText(id, n, selected);
Arguments : id - The execCommand (e.g. Bold)
n - The editor identifier that the command
affects (the textarea's ID)
selected - The selected value when applicable (e.g. Arial)
\* ---------------------------------------------------------------------- */
function formatText(id, n, selected) {
// When user clicks toolbar button make sure it always targets its respective WYSIWYG
document.getElementById("wysiwyg" + n).contentWindow.focus();
// When in Text Mode these execCommands are disabled
var formatIDs = new Array("FontSize","FontName","Bold","Italic","Underline","Subscript","Superscript","Strikethrough","Justifyleft","Justifyright","Justifycenter","InsertUnorderedList","InsertOrderedList","Indent","Outdent","ForeColor","BackColor","InsertImage","InsertTable","CreateLink");
// Check if button clicked is in disabled list
for (var i = 0; i <= formatIDs.length;) {
if (formatIDs[i] == id) {
var disabled_id = 1;
}
i++;
}
// Check if in Text Mode and disabled button was clicked
if (viewTextMode == 1 && disabled_id == 1) {
alert ("You are in HTML Mode. This feature has been disabled.");
}
else {
// FontSize
if (id == "FontSize") {
document.getElementById("wysiwyg" + n).contentWindow.document.execCommand("FontSize", false, selected);
}
// FontName
else if (id == "FontName") {
document.getElementById("wysiwyg" + n).contentWindow.document.execCommand("FontName", false, selected);
}
// ForeColor and BackColor
else if (id == 'ForeColor' || id == 'BackColor') {
var w = screen.availWidth;
var h = screen.availHeight;
var popW = 210, popH = 165;
var leftPos = (w-popW)/2, topPos = (h-popH)/2;
var currentColor = _dec_to_rgb(document.getElementById("wysiwyg" + n).contentWindow.document.queryCommandValue(id));
window.open(popupsDir + 'select_color.html?color=' + currentColor + '&command=' + id + '&wysiwyg=' + n,'52593wysiwyg','location=0,status=0,scrollbars=0,width=' + popW + ',height=' + popH + ',top=' + topPos + ',left=' + leftPos);
}
// InsertImage
else if (id == "InsertImage") {
window.open(popupsDir + 'insert_image.html?wysiwyg=' + n,'52593wysiwyg','location=0,status=0,scrollbars=1,resizable=0,width=650,height=500');
}
// InsertTable
else if (id == "InsertTable") {
window.open(popupsDir + 'create_table.html?wysiwyg=' + n,'52593wysiwyg','location=0,status=0,scrollbars=0,resizable=0,width=400,height=360');
}
// CreateLink
else if (id == "CreateLink") {
window.open(popupsDir + 'insert_hyperlink.html?wysiwyg=' + n,'52593wysiwyg','location=0,status=0,scrollbars=0,resizable=0,width=300,height=110');
}
// ViewSource
else if (id == "ViewSource") {
viewSource(n);
}
// ViewText
else if (id == "ViewText") {
viewText(n);
}
// Help
else if (id == "Help") {
window.open(popupsDir + 'about.html','52593wysiwyg','location=0,status=0,scrollbars=0,resizable=0,width=400,height=330');
}
// add s
else if(id=="MultiMedia"){
window.open(popupsDir + 'media.html?wysiwyg=' + n,'popup','location=0,status=0,scrollbars=0,resizable=0,width=400,height=180');
}
else if(id=="InsertSmileys"){
window.open(popupsDir + 'insert_smileys.html?wysiwyg=' + n,'popup','location=0,status=0,scrollbars=0,resizable=1,width=300,height=190');
}
// Every other command
else {
document.getElementById("wysiwyg" + n).contentWindow.document.execCommand(id, false, null);
}
}
};
/* ---------------------------------------------------------------------- *\
Function : insertHTML()
Description : insert HTML into WYSIWYG in rich text
Usage : insertHTML(<b>hello</b>, "textareaID")
Arguments : html - The HTML being inserted (e.g. <b>hello</b>)
n - The editor identifier that the HTML
will be inserted into (the textarea's ID)
\* ---------------------------------------------------------------------- */
function insertHTML(html, n) {
var browserName = navigator.appName;
if (browserName == "Microsoft Internet Explorer") {
document.getElementById('wysiwyg' + n).contentWindow.focus();
document.getElementById('wysiwyg' + n).contentWindow.document.selection.createRange().pasteHTML(html);
}
else {
var div = document.getElementById('wysiwyg' + n).contentWindow.document.createElement("div");
div.innerHTML = html;
var node = insertNodeAtSelection(div, n);
}
}
/* ---------------------------------------------------------------------- *\
Function : insertNodeAtSelection()
Description : insert HTML into WYSIWYG in rich text (mozilla)
Usage : insertNodeAtSelection(insertNode, n)
Arguments : insertNode - The HTML being inserted (must be innerHTML
inserted within a div element)
n - The editor identifier that the HTML will be
inserted into (the textarea's ID)
\* ---------------------------------------------------------------------- */
function insertNodeAtSelection(insertNode, n) {
// get current selection
var sel = document.getElementById('wysiwyg' + n).contentWindow.getSelection();
// get the first range of the selection
// (there's almost always only one range)
var range = sel.getRangeAt(0);
// deselect everything
sel.removeAllRanges();
// remove content of current selection from document
range.deleteContents();
// get location of current selection
var container = range.startContainer;
var pos = range.startOffset;
// make a new range for the new selection
range=document.createRange();
if (container.nodeType==3 && insertNode.nodeType==3) {
// if we insert text in a textnode, do optimized insertion
container.insertData(pos, insertNode.nodeValue);
// put cursor after inserted text
range.setEnd(container, pos+insertNode.length);
range.setStart(container, pos+insertNode.length);
}
else {
var afterNode;
if (container.nodeType==3) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -