MediaWiki:Gadget-queryContributions.js:修订间差异
外观
AnnAngela-dbot(留言 | 贡献) 标签:由机器人或全自动脚本执行的操作 |
AnnAngela-dbot(留言 | 贡献) 标签:由机器人或全自动脚本执行的操作 |
||
| 第4行: | 第4行: | ||
* ------------------------------------------------------------------------- | * ------------------------------------------------------------------------- | ||
*/ | */ | ||
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/queryContributions/Gadget-queryContributions.js|user=[[U:SaoMikoto]]|co-authors=|longId= | var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/queryContributions/Gadget-queryContributions.js|user=[[U:SaoMikoto]]|co-authors=|longId=2f40a8550bc9c616a5cf1ae88d66ae68ed890789|shortId=2f40a855|summary=fix: chart and table (#727)}}'; | ||
/* <pre> */ | /* <pre> */ | ||
"use strict";$(()=>(async()=>{if("Contributions"!==mw.config.get("wgCanonicalSpecialPageName"))return;const t=(document.querySelector('[name="target"]')||{}).value;if("string"!=typeof t||0===t.length)return;const e=await mw.user.getRights(),i=!e.includes("apihighlimits"),o=e.includes("patrol")||e.includes("patrolmarks"),a=mw.config.get("wgUserName"),upperFirstCase=t=>/^[a-z]/.test(t)?t.substring(0,1).toUpperCase()+t.substring(1):t,n=new mw.Api,r={0:"",1:"讨论",2:"用户",3:"用户讨论",4:"萌娘百科",5:"萌娘百科讨论",6:"文件",7:"文件讨论",8:"MediaWiki",9:"MediaWiki讨论",10:"模板",11:"模板讨论",12:"帮助",13:"帮助讨论",14:"分类",15:"分类讨论",274:"Widget",275:"Widget_talk",710:"Timedtext",711:"Timedtext_talk",828:"模块",829:"模块讨论",2300:"Gadget",2301:"Gadget_talk",2302:"Gadget_definition",2303:"Gadget_definition_talk"},s=$('< | "use strict";$(()=>(async()=>{if("Contributions"!==mw.config.get("wgCanonicalSpecialPageName"))return;const t=(document.querySelector('[name="target"]')||{}).value;if("string"!=typeof t||0===t.length)return;const e=await mw.user.getRights(),i=!e.includes("apihighlimits"),o=e.includes("patrol")||e.includes("patrolmarks"),a=mw.config.get("wgUserName"),upperFirstCase=t=>/^[a-z]/.test(t)?t.substring(0,1).toUpperCase()+t.substring(1):t,n=new mw.Api,r={0:"",1:"讨论",2:"用户",3:"用户讨论",4:"萌娘百科",5:"萌娘百科讨论",6:"文件",7:"文件讨论",8:"MediaWiki",9:"MediaWiki讨论",10:"模板",11:"模板讨论",12:"帮助",13:"帮助讨论",14:"分类",15:"分类讨论",274:"Widget",275:"Widget_talk",710:"Timedtext",711:"Timedtext_talk",828:"模块",829:"模块讨论",2300:"Gadget",2301:"Gadget_talk",2302:"Gadget_definition",2303:"Gadget_definition_talk"},s=$('<div class="cdx-card" style="background-color:transparent;display:block"><span class="cdx-card__text"><span class="cdx-card__text__title">用户贡献分布</span><span class="cdx-card__text__description">是否需要加载用户贡献分布(对编辑数量较多的用户慎重使用!)</span><div><button id="confirmQueryContributions" class="cdx-button cdx-button--action-progressive">确认</button> <button id="cancelQueryContributions" class="cdx-button cdx-button--action-destructive">取消</button></div></span></div>').insertAfter("#mw-content-text > .mw-htmlform-ooui-wrapper");s.find("#confirmQueryContributions").on("click",async()=>{s.text(`加载中${i?"(由于您没有“在API查询中使用更高的上限”[apihighlimits]权限,本次加载将需要较长时间,请稍等)":""}……`);const e=await(async()=>{const e=[],i=Symbol();let r;for(;r!==i;){const c=await n.post({action:"query",assertuser:a,format:"json",list:"usercontribs",ucuser:t,ucprop:"title|flags"+(o?"|patrolled":""),uccontinue:r,uclimit:"max"});c.continue?(r=c.continue.uccontinue,s[0].innerText+="…"):r=i,e.push(...c.query.usercontribs)}return e})(),c=Object.fromEntries(Object.keys(r).map(t=>[t,{count:0,patrolled:0,autopatrolled:0,new:0,distinct:new Set}])),d={patrolled:0,autopatrolled:0,new:0,distinct:new Set};e.forEach(t=>{c[t.ns].count++,Reflect.has(t,"patrolled")&&(c[t.ns].patrolled++,d.patrolled++),Reflect.has(t,"autopatrolled")&&(c[t.ns].autopatrolled++,d.autopatrolled++),Reflect.has(t,"new")&&(c[t.ns].new++,d.new++),c[t.ns].distinct.add(t.title),d.distinct.add(t.title)});let l=0;if(["zh.moegirl.org.cn","mzh.moegirl.org.cn"].includes(mw.config.get("wgServerName"))){const{query:{pages:[{revisions:[{content:e}]}]}}=await n.post({action:"query",assertuser:a,titles:"MediaWiki:GHIAHistory.json",prop:"revisions",rvprop:["content"],rvlimit:1,rvdir:"older",formatversion:2}),i=JSON.parse(e);l=Reflect.has(i,`U:${t}`)?i[`U:${t}`].reduce((t,{changedFiles:e})=>t+e,0):0,c[8].count+=l}const u=$(`<table class="wikitable sortable"><thead><tr><th>命名空间</th><th>编辑次数</th>${o?"<th>被巡查次数</th><th>被手动巡查次数</th>":""}<th>不同页面数量</th>><th>创建页面数量</th></tr></thead><tbody></tbody></table>`).find("tbody");s.html(`该用户在本站未被删除的编辑共有 ${e.length} 次${o?`(其中有 ${d.patrolled} 次编辑被巡查,${d.patrolled-d.autopatrolled} 次编辑被手动巡查(注:通过api编辑不会自动巡查))`:""},共编辑 ${d.distinct.size} 个不同页面,创建了 ${d.new} 个页面。按命名空间划分如下:`);const p=[];if(Object.entries(c).filter(([,{count:t}])=>t>0).sort(([t],[e])=>t-e).forEach(([t,{count:e,patrolled:i,autopatrolled:a,distinct:n,new:s}])=>{u.append(`<tr><td data-sort-value="${t}">${0===+t?"(主命名空间)":upperFirstCase(r[+t])}</td><td>${e}</td>${o?`<td>${i}</td><td>${i-a}</td>`:""}<td>${n.size}</td><td>${s}</td></tr>`),p.push({value:e,name:0===+t?"(主)":upperFirstCase(r[+t])})}),s.append(u.closest("table")),"function"==typeof u.closest("table").tablesorter&&u.closest("table").tablesorter(),l>0){const t=$("<p>");t.text(`注:来自 GHIA 库的未被删除的编辑共有 ${l} 笔,这些编辑均会被视为 MediaWiki 命名空间下的编辑,且不会被统计为“被巡查”“被手动巡查”“不同页面”和“创建页面”。在 GHIA 库里对已被删除文件的编辑无法统计。`),s.append(t)}s.append('<button id="toChartQueryContributions" class="cdx-button cdx-button--action-progressive">显示饼图</button>'),s.find("#toChartQueryContributions").on("click",async t=>{$(t.target).remove(),s.append('<div id="contributionChart" style="width:100%;height:400px;">加载中……</div>'),await libCachedCode.injectCachedCode("https://testingcf.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js","script");const e=echarts.init(document.getElementById("contributionChart"));e.setOption({tooltip:{trigger:"item",formatter:"{c} ({d}%)"},toolbox:{show:!0,feature:{saveAsImage:{excludeComponents:["toolbox"]}}},legend:{top:"5%",left:"center"},series:[{name:"用户贡献分布",type:"pie",radius:["40%","70%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:10,borderColor:"#fff",borderWidth:2},label:{show:!1,position:"center"},emphasis:{label:{show:!0,fontSize:"40",fontWeight:"bold"}},labelLine:{show:!1},data:p}]}),$(window).on("resize",()=>e.trigger("resize"))})}),s.find("#cancelQueryContributions").on("click",()=>{s.remove()})})()); | ||
/* </pre> */ | /* </pre> */ | ||
2025年10月27日 (一) 21:54的最新版本
/**
* -------------------------------------------------------------------------
* !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
* -------------------------------------------------------------------------
*/
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/queryContributions/Gadget-queryContributions.js|user=[[U:SaoMikoto]]|co-authors=|longId=2f40a8550bc9c616a5cf1ae88d66ae68ed890789|shortId=2f40a855|summary=fix: chart and table (#727)}}';
/* <pre> */
"use strict";$(()=>(async()=>{if("Contributions"!==mw.config.get("wgCanonicalSpecialPageName"))return;const t=(document.querySelector('[name="target"]')||{}).value;if("string"!=typeof t||0===t.length)return;const e=await mw.user.getRights(),i=!e.includes("apihighlimits"),o=e.includes("patrol")||e.includes("patrolmarks"),a=mw.config.get("wgUserName"),upperFirstCase=t=>/^[a-z]/.test(t)?t.substring(0,1).toUpperCase()+t.substring(1):t,n=new mw.Api,r={0:"",1:"讨论",2:"用户",3:"用户讨论",4:"萌娘百科",5:"萌娘百科讨论",6:"文件",7:"文件讨论",8:"MediaWiki",9:"MediaWiki讨论",10:"模板",11:"模板讨论",12:"帮助",13:"帮助讨论",14:"分类",15:"分类讨论",274:"Widget",275:"Widget_talk",710:"Timedtext",711:"Timedtext_talk",828:"模块",829:"模块讨论",2300:"Gadget",2301:"Gadget_talk",2302:"Gadget_definition",2303:"Gadget_definition_talk"},s=$('<div class="cdx-card" style="background-color:transparent;display:block"><span class="cdx-card__text"><span class="cdx-card__text__title">用户贡献分布</span><span class="cdx-card__text__description">是否需要加载用户贡献分布(对编辑数量较多的用户慎重使用!)</span><div><button id="confirmQueryContributions" class="cdx-button cdx-button--action-progressive">确认</button> <button id="cancelQueryContributions" class="cdx-button cdx-button--action-destructive">取消</button></div></span></div>').insertAfter("#mw-content-text > .mw-htmlform-ooui-wrapper");s.find("#confirmQueryContributions").on("click",async()=>{s.text(`加载中${i?"(由于您没有“在API查询中使用更高的上限”[apihighlimits]权限,本次加载将需要较长时间,请稍等)":""}……`);const e=await(async()=>{const e=[],i=Symbol();let r;for(;r!==i;){const c=await n.post({action:"query",assertuser:a,format:"json",list:"usercontribs",ucuser:t,ucprop:"title|flags"+(o?"|patrolled":""),uccontinue:r,uclimit:"max"});c.continue?(r=c.continue.uccontinue,s[0].innerText+="…"):r=i,e.push(...c.query.usercontribs)}return e})(),c=Object.fromEntries(Object.keys(r).map(t=>[t,{count:0,patrolled:0,autopatrolled:0,new:0,distinct:new Set}])),d={patrolled:0,autopatrolled:0,new:0,distinct:new Set};e.forEach(t=>{c[t.ns].count++,Reflect.has(t,"patrolled")&&(c[t.ns].patrolled++,d.patrolled++),Reflect.has(t,"autopatrolled")&&(c[t.ns].autopatrolled++,d.autopatrolled++),Reflect.has(t,"new")&&(c[t.ns].new++,d.new++),c[t.ns].distinct.add(t.title),d.distinct.add(t.title)});let l=0;if(["zh.moegirl.org.cn","mzh.moegirl.org.cn"].includes(mw.config.get("wgServerName"))){const{query:{pages:[{revisions:[{content:e}]}]}}=await n.post({action:"query",assertuser:a,titles:"MediaWiki:GHIAHistory.json",prop:"revisions",rvprop:["content"],rvlimit:1,rvdir:"older",formatversion:2}),i=JSON.parse(e);l=Reflect.has(i,`U:${t}`)?i[`U:${t}`].reduce((t,{changedFiles:e})=>t+e,0):0,c[8].count+=l}const u=$(`<table class="wikitable sortable"><thead><tr><th>命名空间</th><th>编辑次数</th>${o?"<th>被巡查次数</th><th>被手动巡查次数</th>":""}<th>不同页面数量</th>><th>创建页面数量</th></tr></thead><tbody></tbody></table>`).find("tbody");s.html(`该用户在本站未被删除的编辑共有 ${e.length} 次${o?`(其中有 ${d.patrolled} 次编辑被巡查,${d.patrolled-d.autopatrolled} 次编辑被手动巡查(注:通过api编辑不会自动巡查))`:""},共编辑 ${d.distinct.size} 个不同页面,创建了 ${d.new} 个页面。按命名空间划分如下:`);const p=[];if(Object.entries(c).filter(([,{count:t}])=>t>0).sort(([t],[e])=>t-e).forEach(([t,{count:e,patrolled:i,autopatrolled:a,distinct:n,new:s}])=>{u.append(`<tr><td data-sort-value="${t}">${0===+t?"(主命名空间)":upperFirstCase(r[+t])}</td><td>${e}</td>${o?`<td>${i}</td><td>${i-a}</td>`:""}<td>${n.size}</td><td>${s}</td></tr>`),p.push({value:e,name:0===+t?"(主)":upperFirstCase(r[+t])})}),s.append(u.closest("table")),"function"==typeof u.closest("table").tablesorter&&u.closest("table").tablesorter(),l>0){const t=$("<p>");t.text(`注:来自 GHIA 库的未被删除的编辑共有 ${l} 笔,这些编辑均会被视为 MediaWiki 命名空间下的编辑,且不会被统计为“被巡查”“被手动巡查”“不同页面”和“创建页面”。在 GHIA 库里对已被删除文件的编辑无法统计。`),s.append(t)}s.append('<button id="toChartQueryContributions" class="cdx-button cdx-button--action-progressive">显示饼图</button>'),s.find("#toChartQueryContributions").on("click",async t=>{$(t.target).remove(),s.append('<div id="contributionChart" style="width:100%;height:400px;">加载中……</div>'),await libCachedCode.injectCachedCode("https://testingcf.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js","script");const e=echarts.init(document.getElementById("contributionChart"));e.setOption({tooltip:{trigger:"item",formatter:"{c} ({d}%)"},toolbox:{show:!0,feature:{saveAsImage:{excludeComponents:["toolbox"]}}},legend:{top:"5%",left:"center"},series:[{name:"用户贡献分布",type:"pie",radius:["40%","70%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:10,borderColor:"#fff",borderWidth:2},label:{show:!1,position:"center"},emphasis:{label:{show:!0,fontSize:"40",fontWeight:"bold"}},labelLine:{show:!1},data:p}]}),$(window).on("resize",()=>e.trigger("resize"))})}),s.find("#cancelQueryContributions").on("click",()=>{s.remove()})})());
/* </pre> */