User:Dbeef/cplus.js: Difference between revisions

Content deleted Content added
[BOT] fee1-dead: coompletely overhaul functionality (https://github.com/fee1-dead/cplus/compare/d447f3583ba5...eedd673b5536)
[BOT] dbeef: add support for "get users" page (https://github.com/fee1-dead/cplus/compare/08e7ef10f3e5...3f4fad996ecd)
 
(5 intermediate revisions by the same user not shown)
Line 1:
// {{Wikipedia:USync |repo=https://github.com/fee1-dead/cplus |ref=refs/heads/production |path=main.js}}
// A helper for Special:CheckUser.
function G(N){if(document.readyState==="complete")setTimeout(N,1);else document.addEventListener("DOMContentLoaded",N)}G(()=>{if(mw.config.get("wgPageName")!=="Special:CheckUser")return;let N=document.getElementById("checkuserresults");if(!N){console.error("cplus: can't get cu results!");return}let P=N.previousElementSibling;if(!P){console.info("cplus: can't find place to inject, bailing");return}if(!P.classList.contains("mw-pager-navigation-bar")&&!P.classList.contains("mw-checkbox-toggle-controls")){console.info("cplus: not a 'get actions' or 'get users' page, bailing");return}mw.util.addCSS(`
function T(I){if(document.readyState==="complete"||document.readyState==="interactive")setTimeout(I,1);else document.addEventListener("DOMContentLoaded",I)}T(()=>{if(mw.config.get("wgPageName")!=="Special:CheckUser")return;let I=document.querySelectorAll(".mw-checkuser-helper-table tbody tr td a.mw-userlink"),P=document.querySelectorAll(".mw-checkuser-user-link a.mw-userlink"),J=new Map,Q=0,K=(j)=>{let g=j.querySelector("bdi")?.innerText;if(g===void 0)return;if(mw.util.isIPAddress(g))return;let q=J.get(g);if(!q)q=`cplus-checkbox-${Q++}`,J.set(g,q);let B=document.createElement("input");B.type="checkbox",B.value=j.firstElementChild?.innerHTML??"",B.classList.add("cplus-injected"),B.classList.add(q),j.before(B)};I.forEach(K),P.forEach(K);let G=document.createElement("div"),E=document.createElement("textarea"),L=()=>{let j=E.value.trim();if(j==="")return new Set;if(j.startsWith("{{sock list|")&&j.endsWith("}}")){let g=j.substring(12,j.length-2);return document.getElementById("cplus-warning")?.remove(),new Set(g.split("|").map((q)=>q.trim()))}else if(!document.getElementById("cplus-warning")){let g=document.createElement("span");g.innerText="C+ Warning: could not parse input sock list",g.id="cplus-warning",G.appendChild(g)}return new Set};G.append(E),G.classList.add("cplus-injected"),E.classList.add("cplus-injected"),E.style="left: 100px; position: relative; float: left;",E.oninput=()=>{let j=L();J.forEach((g,q)=>{let B=j.has(q);document.querySelectorAll("."+g).forEach((F)=>{F.checked=B})})},J.forEach((j,g)=>{document.querySelectorAll("."+j).forEach((q)=>{q.addEventListener("change",()=>{let B=q.checked,F=L();if(B&&!F.has(g))F.add(g);if(!B)F.delete(g);E.value=`{{sock list|${[...F].join("|")}}}`,document.querySelectorAll("."+j).forEach((S)=>{S.checked=B})})})});let N=document.querySelector("div.mw-checkuser-helper-copy-text-layout div.oo-ui-fieldLayout-body div span.oo-ui-copyTextLayout-multiline-button");if(!N){console.error("cplus: can't find copy button for table!");return}let H=document.createElement("button");H.style="left: 105px; position: relative",H.classList.add("cplus-injected"),H.innerText="Copy socklist",H.addEventListener("click",()=>{E.select(),window.navigator.clipboard.writeText(E.value)}),G.append(H),N.after(G)});
.cplus-injected-header {
padding: 5px 0 5px 0;
font-size: 1.14285714em;
font-weight: 700;
}
 
.cplus-copybtn {
margin: 5px 0 5px 0;
}
 
.cplus-checkbox {
margin-right: 4px;
}
function T(I){if(document.readyState==="complete"||document.readyState==="interactive")setTimeout(I,1);else document.addEventListener("DOMContentLoaded",I `)}T(()=>{if(mw.config.get("wgPageName")!=="Special:CheckUser")return;let I=document.querySelectorAll(".mw-checkuser-helper-table tbody tr td a.mw-userlink"),P=document.querySelectorAll(".mw-checkuser-user-link a.mw-userlink"),JQ=new Map,QD=0,KY=(jH)=>{let gq=jH.querySelector("bdi")?.innerText;if(gq===void 0)return;if(mw.util.isIPAddress(gq))return;let qB=JQ.get(gq);if(!qB)qB=`cplus-checkbox-${QD++}`,JQ.set(gq,B);return B},Z=(H)=>{let q=Y(H);if(!q)return;let B=document.createElement("input");B.type="checkbox",B.value=jH.firstElementChild?.innerHTML??"",B.classList.add("cplus-injected","cplus-checkbox",q),H.before(B)},E=document.classListquerySelector(".addmw-checkuser-get-users-results");if(qdocument.querySelectorAll(".mw-checkuser-helper-table tbody tr td a.mw-userlink").forEach(Z),jE)document.beforequerySelectorAll(".mw-checkuser-user-link a.mw-userlink").forEach((q)=>{let B=Y(q)};if(!B)return;let I=q.forEachparentElement?.parentElement?.querySelector(K"input");if(!I)return;I.classList.add("cplus-checkbox",PB)});else document.querySelectorAll(".mw-checkuser-user-link a.mw-userlink").forEach(KZ);let GJ=document.createElement("div");J.classList.add("cplus-injected",E"cplus-injected-top");let X=document.createElement("div");X.innerText="C+",J.append(X),X.classList.add("cplus-injected","cplus-injected-header");let K=document.createElement("textarea"),L$=()=>{let jH=EK.value.trim();if(jH==="")return new Set;if(jH.startsWith("{{sock list|")&&jH.endsWith("}}")){let gq=jH.substring(12,jH.length-2);return document.getElementById("cplus-warning")?.remove(),new Set(gq.split("|").map((qB)=>qB.trim()).filter((B)=>B!==""))}else if(!document.getElementById("cplus-warning")){let gq=document.createElement("span");gq.innerText="C+ Warning: could not parse input sock list",gq.id="cplus-warning",GJ.appendChild(gq)}return new Set};GJ.append(EK),GJ.classList.add("cplusoo-injectedui-panelLayout-padded","oo-ui-panelLayout-framed"),EK.classList.add("cplus-injected"),E.style="left: 100px; position: relative; float: left;cplus-textarea"),EK.oninput=()=>{let jH=L$();JQ.forEach((g,q,B)=>{let BI=jH.has(qB);document.querySelectorAll("."+gq).forEach((FL)=>{FL.checked=BI})})},JQ.forEach((jH,gq)=>{document.querySelectorAll("."+jH).forEach((qB)=>{qB.addEventListener("change",()=>{let BI=qB.checked,F=L=$();if(BI&&!FL.has(gq))FL.add(gq);if(!BI)FL.delete(gq);EK.value=`{{sock list|${[...FL].join("|")}}}`,document.querySelectorAll("."+jH).forEach((SF)=>{SF.checked=BI})})})});let N=document.querySelector("div.mw-checkuser-helper-copy-text-layout div.oo-ui-fieldLayout-body div span.oo-ui-copyTextLayout-multiline-button");if(!N){console.error("cplus: can't find copy button for table!");return}let HS=document.createElement("button");H.style="left: 105px; position: relative",HS.classList.add("cplus-injected","cplus-copybtn"),HS.innerText="Copy socklist",HS.addEventListener("click",()=>{EK.select(),window.navigator.clipboard.writeText(EK.value)}),GJ.append(HS),NP.afterbefore(GJ)});