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] fee1-dead: improve load/mount reliability; better style; more classes for configurability (https://github.com/fee1-dead/cplus/compare/eedd673b5536...4246966ac3e6)
Line 1:
// {{Wikipedia:USync |repo=https://github.com/fee1-dead/cplus |ref=refs/heads/production |path=main.js}}
// A helper for Special:CheckUser.
function TF(IL){if(document.readyState==="complete"||document.readyState==="interactive")setTimeout(IL,1);else document.addEventListener("DOMContentLoaded",IL)}TF(()=>{if(mw.config.get("wgPageName")!=="Special:CheckUser")return;let IL=document.getElementById("checkuserresults");if(!L){console.error("cplus: can't cu results!");return}mw.util.addCSS(`
.cplus-copybtn {
margin: 5px 0 5px 0;
}

.cplus-checkbox {
margin-right: 4px;
}
`);let Z=document.querySelectorAll(".mw-checkuser-helper-table tbody tr td a.mw-userlink"),P$=document.querySelectorAll(".mw-checkuser-user-link a.mw-userlink"),JP=new Map,Qg=0,KX=(jB)=>{let gq=jB.querySelector("bdi")?.innerText;if(gq===void 0)return;if(mw.util.isIPAddress(gq))return;let qH=JP.get(gq);if(!qH)qH=`cplus-checkbox-${Qg++}`,JP.set(g,q,H);let BI=document.createElement("input");BI.type="checkbox",BI.value=jB.firstElementChild?.innerHTML??"",BI.classList.add("cplus-injected","cplus-checkbox",H),B.classList.add(q),j.before(BI)};IZ.forEach(KX),P$.forEach(KX);let GJ=document.createElement("div"),ES=document.createElement("div");S.innerText="C+",J.append(S),S.classList.add("cplus-injected","cplus-injected-header");let K=document.createElement("textarea"),LY=()=>{let jB=EK.value.trim();if(jB==="")return new Set;if(jB.startsWith("{{sock list|")&&jB.endsWith("}}")){let gq=jB.substring(12,jB.length-2);return document.getElementById("cplus-warning")?.remove(),new Set(gq.split("|").map((qH)=>qH.trim()))}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("cplus-injected","cplus-injected-top"),EJ.classList.add("cplusoo-injectedui-panelLayout-padded","oo-ui-panelLayout-framed"),EK.style=classList.add("left: 100px; position: relative; float: left;cplus-injected",E"cplus-textarea"),K.oninput=()=>{let jB=LY();JP.forEach((g,q,H)=>{let BI=jB.has(qH);document.querySelectorAll("."+gq).forEach((FN)=>{FN.checked=BI})})},JP.forEach((jB,gq)=>{document.querySelectorAll("."+jB).forEach((qH)=>{qH.addEventListener("change",()=>{let BI=qH.checked,FN=LY();if(BI&&!FN.has(gq))FN.add(gq);if(!BI)FN.delete(gq);EK.value=`{{sock list|${[...FN].join("|")}}}`,document.querySelectorAll("."+jB).forEach((SE)=>{SE.checked=BI})})})});let ND=documentL.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 HpreviousElementSibling??L,Q=document.createElement("button");H.style="left: 105px; position: relative",HQ.classList.add("cplus-injected","cplus-copybtn"),HQ.innerText="Copy socklist",HQ.addEventListener("click",()=>{EK.select(),window.navigator.clipboard.writeText(EK.value)}),GJ.append(HQ),ND.afterbefore(GJ)});