新增 code 的 code 属性及优化 若干小问题

This commit is contained in:
贤心 2023-09-15 13:54:40 +08:00
parent d17e68ab54
commit be04e89929

View File

@ -25,7 +25,6 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
ELEM_LINE: 'layui-code-line',
ELEM_LINE_NUM: 'layui-code-line-number',
ELEM_LN_MODE: 'layui-code-ln-mode',
CDDE_DATA_CODE: 'LayuiCodeDataCode',
CDDE_DATA_CLASS: 'LayuiCodeDataClass',
LINE_RAW_WIDTH: 45, // 行号初始宽度,需与 css 保持一致
};
@ -113,11 +112,8 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
// 未使用 codeRender 时若开启了预览,则强制开启编码
options.encode = (options.encode || options.preview) && !options.codeRender;
// 最终显示的代码
var finalCode;
// 获得初始 code
var rawCode = othis.data(CONST.CDDE_DATA_CODE) || function(){
options.code = options.code || function(){
var arr = [];
var textarea = othis.children('textarea');
@ -131,12 +127,9 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
arr.push(trim(othis.html()));
}
return arr;
return arr.join('');
}();
// 记录初始 code
othis.data(CONST.CDDE_DATA_CODE, rawCode);
// 创建 code 行结构
var createCode = function(html) {
// codeRender
@ -171,13 +164,21 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
};
};
// 原始 code
var rawCode = options.code;
// 最终 code
var finalCode = function(code) {
return typeof options.codeParse === 'function' ?
options.codeParse(code, options) :
code;
};
// 仅重载 code
if (mode === 'reloadCode') {
(function(html) {
var rst = createCode(html);
othis.children('.layui-code-wrap').html(rst.html);
})(rawCode.join(''))
return ret;
return othis.children('.layui-code-wrap').html(
createCode(finalCode(rawCode)).html
), ret;
}
// 自增索引
@ -195,21 +196,13 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
othis.data(CONST.CDDE_DATA_CLASS, othis.attr('class'));
}
// code
var html = finalCode = rawCode.join('');
// 外部重新解析 code
if(typeof options.codeParse === 'function'){
html = finalCode = options.codeParse(html);
}
// 工具栏
var tools = {
copy: {
className: 'file-b',
title: ['复制代码'],
event: function(obj){
var code = util.unescape(finalCode);
var code = util.unescape(finalCode(options.code));
// 写入剪切板
lay.clipboard.writeText({
@ -282,19 +275,19 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
var classNameFull = 'layui-icon-'+ this.className;
var classNameRestore = 'layui-icon-screen-restore';
var title = this.title;
var html = $('html,body');
var htmlElem = $('html,body');
var ELEM_SCROLLBAR_HIDE = 'layui-scrollbar-hide';
if(el.hasClass(classNameFull)){
elemView.addClass(CONST.ELEM_FULL);
el.removeClass(classNameFull).addClass(classNameRestore);
el.attr('title', title[1]);
html.addClass(ELEM_SCROLLBAR_HIDE);
htmlElem.addClass(ELEM_SCROLLBAR_HIDE);
} else {
elemView.removeClass(CONST.ELEM_FULL);
el.removeClass(classNameRestore).addClass(classNameFull);
el.attr('title', title[0]);
html.removeClass(ELEM_SCROLLBAR_HIDE);
htmlElem.removeClass(ELEM_SCROLLBAR_HIDE);
}
}
},
@ -303,7 +296,7 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
title: ['在新窗口预览'],
event: function(obj){
util.openWin({
content: finalCode
content: finalCode(options.code)
});
}
}
@ -329,8 +322,8 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
elem: oi,
type: type,
options: options, // 当前属性选项
rawCode: rawCode.join(''), // 原始 code
finalCode: util.unescape(finalCode) // 最终 code
rawCode: options.code, // 原始 code
finalCode: util.unescape(finalCode(options.code)) // 最终 code
};
// 内部 tools event
@ -384,32 +377,33 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
}
// 执行预览
var run = function(thisItemBody){
var runPreview = function(thisItemBody){
var iframe = thisItemBody.children('iframe')[0];
// 是否 iframe 方式预览
if(isIframePreview && iframe){
iframe.srcdoc = finalCode;
iframe.srcdoc = finalCode(options.code);
} else {
thisItemBody.html(rawCode.join(''));
thisItemBody.html(options.code);
}
// 回调的返回参数
var params = {
container: thisItemBody,
render: function(){
form.render(thisItemBody.find('.layui-form'));
element.render();
}
};
// 当前实例预览完毕后的回调
setTimeout(function(){
typeof options.done === 'function' && options.done(params);
typeof options.done === 'function' && options.done({
container: thisItemBody,
options: options,
render: function(){
form.render(thisItemBody.find('.layui-form'));
element.render();
}
});
},3);
};
if(layout[0] === 'preview'){
elemPreviewView.addClass(CONST.ELEM_SHOW);
othis.before(elemPreviewView);
run(elemPreviewView);
runPreview(elemPreviewView);
} else {
othis.addClass(CONST.ELEM_SHOW).after(elemPreviewView);
}
@ -429,7 +423,7 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
thisItemBody.addClass(CONST.ELEM_SHOW);
if($this.attr('lay-id') === 'preview'){
run(thisItemBody);
runPreview(thisItemBody);
}
setCodeLayout();
@ -461,10 +455,10 @@ layui.define(['lay', 'util', 'element', 'form'], function(exports){
].join(' '));
}
// 转义 HTML 标签
if(options.encode) html = util.escape(html); // 编码
var createCodeRst = createCode(html);
// 获取 code 行结构
var createCodeRst = createCode(
options.encode ? util.escape(finalCode(rawCode)) : rawCode // 是否编码
);
var lines = createCodeRst.lines;
// 插入 code