zoukankan      html  css  js  c++  java
  • Tinymce group plugin

    本文介绍一个tinymce插件,用来组合显示下拉的按钮。基于4.x,不兼容3.x。

    以前

    配置toolbar功能按钮

    需要

        
        toolbar1: "code undo redo fullscreen"
        plugins: "code, fullscreen" 

        

    页面就能显示

    a

    配置 toolbar下拉的功能按钮集合,需要新写一个插件

    插件核心源码:

      
      editor.addButton('undoRedo', {
          type: 'menubutton',
          icon: 'mceIcon mce-i-undo',
           menu: [
              {
                  text: ed.getLang('Undo'),
                  icon: 'mceIcon mce-i-bold',
                  onclick: function() {
                      ed.execCommand('Undo');
                  }
              },
              {
                  text: ed.getLang('Redo'),
                  icon: 'mceIcon mce-i-redo',
                  onclick: function() {
                      ed.execCommand('Redo');
                  }
              }
          ]
    }); 

      

    就能看到

    e

     

     

    现在

    现在我们想要实现这类下拉功能菜单:

    c

    当然作为备选方案,可以使用使用上面提到的add menuButton的方式。不过这样的缺点是,我们如果需要5个下拉功能菜单,就不得不写五个插件,而都是重复的工作。

    当一件事开始重复的时候,就一定有方法可以让其变的简单。

    我们的解决办法是,通过一个插件,来配置多个下拉功能菜单。

    talk is chip, show you the code:

    使用配置:

      
      toolbar1: 'undo redo | group group group group group | fullscreen',
      group_set: [{
          icon: 'alignleft',
          buttons: 'alignleft,aligncenter,alignright',
          title: 'Align center'
      }, {
          icon: 'bullist',
          buttons: 'bullist,numlist',
          title: 'advanced.bullist_desc'
      }, {
          icon: 'indent',
          buttons: 'indent,outdent',
          title: 'advanced.indent_desc'
      }, {
          icon: 'subscript',
          buttons: 'superscript,subscript',
          title: 'advanced.sup_desc'
      },{
          icon: 'image',
          buttons: 'alitophotobank,image, aliphotobank',
          title: 'advanced.sup_desc'
    }];

      

    效果:

    c

    plugin group实现

    修改 toolbar 配置

    toolbar1配置了5个group占位符,但是addButton的第一个参数name一定要和toolbar上的占位配置一致,所以第一步是修改 settings.toolbar上的group占位符。

        
        // 修改 setting中toolbar上的group,group为group1,group2
        modifySettingToolbar: function(ed) {
            var index = 1;
            var settings = ed.settings;
            if(!settings.toolbar1 && !settings.toolbar2 && !settings.toolbar3) return false;

            var toolbar1 = settings.toolbar1.split(' '),
                toolbar2 = settings.toolbar2.split(' '),
                toolbar3 = settings.toolbar3.split(' ');

            [toolbar1, toolbar2, toolbar3].forEach(function(item) {
                for (var i = 0; i < item.length; i++) {
                    if(item[i] == 'group') {
                        item[i] = 'group' + index;
                        index ++;
                    }
                };
            });
            this.toolbarNum = index;
            settings.toolbar1 = toolbar1.join(' ');
            settings.toolbar2 = toolbar2.join(' ');
            settings.toolbar3 = toolbar3.join(' ');
     }, 

       

    插件核心代码

        //编辑器初始化后将初始化一个插件实例
        init: function(ed, url) {
            //在这个实例中我们保存一些编辑器的公用信息
            this.ed = ed;
            //保留配置信息
            this.settings = ed.settings;
            // 注意 4.x 没有3.x的 ed.onInit 方法
            ed.on('init', function() {
                this.createControl(ed);
            }.bind(this));
        },
        // 创建 group button
        createControl: function(ed) {
            var _set = this.settings;

            this.modifySettingToolbar(ed);
            for (var i = 1; i < this.toolbarNum; i++) {

                var _item = _set.group_set[i-1]; //获取多组信息
                if(!_item) return false;
                var _buttons = _item ? _item.buttons.split(',') : [],
                    subItem = [];

                for (var j = 0, l = _buttons.length; j < l; j++) {

                    btn  = _buttons[j] && _buttons[j].trim();

                    subItem.push({
                        //配置标题信息则需要考虑到语言和主题
                        text: ed.getLang(BUTTONS_MAP[btn] && BUTTONS_MAP[btn][0]),
                        //图标类自己创建的话则需要注意格式
                        icon: 'mceIcon mce-i-' + btn,
                        //执行的命令 闭包传入当前btn
                        onclick: (function(btn) {
                           var cmd = BUTTONS_MAP[btn] && BUTTONS_MAP[btn][1];
                           return function(e) {
                              ed.execCommand(cmd);
                           }
                       })(btn)
                    });
                }
                ed.addButton('group' + i, {
                    type: 'menubutton',
                    icon: _item.icon || '',
                    menu: subItem
                });
            }
            return false;
     }, 

       

    注释已经很详细了,就不讲解代码了。

    其中的BUTTONS_MAP是我配置的一个title&cmd的map:

    // 目前 plugin group支持的一些功能map

    var BUTTONS_MAP = {
      bold : ['Bold', 'Bold'],
      italic : ['Italic', 'Italic'],
      underline : ['Underline', 'Underline'],
      strikethrough : ['Strikethrough', 'Strikethrough'],
      alignleft : ['Align left', 'JustifyLeft'],
      aligncenter : ['Align center', 'JustifyCenter'],
      alignright : ['Align right', 'JustifyRight'],
      alignjustify : ['Alignment', 'JustifyFull'],
      bullist : ['Bullet list', 'InsertUnorderedList'],
      numlist : ['Numbered list', 'InsertOrderedList'],
      outdent : ['Decrease indent', 'Outdent'],
      indent : ['Increase indent', 'Indent'],
      cut : ['Cut', 'Cut'],
      copy : ['Copy', 'Copy'],
      paste : ['Paste', 'Paste'],
      undo : ['Undo', 'Undo'],
      redo : ['Redo', 'Redo'],
      link : ['Insert link', 'mceLink'],
      unlink : ['Remove link', 'unlink'],
      image : ['Insert image', 'mceImage'],
      removeformat : ['Clear formatting', 'mceCleanup'],
      help : ['help', 'mceHelp'],
      code : ['Source code', 'mceCodeEditor'],
      hr : ['Horizontal line', 'InsertHorizontalRule'],
      superscript : ['Subscript', 'subscript'],
      subscript : ['Superscript', 'superscript'],
      newdocument : ['New document', 'mceNewDocument'],
      blockquote : ['Blockquote', 'mceBlockQuote']
    }; 

     

    以上就是group的使用方式和源码解释,希望能帮到你。

    源码托管在github:  点我下载

  • 相关阅读:
    局域网中CSMA/CD协议的应用
    RIP及距离向量算法
    网桥与以太网交换机
    C++ String
    C++ Input & Output
    Shell Script(1)----variable compare
    python--内建函数(1)
    python--data type
    python--compile
    python--help
  • 原文地址:https://www.cnblogs.com/freestyle21/p/4457545.html
Copyright © 2011-2022 走看看