layui.define(['layer', 'upload'], function(exports){ var $ = layui.jquery ,layer = layui.layer ,device = layui.device(); //阻止IE7以下访问 if(device.ie && device.ie < 8){ layer.alert('如果您非得使用 IE 浏览器访问社区,那么请使用 IE8+'); } const image_upload_handler = (blobInfo, progress) => new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.withCredentials = false; xhr.open('POST', taonyUploadImgage); xhr.upload.onprogress = (e) => { progress(e.loaded / e.total * 100); }; xhr.onload = () => { if (xhr.status === 403) { reject({ message: 'HTTP Error: ' + xhr.status, remove: true }); return; } if (xhr.status < 200 || xhr.status >= 300) { reject('HTTP Error: ' + xhr.status); return; } const json = JSON.parse(xhr.responseText); if (!json || typeof json.location != 'string') { //reject('Invalid JSON: ' + xhr.responseText); // layer.alert(json.msg,{shift: 6}); reject(json.msg); return; } resolve(json.location); }; xhr.onerror = () => { reject('Image upload failed due to a XHR Transport error. Code: ' + xhr.status); }; const formData = new FormData(); formData.append('file', blobInfo.blob(), blobInfo.filename()); xhr.send(formData); }); // 文件上传 const file_picker_callback = function(callback, value, meta) { //文件分类 var filetype='.pdf, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mp3, .mp4'; //后端接收上传文件的地址 var upurl=taonyUploadUrl; //为不同插件指定文件类型及后端地址 switch(meta.filetype){ case 'image': filetype='.jpg, .jpeg, .png, .gif'; upurl=taonyUploadImgage; break; case 'media': filetype='.mp3, .mp4'; upurl=taonyUploadVideo; break; case 'audio': filetype='.zip, .rar, .7z'; upurl=taonyUploadZip default: } //模拟出一个input用于添加本地文件 var input = document.createElement('input'); input.setAttribute('type', 'file'); input.setAttribute('accept', filetype); input.click(); input.onchange = function() { var file = this.files[0]; var xhr, formData; console.log(file.name); xhr = new XMLHttpRequest(); xhr.withCredentials = false; xhr.open('POST', upurl); xhr.onload = function() { var json; if (xhr.status != 200) { //failure('HTTP Error: ' + xhr.status); layer.alert(xhr.status,{shift: 6}); return; } json = JSON.parse(xhr.responseText); if (!json || typeof json.location != 'string') { //failure('Invalid JSON: ' + xhr.responseText); layer.alert(json.msg,{shift: 6}); return; } //回调地址 callback(json.location); }; formData = new FormData(); formData.append('file', file, file.name ); xhr.send(formData); }; }; $('textarea#L_content').tinymce({ //selector: mytextareaid, language:'zh-Hans', branding: false, plugins: "lists advlist autolink anchor autosave visualblocks code charmap codesample directionality emoticons image insertdatetime link table media pagebreak wordcount preview axupimgs nonbreaking searchreplace bdmap dlink", //依赖lists插件 toolbar: "undo redo bold italic forecolor | alignleft aligncenter alignright alignjustify | underline link dlink | outdent indent bullist numlist | ormatselect code image media axupimgs | blockquote codesample ltr rtl | styles fontfamily fontsize lineheight searchreplace preview", icons_url: '/addons/taonyeditor/js/iconfont.js', // load icon pack autosave_prefix: "editor-autosave-{path}{query}-{id}-", autosave_restore_when_empty: true, //图片上传 relative_urls: false, convert_urls: false, image_dimensions: false, image_prepend_url: imagePrependUrl, images_upload_url: taonyUploadImgage, //images_upload_base_path: '/storage', images_upload_handler: image_upload_handler, file_picker_callback: file_picker_callback, codesample_languages: [ {text: 'HTML/XML', value: 'markup'}, {text: 'JavaScript', value: 'javascript'}, {text: 'CSS', value: 'css'}, {text: 'PHP', value: 'php'}, {text: 'Ruby', value: 'ruby'}, {text: 'Python', value: 'python'}, {text: 'Java', value: 'java'}, {text: 'C', value: 'c'}, {text: 'C#', value: 'csharp'}, {text: 'C++', value: 'cpp'} ], fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px', font_formats: '微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;', default_link_target: "_blank", link_assume_external_targets:true, //menubar:true, //移动端 mobile: { menubar: false, plugins: 'autosave lists autolink image media', toolbar: 'undo bold italic styles image media' }, // 同步 setup: function(editor){ editor.on('change',function(){ editor.save(); }); } }); var editor = { //dir: layui.cache.host + 'addons/', //模块路径 //Ajax json: function(url, data, success, options){ var that = this, type = typeof data === 'function'; if(type){ options = success success = data; data = {}; } options = options || {}; return $.ajax({ type: options.type || 'post', dataType: options.dataType || 'json', data: data, url: url, success: function(res){ if(res.status === 0) { success && success(res); } else { layer.msg(res.msg || res.code, {shift: 6}); options.error && options.error(); } }, error: function(e){ layer.msg('请求异常,请重试', {shift: 6}); options.error && options.error(e); } }); } // 转义了<> ' "" // ,escape: function(html){ // return String(html||'').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') // .replace(//g, '>').replace(/'/g, ''').replace(/"/g, '"'); // } ,escape: function(html){ return String(html||'').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&'); } //内容转义 ,content: function(content){ var util = editor ,item = faces; //支持的html标签 // var html = function(end){ // return new RegExp('\\n*\\|\\-'+ (end||'') +'(div|span|button|table|thead|p|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\-\\|\\n*', 'g'); // }; //XSS content = util.escape(content||'') //转义图片 .replace(/img\[([^\s]+?)\]/g, function(img){ return '
'; }) //转义@ .replace(/@(\S+)(\s+?|$)/g, '@$1$2') //转义脚本 .replace(/a(\(javascript:)(.+)(;*\))/g, 'a(javascript:layer.msg(\'非法脚本\');)') //转义链接 .replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g, function(str){ var href = (str.match(/a\(([\s\S]+?)\)\[/)||[])[1]; var text = (str.match(/\)\[([\s\S]*?)\]/)||[])[1]; if(!href) return str; var rel = /^(http(s)*:\/\/)\b(?!(\w+\.)*(sentsin.com|layui.com))\b/.test(href.replace(/\s/g, '')); return ''+ (text||href) +''; }) //转义横线 .replace(/\[hr\]\n*/g, '') .replace(/\n*\[\/pre\]\n*/g, ''); }) //转义引用 .replace(/\[quote\]([\s\S]*)\[\/quote\]\n*/g, function(str){ return str.replace(/\[quote\]\n*/g, '