从FCKEDITOR到ckeditor(二) 撰写自定义对话框,增加数学公式(与webEq的结合)

ckeditor3.2.1

自定义对话框+自定义工具按钮,增加数学公式(与webEq的结合)

 

关键字:ckeditor,webeq,自定义按钮

 

说明:给ckeditor增加一个按钮,可以在弹出的对话框中输入webeq的数学公式并且插入到当前编辑器中

 

版本:webeq3.7+ ckeditor3.2.1

测试环境:IE8,IE6.0正常

fireFox3.5下公式显示不出来(哪位达人解决此问题,请email告之,谢谢)

 

[本文禁止转载,如有需稿请联系本人iuprg,[email protected]]

 

有幸要用编辑器并且要求可以插入公式,就琢磨了琢磨,旧版的Fckeditor是指望不上了,代码完全不一样。

下面我把经过简明扼要地叙述一下,和大家一起分享,也算是抛砖引玉吧。

 

步骤:

----------------------------------------------------------

打开ckeditor目录 plugins,新建立一个math目录
里面的文件是:
blank.html//空白
math.html//对话框里iframe里调用的的主文件
plugin.js//插件加载的脚本,主要是创建公式输入对话框以及插入新公式到editor中的脚本
打开images目录,将一个显示按钮的图标math.gif(1kb,17*14大小)放入。

 

[本文禁止转载,如有需稿请联系本人iuprg,[email protected]]

 

以下为实现代码(部分代码略去)

 

[xhtml] view plain copy
  1. -----------blank.html---  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >  
  3. <html xmlns="http://www.w3.org/1999/xhtml">  
  4. <head>  
  5. <title>Button Properties</title>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  7. </head>  
  8. <body>  
  9. <center>  
  10. 正在加载公式</center>  
  11. </body>  
  12. </html>  
  13. -------------------------  

 

---------math.html-------

[javascript] view plain copy
  1. ---------math.html-------  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >  
  3. <html xmlns="http://www.w3.org/1999/xhtml">  
  4. <head>  
  5. <title>Button Properties</title>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  7. <mce:script type="text/javascript"><!--  
  8.         var CKE=window.parent.CKEDITOR;  
  9.         //author iuprg,[email protected] 支持ie8,firefox3  
  10.         var getMathValue=function(spanHtml)  
  11.        {    
  12.      if (!spanHtml||spanHtml=='')return "";  
  13.      try{  
  14.      var d=CKE.dom.element.createFromHtml(spanHtml);  
  15.         if (!d) return "";  
  16.         if (d.getChildCount()<=0)return "";  
  17.         var _eq_   = /eq=(['"])[^'"]*/1/s*/ig;  
  18.         var _value_= /(['"])[^'"]*/1/s*/ig;  
  19.         //...处理公式,以便显示出来   
  20.             var result=_value[0].substring(1,_value[0].length-2);   
  21.           return result;  
  22.       }  
  23.        return "";  
  24.     }catch(e){  
  25.           return "";  
  26.     }  
  27.   }//function  
  28.      
  29.     
  30. var oEditor= CKE.dialog.getCurrent().getParentEditor();  
  31. var oDOM =  oEditor.document;  
  32. var oSelection = CKE.dialog.getCurrent().getSelectedElement();  
  33. var DisplayHtml;  
  34. var srrval;  
  35. var spanval;  
  36. var mathval;  
  37. var loadSelection=function(){  
  38.     var _html;  
  39.     try{  
  40.     _html=oSelection.$.outerHTML;//获得当前公式的值  
  41.         var _value=getMathValue(_html);  
  42.         document._webeq_popup.setMathML(_value);  
  43.     }catch(e){};  
  44. }  
  45. // --></mce:script>  
  46. </head>  
  47. <body style="overflow: hidden;margin:0;border:0" mce_style="overflow: hidden;margin:0;border:0" >  
  48. <applet  codebase="/webeq/"   
  49. code="webeq3.editor.InputControl" width="690" height="200"  
  50. name="_webeq_popup" id="_webeq_popup">  
  51. <param name="useslibraryversion" value="3,7,0,0">  
  52. <param name="eq" value=""/>  
  53. </applet>  
  54. <mce:script language='javascript'><!--  
  55. loadSelection();  
  56. // --></mce:script>   
  57. </body>  
  58. </html>  

 

 

------------plugin.js--------------------------

[javascript] view plain copy
  1. /**本插件面向ckeditor3.2.1*/  
  2. /**详细API参考 http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html */  
  3. /**author:iuprg [email protected]*/  
  4. CKEDITOR.plugins.add('math',  
  5. {requires: ['dialog','fakeobjects'],  
  6. init : function( editor )  
  7. {  
  8.  editor.addCss(  
  9.         'img.cke_mediaembed' + //这个不需要  
  10.         '{' +  
  11.           '' +  
  12.           '' +  
  13.           'background-position: center center;' +  
  14.           'border: 1px solid #a9a9a9;' +  
  15.           'width: 80px;' +  
  16.           'height: 80px;' +  
  17.         '}'  
  18.         );  
  19. // 增加按钮  
  20. editor.addCommand('math'new CKEDITOR.dialogCommand( 'math' ) );  
  21. editor.ui.addButton('EMath',  
  22. {  
  23. label : "EMath",  
  24. command : 'math',  
  25. icon: this.path + 'images/math.gif'  
  26. } );  
  27. CKEDITOR.dialog.add( 'math'function( editor )  
  28. {  
  29. return {  
  30. title:'公式',  
  31. minWidth: 700,  
  32. minHeight: 230,  
  33. contents:[  
  34. {  
  35. id : 'tab1',  
  36. label : 'First Tab',  
  37. title : 'First Tab',  
  38. elements :/**页面元素*/  
  39. [  
  40. {  
  41. id : 'pagetitle',  
  42. width:'100%',  
  43. type : 'html'//这里是按钮按下以后调用显示的页面,这里使用一个自定义html  
  44. html : '<DIV id="div1" STYLE="WIDTH:690;height:200;background-color:#ff11cc" mce_STYLE="WIDTH:690;height:200;background-color:#ff11cc">'+  
  45.              '<IFRAME NAME="math_frame" src="../ckeditor/plugins/math/blank.html" mce_src="ckeditor/plugins/math/blank.html"   
  46.   
  47. frameborder="0" scrolling="no" height=200 style="width:100%;height:200px"></IFRAME>'+  
  48.              '</DIV>'  
  49. },{  
  50.     id:'_dialog',  
  51.     type:'text',  
  52.     hidden:true  
  53.     }  
  54. ]  
  55. }  
  56. ],  
  57. onOk : function()/**确定按钮:按下后将公式插入到ckeditor*/  
  58. {  
  59.         var setMathValue=function(spanHtml,mathValue)  
  60.     {       var d=CKEDITOR.dom.element.createFromHtml(spanHtml);  
  61.         var e=CKEDITOR.dom.element.createFromHtml(d.getChildren().getItem(0).getOuterHtml());  
  62.                  ...  
  63.                  ...           
  64.             return _html;  
  65.         }return spanHtml;  
  66.      }//function    
  67.        
  68.    var oSelection = this.getSelectedElement();  
  69.    var oFakeImage;  
  70.   if(oSelection!=null)  
  71.     {  oFakeImage=oSelection;  
  72.        if (oFakeImage){  
  73.        //获取公式  
  74.          try  
  75.          {  
  76.          //选中公式  
  77.                             }  
  78.           }catch(e)  
  79.            {  
  80.            };  
  81.          }  
  82.     }  
  83.    
  84.   /**形成公式*/   
  85.   var hidden="";   
  86.   var mml_string ="";  
  87.   var oMath;  
  88.   if (CKEDITOR.env.ie){oMath=document.math_frame._webeq_popup;}else{  
  89.      oMath=document.all.math_frame.contentDocument._webeq_popup;  
  90.   }  
  91.     try  
  92.     {  
  93.          mml_string = oMath.getMathML();//显示当前的内容  
  94.     }  
  95.     catch(e)  
  96.     {}  
  97.     if ( mml_string.length == 0 )  
  98.     {  
  99.         alert( '公式编辑器初始化错误,请检查浏览器安全设置!') ;  
  100.         return false ;  
  101.     }  
  102.   
  103.     var hidden = "  ";  
  104.     //这里可以调用undo  
  105.     //处理以及过滤         
  106.     DisplayHtml="形成公式..."  
  107.   var ooo=CKEDITOR.dom.element.createFromHtml(DisplayHtml);  
  108.   editor.focus();  
  109.   editor.insertHtml(hidden);   
  110.   //插入当前元素到ckeditor     
  111.   editor.insertElement(ooo);  
  112.   editor.insertHtml(hidden);        
  113.     
  114.      
  115. },  
  116. onLoad: function(){  
  117.     // to do  
  118.     
  119. },  
  120. onShow:function(){  
  121.    
  122.     if ((CKEDITOR.env.ie)){  
  123.            document.math_frame.location.href='../ckeditor/plugins/math/math.html';   
  124.    }else{  
  125.       
  126.      document.all.math_frame.src='../ckeditor/plugins/math/math.html';   
  127.    }  
  128. }  
  129.   
  130. };  
  131. } );  
  132. }  
  133. } );  

 

给config.js配置公式按钮

config.toolbar=[[ ......     ['Maximize','ShowBlocks','-','About'],['EMath']]; //EMath即是公式

效果图

作者:iuprg,[email protected]

 

 

从FCKEDITOR到ckeditor(二) 撰写自定义对话框,增加数学公式(与webEq的结合)

你可能感兴趣的:(从FCKEDITOR到ckeditor(二) 撰写自定义对话框,增加数学公式(与webEq的结合))