使用JavaScript为Kindeditor自定义按钮增加Audio标签
流程比较简单,主要有以下步骤:
- 注册插件(按钮、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代码。
/** *Createdbyadminon15-5-6. */ KindEditor.plugin('audio',function(K){ varself=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(){ varhtml=[ '<divstyle="padding:20px;">', //url '<divclass="ke-dialog-row">', '<labelfor="keUrl"style="width:60px;">MP3URL</label>', '<inputclass="ke-input-text"type="text"id="keUrl"name="url"value=""style="width:160px;"/> ', '<inputtype="button"class="ke-upload-button"value="上传"/> ', '</div>', '</div>' ].join(''); vardialog=self.createDialog({ name:name, width:450, height:230, title:self.lang(name), body:html, yesBtn:{ name:self.lang('yes'), click:function(e){ varurl=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; } varhtml='<p><audiosrc="'+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){ varuploadbutton=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){ varurl=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(); } varimg=self.plugin.getSelectedMedia(); if(img){ varattrs=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'),