www.pudn.com > 网上回答系统.rar > 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"); 
	editor.document.write(hiddenHtml.value); 
	//if (!isIE)  
	//editor.document.write(""); 
	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 , use  
		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'; 
	} 
} 
 
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) { 
	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 == '

 

' || hiddenHtml.value == '
') { 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_GetHiddenField(ftbName) { return document.getElementById(ftbName); } function FTB_GetTextDirection(ftbName) { return (eval(ftbName + "_TextDirection")); } 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; } 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); } /** 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() { document.body.style.cursor='default'; } function FTB_TabOut() { document.body.style.cursor='auto'; } /** END:TABS ********************/ function FTB_Event(ftbName) { editor = FTB_GetIFrame(ftbName); htmlMode = FTB_IsHtmlMode(ftbName); var _TAB = 9; var _ENTER = 13; var _QUOTE = 222; var _OPENCURLY = '“'; var _CLOSECURLY = '”'; if (isIE) { // TAB Functions if (editor.event.keyCode == _TAB) { var tabMode = FTB_TabMode(ftbName); if (tabMode == "Disabled") { editor.event.cancelBubble = true; editor.event.returnValue = false; } if (tabMode == "InsertSpaces") { FTB_InsertText(ftbName,"   "); editor.event.cancelBubble = true; editor.event.returnValue = false; } if (tabMode == "NextControl") { // do nothing for TabMode.NextControl } } // IE defaults to

, Mozilla to
if (editor.event.keyCode == _ENTER) { var breakMode = FTB_BreakMode(ftbName); if (breakMode == "LineBreak" || editor.event.ctrlKey || htmlMode) { var sel = editor.document.selection; if (sel.type == 'Control') { return; } var r = sel.createRange(); if ((!FTB_CheckTag(r.parentElement(),'LI'))&&(!FTB_CheckTag(r.parentElement(),'H'))) { r.pasteHTML('
'); editor.event.cancelBubble = true; editor.event.returnValue = false; r.select(); r.collapse(false); return false; } } } } // update ToolbarItems only every 50 milliseconds b/c it is expensive if (!htmlMode && FTB_UpdateToolbar(ftbName)) { if (editor.timerToolbar) { clearTimeout(editor.timerToolbar); } editor.timerToolbar = setTimeout(function() { FTB_SetToolbarItems(ftbName); editor.timerToolbar = null; }, 50); } } function FTB_SetToolbarItems(ftbName) { editor = FTB_GetIFrame(ftbName); htmlMode = FTB_IsHtmlMode(ftbName); toolbarArray = FTB_GetToolbarArray(ftbName); //document.getElementById("Debug").value = ""; if (toolbarArray) { for (var i=0; i -1) { state = editor.document.queryCommandState(commandIdentifier); FTB_SetButtonState(toolbarItemID,ftbName,state); } else { state = editor.document.queryCommandValue(commandIdentifier); switch (commandIdentifier) { case "backcolor": if (isIE) { state = FTB_GetHexColor(state); } else { if (state == "") state = "#FFFFFF"; } break; case "forecolor": if (isIE) { state = FTB_GetHexColor(state); } else { if (state == "") state = "#000000"; } break; case "formatBlock": //document.getElementById("Debug").value += "****: " + state + "\n"; if (!isIE) { if (state == "p" || state == "" || state == "") state = ""; else state = "<" + state + ">"; } break; } //document.getElementById("Debug").value += commandIdentifier + ": " + state + "\n"; FTB_SetDropDownListState(toolbarItemID,state); } } catch(e) { } } } } function FTB_GetHexColor(intColor) { intColor = intColor.toString(16).toUpperCase(); while (intColor.length < 6) { intColor = "0" + intColor; } return "#" + intColor.substring(4,6) + intColor.substring(2,4) + intColor.substring(0,2); } function FTB_SetDropDownListState(ddlName,value) { ddl = document.getElementById(ddlName); if (ddl) { for (var i=0; i