User:Irukaza/js/editConflict.js:修订间差异
跳到导航
跳到搜索
imported>=海豚= (清空页面) |
imported>=海豚= 无编辑摘要 |
||
第1行: | 第1行: | ||
(async () => { | |||
if (!["edit", "submit"].includes(mw.config.get("wgAction"))) { | |||
return; | |||
} | |||
await mw.loader.using("mw.Api"); | |||
mw.loader.using('mediawiki.notification'); | |||
const wgPageName = mw.config.get("wgPageName"); | |||
const wgCurRevisionId = mw.config.get("wgCurRevisionId"); | |||
let needCheckFlag = true; | |||
const api = new mw.Api({ timeout: 5000 }); | |||
const wpSave = $("#wpSave"); | |||
const editform = $("#editform"); | |||
const conflictAlert = ""; | |||
const SYMBOL_UNDEFINED = Symbol("SYMBOL_UNDEFINED"); | |||
wpSave.val = (value = SYMBOL_UNDEFINED) => { | |||
const val = $.fn.val.bind(wpSave); | |||
return value === SYMBOL_UNDEFINED ? val() : val(value).attr("title", value); | |||
}; | |||
const disable = ($buttons) => { | |||
return $buttons.css("font-weight", "normal").parent().removeClass("oo-ui-widget-enabled oo-ui-flaggedElement-primary oo-ui-flaggedElement-progressive").addClass("oo-ui-widget-disabled"); | |||
} | |||
wpSave.on("click", () => { | |||
if (needCheckFlag === true) { | |||
needCheckFlag = false; | |||
setTimeout(async () => { | |||
disable(wpSave.attr("disabled", "disabled").val("正在提交......")); | |||
for (let i = 1; i <= 4; i++) { | |||
try { | |||
const result = await api.post({ | |||
action: "query", | |||
prop: "revisions", | |||
rvprop: "ids", | |||
rvlimit: 1, | |||
titles: wgPageName, | |||
}); | |||
const pageid = Object.keys(result.query.pages)[0]; | |||
if (pageid > 0 && result.query.pages[pageid].revisions[0].revid > wgCurRevisionId) { | |||
wpSave.val("提交失败,存在编辑冲突!"); | |||
$("body").append(`<div style="background: #3366CC; color: white; text-align: center; padding: .5rem; position: fixed; top: 0; left: 0; right: 0; z-index: 9999;"><p>本页面在您编辑的这段时间内已被他人更改。请复制您的编辑内容刷新页面比对内容后重新开始编辑,以避免这中间的编辑丢失。</p></div>`); | |||
const pre = $("<pre/>", { | |||
css: { | |||
position: "absolute", | |||
left: "-99999px", | |||
"z-index": "-99999", | |||
} | |||
}); | |||
const textarea = $("#wpTextbox1"); | |||
$("#copyCurrentRawCode").on("click", () => { | |||
if ($(".ace_editor").length > 0) { | |||
mw.notify("当前已开启代码编辑器,无法获取真实编辑内容,请手动复制。"); | |||
return; | |||
} | |||
const selection = window.getSelection(); | |||
const range = selection.getRangeAt(0); | |||
pre.text(textarea.val()); | |||
selection.selectAllChildren(pre[0]); | |||
document.execCommand("copy"); | |||
window.setTimeout(function() { | |||
selection.removeAllRanges(); | |||
selection.addRange(range); | |||
pre.empty(); | |||
}, 0); | |||
mw.notify("复制成功!"); | |||
}); | |||
$("#showNewestRevisionDiff").on("click", () => { | |||
window.open(`https://www.hmoegirl.com/?diff=${result.query.pages[pageid].revisions[0].revid}`, "_blank").focus(); | |||
}); | |||
$("#refreshPage").on("click", () => { | |||
if (confirm("请注意刷新后原来的编辑内容将会被最新版本的源码替换!\n历时如果您想找回您的编辑请点击还原备份按钮\n点击确定将会刷新页面!!")) { | |||
location.reload(false); | |||
} | |||
}); | |||
disable($("#wpPreview, #wpDiff").on("click", () => { | |||
setTimeout(() => { | |||
alert(conflictAlert); | |||
}, 1); | |||
return false; | |||
}).attr("title", conflictAlert)); | |||
await mw.loader.using('mediawiki.notification'); | |||
$("#mw-notification-area").css({ | |||
position: "fixed", | |||
top: 0, | |||
}).appendTo("body"); | |||
} else { | |||
wpSave.val("正在提交......"); | |||
editform.submit(); | |||
} | |||
} catch (e) { | |||
console.error("editConflict", e); | |||
wpSave.val(i <= 3 ? `提交失败!可能存在编辑冲突,正在检测(第${i}次)……` : "提交失败,请备份您的编辑内容后刷新界面重新编辑"); | |||
} | |||
} | |||
setTimeout(() => { | |||
needCheckFlag = true; | |||
wpSave.removeAttr("disabled").val("保存更改").css("font-weight", "700").parent().addClass("oo-ui-widget-enabled oo-ui-flaggedElement-primary oo-ui-flaggedElement-progressive").removeClass("oo-ui-widget-disabled"); | |||
}, 2000); | |||
}, 1); | |||
} | |||
}); | |||
})(); |
2020年5月23日 (六) 14:17的版本
(async () => {
if (!["edit", "submit"].includes(mw.config.get("wgAction"))) {
return;
}
await mw.loader.using("mw.Api");
mw.loader.using('mediawiki.notification');
const wgPageName = mw.config.get("wgPageName");
const wgCurRevisionId = mw.config.get("wgCurRevisionId");
let needCheckFlag = true;
const api = new mw.Api({ timeout: 5000 });
const wpSave = $("#wpSave");
const editform = $("#editform");
const conflictAlert = "";
const SYMBOL_UNDEFINED = Symbol("SYMBOL_UNDEFINED");
wpSave.val = (value = SYMBOL_UNDEFINED) => {
const val = $.fn.val.bind(wpSave);
return value === SYMBOL_UNDEFINED ? val() : val(value).attr("title", value);
};
const disable = ($buttons) => {
return $buttons.css("font-weight", "normal").parent().removeClass("oo-ui-widget-enabled oo-ui-flaggedElement-primary oo-ui-flaggedElement-progressive").addClass("oo-ui-widget-disabled");
}
wpSave.on("click", () => {
if (needCheckFlag === true) {
needCheckFlag = false;
setTimeout(async () => {
disable(wpSave.attr("disabled", "disabled").val("正在提交......"));
for (let i = 1; i <= 4; i++) {
try {
const result = await api.post({
action: "query",
prop: "revisions",
rvprop: "ids",
rvlimit: 1,
titles: wgPageName,
});
const pageid = Object.keys(result.query.pages)[0];
if (pageid > 0 && result.query.pages[pageid].revisions[0].revid > wgCurRevisionId) {
wpSave.val("提交失败,存在编辑冲突!");
$("body").append(`<div style="background: #3366CC; color: white; text-align: center; padding: .5rem; position: fixed; top: 0; left: 0; right: 0; z-index: 9999;"><p>本页面在您编辑的这段时间内已被他人更改。请复制您的编辑内容刷新页面比对内容后重新开始编辑,以避免这中间的编辑丢失。</p></div>`);
const pre = $("<pre/>", {
css: {
position: "absolute",
left: "-99999px",
"z-index": "-99999",
}
});
const textarea = $("#wpTextbox1");
$("#copyCurrentRawCode").on("click", () => {
if ($(".ace_editor").length > 0) {
mw.notify("当前已开启代码编辑器,无法获取真实编辑内容,请手动复制。");
return;
}
const selection = window.getSelection();
const range = selection.getRangeAt(0);
pre.text(textarea.val());
selection.selectAllChildren(pre[0]);
document.execCommand("copy");
window.setTimeout(function() {
selection.removeAllRanges();
selection.addRange(range);
pre.empty();
}, 0);
mw.notify("复制成功!");
});
$("#showNewestRevisionDiff").on("click", () => {
window.open(`https://www.hmoegirl.com/?diff=${result.query.pages[pageid].revisions[0].revid}`, "_blank").focus();
});
$("#refreshPage").on("click", () => {
if (confirm("请注意刷新后原来的编辑内容将会被最新版本的源码替换!\n历时如果您想找回您的编辑请点击还原备份按钮\n点击确定将会刷新页面!!")) {
location.reload(false);
}
});
disable($("#wpPreview, #wpDiff").on("click", () => {
setTimeout(() => {
alert(conflictAlert);
}, 1);
return false;
}).attr("title", conflictAlert));
await mw.loader.using('mediawiki.notification');
$("#mw-notification-area").css({
position: "fixed",
top: 0,
}).appendTo("body");
} else {
wpSave.val("正在提交......");
editform.submit();
}
} catch (e) {
console.error("editConflict", e);
wpSave.val(i <= 3 ? `提交失败!可能存在编辑冲突,正在检测(第${i}次)……` : "提交失败,请备份您的编辑内容后刷新界面重新编辑");
}
}
setTimeout(() => {
needCheckFlag = true;
wpSave.removeAttr("disabled").val("保存更改").css("font-weight", "700").parent().addClass("oo-ui-widget-enabled oo-ui-flaggedElement-primary oo-ui-flaggedElement-progressive").removeClass("oo-ui-widget-disabled");
}, 2000);
}, 1);
}
});
})();