User:Blue/scripts/hotstubcat.js
From RationalWiki
Note: After saving, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Clear the cache in Tools → Preferences
//<nowiki> function setupForStubcat() { var stubtemp = getElementsByClassName(document.getElementById('bodyContent'),"*","stubtemplate"); if (stubtemp) stubtemp = stubtemp[0]; if (!stubtemp) return false; if (stubtemp.getElementsByTagName("i")[0].innerHTML == "This article is a <b>stub.</b>") { // Uncategorized var stubcatDiv = document.createElement("div"); stubcatDiv.id = "stubcatDiv"; stubcatDiv.style.backgroundColor = "#f9f9f9"; stubcatDiv.style.borderLeft = "1px solid #aaa"; stubcatDiv.style.borderRight = "1px solid #aaa"; stubcatDiv.style.borderBottom = "1px solid #aaa"; stubcatDiv.style.padding = ".3em"; stubcatDiv.style.margin = "0em auto .4em auto"; stubcatDiv.style.textAlign = "center"; stubcatDiv.style.width = "100px"; stubtemp.style.marginBottom = "0"; var cathotlink = document.createElement("span"); cathotlink.innerHTML = "<a style='color: #0645AD; cursor: pointer'>categorize</a>"; cathotlink.onclick = function() { var stubcatFormSpan = document.createElement("span"); stubcatFormSpan.id = "stubcatForm"; stubcatFormSpan.innerHTML = "<span id='stubcatForm'><input type='text' onkeyup='lookupStubcat()' id='stubcatInput' /><button id='stubcatOK' style='margin-left: .2em;' onclick='executeStubcat()'>OK</button><button style='margin-left: .2em;' onclick='cancelStubcat()'>Cancel</button></span>"; document.getElementById("stubcatDiv").innerHTML = ""; document.getElementById("stubcatDiv").style.width = "260px"; document.getElementById("stubcatDiv").appendChild(stubcatFormSpan); } stubcatDiv.appendChild(cathotlink); stubtemp.parentNode.insertBefore(stubcatDiv, stubtemp.nextSibling); } else { // Already categorized var stubcatDiv = document.createElement("div"); stubcatDiv.id = "stubcatDiv"; stubcatDiv.style.backgroundColor = "#f9f9f9"; stubcatDiv.style.borderLeft = "1px solid #aaa"; stubcatDiv.style.borderRight = "1px solid #aaa"; stubcatDiv.style.borderBottom = "1px solid #aaa"; stubcatDiv.style.padding = ".3em"; stubcatDiv.style.textAlign = "center"; stubcatDiv.style.width = "100px"; stubcatDiv.style.margin = "0em auto .4em auto"; stubtemp.style.marginBottom = "0"; var cathotlink = document.createElement("span"); cathotlink.innerHTML = "<a style='color: #0645AD; cursor: pointer'>change category</a>"; cathotlink.onclick = function() { var stubcatFormSpan = document.createElement("span"); stubcatFormSpan.id = "stubcatForm"; stubcatFormSpan.innerHTML = "<span id='stubcatForm'><input type='text' onkeyup='lookupStubcat()' id='stubcatInput' /><button id='stubcatOK' style='margin-left: .2em;' onclick='executeStubcatChange()'>OK</button><button style='margin-left: .2em;' onclick='cancelStubcat()'>Cancel</button></span>"; document.getElementById("stubcatDiv").innerHTML = ""; document.getElementById("stubcatDiv").style.width = "260px"; document.getElementById("stubcatDiv").appendChild(stubcatFormSpan); } stubcatDiv.appendChild(cathotlink); stubtemp.parentNode.insertBefore(stubcatDiv, stubtemp.nextSibling); } } function lookupStubcat() { if (document.getElementById("stubcatInput").value != "") { if (window.XMLHttpRequest) { var req = new XMLHttpRequest(); } else { var req = new ActiveXObject("Microsoft.XMLHTTP"); } req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { var memberList = []; var jsonOutput = eval('(' + req.responseText + ')'); var cmembers = jsonOutput.query.categorymembers; for (var memberObj in cmembers) { memberList.push(cmembers[memberObj].title); } var inputted = document.getElementById("stubcatInput").value; var checked = false; var preg = new RegExp("Category:" + inputted + "-related stubs", "i"); for (var member in memberList) { if (memberList[member].match(preg) != null) { document.getElementById("stubcatInput").style.backgroundColor = "#ddeede"; checked = true; } } if (!checked) { document.getElementById("stubcatInput").style.backgroundColor = "#f4d2cc"; } } } req.open("GET", wgServer + wgScriptPath + "/api.php?action=query&format=json&list=categorymembers&cmlimit=500&cmtitle=Category:Articles%20needing%20expansion", true); req.send(null); } } function executeStubcat() { if (window.XMLHttpRequest) { var req = new XMLHttpRequest(); } else { var req = new ActiveXObject("Microsoft.XMLHTTP"); } req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { var inputted = document.getElementById("stubcatInput").value; var curText = req.responseText; curText = curText.replace(/{{stub}}/i, "{{stub|" + inputted + "}}"); function gettoken_api() { var api = sajax_init_object(); api.open('GET', wgServer + wgScriptPath + '/api.php?format=json&action=query&prop=info&indexpageids=1&intoken=edit&titles=Whatever', false); api.send(null); if (api.readyState == 4 && api.status == 200) { var response = eval('(' + api.responseText + ')'); var token = response['query']['pages'][response['query']['pageids'][0]]['edittoken']; } return token; } if (window.XMLHttpRequest) { var exreq = new XMLHttpRequest(); } else { var exreq = new ActiveXObject("Microsoft.XMLHTTP"); } function bottest() { if (wgUserGroups.indexOf("bot") == -1) { return ""; } else { return "&bot"; } } var editToken = encodeURIComponent(gettoken_api()); exreq.open("POST", wgServer + wgScriptPath + "/api.php?action=edit&title=" + encodeURIComponent(wgPageName) + bottest() + "&text=" + encodeURIComponent(curText) + "&token=" + editToken + "&summary=" + encodeURIComponent("added stub type [[:Category:" + inputted + "-related stubs|" + inputted + "]] using [[User:Blue/scripts/hotstubcat.js|HotStubCat]]"), true); exreq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); exreq.send(null); window.location.reload(); } } req.open("GET", wgServer + wgScriptPath + "/index.php?title=" + wgPageName + "&action=raw", true); req.send(null); } function executeStubcatChange() { if (window.XMLHttpRequest) { var req = new XMLHttpRequest(); } else { var req = new ActiveXObject("Microsoft.XMLHTTP"); } req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { var inputted = document.getElementById("stubcatInput").value; var curText = req.responseText; var stLoc = curText.search(/{{stub/i); for (var j = stLoc; j < curText.length; j++) { if (curText.slice(j, j + 2) == "}}") { var newText = curText.slice(stLoc, j + 2); var curCat = newText.slice(7, newText.length-2); } } curText = curText.replace(newText, "{{stub|" + inputted + "}}"); function gettoken_api() { var api = sajax_init_object(); api.open('GET', wgServer + wgScriptPath + '/api.php?format=json&action=query&prop=info&indexpageids=1&intoken=edit&titles=Whatever', false); api.send(null); if (api.readyState == 4 && api.status == 200) { var response = eval('(' + api.responseText + ')'); var token = response['query']['pages'][response['query']['pageids'][0]]['edittoken']; } return token; } if (window.XMLHttpRequest) { var exreq = new XMLHttpRequest(); } else { var exreq = new ActiveXObject("Microsoft.XMLHTTP"); } function bottest() { if (wgUserGroups.indexOf("bot") == -1) { return ""; } else { return "&bot"; } } var editToken = encodeURIComponent(gettoken_api()); exreq.open("POST", wgServer + wgScriptPath + "/api.php?action=edit&title=" + encodeURIComponent(wgPageName) + bottest() + "&text=" + encodeURIComponent(curText) + "&token=" + editToken + "&summary=" + encodeURIComponent("changed stub type [[:Category:" + curCat + "-related stubs|" + curCat + "]] to [[:Category:" + inputted + "-related stubs|" + inputted + "]] using [[User:Blue/scripts/hotstubcat.js|HotStubCat]]"), true); exreq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); exreq.send(null); window.location.reload(); } } req.open("GET", wgServer + wgScriptPath + "/index.php?title=" + wgPageName + "&action=raw", true); req.send(null); } function cancelStubcat() { document.getElementById("stubcatDiv").parentNode.removeChild(document.getElementById("stubcatDiv")); var stubtemp = getElementsByClassName(document.getElementById('bodyContent'),"*","stubtemplate"); if (stubtemp) stubtemp = stubtemp[0]; if (!stubtemp) return false; if (stubtemp.getElementsByTagName("i")[0].innerHTML == "This article is a <b>stub.</b>") { // Uncategorized var stubcatDiv = document.createElement("div"); stubcatDiv.id = "stubcatDiv"; stubcatDiv.style.backgroundColor = "#f9f9f9"; stubcatDiv.style.borderLeft = "1px solid #aaa"; stubcatDiv.style.borderRight = "1px solid #aaa"; stubcatDiv.style.borderBottom = "1px solid #aaa"; stubcatDiv.style.padding = ".3em"; stubcatDiv.style.margin = "0em auto .4em auto"; stubcatDiv.style.textAlign = "center"; stubcatDiv.style.width = "100px"; stubtemp.style.marginBottom = "0"; var cathotlink = document.createElement("span"); cathotlink.innerHTML = "<a style='color: #0645AD; cursor: pointer'>categorize</a>"; cathotlink.onclick = function() { var stubcatFormSpan = document.createElement("span"); stubcatFormSpan.id = "stubcatForm"; stubcatFormSpan.innerHTML = "<span id='stubcatForm'><input type='text' onkeyup='lookupStubcat()' id='stubcatInput' /><button id='stubcatOK' style='margin-left: .2em;' onclick='executeStubcat()'>OK</button><button style='margin-left: .2em;' onclick='cancelStubcat()'>Cancel</button></span>"; document.getElementById("stubcatDiv").innerHTML = ""; document.getElementById("stubcatDiv").style.width = "260px"; document.getElementById("stubcatDiv").appendChild(stubcatFormSpan); } stubcatDiv.appendChild(cathotlink); stubtemp.parentNode.insertBefore(stubcatDiv, stubtemp.nextSibling); } else { // Already categorized var stubcatDiv = document.createElement("div"); stubcatDiv.id = "stubcatDiv"; stubcatDiv.style.backgroundColor = "#f9f9f9"; stubcatDiv.style.borderLeft = "1px solid #aaa"; stubcatDiv.style.borderRight = "1px solid #aaa"; stubcatDiv.style.borderBottom = "1px solid #aaa"; stubcatDiv.style.padding = ".3em"; stubcatDiv.style.textAlign = "center"; stubcatDiv.style.width = "100px"; stubcatDiv.style.margin = "0em auto .4em auto"; stubtemp.style.marginBottom = "0"; var cathotlink = document.createElement("span"); cathotlink.innerHTML = "<a style='color: #0645AD; cursor: pointer'>change category</a>"; cathotlink.onclick = function() { var stubcatFormSpan = document.createElement("span"); stubcatFormSpan.id = "stubcatForm"; stubcatFormSpan.innerHTML = "<span id='stubcatForm'><input type='text' onkeyup='lookupStubcat()' id='stubcatInput' /><button id='stubcatOK' style='margin-left: .2em;' onclick='executeStubcatChange()'>OK</button><button style='margin-left: .2em;' onclick='cancelStubcat()'>Cancel</button></span>"; document.getElementById("stubcatDiv").innerHTML = ""; document.getElementById("stubcatDiv").style.width = "260px"; document.getElementById("stubcatDiv").appendChild(stubcatFormSpan); } stubcatDiv.appendChild(cathotlink); stubtemp.parentNode.insertBefore(stubcatDiv, stubtemp.nextSibling); } } addOnloadHook(setupForStubcat); //</nowiki>