// {{Wikipedia:USync |repo=https://github.com/fee1-dead/cplus |ref=refs/heads/production |path=main.js}}
// A helper for Special:CheckUser.
function O(q){if(document.readyState==="complete")setTimeout(q,1);else document.addEventListener("DOMContentLoaded",q)}function V(){let q=document.querySelector(".mw-checkuser-helper-table");return(q?.querySelector("tbody")?.querySelectorAll("tr").length??0)>=2?q:null}function T(){return new Promise((q)=>{let K=V();if(K)return q(K);let Y=new MutationObserver((Q)=>{let X=V();if(X)Y.disconnect(),q(X)});Y.observe(document.body,{childList:!0,subtree:!0})})}function U(q){let K=document.createElement("div");K.classList.add("cplus-injected","cplus-injected-top");let Y=document.createElement("div");Y.innerText="C+",K.append(Y),Y.classList.add("cplus-injected","cplus-injected-header");let Q=document.createElement("textarea"),X=()=>{let L=Q.value.trim();if(L==="")return new Set;if(L.startsWith("{{sock list|")&&L.endsWith("}}")){let B=L.substring(12,L.length-2);return document.getElementById("cplus-warning")?.remove(),new Set(B.split("|").map((N)=>N.trim()).filter((N)=>N!==""))}else if(!document.getElementById("cplus-warning")){let B=document.createElement("span");B.innerText="C+ Warning: could not parse input sock list",B.id="cplus-warning",K.appendChild(B)}return new Set};K.append(Q),K.classList.add("oo-ui-panelLayout-padded","oo-ui-panelLayout-framed"),Q.classList.add("cplus-injected","cplus-textarea"),Q.oninput=()=>{let L=X();q.forEach((B,N)=>{let $=L.has(N);document.querySelectorAll("."+B).forEach((D)=>{D.checked=$})})},q.forEach((L,B)=>{document.querySelectorAll("."+L).forEach((N)=>{N.addEventListener("change",()=>{let $=N.checked,D=X();if($&&!D.has(B))D.add(B);if(!$)D.delete(B);Q.value=`{{sock list|${[...D].join("|")}}}`,document.querySelectorAll("."+L).forEach((E)=>{E.checked=$})})})});let Z=document.createElement("button");return Z.classList.add("cplus-injected","cplus-copybtn"),Z.innerText="Copy socklist",Z.addEventListener("click",()=>{Q.select(),window.navigator.clipboard.writeText(Q.value)}),K.append(Z),K}O(()=>{let q=mw.config.get("wgPageName").startsWith("Special:SuggestedInvestigations");if(!q&&mw.config.get("wgPageName")!=="Special:CheckUser")return;mw.util.addCSS(`
.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;
}
`),(q?new Promise((Y)=>Y(0)):T()).then((Y)=>{let Q=document.getElementById("checkuserresults");if(!Q&&!q){console.error("cplus: can't get cu results!");return}let X=q?document.querySelector(".ext-checkuser-suggestedinvestigations-table")?.parentElement?.parentElement:Q?.previousElementSibling;if(!X){console.info("cplus: can't find place to inject, bailing");return}if(!q&&!X.classList.contains("mw-pager-navigation-bar")&&!X.classList.contains("mw-checkbox-toggle-controls")){console.info("cplus: not a 'get actions' or 'get users' page, bailing");return}let Z=new Map,L=0,B=(P)=>{let J=P.querySelector("bdi")?.innerText;if(J===void 0)return;if(mw.util.isIPAddress(J))return;if(P.classList.contains("mw-tempuserlink"))return;let H=Z.get(J);if(!H)H=`cplus-checkbox-${L++}`,Z.set(J,H);return H},N=(P)=>{let J=B(P);if(!J)return;let H=document.createElement("input");H.type="checkbox",H.value=P.firstElementChild?.innerHTML??"",H.classList.add("cplus-injected","cplus-checkbox",J),P.before(H)},$=document.querySelector(".mw-checkuser-get-users-results");if(document.querySelectorAll(".mw-checkuser-helper-table tbody tr td a.mw-userlink").forEach(N),$)document.querySelectorAll(".mw-checkuser-user-link a.mw-userlink").forEach((J)=>{let H=B(J);if(!H)return;let I=J.parentElement?.parentElement?.querySelector("input");if(!I)return;I.classList.add("cplus-checkbox",H)});else if(q)document.querySelectorAll(".ext-checkuser-suggestedinvestigations-table tbody tr td ul li a.mw-userlink").forEach(N);else document.querySelectorAll(".mw-checkuser-user-link a.mw-userlink").forEach(N);let E=Array.from(document.querySelectorAll(".cplus-checkbox")),G=null;E.forEach((P,J)=>{P.addEventListener("click",(H)=>{if(G!==null&&H.shiftKey){let F=G[0],M=G[1],R=J;E.slice(Math.min(M,R),Math.max(M,R)+1).forEach((S)=>{S.checked=F.checked,S.dispatchEvent(new Event("change"))})}G=[P,J]})});let W=U(Z);X.before(W)})});