cl01/wp-content/plugins/nicen-localize-image/tinymcc/local.js
2025-02-24 12:39:24 +08:00

264 lines
9.8 KiB
JavaScript
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function () {
const $ = jQuery; //JQ
/**
* 警告文字块
* ed.selection.setContent("文字");
* ed.selection.select(ed.getBody(), true);
* */
tinymce.create('tinymce.plugins.local', {
init: function (ed, url) {
/**
* 替换所有
* @param old
* @param search
* @param re
*/
function replaceAll(old, search, re) {
while (old.indexOf(search) > -1) {
old = old.replace(search, re);
}
return old;
}
/**
* 替换编辑器内容
* */
function replaceC(content) {
ed.setContent(content);
}
/**
* 字符转义
* */
function html2Escape(sHtml) {
return sHtml.replace(/[<>&"]/g, function (c) {
return {'<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;'}[c];
});
}
/**
* 新增插件
* */
ed.addButton('local', {
title: '外部图片替换',
image: url + '/icon/local.svg',
onclick: function () {
const confirm = layer.confirm("是否要检索文章内所有外部图片?", function () {
//关闭弹出层
layer.close(confirm);
/**
* 弹出检测窗口
* */
let domain = location.host;
let replace = []; //替换列表
let link = [];
/**
* 获取所有图片
* */
let count = 1; //计数
/**
* 遍历所有本地图片
* */
$(ed.getBody()).find("img").each(function (index) {
let that = $(this).attr("src");
/**
* 如果没有图片
* */
if (!that) {
return
}
/**
* 如果没有http
* */
if (that.indexOf('http') < 0) {
return
}
/**
* 如果图片不包含本地域名
* 如果没有重复的包含
* */
if (that.indexOf(domain) < 0 && link.indexOf(that) < 0) {
link.push(that); //记录链接
replace.push(`<div style="border: 1px solid #f3f3f3;"><span>${count}</span>.&nbsp;<a target="_blank" href="${that}">${that}</a></div>`);
count++; //加1
}
});
/**
* 判断是否有外部图片
* */
if (replace.length == 0) {
layer.msg("没有找到外部图片");
return;
}
let content = ed.getContent(); //获取编辑器内容
/**
* 弹出
* */
let index = layer.open({
title: "共检测到外部图片" + (count - 1) + "张",
content: `<div style="width: 100%;height: 100%;">${replace.join('')}</div>`,
area: ['30vw', '50vh'],
maxmin: true,
closeBtn: 1,
btn: ['开始替换'],
yes: async function () {
let number = 1;
let index = null;
let flag = true;
/**
* 终止抓取
* */
function terminate(text = false) {
/**
* 替换编辑器的内容
* */
replaceC(content);
try {
flag = false;
layer.close(index);
if (!text) {
layer.msg("成功替换" + (number - 1) + "张外部图片");
} else {
layer.msg(text);
}
$(document).off('keydown');
} catch (e) {
console.log(e);
}
}
/**
* 监听关闭事件
* */
$(document).bind('keydown', 'esc', terminate);
let task = []; //promise
let ok = 0; //处理过的数量
/**
* 开始循环处理
* */
for (let i of link) {
/**
* 如果被终止
* */
if (!flag) {
break;
}
index = layer.msg(`正在替换第${number}按Esc可停止替换...`, {
icon: 16
, shade: 0.1,
time: 0
});
task.push(new Promise((resolve) => {
/**
* 请求服务器接口
* */
$.post('/?nicen_make_replace=1', {
private: POST_KEY,
img: i
}, function (res) {
if (res.code === -1) {
layer.msg(res.result);
resolve(0);
} else if (res.code === 1) {
/**
* 替换变量里的内容
* */
content = replaceAll(content, html2Escape(i), res.result);
} else {
number--; //未成功
layer.msg(res.result);
}
resolve(1); //退出本次任务
}, 'json').error(async e => {
layer.msg("图片下载异常!");
let timer = setTimeout(() => {
clearTimeout(timer);
resolve(0);
}, 1500);
})
}));
ok++; //计数
/* 并发数 */
if (task.length === SYNC_NUMBER || ok === link.length) {
let code = await Promise.all(task).catch(e => {
console.log(e)
return false;
});
task = []; //空数组
/* 计算成功数 */
for (let k of code) {
if (!k) {
number--;
}
}
}
number++; //数量增加
}
terminate("成功替换" + (number - 1) + "张外部图片,记得保存哈,可在插件设置页面查看日志!");
}
});
})
}
});
},
createControl: function (n, cm) {
return null;
},
});
tinymce.PluginManager.add('local', tinymce.plugins.local);
})();