📄 freetextbox-mainscript.js
字号:
//** FreeTextBox Main Script ********************/
// by John Dyer
// http://www.freetextbox.com/
//***********************************************/
/** START:BROWSER DETECTION ********************/
_d=document;
_nv=navigator.appVersion.toLowerCase();
_f=false;_t=true;
ie4=(!_d.getElementById&&_d.all)?_t:_f;
ie5=(_nv.indexOf("msie 5.0")!=-1)?_t:_f;
ie55=(_nv.indexOf("msie 5.5")!=-1)?_t:_f;
ie6=(_nv.indexOf("msie 6.0")!=-1)?_t:_f;
isIE=(ie5||ie55||ie6)?_t:_f;
/** END:BROWSER DETECTION ********************/
/** START:MAIN FREETEXTBOX FUNCTIONS ********************/
function FTB_InitializeAll() {
for (var i=0; i<FTB_StartUpArray.length; i++)
FTB_Initialize(FTB_StartUpArray[i]);
}
function FTB_Initialize(ftbName) {
startMode = eval(ftbName + "_StartMode");
readOnly = eval(ftbName + "_ReadOnly");
designModeCss = eval(ftbName + "_DesignModeCss");
htmlModeCss = eval(ftbName + "_HtmlModeCss");
hiddenHtml = FTB_GetHiddenField(ftbName);
editor = FTB_GetIFrame(ftbName);
if (readOnly) {
editor.document.designMode = 'Off';
} else {
editor.document.designMode = 'On';
}
editor.document.open();
//if (!isIE) editor.document.write("<html><body><style type='text/css'>body { direction: rtl; }</style>");
editor.document.write(hiddenHtml.value);
//if (!isIE) editor.document.write("</body><html>");
editor.document.close();
if (isIE) {
if (htmlModeCss != "" || designModeCss != "" ) {
editor.document.createStyleSheet(designModeCss);
editor.document.createStyleSheet(htmlModeCss);
editor.document.styleSheets[1].disabled = true;
}
} else {
// turn off <span style="font-weight:bold">, use <b>
editor.document.execCommand("useCSS", false, true);
}
if (readOnly) {
editor.document.contentEditable = 'False';
} else {
editor.document.contentEditable = 'True';
}
editor.document.body.style.border = '0';
if (FTB_GetTextDirection(ftbName) == "RightToLeft")
editor.document.body.style.direction = 'rtl';
if (isIE) {
editor.document.onkeydown = function() {
return FTB_Event(ftbName);
};
editor.document.onkeypress = function() {
return FTB_Event(ftbName);
};
editor.document.onclick = function() {
return FTB_Event(ftbName);
};
editor.document.onmousedown = function() {
return FTB_Event(ftbName);
};
} else {
editor.addEventListener("keydown", function() {
return FTB_Event(ftbName);
}, true);
editor.addEventListener("keypress", function() {
return FTB_Event(ftbName);
}, true);
editor.addEventListener("click", function() {
return FTB_Event(ftbName);
}, true);
editor.addEventListener("mousedown", function() {
return FTB_Event(ftbName);
}, true);
}
if (startMode != "DesignMode" && FTB_HideToolbar(ftbName)) {
toolbar = FTB_GetToolbar(ftbName);
if (toolbar != null) toolbar.style.display = 'none';
}
eval(ftbName + "_Initialized = true;");
}
function FTB_GetFtbName(ftb) {
ftbName = ftb.name;
underscore = ftbName.lastIndexOf("_");
return ftbName.substring(0,underscore);
}
function FTB_ChangeMode(ftb,goToHtmlMode) {
editor = ftb;
ftbName = FTB_GetFtbName(ftb);
var toolbar = FTB_GetToolbar(ftbName);
var hideToolbar = FTB_HideToolbar(ftbName);
var editorContent;
var iframe = document.getElementById(ftbName + "_Editor");
editor.focus();
if (goToHtmlMode) {
if (isIE) {
if (editor.document.styleSheets.length > 0) {
editor.document.styleSheets[0].disabled = true;
editor.document.styleSheets[1].disabled = false;
}
if (FTB_HtmlModeDefaultsToMonoSpaceFont(ftbName) && editor.document.styleSheets.length < 2) {
editor.document.body.style.fontFamily = 'Courier New, Courier New';
editor.document.body.style.fontSize = '10pt';
}
editorContent = editor.document.body.innerHTML;
//alert(editorContent);
editor.document.body.innerText = editorContent;
} else {
editorContent = document.createTextNode(editor.document.body.innerHTML);
editor.document.body.innerHTML = "";
editor.document.body.appendChild(editorContent);
}
if (toolbar != null && hideToolbar ) {
if (!isIE) iframe.style.height = '50%';
toolbar.style.display = 'none';
if (!isIE) setTimeout(function() { iframe.style.height = '100%'; }, 0);
}
return true;
} else {
// go to Design Mode
if (isIE) {
editorContent = editor.document.body.innerText;
if (FTB_HtmlModeDefaultsToMonoSpaceFont(ftbName) && editor.document.styleSheets.length < 2) {
editor.document.body.style.fontFamily = '';
editor.document.body.style.fontSize = '';
}
if (editor.document.styleSheets.length > 0) {
editor.document.styleSheets[0].disabled = false;
editor.document.styleSheets[1].disabled = true;
}
editor.document.body.innerHTML = editorContent;
} else {
editorContent = editor.document.body.ownerDocument.createRange();
editorContent.selectNodeContents(editor.document.body);
editor.document.body.innerHTML = editorContent.toString();
}
if (toolbar != null && hideToolbar ) {
if (!isIE) iframe.style.height = '50%';
toolbar.style.display = '';
if (!isIE) setTimeout(function() { iframe.style.height = '100%'; editor.focus();}, 0);
}
editor.focus();
return true;
}
}
function FTB_CopyHtmlToHidden(ftbName) {
if (!FTB_Initialized(ftbName)) return;
hiddenHtml = FTB_GetHiddenField(ftbName);
editor = FTB_GetIFrame(ftbName);
if (isIE) {
if (FTB_IsHtmlMode(ftbName)) {
hiddenHtml.value = editor.document.body.innerText;
} else {
hiddenHtml.value = editor.document.body.innerHTML;
}
} else {
if (FTB_IsHtmlMode(ftbName)) {
editorContent = editor.document.body.ownerDocument.createRange();
editorContent.selectNodeContents(editor.document.body);
hiddenHtml.value = editorContent.toString();
} else {
hiddenHtml.value = editor.document.body.innerHTML;
}
}
if (hiddenHtml.value == '<P> </P>' || hiddenHtml.value == '<br>') {
hiddenHtml.value = '';
}
}
function FTB_Format(ftbName,commandName) {
editor = FTB_GetIFrame(ftbName);
if (FTB_IsHtmlMode(ftbName)) return;
editor.focus();
editor.document.execCommand(commandName,'',null);
//FTB_Event(ftbName);
}
function FTB_SurroundText(ftbName,start,end) {
if (FTB_IsHtmlMode(ftbName)) return;
editor = FTB_GetIFrame(ftbName);
editor.focus();
if (isIE) {
var sel = editor.document.selection.createRange();
html = start + sel.htmlText + end;
sel.pasteHTML(html);
} else {
selection = editor.window.getSelection();
editor.focus();
if (selection) {
range = selection.getRangeAt(0);
} else {
range = editor.document.createRange();
}
FTB_InsertText(ftbName, start + selection + end);
}
}
function FTB_InsertText(ftbName,insertion) {
if (FTB_IsHtmlMode(ftbName)) return;
editor = FTB_GetIFrame(ftbName);
editor.focus();
if (isIE) {
sel = editor.document.selection.createRange();
sel.pasteHTML(insertion);
} else {
editor.focus();
selection = editor.window.getSelection();
if (selection) {
range = selection.getRangeAt(0);
} else {
range = editor.document.createRange();
}
var fragment = editor.document.createDocumentFragment();
var div = editor.document.createElement("div");
div.innerHTML = insertion;
while (div.firstChild) {
fragment.appendChild(div.firstChild);
}
selection.removeAllRanges();
range.deleteContents();
var node = range.startContainer;
var pos = range.startOffset;
switch (node.nodeType) {
case 3:
if (fragment.nodeType == 3) {
node.insertData(pos, fragment.data);
range.setEnd(node, pos + fragment.length);
range.setStart(node, pos + fragment.length);
} else {
node = node.splitText(pos);
node.parentNode.insertBefore(fragment, node);
range.setEnd(node, pos + fragment.length);
range.setStart(node, pos + fragment.length);
}
break;
case 1:
node = node.childNodes[pos];
node.parentNode.insertBefore(fragment, node);
range.setEnd(node, pos + fragment.length);
range.setStart(node, pos + fragment.length);
break;
}
selection.addRange(range);
}
}
function FTB_CheckTag(item,tagName) {
if (item.tagName.search(tagName)!=-1) {
return item;
}
if (item.tagName=='BODY') {
return false;
}
item=item.parentElement;
return FTB_CheckTag(item,tagName);
}
/** END:MAIN FREETEXTBOX FUNCTIONS ********************/
/** START:PROPERTIES ********************/
function FTB_IsHtmlMode(ftbName) {
return (eval(ftbName + "_HtmlMode"));
}
function FTB_TabMode(ftbName) {
return (eval(ftbName + "_TabMode"));
}
function FTB_BreakMode(ftbName) {
return (eval(ftbName + "_BreakMode"));
}
function FTB_HtmlModeDefaultsToMonoSpaceFont(ftbName) {
return (eval(ftbName + "_HtmlModeDefaultsToMonoSpaceFont"));
}
function FTB_HideToolbar(ftbName) {
return (eval(ftbName + "_HideToolbar"));
}
function FTB_UpdateToolbar(ftbName) {
return (eval(ftbName + "_UpdateToolbar"));
}
function FTB_ButtonRenderMode(ftbName) {
return (eval(ftbName + "_ButtonRenderMode"));
}
function FTB_GetHiddenField(ftbName) {
return document.getElementById(ftbName);
}
function FTB_GetTextDirection(ftbName) {
return (eval(ftbName + "_TextDirection"));
}
function FTB_Initialized(ftbName) {
return (eval(ftbName + "_Initialized"));
}
function FTB_GetIFrame(ftbName) {
if (isIE) {
return eval(ftbName + "_Editor");
//return document.getElementById(ftbName + "_Editor");
} else {
return document.getElementById(ftbName + "_Editor").contentWindow;
}
}
function FTB_GetToolbar(ftbName) {
return document.getElementById(ftbName + "_Toolbar");
}
function FTB_GetToolbarArray(ftbName) {
return eval(ftbName + "_ToolbarItems");
}
function FTB_GetCssID(ftbName) {
cssID = ftbName;
while (cssID.substring(0,1) == '_') {
cssID = cssID.substring(1);
}
return cssID;
}
/** START: BUTTONS **************/
/** CSS BUTTON FUNCTIONS **************/
function FTB_SetButtonStyle(buttonTD,style,checkstyle) {
if (buttonTD == null) return;
if (buttonTD.className != checkstyle)
buttonTD.className = style;
}
function FTB_GetClassSubName(className) {
underscore = className.indexOf("_");
if (underscore < 0) return className;
return className.substring(underscore+1);
}
/** JS BUTTON FUNCTIONS **************/
function FTB_ButtonOver(theTD,ftbName,imageOver,imageDown) {
FTB_SetButtonStyle(theTD,FTB_GetCssID(ftbName)+'_ButtonOver',null);
//if (eval(ftbName+'_OverImage').src != '')
// theTD.style.backgroundImage = "url(" + eval(ftbName+'_OverImage').src + ")";
if(imageOver == 1 & theTD.childNodes.length && theTD.childNodes[0].tagName == "IMG"){
oldSrc = theTD.childNodes[0].src;
if (oldSrc.indexOf('.over.') == -1) {
theTD.childNodes[0].src=oldSrc.substring(0, oldSrc.length-4) + ".over.gif";
}
}
//FTB_Event(ftbName);
}
function FTB_ButtonOut(theTD,ftbName,imageOver,imageDown) {
FTB_SetButtonStyle(theTD,FTB_GetCssID(ftbName)+'_ButtonNormal',null);
document.body.style.cursor = 'default';
theTD.style.backgroundImage='';
if(theTD.childNodes.length && theTD.childNodes[0].tagName == "IMG"){
oldSrc = theTD.childNodes[0].src;
if (oldSrc.indexOf('.over.') > 0) {
theTD.childNodes[0].src=oldSrc.substring(0, oldSrc.length-9) + ".gif";
}
if (oldSrc.indexOf('.down.') > 0) {
theTD.childNodes[0].src=oldSrc.substring(0, oldSrc.length-9) + ".gif";
}
}
//FTB_Event(ftbName);
}
function FTB_ButtonDown(theTD,ftbName,imageOver,imageDown) {
document.body.style.cursor = 'default';
FTB_SetButtonStyle(theTD,FTB_GetCssID(ftbName)+'_ButtonDown',null);
//if (eval(ftbName+'_DownImage').src != '')
// theTD.style.backgroundImage = "url(" + eval(ftbName+'_DownImage').src + ")";
if(imageDown == 1 && theTD.children.length && theTD.children[0].tagName == "IMG"){
oldSrc = theTD.children[0].src;
if (oldSrc.indexOf('.over.') > 0) {
theTD.children[0].src=oldSrc.substring(0, oldSrc.length-9) + ".down.gif";
}
}
//FTB_Event(ftbName);
}
function FTB_ButtonUp(theTD,ftbName,imageOver,imageDown) {
document.body.style.cursor = 'auto';
FTB_SetButtonStyle(theTD,FTB_GetCssID(ftbName)+'_ButtonOver',null);
//if (eval(ftbName+'_OverImage').src != '')
// theTD.style.backgroundImage = "url(" + eval(ftbName+'_OverImage').src + ")";
if(imageOver == 1 && theTD.children.length && theTD.children[0].tagName == "IMG"){
oldSrc = theTD.children[0].src;
if (oldSrc.indexOf('.over.') == -1) {
theTD.children[0].src=oldSrc.substring(0, oldSrc.length-4) + ".over.gif";
}
}
//FTB_Event(ftbName);
}
/** END:PROPERTIES ********************/
/** START:TABS ********************/
function FTB_SetActiveTab(theTD,ftbName) {
parentTR = theTD.parentElement;
parentTR = document.getElementById(ftbName + "_TabRow");
selectedTab = 1;
totalButtons = parentTR.cells.length-1;
for (var i=1;i< totalButtons;i++) {
parentTR.cells[i].className = FTB_GetCssID(ftbName) + "_TabOffRight";
if (theTD == parentTR.cells[i]) { selectedTab = i; }
}
if (selectedTab==1) {
parentTR.cells[0].className = FTB_GetCssID(ftbName) + "_StartTabOn";
} else {
parentTR.cells[0].className = FTB_GetCssID(ftbName) + "_StartTabOff";
parentTR.cells[selectedTab-1].className = FTB_GetCssID(ftbName) + "_TabOffLeft";
}
theTD.className = FTB_GetCssID(ftbName) + "_TabOn";
}
function FTB_TabOver() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -