BVB Source Codes

Jie Yang v0.6.3 article system Show Editor.js Source code

Return Download Jie Yang v0.6.3 article system: download Editor.js Source code - Download Jie Yang v0.6.3 article system Source code - Type:.js
  1. // 当前模式
  2. var sCurrMode = null;
  3. var bEditMode = null;
  4. // 连接对象
  5. var oLinkField = null;
  6.  
  7. // 浏览器版本检测
  8. var BrowserInfo = new Object() ;
  9. BrowserInfo.MajorVer = navigator.appVersion.match(/MSIE (.)/)[1] ;
  10. BrowserInfo.MinorVer = navigator.appVersion.match(/MSIE .\.(.)/)[1] ;
  11. BrowserInfo.IsIE55OrMore = BrowserInfo.MajorVer >= 6 || ( BrowserInfo.MajorVer >= 5 && BrowserInfo.MinorVer >= 5 ) ;
  12.  
  13. var yToolbars = new Array();  // 工具栏数组
  14.  
  15. // 当文档完全调入时,进行初始化
  16. var bInitialized = false;
  17. function document.onreadystatechange(){
  18.         if (document.readyState!="complete") return;
  19.         if (bInitialized) return;
  20.         bInitialized = true;
  21.  
  22.         var i, s, curr;
  23.  
  24.         // 初始每个工具栏
  25.         for (i=0; i<document.body.all.length;i++){
  26.                 curr=document.body.all[i];
  27.                 if (curr.className == "yToolbar"){
  28.                         InitTB(curr);
  29.                         yToolbars[yToolbars.length] = curr;
  30.                 }
  31.         }
  32.  
  33.         oLinkField = parent.document.getElementsByName(sLinkFieldName)[0];
  34.         if (!config.License){
  35.                 try{
  36.                         eWebEditor_License.innerHTML = "&copy; <a href='http://www.eWebSoft.com' target='_blank'><font color=#000000>eWebSoft.com</font></a>";
  37.                 }
  38.                 catch(e){
  39.                 }
  40.         }
  41.  
  42.         // IE5.5以下版本只能使用纯文本模式
  43.         if (!BrowserInfo.IsIE55OrMore){
  44.                 config.InitMode = "TEXT";
  45.         }
  46.        
  47.         if (ContentFlag.value=="0") {
  48.                 ContentEdit.value = oLinkField.value;
  49.                 ContentLoad.value = oLinkField.value;
  50.                 ModeEdit.value = config.InitMode;
  51.                 ContentFlag.value = "1";
  52.         }
  53.  
  54.         setMode(ModeEdit.value);
  55.         setLinkedField() ;
  56. }
  57.  
  58. // 初始化一个工具栏上的按钮
  59. function InitBtn(btn) {
  60.         btn.onmouseover = BtnMouseOver;
  61.         btn.onmouseout = BtnMouseOut;
  62.         btn.onmousedown = BtnMouseDown;
  63.         btn.onmouseup = BtnMouseUp;
  64.         btn.ondragstart = YCancelEvent;
  65.         btn.onselectstart = YCancelEvent;
  66.         btn.onselect = YCancelEvent;
  67.         btn.YUSERONCLICK = btn.onclick;
  68.         btn.onclick = YCancelEvent;
  69.         btn.YINITIALIZED = true;
  70.         return true;
  71. }
  72.  
  73. //Initialize a toolbar.
  74. function InitTB(y) {
  75.         // Set initial size of toolbar to that of the handle
  76.         y.TBWidth = 0;
  77.                
  78.         // Populate the toolbar with its contents
  79.         if (! PopulateTB(y)) return false;
  80.        
  81.         // Set the toolbar width and put in the handle
  82.         y.style.posWidth = y.TBWidth;
  83.        
  84.         return true;
  85. }
  86.  
  87.  
  88. // Hander that simply cancels an event
  89. function YCancelEvent() {
  90.         event.returnValue=false;
  91.         event.cancelBubble=true;
  92.         return false;
  93. }
  94.  
  95. // Toolbar button onmouseover handler
  96. function BtnMouseOver() {
  97.         if (event.srcElement.tagName != "IMG") return false;
  98.         var image = event.srcElement;
  99.         var element = image.parentElement;
  100.        
  101.         // Change button look based on current state of image.
  102.         if (image.className == "Ico") element.className = "BtnMouseOverUp";
  103.         else if (image.className == "IcoDown") element.className = "BtnMouseOverDown";
  104.  
  105.         event.cancelBubble = true;
  106. }
  107.  
  108. // Toolbar button onmouseout handler
  109. function BtnMouseOut() {
  110.         if (event.srcElement.tagName != "IMG") {
  111.                 event.cancelBubble = true;
  112.                 return false;
  113.         }
  114.  
  115.         var image = event.srcElement;
  116.         var element = image.parentElement;
  117.         yRaisedElement = null;
  118.        
  119.         element.className = "Btn";
  120.         image.className = "Ico";
  121.  
  122.         event.cancelBubble = true;
  123. }
  124.  
  125. // Toolbar button onmousedown handler
  126. function BtnMouseDown() {
  127.         if (event.srcElement.tagName != "IMG") {
  128.                 event.cancelBubble = true;
  129.                 event.returnValue=false;
  130.                 return false;
  131.         }
  132.  
  133.         var image = event.srcElement;
  134.         var element = image.parentElement;
  135.  
  136.         element.className = "BtnMouseOverDown";
  137.         image.className = "IcoDown";
  138.  
  139.         event.cancelBubble = true;
  140.         event.returnValue=false;
  141.         return false;
  142. }
  143.  
  144. // Toolbar button onmouseup handler
  145. function BtnMouseUp() {
  146.         if (event.srcElement.tagName != "IMG") {
  147.                 event.cancelBubble = true;
  148.                 return false;
  149.         }
  150.  
  151.         var image = event.srcElement;
  152.         var element = image.parentElement;
  153.  
  154.         if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");
  155.  
  156.         element.className = "BtnMouseOverUp";
  157.         image.className = "Ico";
  158.  
  159.         event.cancelBubble = true;
  160.         return false;
  161. }
  162.  
  163. // Populate a toolbar with the elements within it
  164. function PopulateTB(y) {
  165.         var i, elements, element;
  166.  
  167.         // Iterate through all the top-level elements in the toolbar
  168.         elements = y.children;
  169.         for (i=0; i<elements.length; i++) {
  170.                 element = elements[i];
  171.                 if (element.tagName == "SCRIPT" || element.tagName == "!") continue;
  172.                
  173.                 switch (element.className) {
  174.                 case "Btn":
  175.                         if (element.YINITIALIZED == null) {
  176.                                 if (! InitBtn(element)) {
  177.                                         alert("Problem initializing:" + element.id);
  178.                                         return false;
  179.                                 }
  180.                         }
  181.                        
  182.                         element.style.posLeft = y.TBWidth;
  183.                         y.TBWidth += element.offsetWidth + 1;
  184.                         break;
  185.                        
  186.                 case "TBGen":
  187.                         element.style.posLeft = y.TBWidth;
  188.                         y.TBWidth += element.offsetWidth + 1;
  189.                         break;
  190.                        
  191.                 case "TBSep":
  192.                         element.style.posLeft = y.TBWidth + 2;
  193.                         y.TBWidth += 5;
  194.                         break;
  195.                        
  196.                 case "TBHandle":
  197.                         element.style.posLeft = 2;
  198.                         y.TBWidth += element.offsetWidth + 7;
  199.                         break;
  200.                        
  201.                 default:
  202.                         alert("Invalid class: " + element.className + " on Element: " + element.id + " <" + element.tagName + ">");
  203.                         return false;
  204.                 }
  205.         }
  206.  
  207.         y.TBWidth += 1;
  208.         return true;
  209. }
  210.  
  211.  
  212. // 设置所属表单的提交或reset事件
  213. function setLinkedField() {
  214.         if (! oLinkField) return ;
  215.         var oForm = oLinkField.form ;
  216.         if (!oForm) return ;
  217.         // 附加submit事件
  218.         oForm.attachEvent("onsubmit", AttachSubmit) ;
  219.         if (! oForm.submitEditor) oForm.submitEditor = new Array() ;
  220.         oForm.submitEditor[oForm.submitEditor.length] = AttachSubmit ;
  221.         if (! oForm.originalSubmit) {
  222.                 oForm.originalSubmit = oForm.submit ;
  223.                 oForm.submit = function() {
  224.                         if (this.submitEditor) {
  225.                                 for (var i = 0 ; i < this.submitEditor.length ; i++) {
  226.                                         this.submitEditor[i]() ;
  227.                                 }
  228.                         }
  229.                         this.originalSubmit() ;
  230.                 }
  231.         }
  232.         // 附加reset事件
  233.         oForm.attachEvent("onreset", AttachReset) ;
  234.         if (! oForm.resetEditor) oForm.resetEditor = new Array() ;
  235.         oForm.resetEditor[oForm.resetEditor.length] = AttachReset ;
  236.         if (! oForm.originalReset) {
  237.                 oForm.originalReset = oForm.reset ;
  238.                 oForm.reset = function() {
  239.                         if (this.resetEditor) {
  240.                                 for (var i = 0 ; i < this.resetEditor.length ; i++) {
  241.                                         this.resetEditor[i]() ;
  242.                                 }
  243.                         }
  244.                         this.originalReset() ;
  245.                 }
  246.         }
  247. }
  248.  
  249. // 附加submit提交事件,大表单数据提交,保存eWebEditor中的内容
  250. function AttachSubmit() {
  251.         var oForm = oLinkField.form ;
  252.         if (!oForm) return;
  253.         var html = getHTML();
  254.         ContentEdit.value = html;
  255.         if (sCurrMode=="TEXT"){
  256.                 html = HTMLEncode(html);
  257.         }
  258.         splitTextField(oLinkField, html);
  259. }
  260.  
  261. // 表单提交
  262. function doSubmit(){
  263.         var oForm = oLinkField.form ;
  264.         if (!oForm) return ;
  265.         oForm.submit();
  266. }
  267.  
  268. // 附加Reset事件
  269. function AttachReset() {
  270.         if(bEditMode){
  271.                 eWebEditor.document.body.innerHTML = ContentLoad.value;
  272.         }else{
  273.                 eWebEditor.document.body.innerText = ContentLoad.value;
  274.         }
  275. }
  276.  
  277. // 显示帮助
  278. function onHelp(){
  279.         ShowDialog('dialog/help.htm','400','300');
  280.         return false;
  281. }
  282.  
  283. // 粘贴时自动检测是否来源于Word格式
  284. function onPaste() {
  285.         if (sCurrMode=="VIEW") return false;
  286.  
  287.         if (sCurrMode=="EDIT"){
  288.                 var sHTML = GetClipboardHTML() ;
  289.                 if (config.AutoDetectPasteFromWord && BrowserInfo.IsIE55OrMore) {
  290.                         var re = /<\w[^>]* class="?MsoNormal"?/gi ;
  291.                         if ( re.test(sHTML)){
  292.                                 if ( confirm( "你要粘贴的内容好象是从Word中拷出来的,是否要先清除Word格式再粘贴?" ) ){
  293.                                         cleanAndPaste( sHTML ) ;
  294.                                         return false ;
  295.                                 }
  296.                         }
  297.                 }
  298.                 eWebEditor.document.selection.createRange().pasteHTML(sHTML) ;
  299.                 return false;
  300.         }else{
  301.                 eWebEditor.document.selection.createRange().pasteHTML(HTMLEncode( clipboardData.getData("Text"))) ;
  302.                 return false;
  303.         }
  304.        
  305. }
  306.  
  307. // 快捷键
  308. function onKeyDown(event){
  309.         var key = String.fromCharCode(event.keyCode).toUpperCase();
  310.  
  311.         // F2:显示或隐藏指导方针
  312.         if (event.keyCode==113){
  313.                 showBorders();
  314.                 return false;
  315.         }
  316.         if (event.ctrlKey){
  317.                 // Ctrl+Enter:提交
  318.                 if (event.keyCode==10){
  319.                         doSubmit();
  320.                         return false;
  321.                 }
  322.                 // Ctrl++:增加编辑区
  323.                 if (key=="+"){
  324.                         sizeChange(300);
  325.                         return false;
  326.                 }
  327.                 // Ctrl+-:减小编辑区
  328.                 if (key=="-"){
  329.                         sizeChange(-300);
  330.                         return false;
  331.                 }
  332.                 // Ctrl+1:代码模式
  333.                 if (key=="1"){
  334.                         setMode("CODE");
  335.                         return false;
  336.                 }
  337.                 // Ctrl+2:设计模式
  338.                 if (key=="2"){
  339.                         setMode("EDIT");
  340.                         return false;
  341.                 }
  342.                 // Ctrl+3:纯文本
  343.                 if (key=="3"){
  344.                         setMode("TEXT");
  345.                         return false;
  346.                 }
  347.                 // Ctrl+4:预览
  348.                 if (key=="4"){
  349.                         setMode("VIEW");
  350.                         return false;
  351.                 }
  352.         }
  353.  
  354.         switch(sCurrMode){
  355.         case "VIEW":
  356.                 return true;
  357.                 break;
  358.         case "EDIT":
  359.                 if (event.ctrlKey){
  360.                         // Ctrl+D:从Word粘贴
  361.                         if (key == "D"){
  362.                                 PasteWord();
  363.                                 return false;
  364.                         }
  365.                         // Ctrl+R:查找替换
  366.                         if (key == "R"){
  367.                                 findReplace();
  368.                                 return false;
  369.                         }
  370.                         // Ctrl+Z:Undo
  371.                         if (key == "Z"){
  372.                                 goHistory(-1);
  373.                                 return false;
  374.                         }
  375.                         // Ctrl+Y:Redo
  376.                         if (key == "Y"){
  377.                                 goHistory(1);
  378.                                 return false;
  379.                         }
  380.                 }
  381.                 if(!event.ctrlKey && event.keyCode != 90 && event.keyCode != 89) {
  382.                         if (event.keyCode == 32 || event.keyCode == 13){
  383.                                 saveHistory()
  384.                         }
  385.                 }
  386.                 return true;
  387.                 break;
  388.         default:
  389.                 if (event.keyCode==13){
  390.                         var sel = eWebEditor.document.selection.createRange();
  391.                         sel.pasteHTML("<BR>");
  392.                         event.cancelBubble = true;
  393.                         event.returnValue = false;
  394.                         sel.select();
  395.                         sel.moveEnd("character", 1);
  396.                         sel.moveStart("character", 1);
  397.                         sel.collapse(false);
  398.                         return false;
  399.                 }
  400.                 // 屏蔽事件
  401.                 if (event.ctrlKey){
  402.                         // Ctrl+B,I,U
  403.                         if ((key == "B")||(key == "I")||(key == "U")){
  404.                                 return false;
  405.                         }
  406.                 }
  407.  
  408.         }
  409. }
  410.  
  411. // 取剪粘板中的HTML格式数据
  412. function GetClipboardHTML() {
  413.         var oDiv = document.getElementById("eWebEditor_Temp_HTML")
  414.         oDiv.innerHTML = "" ;
  415.        
  416.         var oTextRange = document.body.createTextRange() ;
  417.         oTextRange.moveToElementText(oDiv) ;
  418.         oTextRange.execCommand("Paste") ;
  419.        
  420.         var sData = oDiv.innerHTML ;
  421.         oDiv.innerHTML = "" ;
  422.        
  423.         return sData ;
  424. }
  425.  
  426. // 清除WORD冗余格式并粘贴
  427. function cleanAndPaste( html ) {
  428.         // Remove all SPAN tags
  429.         html = html.replace(/<\/?SPAN[^>]*>/gi, "" );
  430.         // Remove Class attributes
  431.         html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  432.         // Remove Style attributes
  433.         html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ;
  434.         // Remove Lang attributes
  435.         html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  436.         // Remove XML elements and declarations
  437.         html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
  438.         // Remove Tags with XML namespace declarations: <o:p></o:p>
  439.         html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
  440.         // Replace the &nbsp;
  441.         html = html.replace(/&nbsp;/, " " );
  442.         // Transform <P> to <DIV>
  443.         var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ;    // Different because of a IE 5.0 error
  444.         html = html.replace( re, "<div$2</div>" ) ;
  445.        
  446.         insertHTML( html ) ;
  447. }
  448.  
  449. // 在当前文档位置插入.
  450. function insertHTML(html) {
  451.         if (isModeView()) return false;
  452.         if (eWebEditor.document.selection.type.toLowerCase() != "none"){
  453.                 eWebEditor.document.selection.clear() ;
  454.         }
  455.         if (sCurrMode!="EDIT"){
  456.                 html=HTMLEncode(html);
  457.         }
  458.         eWebEditor.document.selection.createRange().pasteHTML(html) ;
  459. }
  460.  
  461. // 设置编辑器的内容
  462. function setHTML(html) {
  463.         ContentEdit.value = html;
  464.         switch (sCurrMode){
  465.         case "CODE":
  466.                 eWebEditor.document.designMode="On";
  467.                 eWebEditor.document.open();
  468.                 eWebEditor.document.write(config.StyleEditorHeader);
  469.                 eWebEditor.document.body.innerText=html;
  470.                 eWebEditor.document.body.contentEditable="true";
  471.                 eWebEditor.document.close();
  472.                 bEditMode=false;
  473.                 break;
  474.         case "EDIT":
  475.                 eWebEditor.document.designMode="On";
  476.                 eWebEditor.document.open();
  477.                 eWebEditor.document.write(config.StyleEditorHeader+html);
  478.                 eWebEditor.document.body.contentEditable="true";
  479.                 eWebEditor.document.execCommand("2D-Position",true,true);
  480.                 eWebEditor.document.execCommand("MultipleSelection", true, true);
  481.                 eWebEditor.document.execCommand("LiveResize", true, true);
  482.                 eWebEditor.document.close();
  483.                 doZoom(nCurrZoomSize);
  484.                 bEditMode=true;
  485.                 eWebEditor.document.onselectionchange = function () { doToolbar();}
  486.                 break;
  487.         case "TEXT":
  488.                 eWebEditor.document.designMode="On";
  489.                 eWebEditor.document.open();
  490.                 eWebEditor.document.write(config.StyleEditorHeader);
  491.                 eWebEditor.document.body.innerText=html;
  492.                 eWebEditor.document.body.contentEditable="true";
  493.                 eWebEditor.document.close();
  494.                 bEditMode=false;
  495.                 break;
  496.         case "VIEW":
  497.                 eWebEditor.document.designMode="off";
  498.                 eWebEditor.document.open();
  499.                 eWebEditor.document.write(config.StyleEditorHeader+html);
  500.                 eWebEditor.document.body.contentEditable="false";
  501.                 eWebEditor.document.close();
  502.                 bEditMode=false;
  503.                 break;
  504.         }
  505.  
  506.         eWebEditor.document.body.onpaste = onPaste ;
  507.         eWebEditor.document.body.onhelp = onHelp ;
  508.         eWebEditor.document.onkeydown = new Function("return onKeyDown(eWebEditor.event);");
  509.         eWebEditor.document.oncontextmenu=new Function("return showContextMenu(eWebEditor.event);");
  510.  
  511.         if ((borderShown != "0")&&bEditMode) {
  512.                 borderShown = "0";
  513.                 showBorders();
  514.         }
  515.  
  516.         initHistory();
  517. }
  518.  
  519. // 取编辑器的内容
  520. function getHTML() {
  521.         var html;
  522.         if((sCurrMode=="EDIT")||(sCurrMode=="VIEW")){
  523.                 html = eWebEditor.document.body.innerHTML;
  524.         }else{
  525.                 html = eWebEditor.document.body.innerText;
  526.         }
  527.         if (sCurrMode!="TEXT"){
  528.                 if ((html.toLowerCase()=="<p>&nbsp;</p>")||(html.toLowerCase()=="<p></p>")){
  529.                         html = "";
  530.                 }
  531.         }
  532.         return html;
  533. }
  534.  
  535. // 在尾部追加内容
  536. function appendHTML(html) {
  537.         if (isModeView()) return false;
  538.         if(sCurrMode=="EDIT"){
  539.                 eWebEditor.document.body.innerHTML += html;
  540.         }else{
  541.                 eWebEditor.document.body.innerText += html;
  542.         }
  543. }
  544.  
  545. // 从Word中粘贴,去除格式
  546. function PasteWord(){
  547.         if (!validateMode()) return;
  548.         eWebEditor.focus();
  549.         if (BrowserInfo.IsIE55OrMore)
  550.                 cleanAndPaste( GetClipboardHTML() ) ;
  551.         else if ( confirm( "此功能要求IE5.5版本以上,你当前的浏览器不支持,是否按常规粘贴进行?" ) )
  552.                 format("paste") ;
  553.         eWebEditor.focus();
  554. }
  555.  
  556. // 粘贴纯文本
  557. function PasteText(){
  558.         if (!validateMode()) return;
  559.         eWebEditor.focus();
  560.         var sText = HTMLEncode( clipboardData.getData("Text") ) ;
  561.         insertHTML(sText);
  562.         eWebEditor.focus();
  563. }
  564.  
  565. // 检测当前是否允许编辑
  566. function validateMode() {
  567.         if (sCurrMode=="EDIT") return true;
  568.         alert("需转换为编辑状态后才能使用编辑功能!");
  569.         eWebEditor.focus();
  570.         return false;
  571. }
  572.  
  573. // 检测当前是否在预览模式
  574. function isModeView(){
  575.         if (sCurrMode=="VIEW"){
  576.                 alert("预览时不允许设置编辑区内容。");
  577.                 return true;
  578.         }
  579.         return false;
  580. }
  581.  
  582. // 格式化编辑器中的内容
  583. function format(what,opt) {
  584.         if (!validateMode()) return;
  585.         eWebEditor.focus();
  586.         if (opt=="RemoveFormat") {
  587.                 what=opt;
  588.                 opt=null;
  589.         }
  590.         if (opt==null) eWebEditor.document.execCommand(what);
  591.         else eWebEditor.document.execCommand(what,"",opt);
  592.         eWebEditor.focus();
  593. }
  594.  
  595. // 确保焦点在 eWebEditor 内
  596. function VerifyFocus() {
  597.         if ( eWebEditor )
  598.                 eWebEditor.focus();
  599. }
  600.  
  601. // 改变模式:代码、编辑、文本、预览
  602. function setMode(NewMode){
  603.         if (NewMode!=sCurrMode){
  604.                
  605.                 if (!BrowserInfo.IsIE55OrMore){
  606.                         if ((NewMode=="CODE") || (NewMode=="EDIT") || (NewMode=="VIEW")){
  607.                                 alert("HTML编辑模式需要IE5.5版本以上的支持!");
  608.                                 return false;
  609.                         }
  610.                 }
  611.  
  612.                 if (NewMode=="TEXT"){
  613.                         if (sCurrMode==ModeEdit.value){
  614.                                 if (!confirm("警告!切换到纯文本模式会丢失您所有的HTML格式,您确认切换吗?")){
  615.                                         return false;
  616.                                 }
  617.                         }
  618.                 }
  619.  
  620.                 var sBody = "";
  621.                 switch(sCurrMode){
  622.                 case "CODE":
  623.                         if (NewMode=="TEXT"){
  624.                                 eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
  625.                                 sBody = eWebEditor_Temp_HTML.innerText;
  626.                         }else{
  627.                                 sBody = eWebEditor.document.body.innerText;
  628.                         }
  629.                         break;
  630.                 case "TEXT":
  631.                         sBody = eWebEditor.document.body.innerText;
  632.                         sBody = HTMLEncode(sBody);
  633.                         break;
  634.                 case "EDIT":
  635.                 case "VIEW":
  636.                         if (NewMode=="TEXT"){
  637.                                 sBody = eWebEditor.document.body.innerText;
  638.                         }else{
  639.                                 sBody = eWebEditor.document.body.innerHTML;
  640.                         }
  641.                         break;
  642.                 default:
  643.                         sBody = ContentEdit.value;
  644.                         break;
  645.                 }
  646.  
  647.                 // 换图片
  648.                 try{
  649.                         document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
  650.                         document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
  651.                         document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
  652.                         document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
  653.                         document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
  654.                         }
  655.                 catch(e){
  656.                         }
  657.                
  658.                 sCurrMode = NewMode;
  659.                 ModeEdit.value = NewMode;
  660.                 setHTML(sBody);
  661.                 disableChildren(eWebEditor_Toolbar);
  662.  
  663.         }
  664. }
  665.  
  666. // 使工具栏无效
  667. function disableChildren(obj){
  668.         if (obj){
  669.                 obj.disabled=(!bEditMode);
  670.                 for (var i=0; i<obj.children.length; i++){
  671.                         disableChildren(obj.children[i]);
  672.                 }
  673.         }
  674. }
  675.  
  676.  
  677.  
  678. // 显示无模式对话框
  679. function ShowDialog(url, width, height, optValidate) {
  680.         if (optValidate) {
  681.                 if (!validateMode()) return;
  682.         }
  683.         eWebEditor.focus();
  684.         var arr = showModalDialog(url, window, "dialogWidth:" + width + "px;dialogHeight:" + height + "px;help:no;scroll:no;status:no");
  685.         eWebEditor.focus();
  686. }
  687.  
  688. // 全屏编辑
  689. function Maximize() {
  690.         if (!validateMode()) return;
  691.         window.open("dialog/fullscreen.htm?style="+config.StyleName, 'FullScreen'+sLinkFieldName, 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,fullscreen=yes');
  692. }
  693.  
  694. // 创建或修改超级链接
  695. function createLink(){
  696.         if (!validateMode()) return;
  697.        
  698.         if (eWebEditor.document.selection.type == "Control") {
  699.                 var oControlRange = eWebEditor.document.selection.createRange();
  700.                 if (oControlRange(0).tagName.toUpperCase() != "IMG") {
  701.                         alert("链接只能是图片或文本");
  702.                         return;
  703.                 }
  704.         }
  705.        
  706.         ShowDialog("dialog/hyperlink.htm", 350, 170, true);
  707. }
  708.  
  709. // 替换特殊字符
  710. function HTMLEncode(text){
  711.         text = text.replace(/&/g, "&amp;") ;
  712.         text = text.replace(/"/g, "&quot;") ;
  713.         text = text.replace(/</g, "&lt;") ;
  714.         text = text.replace(/>/g, "&gt;") ;
  715.         text = text.replace(/'/g, "&#146;") ;
  716.         text = text.replace(/\ /g,"&nbsp;");
  717.         text = text.replace(/\n/g,"<br>");
  718.         text = text.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;");
  719.         return text;
  720. }
  721.  
  722. // 插入特殊对象
  723. function insert(what) {
  724.         if (!validateMode()) return;
  725.         eWebEditor.focus();
  726.         var sel = eWebEditor.document.selection.createRange();
  727.  
  728.         switch(what){
  729.         case "excel":           // 插入EXCEL表格
  730.                 insertHTML("<object classid='clsid:0002E510-0000-0000-C000-000000000046' id='Spreadsheet1' codebase='file:\\Bob\software\office2000\msowc.cab' width='100%' height='250'><param name='HTMLURL' value><param name='HTMLData' value='&lt;html xmlns:x=&quot;urn:schemas-microsoft-com:office:excel&quot;xmlns=&quot;http://www.w3.org/TR/REC-html40&quot;&gt;&lt;head&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;!--tr{mso-height-source:auto;}td{black-space:nowrap;}.wc4590F88{black-space:nowrap;font-family:宋体;mso-number-format:General;font-size:auto;font-weight:auto;font-style:auto;text-decoration:auto;mso-background-source:auto;mso-pattern:auto;mso-color-source:auto;text-align:general;vertical-align:bottom;border-top:none;border-left:none;border-right:none;border-bottom:none;mso-protection:locked;}--&gt;&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;x:ExcelWorkbook&gt;&lt;x:ExcelWorksheets&gt;&lt;x:ExcelWorksheet&gt;&lt;x:OWCVersion&gt;9.0.0.2710&lt;/x:OWCVersion&gt;&lt;x:Label Style='border-top:solid .5pt silver;border-left:solid .5pt silver;border-right:solid .5pt silver;border-bottom:solid .5pt silver'&gt;&lt;x:Caption&gt;Microsoft Office Spreadsheet&lt;/x:Caption&gt; &lt;/x:Label&gt;&lt;x:Name&gt;Sheet1&lt;/x:Name&gt;&lt;x:WorksheetOptions&gt;&lt;x:Selected/&gt;&lt;x:Height&gt;7620&lt;/x:Height&gt;&lt;x:Width&gt;15240&lt;/x:Width&gt;&lt;x:TopRowVisible&gt;0&lt;/x:TopRowVisible&gt;&lt;x:LeftColumnVisible&gt;0&lt;/x:LeftColumnVisible&gt; &lt;x:ProtectContents&gt;False&lt;/x:ProtectContents&gt; &lt;x:DefaultRowHeight&gt;210&lt;/x:DefaultRowHeight&gt; &lt;x:StandardWidth&gt;2389&lt;/x:StandardWidth&gt; &lt;/x:WorksheetOptions&gt; &lt;/x:ExcelWorksheet&gt;&lt;/x:ExcelWorksheets&gt; &lt;x:MaxHeight&gt;80%&lt;/x:MaxHeight&gt;&lt;x:MaxWidth&gt;80%&lt;/x:MaxWidth&gt;&lt;/x:ExcelWorkbook&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;table class=wc4590F88 x:str&gt;&lt;col width=&quot;56&quot;&gt;&lt;tr height=&quot;14&quot;&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;'> <param name='DataType' value='HTMLDATA'> <param name='AutoFit' value='0'><param name='DisplayColHeaders' value='-1'><param name='DisplayGridlines' value='-1'><param name='DisplayHorizontalScrollBar' value='-1'><param name='DisplayRowHeaders' value='-1'><param name='DisplayTitleBar' value='-1'><param name='DisplayToolbar' value='-1'><param name='DisplayVerticalScrollBar' value='-1'> <param name='EnableAutoCalculate' value='-1'> <param name='EnableEvents' value='-1'><param name='MoveAfterReturn' value='-1'><param name='MoveAfterReturnDirection' value='0'><param name='RightToLeft' value='0'><param name='ViewableRange' value='1:65536'></object>");
  731.                 break;
  732.         case "nowdate":         // 插入当前系统日期
  733.                 var d = new Date();
  734.                 insertHTML(d.toLocaleDateString());
  735.                 break;
  736.         case "nowtime":         // 插入当前系统时间
  737.                 var d = new Date();
  738.                 insertHTML(d.toLocaleTimeString());
  739.                 break;
  740.         case "br":                      // 插入换行符
  741.                 insertHTML("<br>")
  742.                 break;
  743.         case "code":            // 代码片段样式
  744.                 insertHTML('<table width=95% border="0" align="Center" cellpadding="6" cellspacing="0" style="border: 1px Dotted #CCCCCC; TABLE-LAYOUT: fixed"><tr><td bgcolor=#FDFDDF style="WORD-WRAP: break-word"><font style="color: #990000;font-weight:bold">以下是代码片段:</font><br>'+HTMLEncode(sel.text)+'</td></tr></table>');
  745.                 break;
  746.         case "quote":           // 引用片段样式
  747.                 insertHTML('<table width=95% border="0" align="Center" cellpadding="6" cellspacing="0" style="border: 1px Dotted #CCCCCC; TABLE-LAYOUT: fixed"><tr><td bgcolor=#F3F3F3 style="WORD-WRAP: break-word"><font style="color: #990000;font-weight:bold">以下是引用片段:</font><br>'+HTMLEncode(sel.text)+'</td></tr></table>');
  748.                 break;
  749.         case "big":                     // 字体变大
  750.                 insertHTML("<big>" + sel.text + "</big>");
  751.                 break;
  752.         case "small":           // 字体变小
  753.                 insertHTML("<small>" + sel.text + "</small>");
  754.                 break;
  755.         default:
  756.                 alert("错误参数调用!");
  757.                 break;
  758.         }
  759.         sel=null;
  760. }
  761.  
  762. // 显示或隐藏指导方针
  763. var borderShown = config.ShowBorder;
  764. function showBorders() {
  765.         if (!validateMode()) return;
  766.        
  767.         var allForms = eWebEditor.document.body.getElementsByTagName("FORM");
  768.         var allInputs = eWebEditor.document.body.getElementsByTagName("INPUT");
  769.         var allTables = eWebEditor.document.body.getElementsByTagName("TABLE");
  770.         var allLinks = eWebEditor.document.body.getElementsByTagName("A");
  771.  
  772.         // 表单
  773.         for (a=0; a < allForms.length; a++) {
  774.                 if (borderShown == "0") {
  775.                         allForms[a].runtimeStyle.border = "1px dotted #FF0000"
  776.                 } else {
  777.                         allForms[a].runtimeStyle.cssText = ""
  778.                 }
  779.         }
  780.  
  781.         // Input Hidden类
  782.         for (b=0; b < allInputs.length; b++) {
  783.                 if (borderShown == "0") {
  784.                         if (allInputs[b].type.toUpperCase() == "HIDDEN") {
  785.                                 allInputs[b].runtimeStyle.border = "1px dashed #000000"
  786.                                 allInputs[b].runtimeStyle.width = "15px"
  787.                                 allInputs[b].runtimeStyle.height = "15px"
  788.                                 allInputs[b].runtimeStyle.backgroundColor = "#FDADAD"
  789.                                 allInputs[b].runtimeStyle.color = "#FDADAD"
  790.                         }
  791.                 } else {
  792.                         if (allInputs[b].type.toUpperCase() == "HIDDEN")
  793.                                 allInputs[b].runtimeStyle.cssText = ""
  794.                 }
  795.         }
  796.  
  797.         // 表格
  798.         for (i=0; i < allTables.length; i++) {
  799.                         if (borderShown == "0") {
  800.                                 allTables[i].runtimeStyle.border = "1px dotted #BFBFBF"
  801.                         } else {
  802.                                 allTables[i].runtimeStyle.cssText = ""
  803.                         }
  804.  
  805.                         allRows = allTables[i].rows
  806.                         for (y=0; y < allRows.length; y++) {
  807.                                 allCellsInRow = allRows[y].cells
  808.                                         for (x=0; x < allCellsInRow.length; x++) {
  809.                                                 if (borderShown == "0") {
  810.                                                         allCellsInRow[x].runtimeStyle.border = "1px dotted #BFBFBF"
  811.                                                 } else {
  812.                                                         allCellsInRow[x].runtimeStyle.cssText = ""
  813.                                                 }
  814.                                         }
  815.                         }
  816.         }
  817.  
  818.         // 链接 A
  819.         for (a=0; a < allLinks.length; a++) {
  820.                 if (borderShown == "0") {
  821.                         if (allLinks[a].href.toUpperCase() == "") {
  822.                                 allLinks[a].runtimeStyle.borderBottom = "1px dashed #000000"
  823.                         }
  824.                 } else {
  825.                         allLinks[a].runtimeStyle.cssText = ""
  826.                 }
  827.         }
  828.  
  829.         if (borderShown == "0") {
  830.                 borderShown = "1"
  831.         } else {
  832.                 borderShown = "0"
  833.         }
  834.  
  835.         scrollUp()
  836. }
  837.  
  838. // 返回页面最上部
  839. function scrollUp() {
  840.         eWebEditor.scrollBy(0,0);
  841. }
  842.  
  843. // 缩放操作
  844. var nCurrZoomSize = 100;
  845. var aZoomSize = new Array(10, 25, 50, 75, 100, 150, 200, 500);
  846. function doZoom(size) {
  847.         eWebEditor.document.body.runtimeStyle.zoom = size + "%";
  848.         nCurrZoomSize = size;
  849. }
  850.  
  851. // 拼写检查
  852. function spellCheck(){
  853.         ShowDialog('dialog/spellcheck.htm', 300, 220, true)
  854. }
  855.  
  856. // 查找替换
  857. function findReplace(){
  858.         ShowDialog('dialog/findreplace.htm', 320, 165, true)
  859. }
  860.  
  861. // 相对(absolute)或绝对位置(static)
  862. function absolutePosition(){
  863.         var objReference        = null;
  864.         var RangeType           = eWebEditor.document.selection.type;
  865.         if (RangeType != "Control") return;
  866.         var selectedRange       = eWebEditor.document.selection.createRange();
  867.         for (var i=0; i<selectedRange.length; i++){
  868.                 objReference = selectedRange.item(i);
  869.                 if (objReference.style.position != 'absolute') {
  870.                         objReference.style.position='absolute';
  871.                 }else{
  872.                         objReference.style.position='static';
  873.                 }
  874.         }
  875. }
  876.  
  877. // 上移(forward)或下移(backward)一层
  878. function zIndex(action){
  879.         var objReference        = null;
  880.         var RangeType           = eWebEditor.document.selection.type;
  881.         if (RangeType != "Control") return;
  882.         var selectedRange       = eWebEditor.document.selection.createRange();
  883.         for (var i=0; i<selectedRange.length; i++){
  884.                 objReference = selectedRange.item(i);
  885.                 if (action=='forward'){
  886.                         objReference.style.zIndex  +=1;
  887.                 }else{
  888.                         objReference.style.zIndex  -=1;
  889.                 }
  890.                 objReference.style.position='absolute';
  891.         }
  892. }
  893.  
  894. // 是否选中指定类型的控件
  895. function isControlSelected(tag){
  896.         if (eWebEditor.document.selection.type == "Control") {
  897.                 var oControlRange = eWebEditor.document.selection.createRange();
  898.                 if (oControlRange(0).tagName.toUpperCase() == tag) {
  899.                         return true;
  900.                 }      
  901.         }
  902.         return false;
  903. }
  904.  
  905. // 改变编辑区高度
  906. function sizeChange(size){
  907.         if (!BrowserInfo.IsIE55OrMore){
  908.                 alert("此功能需要IE5.5版本以上的支持!");
  909.                 return false;
  910.         }
  911.         for (var i=0; i<parent.frames.length; i++){
  912.                 if (parent.frames[i].document==self.document){
  913.                         var obj=parent.frames[i].frameElement;
  914.                         var height = parseInt(obj.offsetHeight);
  915.                         if (height+size>=300){
  916.                                 obj.height=height+size;
  917.                         }
  918.                         break;
  919.                 }
  920.         }
  921. }
  922.  
  923. // 热点链接
  924. function mapEdit(){
  925.         if (!validateMode()) return;
  926.        
  927.         var b = false;
  928.         if (eWebEditor.document.selection.type == "Control") {
  929.                 var oControlRange = eWebEditor.document.selection.createRange();
  930.                 if (oControlRange(0).tagName.toUpperCase() == "IMG") {
  931.                         b = true;
  932.                 }
  933.         }
  934.         if (!b){
  935.                 alert("热点链接只能作用于图片");
  936.                 return;
  937.         }
  938.  
  939.         window.open("dialog/map.htm", 'mapEdit'+sLinkFieldName, 'toolbar=no,location=no,directories=no,status=not,menubar=no,scrollbars=no,resizable=yes,width=450,height=300');
  940. }
  941.  
  942. // 上传文件成功返回原文件名、保存后的文件名、保存后的路径文件名,提供接口
  943. function addUploadFile(originalFileName, saveFileName, savePathFileName){
  944.         doInterfaceUpload(sLinkOriginalFileName, originalFileName);
  945.         doInterfaceUpload(sLinkSaveFileName, saveFileName);
  946.         doInterfaceUpload(sLinkSavePathFileName, savePathFileName);
  947. }
  948.  
  949. // 文件上传成功接口操作
  950. function doInterfaceUpload(strLinkName, strValue){
  951.         if (strValue=="") return;
  952.  
  953.         if (strLinkName){
  954.                 var objLinkUpload = parent.document.getElementsByName(strLinkName)[0];
  955.                 if (objLinkUpload){
  956.                         if (objLinkUpload.value!=""){
  957.                                 objLinkUpload.value = objLinkUpload.value + "|";
  958.                         }
  959.                         objLinkUpload.value = objLinkUpload.value + strValue;
  960.                         objLinkUpload.fireEvent("onchange");
  961.                 }
  962.         }
  963. }
  964.  
  965. // 大文件内容自动拆分
  966. function splitTextField(objField, html) {
  967.         var strFieldName = objField.name;
  968.         var objForm = objField.form;
  969.         var objDocument = objField.document;
  970.         objField.value = html;
  971.  
  972.         //表单限制值设定,限制值是102399,考虑到中文设为一半
  973.         var FormLimit = 50000 ;
  974.  
  975.         // 再次处理时,先赋空值
  976.         for (var i=1;i<objDocument.getElementsByName(strFieldName).length;i++) {
  977.                 objDocument.getElementsByName(strFieldName)[i].value = "";
  978.         }
  979.  
  980.         //如果表单值超过限制,拆成多个对象
  981.         if (html.length > FormLimit) {
  982.                 objField.value = html.substr(0, FormLimit) ;
  983.                 html = html.substr(FormLimit) ;
  984.  
  985.                 while (html.length > 0) {
  986.                         var objTEXTAREA = objDocument.createElement("TEXTAREA") ;
  987.                         objTEXTAREA.name = strFieldName ;
  988.                         objTEXTAREA.style.display = "none" ;
  989.                         objTEXTAREA.value = html.substr(0, FormLimit) ;
  990.                         objForm.appendChild(objTEXTAREA) ;
  991.  
  992.                         html = html.substr(FormLimit) ;
  993.                 }
  994.         }
  995. }
  996.  
  997. // 远程上传
  998. var sEventUploadAfter;
  999. function remoteUpload(strEventUploadAfter) {
  1000.         if (config.AutoRemote!="1") return;
  1001.         if (sCurrMode=="TEXT") return;
  1002.        
  1003.         sEventUploadAfter = strEventUploadAfter;
  1004.         var objField = document.getElementsByName("eWebEditor_UploadText")[0];
  1005.         splitTextField(objField, getHTML());
  1006.  
  1007.         divProcessing.style.top = (document.body.clientHeight-parseFloat(divProcessing.style.height))/2;
  1008.         divProcessing.style.left = (document.body.clientWidth-parseFloat(divProcessing.style.width))/2;
  1009.         divProcessing.style.display = "";
  1010.         eWebEditor_UploadForm.submit();
  1011. }
  1012.  
  1013. // 远程上传完成
  1014. function remoteUploadOK() {
  1015.         divProcessing.style.display = "none";
  1016.         if (oLinkField){
  1017.                 if (sEventUploadAfter){
  1018.                         eval("parent."+sEventUploadAfter);
  1019.                 }
  1020.         }
  1021. }
  1022.  
  1023. // 修正Undo/Redo
  1024. var history = new Object;
  1025. history.data = [];
  1026. history.position = 0;
  1027. history.bookmark = [];
  1028.  
  1029. // 保存历史
  1030. function saveHistory() {
  1031.         if (bEditMode){
  1032.                 if (history.data[history.position] != eWebEditor.document.body.innerHTML){
  1033.                         var nBeginLen = history.data.length;
  1034.                         var nPopLen = history.data.length - history.position;
  1035.                         for (var i=1; i<nPopLen; i++){
  1036.                                 history.data.pop();
  1037.                                 history.bookmark.pop();
  1038.                         }
  1039.  
  1040.                         history.data[history.data.length] = eWebEditor.document.body.innerHTML;
  1041.  
  1042.                         if (eWebEditor.document.selection.type != "Control"){
  1043.                                 history.bookmark[history.bookmark.length] = eWebEditor.document.selection.createRange().getBookmark();
  1044.                         } else {
  1045.                                 var oControl = eWebEditor.document.selection.createRange();
  1046.                                 history.bookmark[history.bookmark.length] = oControl[0];
  1047.                         }
  1048.  
  1049.                         if (nBeginLen!=0){
  1050.                                 history.position++;
  1051.                         }
  1052.                 }
  1053.         }
  1054. }
  1055.  
  1056. // 初始历史
  1057. function initHistory() {
  1058.         history.data.length = 0;
  1059.         history.bookmark.length = 0;
  1060.         history.position = 0;
  1061. }
  1062.  
  1063. // 返回历史
  1064. function goHistory(value) {
  1065.         saveHistory();
  1066.         // undo
  1067.         if (value == -1){
  1068.                 if (history.position > 0){
  1069.                         eWebEditor.document.body.innerHTML = history.data[--history.position];
  1070.                         setHistoryCursor();
  1071.                 }
  1072.         // redo
  1073.         } else {
  1074.                 if (history.position < history.data.length -1){
  1075.                         eWebEditor.document.body.innerHTML = history.data[++history.position];
  1076.                         setHistoryCursor();
  1077.                 }
  1078.         }
  1079. }
  1080.  
  1081. // 设置当前书签
  1082. function setHistoryCursor() {
  1083.         if (history.bookmark[history.position]){
  1084.                 r = eWebEditor.document.body.createTextRange()
  1085.                 if (history.bookmark[history.position] != "[object]"){
  1086.                         if (r.moveToBookmark(history.bookmark[history.position])){
  1087.                                 r.collapse(false);
  1088.                                 r.select();
  1089.                         }
  1090.                 }
  1091.         }
  1092. }
  1093. // End Undo / Redo Fix
  1094.  
  1095. // 工具栏事件发生
  1096. function doToolbar(){
  1097.         if (bEditMode){
  1098.                 saveHistory();
  1099.         }
  1100. }
downloadEditor.js Source code - Download Jie Yang v0.6.3 article system Source code
Related Source Codes/Software:
Jilin classification information release system v5.0 trial version - A ready-made classifieds site publishing system, h... 2016-09-21
Linyi CMS v6.5 market classification information - A. supply and demand information function: informa... 2016-09-21
Tesco discount net SQL version - And presentations, faster. 2016-09-21
- electronic enterprise website management system In a fully functional version - Super suitable for enterprise agents build a corpo... 2016-09-21
Rio mesh network hard disk system v3.0 - System functions: 1, increase the progress of Asp... 2016-09-21
Classified information network business in suzhou - Overall module: classification of supply and deman... 2016-09-21
NPOINT virtual host v1.7.0 formal version management system - The system main function is introduced 2016-09-21
IDC sales web site - Beautiful IDC sales web site source code 2016-09-21
Oo 126 CMS movie site system - This procedure ASP + ACC/ASP + SQL, using new kern... 2016-09-21
Pcook CMS bubble guest v3.0 SDCMS version - Developed by Asp+Access, and meet the needs of sma... 2016-09-21
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top