使用JavaScript为Kindeditor自定义按钮增加Audio标签
来源: 阅读:1566 次 日期:2016-07-19 14:57:26
温馨提示: 小编为您整理了“使用JavaScript为Kindeditor自定义按钮增加Audio标签”,方便广大网友查阅!

这篇文章主要介绍了使用JavaScript为Kindeditor自定义按钮增加Audio标签的方法,KindEditor是一套开源的HTML可视化编辑器,需要的朋友可以参考下

流程比较简单,主要有以下步骤:

注册插件(按钮、Lang、htmlTags、插件脚本)

基于media插件代码修改

注册插件

首先,全局配置kindeditor参数:

KindEditor.lang({

 audio : 'MP3'

});

 KindEditor.options.htmlTags['audio'] = ['src','controls','autoplay','type'];

 KindEditor.options.htmlTags['source'] = ['src','controls','autoplay','type'];

在初始化编辑器的地方,配置按钮列表items参数,把

'audio'

放在合适的位置:

KindEditor.ready(function(K) {

editor = K.create('#info,#spread_info', {

  //其他配置省略...

  items : [

    'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste',

    'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',

    'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',

    'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',

    'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',

    'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',

     '|' ,'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',

    'anchor', 'link', 'unlink', '|', 'about','audio'

  ]

});

为了便于阅读,我把audio按钮放在最后,在 "帮助" 标签的后面。

为了让按钮能够显示,我们还需要指定一下css样式:

<style>

  .ke-icon-audio {

    background-position: 0px -528px;

    width: 16px;

    height: 16px;

  }

</style>

这里我图方便,直接用了自带的音视频按钮的图标,自定义图标请手动指定 background 样式属性。

最后,创建脚本

kindeditor/plugins/audio/audio.js

audio目录手动建立。

我们把

plugins/media/media.js

中的代码复制到audio.js里,然后着手修改。

修改media插件

主要是去掉一些无用的属性,如 宽、高、自动播放等,并修改插入代码的部分,手动构建 "audio" 标签的html代码。

/**

 * Created by admin on 15-5-6.

 */

KindEditor.plugin('audio', function(K) {

  var self = this, name = 'audio', lang = self.lang(name + '.'),

    allowMediaUpload = K.undef(self.allowMediaUpload, true),

    allowFileManager = K.undef(self.allowFileManager, false),

    formatUploadUrl = K.undef(self.formatUploadUrl, true),

    uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php');

  self.plugin.media = {

    edit : function() {

      var html = [

        '<div style="padding:20px;">',

        //url

        '<div class="ke-dialog-row">',

        '<label for="keUrl" style="width:60px;">MP3 URL</label>',

        '<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:160px;" />  ',

        '<input type="button" class="ke-upload-button" value="上传" />  ',

        '</div>',

        '</div>'

      ].join('');

      var dialog = self.createDialog({

          name : name,

          width : 450,

          height : 230,

          title : self.lang(name),

          body : html,

          yesBtn : {

            name : self.lang('yes'),

            click : function(e) {

              var url = K.trim(urlBox.val()),

                width = widthBox.val(),

                height = heightBox.val();

              if (url == 'http://' || K.invalidUrl(url)) {

                alert(self.lang('invalidUrl'));

                urlBox[0].focus();

                return;

              }

              if (!/^\d*$/.test(width)) {

                alert(self.lang('invalidWidth'));

                widthBox[0].focus();

                return;

              }

              if (!/^\d*$/.test(height)) {

                alert(self.lang('invalidHeight'));

                heightBox[0].focus();

                return;

              }

              var html = '<p><audio src="'+url+'" controls="controls"></audio><br/></p>';

              self.insertHtml(html).hideDialog().focus();

            }

          }

        }),

        div = dialog.div,

        urlBox = K('[name="url"]', div),

        viewServerBtn = K('[name="viewServer"]', div),

        widthBox = K('[name="width"]', div),

        heightBox = K('[name="height"]', div),

        autostartBox = K('[name="autostart"]', div);

      urlBox.val('http://');

      if (allowMediaUpload) {

        var uploadbutton = K.uploadbutton({

          button : K('.ke-upload-button', div)[0],

          fieldName : 'imgFile',

          url : K.addParam(uploadJson, 'dir=audio'),

          afterUpload : function(data) {

            dialog.hideLoading();

            if (data.error === 0) {

              var url = data.url;

              if (formatUploadUrl) {

                url = K.formatUrl(url, 'absolute');

              }

              urlBox.val(url);

              if (self.afterUpload) {

                self.afterUpload.call(self, url);

              }

              alert(self.lang('uploadSuccess'));

            } else {

              alert(data.message);

            }

          },

          afterError : function(html) {

            dialog.hideLoading();

            self.errorDialog(html);

          }

        });

        uploadbutton.fileBox.change(function(e) {

          dialog.showLoading(self.lang('uploadLoading'));

          uploadbutton.submit();

        });

      } else {

        K('.ke-upload-button', div).hide();

      }

      if (allowFileManager) {

        viewServerBtn.click(function(e) {

          self.loadPlugin('filemanager', function() {

            self.plugin.filemanagerDialog({

              viewType : 'LIST',

              dirName : 'media',

              clickFn : function(url, title) {

                if (self.dialogs.length > 1) {

                  K('[name="url"]', div).val(url);

                  self.hideDialog();

                }

              }

            });

          });

        });

      } else {

        viewServerBtn.hide();

      }

      var img = self.plugin.getSelectedMedia();

      if (img) {

        var attrs = K.mediaAttrs(img.attr('data-ke-tag'));

        urlBox.val(attrs.src);

        widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0);

        heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0);

        autostartBox[0].checked = (attrs.autostart === 'true');

      }

      urlBox[0].focus();

      urlBox[0].select();

    },

    'delete' : function() {

      self.plugin.getSelectedMedia().remove();

    }

  };

  self.clickToolbar(name, self.plugin.media.edit);

});

至此,整个插件基本结束。

需要注意的是,上传文件用的是通用的配置uploadJson参数,但会在上传的时候自动添加一个get参数 "dir=audio" ,以便后台识别:

url : K.addParam(uploadJson, 'dir=audio'),

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map