📄 xhtmleditor.js
字号:
var oUtil = new EditorUtil();function EditorUtil() { this.obj = null; this.oEditor = null; this.arrEditor = [];}function InnovaEditor(oName) { this.oName = oName; this.height = "400px"; this.width = "100%"; this.RENDER = RENDER; this.doCmd = edt_doCmd; this.getHTMLBody = edt_getHTMLBody; this.getXHTMLBody = edt_getXHTMLBody; this.insertHTML = edt_insertHTML; this.cleanDeprecated = edt_cleanDeprecated; this.cleanEmptySpan = edt_cleanEmptySpan; this.cleanFonts = edt_cleanFonts; this.cleanTags = edt_cleanTags; this.replaceTags = edt_replaceTags; this.toggleViewSource = edt_toggleViewSource; this.viewSource = edt_viewSource; this.applySource = edt_applySource;}function RENDER() {}function edt_doCmd(sCmd,sOption) { var oEditor=eval("idContent"+this.oName); var oSel=oEditor.document.selection.createRange(); var sType=oEditor.document.selection.type; var oTarget=(sType=="None"?oEditor.document:oSel); oTarget.execCommand(sCmd,false,sOption); }function edt_getHTMLBody() { var oEditor=eval("idContent"+this.oName); sHTML=oEditor.document.body.innerHTML; sHTML=String(sHTML).replace(/\<PARAM NAME=\"Play\" VALUE=\"0\">/ig,"<PARAM NAME=\"Play\" VALUE=\"-1\">"); return sHTML; }function edt_getXHTMLBody() { if (document.getElementById("chkViewSource"+this.oName).checked) { var oEditor=eval("idContent"+this.oName); return oEditor.document.body.innerText; } else { var oEditor=eval("idContent"+this.oName); this.cleanDeprecated(); return recur(oEditor.document.body,""); } }/*Insert custom HTML function*/function edt_insertHTML(sHTML) { var oEditor=eval("idContent"+this.oName); var oSel=oEditor.document.selection.createRange(); var arrA = String(sHTML).match(/<A[^>]*>/ig); if(arrA) for(var i=0;i<arrA.length;i++) { sTmp = arrA[i].replace(/href=/,"href_iwe="); sHTML=String(sHTML).replace(arrA[i],sTmp); } var arrB = String(sHTML).match(/<IMG[^>]*>/ig); if(arrB) for(var i=0;i<arrB.length;i++) { sTmp = arrB[i].replace(/src=/,"src_iwe="); sHTML=String(sHTML).replace(arrB[i],sTmp); } if(oSel.parentElement)oSel.pasteHTML(sHTML); else oSel.item(0).outerHTML=sHTML; for(var i=0;i<oEditor.document.all.length;i++) { if(oEditor.document.all[i].getAttribute("href_iwe")) { oEditor.document.all[i].href=oEditor.document.all[i].getAttribute("href_iwe"); oEditor.document.all[i].removeAttribute("href_iwe",0); } if(oEditor.document.all[i].getAttribute("src_iwe")) { oEditor.document.all[i].src=oEditor.document.all[i].getAttribute("src_iwe"); oEditor.document.all[i].removeAttribute("src_iwe",0); } } }/************************************ CLEAN DEPRECATED TAGS; Used in loadHTML, getHTMLBody, getXHTMLBody *************************************/function edt_cleanDeprecated() { var oEditor=eval("idContent"+this.oName); var elements; elements=oEditor.document.body.getElementsByTagName("STRIKE"); this.cleanTags(elements,"line-through"); elements=oEditor.document.body.getElementsByTagName("S"); this.cleanTags(elements,"line-through"); elements=oEditor.document.body.getElementsByTagName("U"); this.cleanTags(elements,"underline"); this.replaceTags("DIR","DIV"); this.replaceTags("MENU","DIV"); this.replaceTags("CENTER","DIV"); this.replaceTags("XMP","PRE"); this.replaceTags("BASEFONT","SPAN");//will be removed by cleanEmptySpan() elements=oEditor.document.body.getElementsByTagName("APPLET"); var count=elements.length; while(count>0) { f=elements[0]; f.removeNode(false); count--; } this.cleanFonts(); this.cleanEmptySpan(); return true; }function edt_cleanEmptySpan()//WARNING: blm bisa remove span yg bertumpuk dgn style sama,dst. { var bReturn=false; var oEditor=eval("idContent"+this.oName); var allSpans=oEditor.document.getElementsByTagName("SPAN"); if(allSpans.length==0)return false; var emptySpans=[]; var reg = /<\s*SPAN\s*>/gi; for(var i=0;i<allSpans.length;i++) { if(allSpans[i].outerHTML.search(reg)==0) emptySpans[emptySpans.length]=allSpans[i]; } var theSpan,theParent; for(var i=0;i<emptySpans.length;i++) { theSpan=emptySpans[i]; theSpan.removeNode(false); bReturn=true; } return bReturn; } function edt_cleanFonts() { var oEditor=eval("idContent"+this.oName); var allFonts=oEditor.document.body.getElementsByTagName("FONT"); if(allFonts.length==0)return false; var f; while(allFonts.length>0) { f=allFonts[0]; if(f.hasChildNodes && f.childNodes.length==1 && f.childNodes[0].nodeType==1 && f.childNodes[0].nodeName=="SPAN") { //if font containts only span child node copyAttribute(f.childNodes[0],f); f.removeNode(false); } else if(f.parentElement.nodeName=="SPAN" && f.parentElement.childNodes.length==1) { //font is the only child node of span. copyAttribute(f.parentElement,f); f.removeNode(false); } else { var newSpan=oEditor.document.createElement("SPAN"); copyAttribute(newSpan,f); newSpan.innerHTML=f.innerHTML; f.replaceNode(newSpan); } } return true; } function edt_cleanTags(elements,sVal)//WARNING: Dgn asumsi underline & linethrough tidak bertumpuk { var oEditor=eval("idContent"+this.oName); var f; while(elements.length>0) { f=elements[0]; if(f.hasChildNodes && f.childNodes.length==1 && f.childNodes[0].nodeType==1 && f.childNodes[0].nodeName=="SPAN") {//if font containts only span child node if(sVal=="bold")f.childNodes[0].style.fontWeight="bold"; if(sVal=="italic")f.childNodes[0].style.fontStyle="italic"; if(sVal=="line-through")f.childNodes[0].style.textDecoration="line-through"; if(sVal=="underline")f.childNodes[0].style.textDecoration="underline"; f.removeNode(false); } else if(f.parentElement.nodeName=="SPAN" && f.parentElement.childNodes.length==1) {//font is the only child node of span. if(sVal=="bold")f.parentElement.style.fontWeight="bold"; if(sVal=="italic")f.parentElement.style.fontStyle="italic"; if(sVal=="line-through")f.parentElement.style.textDecoration="line-through"; if(sVal=="underline")f.parentElement.style.textDecoration="underline"; f.removeNode(false); } else { var newSpan=oEditor.document.createElement("SPAN"); if(sVal=="bold")newSpan.style.fontWeight="bold"; if(sVal=="italic")newSpan.style.fontStyle="italic"; if(sVal=="line-through")newSpan.style.textDecoration="line-through"; if(sVal=="underline")newSpan.style.textDecoration="underline"; newSpan.innerHTML=f.innerHTML; f.replaceNode(newSpan); } } }function edt_replaceTags(sFrom,sTo) { var oEditor=eval("idContent"+this.oName); var elements=oEditor.document.getElementsByTagName(sFrom); var newSpan; var count=elements.length; while(count > 0) { f=elements[0]; newSpan=oEditor.document.createElement(sTo); newSpan.innerHTML=f.innerHTML; f.replaceNode(newSpan); count--; } }function copyAttribute(newSpan,f) { if((f.face!=null)&&(f.face!=""))newSpan.style.fontFamily=f.face; if((f.size!=null)&&(f.size!="")) { var nSize=""; if(f.size==1)nSize="8pt"; else if(f.size==2)nSize="10pt"; else if(f.size==3)nSize="12pt"; else if(f.size==4)nSize="14pt"; else if(f.size==5)nSize="18pt"; else if(f.size==6)nSize="24pt"; else if(f.size>=7)nSize="36pt"; else if(f.size<=-2||f.size=="0")nSize="8pt"; else if(f.size=="-1")nSize="10pt"; else if(f.size==0)nSize="12pt"; else if(f.size=="+1")nSize="14pt"; else if(f.size=="+2")nSize="18pt"; else if(f.size=="+3")nSize="24pt"; else if(f.size=="+4"||f.size=="+5"||f.size=="+6")nSize="36pt"; else nSize=""; if(nSize!="")newSpan.style.fontSize=nSize; } if((f.style.backgroundColor!=null)&&(f.style.backgroundColor!=""))newSpan.style.backgroundColor=f.style.backgroundColor; if((f.color!=null)&&(f.color!=""))newSpan.style.color=f.color; } function GetElement(oElement,sMatchTag) { while (oElement!=null&&oElement.tagName!=sMatchTag) { if(oElement.tagName=="BODY")return null; oElement=oElement.parentElement; } return oElement; }/************************************ HTML to XHTML*************************************/function lineBreak1(tag) //[0]<TAG>[1]text[2]</TAG> { arrReturn = ["\n","",""]; if( tag=="A"||tag=="B"||tag=="CITE"||tag=="CODE"||tag=="EM"|| tag=="FONT"||tag=="I"||tag=="SMALL"||tag=="STRIKE"||tag=="BIG"|| tag=="STRONG"||tag=="SUB"||tag=="SUP"||tag=="U"||tag=="SAMP"|| tag=="S"||tag=="VAR"||tag=="BASEFONT"||tag=="KBD"||tag=="TT") arrReturn=["","",""];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -