Editor.htm
<textarea style="behavior:url('Editor.htc');"></textarea>
Editor.htc
<public:attach event=oncontentready onevent=initEditor()> <script> //对象 var vColorObject=null; var vFontObject=null; var vFontFamilyDiv=null; var vFontSizeDiv=null; var vFileObject=null;
var vConsoleDiv=null; var vEditorDiv=null;
//按钮提示文本 var strButtonTitleArray=new Array("新建","打开","保存","剪切","复制","粘贴","取消","恢复","粗体","斜体","下划","表格","向左","居中","向右","编号","符号","缩进","缩出","字色","字号","字体","图像","链接","水平","打印","预览"); //按钮静态文本 var strButtonValueArray=new Array("新建","打开","保存","剪切","复制","粘贴","取消","恢复","粗体","斜体","下划","表格","向左","居中","向右","编号","符号","缩进","缩出","字色","字号","字体","图像","链接","水平","打印","预览"); //按钮接口程序 var strButtonDefineFunctionArray=new Array("defineNew()", "defineOpen()", "defineSave()", "defineCut()", "defineCopy()", "definePaste()", "defineUndo()", "defineRedo()", "defineBold()", "defineItalic()", "defineUnderLine()", "defineTable()", "defineJustifyLeft()", "defineJustifyCenter()", "defineJustifyRight()", "defineInsertOrderedList()", "defineInsertUnorderedList()", "defineOutdent()", "defineIndent()", "defineColor()", "defineFontSize()", "defineFontFamily()", "defineInsertImage()", "defineCreateLink()", "defineInsertHorizontalRule()", "definePrint()", "definePreview()"); //按钮图标 var strButtonDefineIconArray=new Array("","","","","","","","","","","","","","","","","","","","","","","","","","",""); //按钮响应库 function defineNew() { vEditorDiv.innerHTML=""; } function defineOpen() { openFileDlg(); } function defineSave() { element.value=vEditorDiv.innerHTML; } function defineCut() { vEditorDiv.focus(); document.execCommand("Cut"); vEditorDiv.focus(); } function defineCopy() { vEditorDiv.focus(); document.execCommand("Copy"); vEditorDiv.focus(); } function definePaste() { vEditorDiv.focus(); document.execCommand("Paste"); vEditorDiv.focus(); } function defineUndo() { vEditorDiv.focus(); document.execCommand("Undo"); vEditorDiv.focus(); } function defineRedo() { vEditorDiv.focus(); document.execCommand("Redo"); vEditorDiv.focus(); } function defineBold() { vEditorDiv.focus(); document.execCommand("Bold"); vEditorDiv.focus(); } function defineItalic() { vEditorDiv.focus(); document.execCommand("Italic"); vEditorDiv.focus(); } function defineUnderLine() { vEditorDiv.focus(); document.execCommand("UnderLine"); vEditorDiv.focus(); } function defineTable() { window.confirm("Table"); } function defineJustifyLeft() { vEditorDiv.focus(); document.execCommand("JustifyLeft"); vEditorDiv.focus(); } function defineJustifyCenter() { vEditorDiv.focus(); document.execCommand("JustifyCenter"); vEditorDiv.focus(); } function defineJustifyRight() { vEditorDiv.focus(); document.execCommand("JustifyRight"); vEditorDiv.focus(); } function defineInsertOrderedList() { vEditorDiv.focus(); document.execCommand("InsertOrderedList"); vEditorDiv.focus(); } function defineInsertUnorderedList() { vEditorDiv.focus(); document.execCommand("InsertUnorderedList"); vEditorDiv.focus(); } function defineOutdent() { vEditorDiv.focus(); document.execCommand("Outdent"); vEditorDiv.focus(); } function defineIndent() { vEditorDiv.focus(); document.execCommand("Indent"); vEditorDiv.focus(); } function defineColor() { chooseColor(); } function defineFontSize() { chooseFontSize(); } function defineFontFamily() { chooseFontFamily(); } function defineInsertImage() { vEditorDiv.focus(); document.execCommand("InsertImage"); vEditorDiv.focus(); } function defineCreateLink() { vEditorDiv.focus(); document.execCommand("CreateLink"); vEditorDiv.focus(); } function defineInsertHorizontalRule() { vEditorDiv.focus(); document.execCommand("InsertHorizontalRule"); vEditorDiv.focus(); } function definePrint() { vEditorDiv.focus(); document.execCommand("Print"); vEditorDiv.focus(); } function definePreview() { window.confirm("Preview"); } //辅助函数 //颜色滴管 function chooseColor() { var strReturnColor=vColorObject.ChooseColorDlg("FFFFFF"); strReturnColor=strReturnColor.toString(16); if(strReturnColor.length<6) { var strTempString="000000".substring(0,6-strReturnColor.length); strReturnColor=strTempString.concat(strReturnColor); } vEditorDiv.focus(); document.execCommand("ForeColor",false,strReturnColor); vEditorDiv.focus(); } function chooseFontSize() { var vObject=window.event.srcElement; vFontSizeDiv.style.display=""; vFontSizeDiv.style.left=getElementDefineLeft(vObject); vFontSizeDiv.style.top=getElementDefineTop(vObject)+vObject.offsetHeight; element.document.attachEvent('onmousedown',onDocumentMouseDown); } function chooseFontFamily() { var vObject=window.event.srcElement; vFontFamilyDiv.style.display=""; vFontFamilyDiv.style.left=getElementDefineLeft(vObject); vFontFamilyDiv.style.top=getElementDefineTop(vObject)+vObject.offsetHeight; element.document.attachEvent('onmousedown',onDocumentMouseDown); } //打开文件 function openFileDlg() { try { vFileObject.CancelError=true; vFileObject.ShowOpen(); return vFileObject.filename; } catch(e) { return e; } } function onFontFamilyChange() { var vObject=window.event.srcElement; var strReturnFontFamily=vObject.options[vObject.selectedIndex].text; vEditorDiv.focus(); document.execCommand("FontName",false,strReturnFontFamily); vEditorDiv.focus(); vFontFamilyDiv.style.display="none"; element.document.detachEvent("onmousedown",onDocumentMouseDown); } function onFontSizeChange() { var vObject=window.event.srcElement; var strReturnFontSize=vObject.options[vObject.selectedIndex].text; vEditorDiv.focus(); document.execCommand("FontSize",false,strReturnFontSize); vEditorDiv.focus(); vFontSizeDiv.style.display="none"; element.document.detachEvent("onmousedown",onDocumentMouseDown); } function onDocumentMouseDown() { if(vFontFamilyDiv.contains(event.srcElement)) { return; } if(vFontSizeDiv.contains(event.srcElement)) { return; } vFontSizeDiv.style.display="none"; vFontFamilyDiv.style.display="none"; element.document.detachEvent("onmousedown",onDocumentMouseDown); } //初始化函数 function initEditor() { element.style.display="none"; vConsoleDiv=document.createElement("div"); vConsoleDiv.style.border="1px solid #000000"; vConsoleDiv.style.borderBottom="0px solid #000000"; vConsoleDiv.style.position="absolute"; vConsoleDiv.style.width="100%"; vConsoleDiv.style.left=getElementDefineLeft(element); vConsoleDiv.style.top=getElementDefineTop(element); window.document.body.insertAdjacentElement("afterbegin",vConsoleDiv); initConsole();
vEditorDiv=document.createElement("div"); vEditorDiv.style.border="1px solid #000000"; vEditorDiv.style.position="absolute"; vEditorDiv.style.width="100%"; vEditorDiv.style.height="50%"; vEditorDiv.contentEditable=true; vEditorDiv.style.left=getElementDefineLeft(element); vEditorDiv.style.top=getElementDefineTop(element)+vConsoleDiv.offsetHeight; window.document.body.insertAdjacentElement("afterbegin",vEditorDiv);
vColorObject=document.createElement("object"); vColorObject.classid="clsid:3050F819-98B5-11CF-BB82-00AA00BDCE0B"; vColorObject.codeBase=""; vColorObject.style.width=0; vColorObject.style.height=0; window.document.body.insertAdjacentElement("afterbegin",vColorObject);
vFontObject=document.createElement("object"); vFontObject.classid="clsid:3050F819-98B5-11CF-BB82-00AA00BDCE0B"; vFontObject.codeBase=""; vFontObject.style.width=0; vFontObject.style.height=0; window.document.body.insertAdjacentElement("afterbegin",vFontObject); //字体选择初始化 vFontFamilyDiv=document.createElement("div"); var vSelect=document.createElement("select"); vSelect.style.border="1px solid #000000"; vSelect.length=vFontObject.fonts.count; for(kIndex=1;kIndex<=vFontObject.fonts.count;kIndex++) { vOption=document.createElement("option"); vOption.value=kIndex; vOption.text=vFontObject.fonts(kIndex); vSelect.add(vOption); } vSelect.attachEvent("onchange",onFontFamilyChange); vFontFamilyDiv.appendChild(vSelect); window.document.body.insertAdjacentElement("afterbegin",vFontFamilyDiv); vFontFamilyDiv.style.display="none"; vFontFamilyDiv.style.position="absolute"; //字号选择初始化 vFontSizeDiv=document.createElement("div"); var vSelect=document.createElement("select"); vSelect.style.border="1px solid #000000"; for(kIndex=1;kIndex<=7;kIndex++) { vOption=document.createElement("option"); vOption.value=kIndex; vOption.text=kIndex; vSelect.add(vOption); } vSelect.attachEvent("onchange",onFontSizeChange); vFontSizeDiv.appendChild(vSelect); window.document.body.insertAdjacentElement("afterbegin",vFontSizeDiv); vFontSizeDiv.style.display="none"; vFontSizeDiv.style.position="absolute"; // vFileObject=document.createElement("object"); vFileObject.classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB"; vFileObject.codeBase="http://activex.microsoft.com/controls/vb5/comdlg32.cab"; vFileObject.style.width=0; vFileObject.style.height=0; window.document.body.insertAdjacentElement("afterbegin",vFileObject); } //初始化控制按钮面板 function initConsole() { var vTable=document.createElement("table"); vTable.style.backgroundColor="buttonface"; vTable.style.borderTop="1px solid buttonhighlight"; vTable.style.borderLeft="1px solid buttonhighlight"; vTable.style.borderBottom="1px solid buttonshadow"; vTable.style.borderRight="1px solid buttonshadow"; vTable.style.width="100%"; //vTable.style.filter="Alpha(Opacity=60)";//半透明效果. var vTr=vTable.insertRow(0); var vTd=vTr.insertCell(0); /* vTd.style.backgroundColor="buttonface"; vTd.style.borderTop="1px solid buttonhighlight"; vTd.style.borderLeft="1px solid buttonhighlight"; vTd.style.borderBottom="1px solid buttonshadow"; vTd.style.borderRight="1px solid buttonshadow"; */ for(kIndex=0;kIndex<strButtonTitleArray.length;kIndex++) { var vA=document.createElement("a"); vA.style.border="1px solid buttonface"; vA.style.textAlign="center"; vA.style.cursor="default"; vA.style.font="normal 9pt 宋体"; vA.id=kIndex; vA.innerHTML=strButtonValueArray[kIndex]; vA.title=strButtonTitleArray[kIndex]; vTd.appendChild(vA); vA.attachEvent("onmousedown",onButtonMouseDown); vA.attachEvent("onmouseout",onButtonMouseOut); vA.attachEvent("onmouseover",onButtonMouseOver); vA.attachEvent("onmouseup",onButtonMouseUp); vA.attachEvent("onclick",onButtonClick); }
vConsoleDiv.appendChild(vTable); } //按钮响应事件 function onButtonMouseDown() { var vObject=window.event.srcElement; vObject.style.borderTop="1px solid buttonshadow"; vObject.style.borderLeft="1px solid buttonshadow"; vObject.style.borderBottom="1px solid buttonhighlight"; vObject.style.borderRight="1px solid buttonhighlight"; } function onButtonMouseOut() { var vObject=window.event.srcElement; vObject.style.backgroundColor=""; vObject.style.border="1px solid buttonface"; } function onButtonMouseOver() { var vObject=window.event.srcElement; vObject.style.borderTop="1px solid buttonhighlight"; vObject.style.borderLeft="1px solid buttonhighlight"; vObject.style.borderBottom="1px solid buttonshadow"; vObject.style.borderRight="1px solid buttonshadow"; } function onButtonMouseUp() { var vObject=window.event.srcElement; vObject.style.borderTop="1px solid buttonhighlight"; vObject.style.borderLeft="1px solid buttonhighlight"; vObject.style.borderBottom="1px solid buttonshadow"; vObject.style.borderRight="1px solid buttonshadow"; } function onButtonClick() { var vObject=window.event.srcElement; eval(strButtonDefineFunctionArray[vObject.id]); } //函数库 //取元素绝对位置Left function getElementDefineLeft(vObject) { var iElementLeft=vObject.offsetLeft; while(vObject=vObject.offsetParent) { iElementLeft+=vObject.offsetLeft; } return iElementLeft; } //取元素绝对位置Top function getElementDefineTop(vObject) { var iElementTop=vObject.offsetTop; while(vObject=vObject.offsetParent) { iElementTop+=vObject.offsetTop; } return iElementTop; } </script> </public:attach> 
|