📄 script_gecko.js.php
字号:
// control registration array
var spaw_editors = new Array();
// returns true if editor is already registered
function SPAW_editor_registered(editor)
{
var found = false;
for(var i=0;i<spaw_editors.length;i++)
{
if (spaw_editors[i] == editor)
{
found = true;
break;
}
}
return(found);
}
// onsubmit
function SPAW_UpdateFields()
{
for (var i=0; i<spaw_editors.length; i++)
{
SPAW_updateField(spaw_editors[i], null);
}
}
// adds event handler for the form to update hidden fields
function SPAW_addOnSubmitHandler(editor)
{
thefield = SPAW_getFieldByEditor(editor, null);
var sTemp = "";
oForm = document.getElementById(thefield).form;
if(oForm.onsubmit != null) {
sTemp = oForm.onsubmit.toString();
iStart = sTemp.indexOf("{") + 2;
sTemp = sTemp.substr(iStart,sTemp.length-iStart-2);
}
if (sTemp.indexOf("SPAW_UpdateFields();") == -1)
{
oForm.onsubmit = new Function("SPAW_UpdateFields();" + sTemp);
}
}
// editor initialization
function SPAW_editorInit(editor, css_stylesheet, direction)
{
var ed = document.getElementById(editor+'_rEdit');
if (!SPAW_editor_registered(editor))
{
// register the editor
spaw_editors[spaw_editors.length] = editor;
// add on submit handler
SPAW_addOnSubmitHandler(editor);
ed.contentDocument.designMode = 'on';
var s_sheet = ed.contentDocument.createElement("link");
s_sheet.setAttribute("rel","stylesheet");
s_sheet.setAttribute("type","text/css");
s_sheet.setAttribute("href",css_stylesheet);
var head = ed.contentDocument.getElementsByTagName("head");
head[0].appendChild(s_sheet);
// set initial value
var ta_field = document.getElementById(editor);
var html = ta_field.value;
if (html != null && html != "\n")
ed.contentDocument.body.innerHTML = html;
// hookup active toolbar related events
ed.contentDocument.addEventListener('keyup', new Function("e","SPAW_onkeyup('"+editor+"',e);"), false);
ed.contentDocument.addEventListener('mouseup', new Function("SPAW_update_toolbar('"+editor+"', true);"), false);
// initialize toolbar
spaw_context_html = "";
SPAW_update_toolbar(editor, true);
// workaround to missing cursor on first load
ed.contentDocument.designMode = 'on';
}
}
function SPAW_showColorPicker(editor,curcolor,callback)
{
var wnd = window.open('<?php echo $GLOBALS["spaw_dir"]?>dialogs/colorpicker.php?lang='
+ document.getElementById('SPAW_'+editor+'_lang').value + '&theme='
+ document.getElementById('SPAW_'+editor+'_theme').value
+ '&editor=' + editor + '&callback=' + callback, "color_picker",
'status=no,modal=yes,width=350,height=250');
wnd.dialogArguments = curcolor;
return wnd;
}
function SPAW_bold_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('bold', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_italic_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('italic', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_underline_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('underline', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_left_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('justifyleft', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_center_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('justifycenter', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_right_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('justifyright', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_justify_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('justifyfull', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_ordered_list_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('insertorderedlist', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_bulleted_list_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('insertunorderedlist', false, null);
ed.contentWindow.focus();
SPAW_update_toolbar(editor, true);
}
function SPAW_fore_color_click(editor, sender)
{
var wnd = SPAW_showColorPicker(editor,null,'SPAW_fore_color_click_callback');
}
function SPAW_fore_color_click_callback(editor, sender)
{
var fCol = sender.returnValue;
if (fCol != null)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('forecolor', false, fCol);
}
ed.contentWindow.focus();
}
function SPAW_bg_color_click(editor, sender)
{
var wnd = SPAW_showColorPicker(editor,null,'SPAW_bg_color_click_callback');
}
function SPAW_bg_color_click_callback(editor, sender)
{
var fCol = sender.returnValue;
if (fCol != null)
{
var ed = document.getElementById(editor+'_rEdit');
ed.contentDocument.execCommand('hilitecolor', false, fCol);
}
ed.contentWindow.focus();
}
function SPAW_getA(editor)
{
var ed = document.getElementById(editor+'_rEdit');
var selection = ed.contentWindow.getSelection();
var selectedRange;
if (selection.rangeCount > 0) {
selectedRange = selection.getRangeAt(0);
}
var aControl = selectedRange.startContainer;
while ((aControl.tagName != 'A') && (aControl.tagName != 'BODY'))
{
aControl = aControl.parentNode;
}
if (aControl.tagName == 'A')
return(aControl);
else
return(null);
}
function SPAW_hyperlink_click(editor, sender)
{
var ed = document.getElementById(editor+'_rEdit');
var a = SPAW_getA(editor);
var aProps = {};
// get anchors on the page
aProps.anchors = new Array();
var links = ed.contentDocument.getElementsByTagName('A');
var aln = 0;
if (links != null) aln = links.length;
for (var i=0;i<aln;i++)
{
if (links[i].name != null && links[i].name != '')
aProps.anchors[aProps.anchors.length] = links[i].name;
}
if (a)
{
aProps.href = a.attributes["href"]?a.attributes["href"].nodeValue:'';
aProps.name = a.name;
aProps.target = a.target;
aProps.title = a.title;
}
var wnd = window.open('<?php echo $GLOBALS["spaw_dir"]?>dialogs/a.php?lang='
+ document.getElementById('SPAW_'+editor+'_lang').value + '&theme='
+ document.getElementById('SPAW_'+editor+'_theme').value
+ '&editor=' + editor + '&callback=SPAW_hyperlink_click_callback', "link_window",
'status=no,modal=yes,width=350,height=250');
wnd.dialogArguments = aProps;
}
/***********************/
function insertNodeAtSelection(win, insertNode)
{
// get current selection
var sel = win.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) {
// when inserting into a textnode
// we create 2 new textnodes
// and put the insertNode in between
var textNode = container;
container = textNode.parentNode;
var text = textNode.nodeValue;
// text before the split
var textBefore = text.substr(0,pos);
// text after the split
var textAfter = text.substr(pos);
var beforeNode = document.createTextNode(textBefore);
var afterNode = document.createTextNode(textAfter);
// insert the 3 new nodes before the old one
container.insertBefore(afterNode, textNode);
container.insertBefore(insertNode, afterNode);
container.insertBefore(beforeNode, insertNode);
// remove the old node
container.removeChild(textNode);
} else {
// else simply insert the node
afterNode = container.childNodes[pos];
container.insertBefore(insertNode, afterNode);
}
range.setEnd(afterNode, 0);
range.setStart(afterNode, 0);
}
sel.addRange(range);
// remove all ranges
win.getSelection().removeAllRanges();
};
/***********************/
function SPAW_hyperlink_click_callback(editor, sender)
{
var naProps = sender.returnValue;
var ed = document.getElementById(editor+'_rEdit');
var a = SPAW_getA(editor);
if (a)
{
// edit link
if (!naProps.href && !naProps.name)
{
// remove hyperlink
a.outerHTML = a.innerHTML;
}
else
{
// set link properties
if (naProps.href)
a.href = naProps.href;
else
a.removeAttribute('href',0);
if (naProps.name)
a.name = naProps.name;
else
a.removeAttribute('name',0);
if (naProps.target && naProps.target!='_self')
a.target = naProps.target;
else
a.removeAttribute('target',0);
if (naProps.title)
a.title = naProps.title;
else
a.removeAttribute('title',0);
a.removeAttribute('onclick',0);
}
}
else
{
// new link
var a;
a = document.createElement('A');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -