htmlarea.js
来自「是个不错的文件代码,希望大家好好用,」· JavaScript 代码 · 共 1,974 行 · 第 1/5 页
JS
1,974 行
// it has the following prototype:
// function(editor, buttonName)
// - editor is the HTMLArea object that triggered the call
// - buttonName is the ID of the clicked button
// These 2 parameters makes it possible for you to use the same
// handler for more HTMLArea objects or for more different buttons.
// - ToolTip: tooltip, will be translated below
// - Icon: path to an icon image file for the button
// OR; you can use an 18x18 block of a larger image by supllying an array
// that has three elemtents, the first is the larger image, the second is the column
// the third is the row. The ros and columns numbering starts at 0 but there is
// a header row and header column which have numbering to make life easier.
// See images/buttons_main.gif to see how it's done.
// - Enabled in text mode: if false the button gets disabled for text-only mode; otherwise enabled all the time.
this.btnList =
{
bold: [ "Bold", HTMLArea._lc({key: 'button_bold', string: ["ed_buttons_main.gif",3,2]}, 'HTMLArea'), false, function(e) { e.execCommand("bold"); } ],
italic: [ "Italic", HTMLArea._lc({key: 'button_italic', string: ["ed_buttons_main.gif",2,2]}, 'HTMLArea'), false, function(e) { e.execCommand("italic"); } ],
underline: [ "Underline", HTMLArea._lc({key: 'button_underline', string: ["ed_buttons_main.gif",2,0]}, 'HTMLArea'), false, function(e) { e.execCommand("underline"); } ],
strikethrough: [ "Strikethrough", HTMLArea._lc({key: 'button_strikethrough', string: ["ed_buttons_main.gif",3,0]}, 'HTMLArea'), false, function(e) { e.execCommand("strikethrough"); } ],
subscript: [ "Subscript", HTMLArea._lc({key: 'button_subscript', string: ["ed_buttons_main.gif",3,1]}, 'HTMLArea'), false, function(e) { e.execCommand("subscript"); } ],
superscript: [ "Superscript", HTMLArea._lc({key: 'button_superscript', string: ["ed_buttons_main.gif",2,1]}, 'HTMLArea'), false, function(e) { e.execCommand("superscript"); } ],
justifyleft: [ "Justify Left", ["ed_buttons_main.gif",0,0], false, function(e) { e.execCommand("justifyleft"); } ],
justifycenter: [ "Justify Center", ["ed_buttons_main.gif",1,1], false, function(e){ e.execCommand("justifycenter"); } ],
justifyright: [ "Justify Right", ["ed_buttons_main.gif",1,0], false, function(e) { e.execCommand("justifyright"); } ],
justifyfull: [ "Justify Full", ["ed_buttons_main.gif",0,1], false, function(e) { e.execCommand("justifyfull"); } ],
orderedlist: [ "Ordered List", ["ed_buttons_main.gif",0,3], false, function(e) { e.execCommand("insertorderedlist"); } ],
unorderedlist: [ "Bulleted List", ["ed_buttons_main.gif",1,3], false, function(e) { e.execCommand("insertunorderedlist"); } ],
insertorderedlist: [ "Ordered List", ["ed_buttons_main.gif",0,3], false, function(e) { e.execCommand("insertorderedlist"); } ],
insertunorderedlist: [ "Bulleted List", ["ed_buttons_main.gif",1,3], false, function(e) { e.execCommand("insertunorderedlist"); } ],
outdent: [ "Decrease Indent", ["ed_buttons_main.gif",1,2], false, function(e) { e.execCommand("outdent"); } ],
indent: [ "Increase Indent",["ed_buttons_main.gif",0,2], false, function(e) { e.execCommand("indent"); } ],
forecolor: [ "Font Color", ["ed_buttons_main.gif",3,3], false, function(e) { e.execCommand("forecolor"); } ],
hilitecolor: [ "Background Color", ["ed_buttons_main.gif",2,3], false, function(e) { e.execCommand("hilitecolor"); } ],
undo: [ "Undoes your last action", ["ed_buttons_main.gif",4,2], false, function(e) { e.execCommand("undo"); } ],
redo: [ "Redoes your last action", ["ed_buttons_main.gif",5,2], false, function(e) { e.execCommand("redo"); } ],
cut: [ "Cut selection", ["ed_buttons_main.gif",5,0], false, cut_copy_paste ],
copy: [ "Copy selection", ["ed_buttons_main.gif",4,0], false, cut_copy_paste ],
paste: [ "Paste from clipboard", ["ed_buttons_main.gif",4,1], false, cut_copy_paste ],
selectall: [ "Select all", ["ed_buttons_main.gif",5,1], false, function(e) {e.execCommand("selectall");} ],
inserthorizontalrule: [ "Horizontal Rule", ["ed_buttons_main.gif",6,0], false, function(e) { e.execCommand("inserthorizontalrule"); } ],
createlink: [ "Insert Web Link", ["ed_buttons_main.gif",6,1], false, function(e) { e._createLink(); } ],
insertimage: [ "Insert/Modify Image", ["ed_buttons_main.gif",6,3], false, function(e) { e.execCommand("insertimage"); } ],
insertflash: [ "Insert Flash", ["ed_buttons_main.gif",2,4], false, function(e) { e.execCommand("insertflash"); } ],
insertmedia: [ "Insert Media", ["ed_buttons_main.gif",3,4], false, function(e) { e.execCommand("insertmedia"); } ],
insertemot: [ "Insert Emot", ["ed_buttons_main.gif",7,1], false, function(e) { e.execCommand("insertemot"); } ],
inserttable: [ "Insert Table", ["ed_buttons_main.gif",6,2], false, function(e) { e.execCommand("inserttable"); } ],
htmlmode: [ "Toggle HTML Source", ["ed_buttons_main.gif",7,0], true, function(e) { e.execCommand("htmlmode"); } ],
toggleborders: [ "Toggle Borders", ["ed_buttons_main.gif",7,2], false, function(e) { e._toggleBorders(); } ],
print: [ "Print document", ["ed_buttons_main.gif",8,1], false, function(e) { if(HTMLArea.is_gecko) {e._iframe.contentWindow.print(); } else { e.focusEditor(); print(); } } ],
saveas: [ "Save as",["ed_buttons_main.gif",6,4], false, function(e) { e.execCommand("saveas",false,"noname.htm"); } ],
more_toolbar: [ "More toolbar", ["ed_buttons_main.gif",7,3], true, function(e) {more_toolbar(); } ],
showhelp: [ "Help using editor", ["ed_buttons_main.gif",9,2], true, function(e) { e.execCommand("showhelp"); } ],
wordclean: [ "MS Word Cleaner", ["ed_buttons_main.gif",5,3], false, function(e) { e._wordClean(); } ],
clearfonts: [ "Clear Inline Font Specifications", ["ed_buttons_main.gif",5,4], true, function(e) { e._clearFonts(); } ],
removeformat: [ "Remove formatting", ["ed_buttons_main.gif",4,4], false, function(e) { e.execCommand("removeformat"); } ],
killword: [ "Clear MSOffice tags", ["ed_buttons_main.gif",4,3], false, function(e) { e.execCommand("killword"); } ]
};
/* ADDING CUSTOM BUTTONS
* ---------------------
*
* It is recommended that you add the custom buttons in an external
* file and leave this one unchanged. That's because when we
* (InteractiveTools.com) release a new official version, it's less
* likely that you will have problems upgrading HTMLArea.
*
* Example on how to add a custom button when you construct the HTMLArea:
*
* var editor = new HTMLArea("your_text_area_id");
* var cfg = editor.config; // this is the default configuration
* cfg.btnList["my-hilite"] =
* [ function(editor) { editor.surroundHTML('<span style="background:yellow">', '</span>'); }, // action
* "Highlight selection", // tooltip
* "my_hilite.gif", // image
* false // disabled in text mode
* ];
* cfg.toolbar.push(["linebreak", "my-hilite"]); // add the new button to the toolbar
*
* An alternate (also more convenient and recommended) way to
* accomplish this is to use the registerButton function below.
*/
// initialize tooltips from the I18N module and generate correct image path
for ( var i in this.btnList )
{
var btn = this.btnList[i];
// prevent iterating over wrong type
if ( typeof btn != 'object' )
{
continue;
}
if ( typeof btn[1] != 'string' )
{
btn[1][0] = _editor_url + this.imgURL + btn[1][0];
}
else
{
btn[1] = _editor_url + this.imgURL + btn[1];
}
btn[0] = HTMLArea._lc(btn[0]); //initialize tooltip
}
function more_toolbar(){
var t=document.getElementById("ob_t2");
var s=document.getElementById("ob_statusBar");
if(t.style.display == "none"){
t.style.display = "";
s.style.display = "";
}
else{
t.style.display = "none";
s.style.display = "none";
}
}
};
/** Helper function: register a new button with the configuration. It can be
* called with all 5 arguments, or with only one (first one). When called with
* only one argument it must be an object with the following properties: id,
* tooltip, image, textMode, action. Examples:
*
* 1. config.registerButton("my-hilite", "Hilite text", "my-hilite.gif", false, function(editor) {...});
* 2. config.registerButton({
* id : "my-hilite", // the ID of your button
* tooltip : "Hilite text", // the tooltip
* image : "my-hilite.gif", // image to be displayed in the toolbar
* textMode : false, // disabled in text mode
* action : function(editor) { // called when the button is clicked
* editor.surroundHTML('<span class="hilite">', '</span>');
* },
* context : "p" // will be disabled if outside a <p> element
* });
*/
HTMLArea.Config.prototype.registerButton = function(id, tooltip, image, textMode, action, context)
{
var the_id;
if ( typeof id == "string" )
{
the_id = id;
}
else if ( typeof id == "object" )
{
the_id = id.id;
}
else
{
alert("ERROR [HTMLArea.Config::registerButton]:\ninvalid arguments");
return false;
}
// check for existing id
// if(typeof this.customSelects[the_id] != "undefined")
// {
// alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists.");
// }
// if(typeof this.btnList[the_id] != "undefined") {
// alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists.");
// }
switch ( typeof id )
{
case "string":
this.btnList[id] = [ tooltip, image, textMode, action, context ];
break;
case "object":
this.btnList[id.id] = [ id.tooltip, id.image, id.textMode, id.action, id.context ];
break;
}
};
HTMLArea.prototype.registerPanel = function(side, object)
{
if ( !side )
{
side = 'right';
}
this.setLoadingMessage('Register panel ' + side);
var panel = this.addPanel(side);
if ( object )
{
object.drawPanelIn(panel);
}
};
/** The following helper function registers a dropdown box with the editor
* configuration. You still have to add it to the toolbar, same as with the
* buttons. Call it like this:
*
* FIXME: add example
*/
HTMLArea.Config.prototype.registerDropdown = function(object)
{
// check for existing id
// if ( typeof this.customSelects[object.id] != "undefined" )
// {
// alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown with the same ID already exists.");
// }
// if ( typeof this.btnList[object.id] != "undefined" )
// {
// alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button with the same ID already exists.");
// }
this.customSelects[object.id] = object;
};
/** Call this function to remove some buttons/drop-down boxes from the toolbar.
* Pass as the only parameter a string containing button/drop-down names
* delimited by spaces. Note that the string should also begin with a space
* and end with a space. Example:
*
* config.hideSomeButtons(" fontname fontsize textindicator ");
*
* It's useful because it's easier to remove stuff from the defaul toolbar than
* create a brand new toolbar ;-)
*/
HTMLArea.Config.prototype.hideSomeButtons = function(remove)
{
var toolbar = this.toolbar;
for ( var i = toolbar.length; --i >= 0; )
{
var line = toolbar[i];
for ( var j = line.length; --j >= 0; )
{
if ( remove.indexOf(" " + line[j] + " ") >= 0 )
{
var len = 1;
if ( /separator|space/.test(line[j + 1]) )
{
len = 2;
}
line.splice(j, len);
}
}
}
};
/** Helper Function: add buttons/drop-downs boxes with title or separator to the toolbar
* if the buttons/drop-downs boxes doesn't allready exists.
* id: button or selectbox (as array with separator or title)
* where: button or selectbox (as array if the first is not found take the second and so on)
* position:
* -1 = insert button (id) one position before the button (where)
* 0 = replace button (where) by button (id)
* +1 = insert button (id) one position after button (where)
*
* cfg.addToolbarElement(["T[title]", "button_id", "separator"] , ["first_id","second_id"], -1);
*/
HTMLArea.Config.prototype.addToolbarElement = function(id, where, position)
{
var toolbar = this.toolbar;
var a, i, j, o, sid;
var idIsArray = false;
var whereIsArray = false;
var whereLength = 0;
var whereJ = 0;
var whereI = 0;
var exists = false;
var found = false;
// check if id and where are arrys
if ( ( id && typeof id == "object" ) && ( id.constructor == Array ) )
{
idIsArray = true;
}
if ( ( where && typeof where == "object" ) && ( where.constructor == Array ) )
{
whereIsArray = true;
whereLength = where.length;
}
if ( idIsArray ) //find the button/select box in input array
{
for ( i = 0; i < id.length; ++i )
{
if ( ( id[i] != "separator" ) && ( id[i].indexOf("T[") !== 0) )
{
sid = id[i];
}
}
}
else
{
sid = id;
}
for ( i = 0; !exists && !found && i < toolbar.length; ++i )
{
a = toolbar[i];
for ( j = 0; !found && j < a.length; ++j )
{
// check if button/select box exists
if ( a[i] == sid )
{
exists = true;
break;
}
if ( whereIsArray )
{
for ( o = 0; o < whereLength; ++o )
{
if ( a[j] == where[o] )
{
if ( o === 0 )
{
found = true;
j--;
break;
}
else
{
whereI = i;
whereJ = j;
whereLength = o;
}
}
}
}
else
{
// find the position to insert
if ( a[j] == where )
{
found = true;
break;
}
}
}
}
if ( !exists )
{
//if check found any other as the first button
if ( !found && whereIsArray )
{
if ( where.length != whereLength )
{
j = whereJ;
a = toolbar[whereI];
found = true;
}
}
if ( found )
{
// replace the found button
if ( position === 0 )
{
if ( idIsArray)
{
a[j] = id[id.length-1];
for ( i = id.length-1; --i >= 0; )
{
a.splice(j, 0, id[i]);
}
}
else
{
a[j] = id;
}
}
else
{
// insert before/after the found button
if ( position < 0 )
{
j = j + position + 1; //correct position before
}
else if ( position > 0 )
{
j = j + position; //correct posion after
}
if ( idIsArray )
{
for ( i = id.length; --i >= 0; )
{
a.splice(j, 0, id[i]);
}
}
else
{
a.splice(j, 0, id);
}
}
}
else
{
// no button found
toolbar[0].splice(0, 0, "separator");
if ( idIsArray)
{
for ( i = id.length; --i >= 0; )
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?