You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

232 lines
8.0 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// http://tinymce.ax-z.cn/ 中文文档
layui.define(['jquery'],function (exports) {
var $ = layui.$
var modFile = layui.cache.modules['tinymce'];
var modPath = modFile.substr(0, modFile.lastIndexOf('.'))
var setter = layui.setter || {}//兼容layuiadmin
var response = setter.response || {}//兼容layuiadmin
// ---------------- 以上代码无需修改 ----------------
var plugin_filename = 'tinymce.min.js'//插件路径不包含base_url部分
var settings = {
base_url: modPath
, images_upload_url: ''//图片上传接口可在option传入也可在这里修改option的值优先
, language: 'zh_CN'//语言可在option传入也可在这里修改option的值优先
, paste_data_images:true
, 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.indexOf("err@") != -1) {
return;
}
res = JSON.parse(res);
if (res[this.response.statusName] == this.response.statusCode.ok) {
var data = res[this.response.dataName];
data = replaceAll(data, "\/", "/");
var path = laybase;
if (path == "./")
path = "../";
else
path = "../" + path;
data = path+data;
succFun(data);
} 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 quickbars print preview searchreplace autolink fullscreen image link media codesample table charmap hr advlist lists wordcount imagetools indent2em paste';
option.toolbar = isset(option.toolbar) ? option.toolbar : 'code undo redo | forecolor backcolor bold italic underline strikethrough | indent2em alignleft aligncenter alignright alignjustify outdent indent | link bullist numlist image table codesample | formatselect fontselect fontsizeselect paste';
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);
});