116 lines
4.7 KiB
JavaScript
116 lines
4.7 KiB
JavaScript
// 转义聊天内容中的特殊字符
|
|
function replaceContent(content) {
|
|
// 支持的html标签
|
|
var html = function (end) {
|
|
return new RegExp('\\n*\\[' + (end || '') + '(pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*', 'g');
|
|
};
|
|
content = (content || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
|
|
.replace(/</g, '<').replace(/>/g, '>').replace(/'/g, ''').replace(/"/g, '"') // XSS
|
|
.replace(/@(\S+)(\s+?|$)/g, '@<a href="javascript:;">$1</a>$2') // 转义@
|
|
|
|
.replace(/face\[([^\s\[\]]+?)\]/g, function (face) { // 转义表情
|
|
var alt = face.replace(/^face/g, '');
|
|
return '<img alt="' + alt + '" title="' + alt + '" src="' + faces[alt] + '">';
|
|
})
|
|
.replace(/img\[([^\s]+?)\]/g, function (img) { // 转义图片
|
|
return '<img class="layui-mylink-photos" onclick="showBigPic(this)" id="" payment="" src="' + img.replace(/(^img\[)|(\]$)/g, '') + '" width="100px" height="100px">';
|
|
})
|
|
.replace(/file\([\s\S]+?\)\[[\s\S]*?\]/g, function (str) { // 转义文件
|
|
var href = (str.match(/file\(([\s\S]+?)\)\[/) || [])[1];
|
|
var text = (str.match(/\)\[([\s\S]*?)\]/) || [])[1];
|
|
if (!href) return str;
|
|
return '<a class="layui-mylink-file" href="' + href + '" download target="_blank"><i class="layui-icon"></i><cite>' + (text || href) + '</cite></a>';
|
|
})
|
|
.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;
|
|
return '<a href="' + href + '" target="_blank">' + (text || href) + '</a>';
|
|
}).replace(html(), '\<$1 $2\>').replace(html('/'), '\</$1\>') // 转移HTML代码
|
|
.replace(/\n/g, '<br>') // 转义换行
|
|
|
|
return content;
|
|
};
|
|
|
|
// 表情替换
|
|
var faces = function () {
|
|
var alt = getFacesIcon(), arr = {};
|
|
layui.each(alt, function (index, item) {
|
|
arr[item] = '/static/service/js/layui/images/face/' + index + '.png';
|
|
});
|
|
return arr;
|
|
}();
|
|
|
|
// 表情对应数组
|
|
function getFacesIcon() {
|
|
return ["[白眼]", "[抱歉]", "[崩溃]", "[啵一个]", "[不理你了]", "[不要]", "[呲牙]", "[打呼]", "[担心]", "[得意]", "[发抖]",
|
|
"[犯错]", "[愤怒]", "[感冒]", "[鬼脸]", "[汗]", "[吼吼]", "[焦虑]", "[惊呆]", "[囧]", "[可爱]", "[可怕]",
|
|
"[冷汗]", "[冷漠]", "[脸红]", "[流鼻涕]", "[流口水]", "[流泪]", "[冒金星]", "[么么哒]", "[难受]", "[气死了]", "[色]", "[傻笑]", "[生气]",
|
|
"[使眼色]", "[是吗]", "[睡]", "[思考]", "[天使]", "[调皮]", "[偷笑]", "[吐舌头]", "[微笑]", "[委屈]", "[无语]", "[嫌弃]", "[笑哭]",
|
|
"[笑死了]"
|
|
]
|
|
}
|
|
|
|
/**
|
|
* 生成uuid
|
|
* @param {*} prefix 前缀
|
|
*/
|
|
function uuid(prefix = '') {
|
|
// 生成随机值
|
|
function S4() {
|
|
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
|
}
|
|
var id = prefix + (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
|
|
return id;
|
|
}
|
|
|
|
/**
|
|
* 获取时间
|
|
*/
|
|
function getTime() {
|
|
var myDate = new Date();
|
|
var year = myDate.getFullYear();
|
|
var month = myDate.getMonth() + 1;
|
|
var date = myDate.getDate();
|
|
var hour = myDate.getHours();
|
|
var minute = myDate.getMinutes();
|
|
var s = myDate.getSeconds();
|
|
if (date < 10) date = '0' + date;
|
|
if (month < 10) month = '0' + month;
|
|
if (hour < 10) hour = '0' + hour;
|
|
if (minute < 10) minute = '0' + minute;
|
|
if (s < 10) s = '0' + s;
|
|
|
|
|
|
return year + '-' + month + "-" + date + " " + hour + ':' + minute + ':' + s;
|
|
}
|
|
|
|
/**
|
|
* 检测消息聊天时间
|
|
* @param {*} chat_list_id
|
|
* @param {*} chat_list_id
|
|
* @return true: 显示时间, false: 不显示时间
|
|
*/
|
|
function checkMegTime(next_time = '', new_data, msg_time) {
|
|
// 最新的一个时间块
|
|
if (!next_time) return true;
|
|
//replace方法将-转为/
|
|
var next_time_begin = new Date(next_time.replace(/-/g, "/"));
|
|
var new_time_begin = new Date(new_data.replace(/-/g, "/"));
|
|
// 相差是时间毫秒
|
|
var date_diff = new_time_begin.getTime() - next_time_begin.getTime();
|
|
var leave1 = date_diff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
|
|
// 计算相差分钟数
|
|
var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
|
|
var minutes = Math.floor(leave2 / (60 * 1000)) //计算相差分钟数
|
|
|
|
if (minutes >= msg_time) return true;
|
|
return false;
|
|
}
|
|
|
|
function getCutout(obj) {
|
|
var index = obj.lastIndexOf("[");
|
|
obj = obj.substring(index, obj.length);
|
|
return obj;
|
|
}
|