214 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| layui.define(['jquery'],function (exports) {
 | ||
|     var $ = layui.$
 | ||
| 
 | ||
|     var modFile = layui.cache.modules['tinymce'];
 | ||
| 
 | ||
|     var modPath = modFile.substr(0, modFile.lastIndexOf('.'))
 | ||
| 
 | ||
|     var setter = layui.setter || {}
 | ||
| 
 | ||
|     var response = setter.response || {}
 | ||
| 
 | ||
|     var plugin_filename = 'tinymce.min.js'//插件路径,不包含base_url部分
 | ||
| 
 | ||
|     var settings = {
 | ||
|         base_url: modPath
 | ||
|         , images_upload_url: ''//图片上传接口,可在option传入,也可在这里修改,option的值优先
 | ||
|         , language: 'zh_CN'//语言,可在option传入,也可在这里修改,option的值优先
 | ||
|         , response: {//后台返回数据格式设置
 | ||
|             statusName: response.statusName || 'code'//返回状态字段
 | ||
|             , msgName: response.msgName || 'msg'//返回消息字段
 | ||
|             , dataName: response.dataName || 'data'//返回的数据
 | ||
|             , statusCode: response.statusCode || {
 | ||
|                 ok: 0//数据正常
 | ||
|             }
 | ||
|         }
 | ||
|         , success: function (res, succFun, failFun) {//图片上传完成回调 根据自己需要修改
 | ||
|             if (res[this.response.statusName] == this.response.statusCode.ok) {
 | ||
|                 succFun(res[this.response.dataName]);
 | ||
|             } else {
 | ||
|                 failFun(res[this.response.msgName]);
 | ||
|             }
 | ||
|         }
 | ||
|     };
 | ||
| 
 | ||
|     //  ----------------  以下代码无需修改  ----------------
 | ||
| 
 | ||
|     var t = {};
 | ||
| 
 | ||
|     //初始化
 | ||
|     t.render = function (options,callback) {
 | ||
| 
 | ||
|         initTinymce();
 | ||
| 
 | ||
|         var option = initOptions(options,callback)
 | ||
| 
 | ||
|         ,edit = t.get(option.elem);
 | ||
| 
 | ||
|         if (edit) {
 | ||
|             edit.destroy();
 | ||
|         }
 | ||
| 
 | ||
|         tinymce.init(option);
 | ||
| 
 | ||
|         return t.get(option.elem);
 | ||
|     };
 | ||
| 
 | ||
|     t.init = t.render
 | ||
| 
 | ||
|     // 获取ID对应的编辑器对象
 | ||
|     t.get = function (elem) {
 | ||
| 
 | ||
|         initTinymce();
 | ||
| 
 | ||
|         if (elem && /^#|\./.test(elem)) {
 | ||
|             var id = elem.substr(1);
 | ||
|             var edit = tinymce.editors[id];
 | ||
|             return edit
 | ||
|         } else {
 | ||
|             return false;
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //重载
 | ||
|     t.reload = function (elem, option, callback) {
 | ||
|            
 | ||
|         var options = {}
 | ||
| 
 | ||
|         if(typeof elem == 'string'){
 | ||
|             option.elem = elem
 | ||
|             options = $.extend({}, option)
 | ||
|         } else if (typeof elem == 'object' && typeof elem.elem == 'string'){
 | ||
|             options = $.extend({}, elem)
 | ||
|             callback = option
 | ||
|         } 
 | ||
| 
 | ||
|         var optionCache = layui.sessionData('layui-tinymce')[options.elem]
 | ||
| 
 | ||
|         delete optionCache.init_instance_callback
 | ||
| 
 | ||
|         $.extend(optionCache,options)
 | ||
| 
 | ||
|         return t.render(optionCache,callback)
 | ||
|     }
 | ||
| 
 | ||
|     function initOptions(option,callback) {
 | ||
|         
 | ||
|         var admin = layui.admin || {}
 | ||
| 
 | ||
|         var form = option.form || {}
 | ||
| 
 | ||
|         var file_field = form.name || 'edit' //文件字段名
 | ||
| 
 | ||
|         var form_data = form.data || {} //其他表单数据 {key:value, ...}
 | ||
| 
 | ||
|         option.suffix= isset(option.suffix) ? option.suffix : (plugin_filename.indexOf('.min')>-1 ? '.min' : '')
 | ||
| 
 | ||
|         option.base_url = isset(option.base_url) ? option.base_url : settings.base_url
 | ||
| 
 | ||
|         option.language = isset(option.language) ? option.language : settings.language
 | ||
| 
 | ||
|         option.selector = isset(option.selector) ? option.selector : option.elem
 | ||
| 
 | ||
|         option.quickbars_selection_toolbar = isset(option.quickbars_selection_toolbar) ? option.quickbars_selection_toolbar : 'cut copy | bold italic underline strikethrough '
 | ||
| 
 | ||
|         option.plugins = isset(option.plugins) ? option.plugins : 'code kityformula-editor quickbars print preview searchreplace autolink fullscreen image link media codesample table charmap hr advlist lists wordcount imagetools indent2em';
 | ||
| 
 | ||
|         option.toolbar = isset(option.toolbar) ? option.toolbar : 'code undo redo | kityformula-editor forecolor backcolor bold italic underline strikethrough | indent2em alignleft aligncenter alignright alignjustify outdent indent | link bullist numlist image table codesample | formatselect fontselect fontsizeselect';
 | ||
| 
 | ||
|         option.resize = isset(option.resize) ? option.resize : false;
 | ||
| 
 | ||
|         option.elementpath = isset(option.elementpath) ? option.elementpath : false;
 | ||
| 
 | ||
|         option.branding = isset(option.branding) ? option.branding : false;
 | ||
| 
 | ||
|         option.contextmenu_never_use_native = isset(option.contextmenu_never_use_native) ? option.contextmenu_never_use_native : true;
 | ||
| 
 | ||
|         option.menubar = isset(option.menubar) ? option.menubar : 'file edit insert format table';
 | ||
| 
 | ||
|         option.menu = isset(option.menu) ? option.menu : {
 | ||
|             file: {title: '文件', items: 'newdocument | print preview fullscreen | wordcount'},
 | ||
|             edit: {title: '编辑', items: 'undo redo | cut copy paste pastetext selectall | searchreplace'},
 | ||
|             format: {
 | ||
|                 title: '格式',
 | ||
|                 items: 'bold italic underline strikethrough superscript subscript | formats | forecolor backcolor | removeformat'
 | ||
|             },
 | ||
|             table: {title: '表格', items: 'inserttable tableprops deletetable | cell row column'},
 | ||
|         };
 | ||
| 
 | ||
|         option.init_instance_callback =isset(option.init_instance_callback) ? option.init_instance_callback : function(inst) {
 | ||
|             if(typeof callback == 'function') callback(option,inst)
 | ||
|         };
 | ||
| 
 | ||
|         option.images_upload_url = isset(option.images_upload_url) ? option.images_upload_url : settings.images_upload_url;
 | ||
| 
 | ||
|         option.images_upload_handler = isset(option.images_upload_handler) ? option.images_upload_handler : function(blobInfo, succFun, failFun) {
 | ||
|             if(isEmpty(option.images_upload_url)){
 | ||
|                 failFun("上传接口未配置");
 | ||
|                 return console.error('images_upload_url未配置');
 | ||
|             }
 | ||
|             var formData = new FormData();
 | ||
|             formData.append(file_field, blobInfo.blob());
 | ||
|             if(typeof form_data == 'object'){
 | ||
|                 for(var key in form_data){
 | ||
|                     formData.append(key, form_data[key]);
 | ||
|                 }
 | ||
|             }
 | ||
|             var ajaxOpt = {
 | ||
|                 url: option.images_upload_url,
 | ||
|                 dataType: 'json',
 | ||
|                 type: 'POST',
 | ||
|                 data: formData,
 | ||
|                 processData: false,
 | ||
|                 contentType: false,
 | ||
|                 success: function (res) {
 | ||
|                     settings.success(res, succFun, failFun)
 | ||
|                 },
 | ||
|                 error: function (res) {
 | ||
|                     failFun("网络错误:" + res.status);
 | ||
|                 }
 | ||
|             };
 | ||
|             if (typeof admin.req == 'function') {
 | ||
|                 admin.req(ajaxOpt);
 | ||
|             } else {
 | ||
|                 $.ajax(ajaxOpt);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         layui.sessionData('layui-tinymce',{
 | ||
|             key:option.selector,
 | ||
|             value:option
 | ||
|         })
 | ||
|         return option
 | ||
|     }
 | ||
| 
 | ||
|     function initTinymce() {
 | ||
|         if (typeof tinymce == 'undefined') {
 | ||
|             $.ajax({//获取插件
 | ||
|                 url: settings.base_url + '/' + plugin_filename,
 | ||
|                 dataType: 'script',
 | ||
|                 cache: true,
 | ||
|                 async: false,
 | ||
|             });
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     function isset(value) {
 | ||
|         return typeof value !== 'undefined' && value !== null
 | ||
|     }
 | ||
| 
 | ||
|     function isEmpty(value) {
 | ||
|         if(typeof value === 'undefined' || value === null|| value === ''){
 | ||
|             return true
 | ||
|         } else if (value instanceof Array && value.length === 0){
 | ||
|             return true
 | ||
|         } else if (typeof value === 'object' && Object.keys(value).length === 0){
 | ||
|             return true
 | ||
|         }
 | ||
|         return false
 | ||
|     }
 | ||
| 
 | ||
|     exports('tinymce', t);
 | ||
| 
 | ||
| });
 |