MediaWiki:Gadget-deletion.js:修订间差异
外观
AnnAngela-dbot(留言 | 贡献) 代码变动:103d1a56 - feat: rename (#594) by U:AnnAngela, co-authored-by: GH:github-actions[bot] 标签:由机器人或全自动脚本执行的操作 |
AnnAngela-dbot(留言 | 贡献) 标签:由机器人或全自动脚本执行的操作 |
||
| 第4行: | 第4行: | ||
* ------------------------------------------------------------------------- | * ------------------------------------------------------------------------- | ||
*/ | */ | ||
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/deletion/Gadget-deletion.js|user=[[U: | var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/deletion/Gadget-deletion.js|user=[[U:屠麟傲血]]|co-authors=|longId=6943529111ca996bf65b72925d9ce1c09b98992c|shortId=69435291|summary=fix: :bug: 依赖与小工具加载条件|body=<nowiki>1.移除失效依赖:mw.notify↩2.将部分小工具名字空间、操作判断条件移动到配置文件中</nowiki>}}'; | ||
/* <pre> */ | /* <pre> */ | ||
"use strict";$(()=>(async()=>{if( | "use strict";$(()=>(async()=>{if(!mw.config.get("wgIsArticle")||!mw.config.get("wgUserGroups").includes("sysop")||!$(".mw-category-generated > div")[0])return;const generatePageLinkSelector=e=>{return(t=[encodeURI(e),mw.util.wikiUrlencode(e)],[...new Set(t).values()]).map(e=>`a[href$="/${e}"]`).join(",");var t};let e=!1;const t=mw.config.get("wgPageName"),a=mw.config.get("wgUserName");$("body").on("click","a",t=>e?window.open(t.target.href,"_blank")&&!1:null);const s=new mw.Api,o=$(".mw-category-generated"),r=o.find("li"),l=$("<p id='batdel-control'>"),n=$(mw.util.addPortletLink("p-cactions","#",wgULS("批量删除本分类下页面","批次刪除本分類下頁面"),"ca-batdel",wgULS("批量删除本分类下页面","批次刪除本分類下頁面"))).addClass("sysop-show"),c=n.find("a"),i=[],d=mw.config.get("wgTitle")==={"zh.moegirl.org.cn":"即将删除的页面","mzh.moegirl.org.cn":"即将删除的页面","commons.moegirl.org.cn":"即将删除的页面","en.moegirl.org.cn":"Pages awaiting deletion","ja.moegirl.org.cn":"削除依頼中のページ","library.moegirl.org.cn":"即将删除的页面"}[location.hostname];if(d){e=!0,c.text(wgULS("正在加载中……","正在加載中……"));const o=await(async()=>{const e=[],t=Symbol();let o;for(;o!==t;){const r=await s.post({action:"query",assertuser:a,list:"allusers",aurights:"rollback",aulimit:"max",aufrom:o});o=r.continue?r.continue.aufrom:t,e.push(...r.query.allusers.map(({name:e})=>e))}return e})(),l=await(async()=>{const e=[],o=Symbol();let r;for(;r!==o;){const l=await s.post({action:"query",assertuser:a,format:"json",rvprop:"user",prop:"revisions",generator:"categorymembers",gcmtitle:t,gcmprop:"ids|title",gcmtype:"page|subcat|file",gcmlimit:"max",gcmcontinue:r});r=l.continue?l.continue.gcmcontinue:o,e.push(...Object.values(l.query.pages))}return e.filter(({title:e})=>document.querySelector(generatePageLinkSelector(e)))})();for(const{title:e,pageid:t,revisions:[{user:r}]}of l)for(let l=0;l<3;l++)try{const l=(await s.post({action:"parse",assertuser:a,pageid:t,prop:"text"})).parse.text["*"],n=$(l).children(".infoBox.will2Be2Deleted"),c=n.find("#reason"),d=n.find("#actor a").first(),g=c.text().trim(),b=d.text().trim(),u=$(generatePageLinkSelector(e));if(1===c.length&&1===d.length&&g&&b){const t=r===b&&o.includes(r);i.push({title:e,user:r,isTrusted:t,reason:g}),u.addClass("batdel-checked"),t?u.after(`<div>${wgULS("挂删人","掛刪人")}:<a href="/User:${r}" class="mw-userlink batdel-bypass"><bdi>${r}</bdi></a></div><div>${wgULS("挂删理由","掛刪理由")}:${g}</div>`):(u.prop("target","_blank").after(`<div class="batdel-error">${wgULS("禁止删除:该次挂删不可靠,请手动检查","禁止刪除:該次掛刪不可靠,請手動檢查")}(${r!==d.text()?wgULS("最后编辑者与挂删人不符","最後編輯者與掛刪人不符"):wgULS("最后编辑者没有巡查权限","最後編輯者沒有巡查權限")})</div>`),console.warn(`[BatchDelete] ${e} does not have a trusted flag`))}else i.push({title:e,user:b,isTrusted:!1,reason:g}),u.addClass("batdel-bypass").prop("target","_blank").after(`<div class="batdel-error">${wgULS("禁止删除:该次挂删不可靠,请手动检查(挂删模板未给出理由或挂删人)","禁止刪除:該次掛刪不可靠,請手動檢查(掛刪模板未給出理由或掛刪人)")}</div>`),console.warn(`[BatchDelete] ${e} has empty reason or actor`);break}catch(e){console.error("[BatchDelete]",e)}r.find("a:not(.batdel-bypass, .batdel-checked)").each((e,t)=>{const a=$(t);a.prop("target","_blank").after(`<div class="batdel-error">${wgULS("禁止删除:无法获取页面挂删信息","禁止刪除:無法獲取頁面掛刪信息")}</div>`),console.warn(`[BatchDelete] ${a.text()} is not processed`)}),e=!1,mw.hook("wikipage.content").fire($(".mw-userlink.batdel-bypass")),c.text(wgULS("批量删除本分类下页面","批次刪除本分類下頁面"))}n.on("click",()=>{if($("#batdel-control")[0]||e)return;const n=$("<span>0</span>"),c=$("<span>?</span>"),g=$(`<button>${wgULS("全选/全不选","全選/全不選")}</button>`),b=$("<button>提交</button>"),u=$("<button>取消</button>");l.empty().append([`${wgULS("请选择要删除的页面","請選擇要刪除的頁面")} [`,n,"/",c,"] ",g,b,u]).prependTo(o),$("body").addClass("batdel-body"),r.each((e,t)=>$(t).prepend($("<input type='checkbox' class='batdel-select'>").prop("disabled",$(t).find(".batdel-error")[0]))).find(".stub").toggleClass("stub _stub");const w=r.find(".batdel-select:not(:disabled)");return c.text(w.length),w.on("change",()=>n.text(w.filter(":checked").length)),o.children("div").children("p").each((e,t)=>{$(`<button class="batdel-controlButton">${wgULS("全选/全不选本类别页面","全選/全不選本類別頁面")}</button>`).on("click",e=>$(e.target).closest(".mw-category-generated > div").find(".batdel-select:not(:disabled)").each((e,t)=>$(t).prop("checked",!t.checked)).trigger("change")).appendTo(t)}),g.on("click",()=>{r.find(".batdel-select:not(:disabled)").each((e,t)=>$(t).prop("checked",!t.checked)).trigger("change")}),u.on("click",()=>{e||(l.remove(),$(".batdel-controlButton").remove(),o.find("._stub").toggleClass("stub _stub"),r.find(".batdel-select").remove(),$(".batdel-disabled").removeClass("batdel-disabled"),$("body").removeClass("batdel-body"))}),b.on("click",async()=>{if(e||!await oouiDialog.confirm(`${wgULS("您确定要删除这些页面吗?","您確定要刪除這些頁面嗎?")}(${wgULS("选中了","選中了")}${r.find(".batdel-select:checked").length}${wgULS("个页面","個頁面")})`,{title:wgULS("批量删除分类页面工具","批次刪除分類頁面工具")}))return;let n=d?"":await oouiDialog.prompt(`${wgULS("请输入删除理由","請輸入刪除理由")}`,{title:wgULS("批量删除分类页面工具","批次刪除分類頁面工具"),size:"medium",required:!0});for(;!d&&""===n;)n=await oouiDialog.prompt(`${wgULS("请输入删除理由","請輸入刪除理由")}`,{title:wgULS("批量删除分类页面工具","批次刪除分類頁面工具"),size:"medium",required:!0});if(null===n)return;n=n?`(${n})`:"",e=!0;const c=$('<img src="https://img.moegirl.org.cn/common/d/d1/Windows_10_loading.gif" style="height: 1em; margin-top: -.25em;">'),g=$("<span>");o.find(".batdel-result").remove(),o.find(".batdel-select").prop("disabled",!0),l.append("<br>",c,g),o.find("a:not(.batdel-bypass)").each((e,t)=>{const a=$(t);a.closest("li").find(".batdel-select:checked")[0]||a.addClass("batdel-disabled")});try{g.text(wgULS("正在删除,已完成删除的页面将会被删除线划去……","正在刪除,已完成刪除的頁面將會被刪除線划去……"));for(const e of o.find("a").not(".batdel-bypass, .batdel-disabled").toArray()){const o=$(e);if(!o.text().trim())return;o.css("margin-right","1em");const r=new URL(new mw.Uri(o.prop("href"))),l=decodeURIComponent(r.searchParams.has("title")?r.searchParams.get("title"):r.pathname.replace(/^\//,"")).replace(/_/g," "),c=i.filter(({title:e})=>e===l)[0];try{await s.postWithToken("csrf",{action:"delete",assertuser:a,format:"json",title:l,tags:"Automation tool",reason:`批量删除【${t}】下的页面${d&&c.isTrusted&&c.reason&&c.user?`([[User_talk:${c.user}|${c.user}]]的挂删理由:${c.reason} )`:n}`},{timeout:99999}),o.css("text-decoration","line-through").after(`<span class="batdel-result batdel-success">${wgULS("删除成功","刪除成功")}</span>`)}catch(e){o.after(`<span class="batdel-result batdel-error"> ${wgULS("删除失败","刪除失敗")}:${e instanceof Error?`${e} ${e.stack.split("\n")[1].trim()}`:JSON.stringify(e)}</span>`)}}c.remove(),g.addClass("batdel-success").text(wgULS("删除已完成!","刪除已完成!"))}catch(e){c.remove(),g.text(`${wgULS("发生错误","發生錯誤")}:${e instanceof Error?`${e} ${e.stack.split("\n")[1].trim()}`:JSON.stringify(e)}`)}}),!1})})()); | ||
/* </pre> */ | /* </pre> */ | ||
2025年7月27日 (日) 21:26的最新版本
/**
* -------------------------------------------------------------------------
* !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
* -------------------------------------------------------------------------
*/
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/deletion/Gadget-deletion.js|user=[[U:屠麟傲血]]|co-authors=|longId=6943529111ca996bf65b72925d9ce1c09b98992c|shortId=69435291|summary=fix: :bug: 依赖与小工具加载条件|body=<nowiki>1.移除失效依赖:mw.notify↩2.将部分小工具名字空间、操作判断条件移动到配置文件中</nowiki>}}';
/* <pre> */
"use strict";$(()=>(async()=>{if(!mw.config.get("wgIsArticle")||!mw.config.get("wgUserGroups").includes("sysop")||!$(".mw-category-generated > div")[0])return;const generatePageLinkSelector=e=>{return(t=[encodeURI(e),mw.util.wikiUrlencode(e)],[...new Set(t).values()]).map(e=>`a[href$="/${e}"]`).join(",");var t};let e=!1;const t=mw.config.get("wgPageName"),a=mw.config.get("wgUserName");$("body").on("click","a",t=>e?window.open(t.target.href,"_blank")&&!1:null);const s=new mw.Api,o=$(".mw-category-generated"),r=o.find("li"),l=$("<p id='batdel-control'>"),n=$(mw.util.addPortletLink("p-cactions","#",wgULS("批量删除本分类下页面","批次刪除本分類下頁面"),"ca-batdel",wgULS("批量删除本分类下页面","批次刪除本分類下頁面"))).addClass("sysop-show"),c=n.find("a"),i=[],d=mw.config.get("wgTitle")==={"zh.moegirl.org.cn":"即将删除的页面","mzh.moegirl.org.cn":"即将删除的页面","commons.moegirl.org.cn":"即将删除的页面","en.moegirl.org.cn":"Pages awaiting deletion","ja.moegirl.org.cn":"削除依頼中のページ","library.moegirl.org.cn":"即将删除的页面"}[location.hostname];if(d){e=!0,c.text(wgULS("正在加载中……","正在加載中……"));const o=await(async()=>{const e=[],t=Symbol();let o;for(;o!==t;){const r=await s.post({action:"query",assertuser:a,list:"allusers",aurights:"rollback",aulimit:"max",aufrom:o});o=r.continue?r.continue.aufrom:t,e.push(...r.query.allusers.map(({name:e})=>e))}return e})(),l=await(async()=>{const e=[],o=Symbol();let r;for(;r!==o;){const l=await s.post({action:"query",assertuser:a,format:"json",rvprop:"user",prop:"revisions",generator:"categorymembers",gcmtitle:t,gcmprop:"ids|title",gcmtype:"page|subcat|file",gcmlimit:"max",gcmcontinue:r});r=l.continue?l.continue.gcmcontinue:o,e.push(...Object.values(l.query.pages))}return e.filter(({title:e})=>document.querySelector(generatePageLinkSelector(e)))})();for(const{title:e,pageid:t,revisions:[{user:r}]}of l)for(let l=0;l<3;l++)try{const l=(await s.post({action:"parse",assertuser:a,pageid:t,prop:"text"})).parse.text["*"],n=$(l).children(".infoBox.will2Be2Deleted"),c=n.find("#reason"),d=n.find("#actor a").first(),g=c.text().trim(),b=d.text().trim(),u=$(generatePageLinkSelector(e));if(1===c.length&&1===d.length&&g&&b){const t=r===b&&o.includes(r);i.push({title:e,user:r,isTrusted:t,reason:g}),u.addClass("batdel-checked"),t?u.after(`<div>${wgULS("挂删人","掛刪人")}:<a href="/User:${r}" class="mw-userlink batdel-bypass"><bdi>${r}</bdi></a></div><div>${wgULS("挂删理由","掛刪理由")}:${g}</div>`):(u.prop("target","_blank").after(`<div class="batdel-error">${wgULS("禁止删除:该次挂删不可靠,请手动检查","禁止刪除:該次掛刪不可靠,請手動檢查")}(${r!==d.text()?wgULS("最后编辑者与挂删人不符","最後編輯者與掛刪人不符"):wgULS("最后编辑者没有巡查权限","最後編輯者沒有巡查權限")})</div>`),console.warn(`[BatchDelete] ${e} does not have a trusted flag`))}else i.push({title:e,user:b,isTrusted:!1,reason:g}),u.addClass("batdel-bypass").prop("target","_blank").after(`<div class="batdel-error">${wgULS("禁止删除:该次挂删不可靠,请手动检查(挂删模板未给出理由或挂删人)","禁止刪除:該次掛刪不可靠,請手動檢查(掛刪模板未給出理由或掛刪人)")}</div>`),console.warn(`[BatchDelete] ${e} has empty reason or actor`);break}catch(e){console.error("[BatchDelete]",e)}r.find("a:not(.batdel-bypass, .batdel-checked)").each((e,t)=>{const a=$(t);a.prop("target","_blank").after(`<div class="batdel-error">${wgULS("禁止删除:无法获取页面挂删信息","禁止刪除:無法獲取頁面掛刪信息")}</div>`),console.warn(`[BatchDelete] ${a.text()} is not processed`)}),e=!1,mw.hook("wikipage.content").fire($(".mw-userlink.batdel-bypass")),c.text(wgULS("批量删除本分类下页面","批次刪除本分類下頁面"))}n.on("click",()=>{if($("#batdel-control")[0]||e)return;const n=$("<span>0</span>"),c=$("<span>?</span>"),g=$(`<button>${wgULS("全选/全不选","全選/全不選")}</button>`),b=$("<button>提交</button>"),u=$("<button>取消</button>");l.empty().append([`${wgULS("请选择要删除的页面","請選擇要刪除的頁面")} [`,n,"/",c,"] ",g,b,u]).prependTo(o),$("body").addClass("batdel-body"),r.each((e,t)=>$(t).prepend($("<input type='checkbox' class='batdel-select'>").prop("disabled",$(t).find(".batdel-error")[0]))).find(".stub").toggleClass("stub _stub");const w=r.find(".batdel-select:not(:disabled)");return c.text(w.length),w.on("change",()=>n.text(w.filter(":checked").length)),o.children("div").children("p").each((e,t)=>{$(`<button class="batdel-controlButton">${wgULS("全选/全不选本类别页面","全選/全不選本類別頁面")}</button>`).on("click",e=>$(e.target).closest(".mw-category-generated > div").find(".batdel-select:not(:disabled)").each((e,t)=>$(t).prop("checked",!t.checked)).trigger("change")).appendTo(t)}),g.on("click",()=>{r.find(".batdel-select:not(:disabled)").each((e,t)=>$(t).prop("checked",!t.checked)).trigger("change")}),u.on("click",()=>{e||(l.remove(),$(".batdel-controlButton").remove(),o.find("._stub").toggleClass("stub _stub"),r.find(".batdel-select").remove(),$(".batdel-disabled").removeClass("batdel-disabled"),$("body").removeClass("batdel-body"))}),b.on("click",async()=>{if(e||!await oouiDialog.confirm(`${wgULS("您确定要删除这些页面吗?","您確定要刪除這些頁面嗎?")}(${wgULS("选中了","選中了")}${r.find(".batdel-select:checked").length}${wgULS("个页面","個頁面")})`,{title:wgULS("批量删除分类页面工具","批次刪除分類頁面工具")}))return;let n=d?"":await oouiDialog.prompt(`${wgULS("请输入删除理由","請輸入刪除理由")}`,{title:wgULS("批量删除分类页面工具","批次刪除分類頁面工具"),size:"medium",required:!0});for(;!d&&""===n;)n=await oouiDialog.prompt(`${wgULS("请输入删除理由","請輸入刪除理由")}`,{title:wgULS("批量删除分类页面工具","批次刪除分類頁面工具"),size:"medium",required:!0});if(null===n)return;n=n?`(${n})`:"",e=!0;const c=$('<img src="https://img.moegirl.org.cn/common/d/d1/Windows_10_loading.gif" style="height: 1em; margin-top: -.25em;">'),g=$("<span>");o.find(".batdel-result").remove(),o.find(".batdel-select").prop("disabled",!0),l.append("<br>",c,g),o.find("a:not(.batdel-bypass)").each((e,t)=>{const a=$(t);a.closest("li").find(".batdel-select:checked")[0]||a.addClass("batdel-disabled")});try{g.text(wgULS("正在删除,已完成删除的页面将会被删除线划去……","正在刪除,已完成刪除的頁面將會被刪除線划去……"));for(const e of o.find("a").not(".batdel-bypass, .batdel-disabled").toArray()){const o=$(e);if(!o.text().trim())return;o.css("margin-right","1em");const r=new URL(new mw.Uri(o.prop("href"))),l=decodeURIComponent(r.searchParams.has("title")?r.searchParams.get("title"):r.pathname.replace(/^\//,"")).replace(/_/g," "),c=i.filter(({title:e})=>e===l)[0];try{await s.postWithToken("csrf",{action:"delete",assertuser:a,format:"json",title:l,tags:"Automation tool",reason:`批量删除【${t}】下的页面${d&&c.isTrusted&&c.reason&&c.user?`([[User_talk:${c.user}|${c.user}]]的挂删理由:${c.reason} )`:n}`},{timeout:99999}),o.css("text-decoration","line-through").after(`<span class="batdel-result batdel-success">${wgULS("删除成功","刪除成功")}</span>`)}catch(e){o.after(`<span class="batdel-result batdel-error"> ${wgULS("删除失败","刪除失敗")}:${e instanceof Error?`${e} ${e.stack.split("\n")[1].trim()}`:JSON.stringify(e)}</span>`)}}c.remove(),g.addClass("batdel-success").text(wgULS("删除已完成!","刪除已完成!"))}catch(e){c.remove(),g.text(`${wgULS("发生错误","發生錯誤")}:${e instanceof Error?`${e} ${e.stack.split("\n")[1].trim()}`:JSON.stringify(e)}`)}}),!1})})());
/* </pre> */