User:Nate1481/assessment.js

// var linkColor = "#002BB8"; var linkLead = ''; var asTalkPage; //"as" to reduce name conflict - wikicode of talkpage var addingNewTemplate = true; var parametersChanged = 0; var talkpagehtml; //html of talkpage var categoryText = null; //result of query.php request var existingTemplateCodeArray; //those on the talk page var TemplateArray = new Array; var templateSelect; var prioritySelect; var bioWorkGroupSelect; var livingSelect; var milHistTaskForceSelect; var livingArray = ["", "yes", "no"]; var priorityArray = ["", "Low", "Mid", "High", "Top"]; var bioWorkGroupArray = ["", "a&e-work-group", "baronets-work-group", "british-royalty", "filmbio-work-group", "military-work-group", "musician-work-group", "peerage-work-group", "politician-work-group", "royalty-work-group", "s&a-work-group", "sports-work-group"]; var milHistTaskForceArray = ["", "———General","Aviation-task-force","Historiography-task-force","Maritime-task-force","Memorials-task-force","Science-task-force","Technology-task-force","Weaponry-task-force","———Nations/Regions","African-task-force","Australian-task-force","Balkan-task-force","British-task-force","Canadian-task-force","Chinese-task-force","Dutch-task-force","French-task-force","German-task-force","Indian-task-force","Italian-task-force","Japanese-task-force","Korean-task-force","Middle-Eastern-task-force","New-Zealand-task-force","Nordic-task-force","Ottoman-task-force","Polish-task-force","Russian-task-force","South-American-task-force","Southeast-Asian-task-force","Spanish-task-force","US-task-force","———Periods/Conflicts","Ancient-Near-Eastern-task-force","Classical-task-force","Medieval-task-force","Early-Modern-task-force","Napoleonic-task-force","ACW-task-force","WWI-task-force","WWII-task-force"]; var templateCodeArray = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]; function aTemplate { this.name = ""; this.code = ""; this.existsGrade = ""; this.existsPriority = ""; this.isUsers = ""; } function TemplateSort(a,b) { if ( a.name > b.name ) return 1 else if ( a.name < b.name ) return -1 else return 0; } $(begin); function begin { if ( wgNamespaceNumber==0 && !location.pathname.match('/w/index.php') && !document.body.innerHTML.match('id="disambig"') ) { if ( Cookie.read("wpasStatus") >= "1" || Cookie.read("wpasStatus") === null ) { if ( document.getElementById("ca-talk").className == "new" ) { asTalkPage = ""; update("#000000", "An " + linkLead + "unassessed article", ""); } else { var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=Talk:" + encodeURIComponent(wgTitle) + "&action=raw"; loadTalkPageRaw(url); } } else if (Cookie.read("wpasStatus") == "0" && !document.getElementById("siteSub").innerHTML.match(writeActivations) ) { document.getElementById("siteSub").innerHTML += writeActivations; } } } function loadTalkPageRaw(url) { if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object var tpreq = new XMLHttpRequest; } else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version var tpreq = new ActiveXObject("Microsoft.XMLHTTP"); } if (tpreq) { tpreq.onreadystatechange = function { if (tpreq.readyState==4) { // if "OK" if (tpreq.status==200) { getAssessment(tpreq); } } }; tpreq.open("GET", url, true); tpreq.send(""); } } function getAssessment(myreq) { asTalkPage = myreq.responseText; var otherInfo = ""; if ( asTalkPage.match( /\{\{ganominee/i ) ) { otherInfo='. Currently a Good Article candidate.'; } else if ( asTalkPage.match(/\{\{fac[\|}]/i ) ) { otherInfo='. Currently a Featured Article candidate.'; } else if (asTalkPage.match(/\{\{peerreview}/i ) ) { otherInfo='. Currently in peer review.'; } if ( document.getElementById("featured-star") ) { if (document.body.innerHTML.match('Featured List', ""); } else { update("#0066CC", 'A Featured Article', ""); } } // should get the match once instead of checking repeatedly: else if ( asTalkPage.match(/class *= *a[ \|\n}]/i) ) { update("#007BFF", "An " + linkLead + "A-class article", otherInfo);} else if ( asTalkPage.match(/\{\{ga[|}]/i ) || asTalkPage.match(/currentstatus *= *(ffa\/)?ga/i) ) { update("#007700", 'A Good Article', otherInfo);} else if ( asTalkPage.match(/class *= *b[ \|\n}]/i) ) { update("#999933", "A " + linkLead + "B-class article", otherInfo);} else if ( asTalkPage.match(/class *= *start[ \|\n}]/i) ) { update("#BB6600", "A " + linkLead + "Start-class</a> article", otherInfo);} else if ( asTalkPage.match(/class *= *stub[ \|\n}]/i) ) { update("#990011", "A " + linkLead + "Stub-class</a> article", otherInfo);} else { update("#000000", "An " + linkLead + "unassessed</a> article", otherInfo);} } function update(color, slogan, info) { if ( typeof document.getElementsByTagName("h1")[0] != "undefined" ) { // see WPdiff:114016002 document.getElementsByTagName("h1")[0].style.cssText = "color: " + color + ";"; } t = document.getElementById("siteSub").innerHTML; document.getElementById("siteSub").innerHTML = slogan + " " + t.charAt(0).toLowerCase + t.substring(1) + info + writeActivations; if ( Cookie.read("wpasStatus") == "2" || Cookie.read("wpasStatus") === null) { for (j = 0; j < templateCodeArray.length ; j++) { myTemplate = new aTemplate; templateCodeArray[j].match(/\{\{([^\|}\n]+)/); myTemplate.name = RegExp.$1; myTemplate.code = templateCodeArray[j]; TemplateArray.push(myTemplate); } if ( typeof assessmentMyTemplateCode != "undefined" ) { existingTemplateCodeArray = getTemplatesInString(assessmentMyTemplateCode.join('\n'), true); } existingTemplateCodeArray = existingTemplateCodeArray.concat( getTemplatesInString(asTalkPage, false) ); for (y = 0; y < existingTemplateCodeArray.length ; y++) { z = 0; notFound = true; while (z < TemplateArray.length && notFound ) { if ( existingTemplateCodeArray[y].name == TemplateArray[z].name ) { TemplateArray[z] = existingTemplateCodeArray[y]; notFound = false; } z++; } if ( notFound ) { TemplateArray.push(existingTemplateCodeArray[y]); } } TemplateArray.sort(TemplateSort); templateSelect = document.createElement("select"); for (x = 0; x < TemplateArray.length ; x++) { templateSelect.options[x] = new Option(TemplateArray[x].name, TemplateArray[x].name); if ( TemplateArray[x].existsGrade != "" && !TemplateArray[x].isUsers ) { existingGrade = TemplateArray[x].existsGrade; templateSelect.options[x].style.backgroundColor = getAssessmentBackgroundColor(existingGrade); templateSelect.options[x].text += " → " + existingGrade; } if (TemplateArray[x].existsPriority != "" && !TemplateArray[x].isUsers ) { templateSelect.options[x].text += "/" + TemplateArray[x].existsPriority; } if ( typeof assessmentDefaultProject != "undefined" && TemplateArray[x].name.toLowerCase == assessmentDefaultProject.toLowerCase ) { templateSelect.selectedIndex = x; } } templateSelect.onchange = projectChange; projectChange; } //more kludge; repaint?? document.getElementById('content').style.zIndex = '3'; window.setTimeout("document.getElementById('content').style.zIndex = '2'",1); } function projectChange { var index = templateSelect.selectedIndex; var templateChoice = templateSelect.options[index].value; myDiv = document.createElement("div"); myDiv.appendChild(templateSelect); if ( TemplateArray[index].code.match(/(priority|importance) *=/) ) { prioritySelect = document.createElement("select"); for (x = 0; x < priorityArray.length ; x++) { prioritySelect.options[x] = new Option(priorityArray[x], priorityArray[x]); if (TemplateArray[index].existsPriority.toLowerCase == priorityArray[x].toLowerCase ) { prioritySelect.selectedIndex = x; } else if (typeof assessmentDefaultPriority != "undefined" && priorityArray[x] == assessmentDefaultPriority && prioritySelect.selectedIndex < 1) { prioritySelect.selectedIndex = x;	 } } myDiv.appendChild(prioritySelect); }	if ( "WPBiography" == templateChoice ) { bioWorkGroupSelect = document.createElement("select"); for (x = 0; x < bioWorkGroupArray.length ; x++) { bioWorkGroupSelect.options[x] = new Option(bioWorkGroupArray[x], bioWorkGroupArray[x]); if (typeof assessmentDefaultWorkGroup != "undefined" && bioWorkGroupArray[x] == assessmentDefaultWorkGroup ) { bioWorkGroupSelect.selectedIndex = x;	 } }	myDiv.appendChild(bioWorkGroupSelect); livingSelect = document.createElement("select"); var livingFlag = ""; if ( document.body.innerHTML.match("Category:Living_people") ) { livingFlag = "yes"; } else if ( document.body.innerHTML.match(/Category:\d+ (BC )?deaths/i) ) { livingFlag = "no"; } else if ( typeof assessmentDefaultLiving != "undefined" ) { livingFlag = assessmentDefaultLiving; }	for (x = 0; x < livingArray.length ; x++) { livingSelect.options[x] = new Option(livingArray[x], livingArray[x]); if ( livingArray[x] == livingFlag) { livingSelect.selectedIndex = x; } }	myDiv.appendChild(livingSelect); } else if ( "WPMILHIST" == templateChoice ) { milHistTaskForceSelect = document.createElement("select"); for (x = 0; x < milHistTaskForceArray.length ; x++) { milHistTaskForceSelect.options[x] = new Option(milHistTaskForceArray[x], milHistTaskForceArray[x]); if (typeof assessmentDefaultMilHistTaskForce != "undefined" && milHistTaskForceArray[x] == assessmentDefaultMilHistTaskForce ) { milHistTaskForceSelect.selectedIndex = x;	 } } myDiv.appendChild(milHistTaskForceSelect); } writeGradeLinks(templateChoice, myDiv); if ( document.getElementById("selectionDiv") === null ) { //order of ops is important for IE document.getElementById("contentSub").appendChild(myDiv) } else { document.getElementById("contentSub").replaceChild(myDiv, document.getElementById("selectionDiv")); } myDiv.id = "selectionDiv"; } function writeGradeLinks(template, theDiv) { var grades = document.createElement("div"); var count = ( Cookie.read("wpasCount") === null ) ? "0" : Cookie.read("wpasCount") ; filmGrades = (template=="Film") ? ' • <a href="javascript:addAssessment(\'Future\')">Future</a>' : "" ; grades.innerHTML = '(<a href="javascript:Cookie.create(\'wpasCount\',0,180);projectChange;" title="Click to reset">' + count + '</a> assessed) <a href="javascript:addAssessment(\'Stub\')" title="Assess as Stub using above template [1]" accesskey="1">Stub</a> • <a href="javascript:addAssessment(\'Start\')" title="Assess as Start using above template [2]" accesskey="2">Start</a> • <a href="javascript:addAssessment(\'B\')" title="Assess as B using above template [3]" accesskey="3">B</a> • <a href="javascript:addAssessment(\'GA\')">GA</a> • <a href="javascript:addAssessment(\'A\')">A</a> • <a href="javascript:addAssessment(\'List\')" title="Not applicable to all projects">List</a>' + filmGrades; theDiv.appendChild(grades); } function addAssessment(grade) { var thisTemplateMatch, newLines, textToReplace, template, ti; var priority = null; template = templateSelect.value; ti = templateSelect.selectedIndex; if (asTalkPage == null) { asTalkPage = "";} else if ( asTalkPage.match(new RegExp("\{\{" + template + "[ \n]*[\|}]", "i") ) ) { addingNewTemplate = false; } else if ( asTalkPage.match(/((^[ \r\n]*\{\{[^\{}]*}}[ \n]*){1,3})/mi ) ) { // there are templates, but not mine replaced = RegExp.$1; replacement = RegExp.$1; if (replaced.match(/(\n{2,}$)/)) { replaced = replaced.replace(RegExp.$1, "\n"); } else { replaced += "\n"; } asTalkPage = asTalkPage.replace(replacement, replaced + TemplateArray[ti].code ); } else { asTalkPage = TemplateArray[ti].code + "\n" + asTalkPage; } // no templates, so add before rest of talk page asTalkPage.match(new RegExp("(\{\{"+template+"[ \n]*[\|}][^}]*}}?)([ \n]?)", "i" ) ); thisTemplateMatch = RegExp.$1; newLines = RegExp.$2; textToReplace = thisTemplateMatch; thisTemplateMatch = updateTemplate(thisTemplateMatch, "class", grade); if (TemplateArray[ti].code.match(/((priority|importance)) *=/) && prioritySelect.options[prioritySelect.selectedIndex].value != "" ) { priority = prioritySelect.options[prioritySelect.selectedIndex].value thisTemplateMatch = updateTemplate(thisTemplateMatch, RegExp.$1, priority ); } thisTemplateMatch = thisTemplateMatch.replace(/\| *auto *= *yes(\n)?/i, ""); //wpdiff 122608658 if (template=="WPBiography") { thisTemplateMatch = thisTemplateMatch.replace("importance", "priority"); if ( bioWorkGroupSelect.options[bioWorkGroupSelect.selectedIndex].value != "" ) { thisTemplateMatch = updateTemplate(thisTemplateMatch, bioWorkGroupSelect.options[bioWorkGroupSelect.selectedIndex].value, "yes" ); }	if ( livingSelect.options[livingSelect.selectedIndex].value != "" ) { thisTemplateMatch = updateTemplate(thisTemplateMatch, "living", livingSelect.options[livingSelect.selectedIndex].value ); } if ( !thisTemplateMatch.match(/listas *= *\w+/i) ) { var sortKey = getSortKey; if ( sortKey != null ) { thisTemplateMatch = updateTemplate(thisTemplateMatch, "listas", sortKey); } } }	else if ( template=="WPMILHIST" ) { thisTemplateMatch = updateTemplate(thisTemplateMatch, milHistTaskForceSelect.options[milHistTaskForceSelect.selectedIndex].value, "yes" ); } asTalkPage = asTalkPage.replace(textToReplace, thisTemplateMatch + ((newLines == "") ? "\n" : newLines) ); asTalkPage = asTalkPage.replace( /\{\{stubclass[^}]}}/i, "" ); // wpdiff 122730502 loadTalkPageHTML(grade, priority, mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=Talk:" + encodeURIComponent(wgTitle) + "&action=edit", template); }	function updateTemplate(templateCode, parameter, val) { var s = templateCode; if ( s.match(/\n/) ) { addCr ="\n"; } else {addCr = ""}; if ( s.match(" =") ) { addSp =" = "; } else {addSp = "="}; if ( s.match(new RegExp('(' + parameter + ' *= *([^|}\n]*))'))) { if (RegExp.$2 != val) { s = s.replace(RegExp.$1, parameter + addSp + val ); parametersChanged++; }	 }	  else { s = s.replace(/}}/, '|' + parameter + addSp + val + addCr + "}}"); parametersChanged++; }	 return s;	} function getSortKey { loadCategories(mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/query.php?what=categories&titles=" + encodeURIComponent(wgTitle) +   	"&clextended&format=yaml"); if ( categoryText != null && categoryText.match(/sortkey: (.+)[\n]/) ) {return RegExp.$1;  } else { return null; } } function loadCategories(url) { if (window.XMLHttpRequest) { var catReq = new XMLHttpRequest; } else if (window.ActiveXObject) { var catReq = new ActiveXObject("Microsoft.XMLHTTP"); } if (catReq) { catReq.onreadystatechange = function { if (catReq.readyState==4) { if (catReq.status==200) { categoryText = catReq.responseText; } } }; catReq.open("GET", url, false); catReq.send(""); } } function loadTalkPageHTML(grade, priority, url, template) { if (window.XMLHttpRequest) { var tphreq = new XMLHttpRequest; } else if (window.ActiveXObject) { var tphreq = new ActiveXObject("Microsoft.XMLHTTP"); } if (tphreq) { tphreq.onreadystatechange = function { if (tphreq.readyState==4) { if (tphreq.status==200) { postAssessment(grade, priority, tphreq, template); } } }; tphreq.open("GET", url, true); tphreq.send(""); } } function postAssessment(grade, priority, myreq, template) { var count; var watchPageHTML; var minorEditHTML = '<input name="wpMinoredit" value="1" id="wpMinoredit" />'; talkpagehtml = myreq.responseText; if ( Cookie.read("wpasCount") === null ) { count = 0; } else { count = parseInt(Cookie.read("wpasCount")); } Cookie.create("wpasCount", String(count + 1), 180); if (typeof assessmentMarkAsMinor != "undefined" && !assessmentMarkAsMinor) { minorEditHTML = ""; } if ( talkpagehtml.match(/<input type=.hidden. value="([\w\d]+)." name="wpEditToken"/i) ) { var editToken = RegExp.$1; } if ( talkpagehtml.match(/<input name=.wpAutoSummary. type="hidden" value="([\w\d]+)"/i) ) { var autoSummary = RegExp.$1; } if ( talkpagehtml.match(/<input type=.hidden. value="([\d]+)" name="wpStarttime"/i) ) { var startTime = RegExp.$1; } if ( talkpagehtml.match(/<input type=.hidden. value="([\d]+)" name="wpEdittime"/i) ) { var editTime = RegExp.$1; } if ( document.body.innerHTML.match('id="ca-unwatch"') ) { watchPageHTML = '<input name="wpWatchthis" value="1" id="wpWatchthis" />'; } else if ( talkpagehtml.match(/<input name=.wpWatchthis. type="checkbox" value="1" checked="checked"/i) ) { if ( ( typeof assessmentOverrideWatchPref == "undefined" ) || ( typeof assessmentOverrideWatchPref != "undefined" && !assessmentOverrideWatchPref ) ) { watchPageHTML = '<input name="wpWatchthis" value="1" id="wpWatchthis" />'; } } mydiv = document.createElement("div"); mydiv.innerHTML = '<form style="visibility: hidden;" id="editform" name="editform" method="post" action="/w/index.php?title=Talk:' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=edit" enctype="multipart/form-data"><textarea name="wpTextbox1" id="wpTextbox1"> <input type="text" name="wpSummary" id="wpSummary"/>' + minorEditHTML + '<input id="wpPreview" name="wpPreview" type="submit"/><input value="' + startTime + '" name="wpStarttime" /><input value="' + editTime + '" name="wpEdittime" /><input value="'+ editToken + '\" name="wpEditToken" /><input name="wpAutoSummary"  value="' + autoSummary + '" />' + watchPageHTML + ' '; document.body.appendChild(mydiv); document.editform.wpTextbox1.value = asTalkPage; priorityText = ( priority != null ) ? "/"+priority : ""; document.editform.wpSummary.value = ((addingNewTemplate) ? 'added ' : 'updated ') + 'wikiproject ' + template + ' «' + grade + priorityText + '»'; document.editform.submit; } function getAssessmentBackgroundColor(grade) { var s = grade.toLowerCase; switch (s) { case "none": return "#DDD" break case "stub": return "#FCC" break case "start": return "#FC9" break case "b": return "#FF9" break case "ga": return "#9C9" break case "a": return "#CFF" break case "fa": return "#9BE" break default: return "" } } function getTemplatesInString(s, isUsers) { var a = new Array; while (s.match(/(\{\{ *([\w\d\.\- ]+)[^\{}]*[^\-]class *= *(\w+)?[^}]*}})/mi) ) { code = RegExp.$1; name = RegExp.$2.charAt(0).toUpperCase + RegExp.$2.substring(1); grade = ( RegExp.$3.length == 1 ? RegExp.$3.toUpperCase : RegExp.$3 ); t = new aTemplate; t.name = name.replace(/ +$/, ""); t.code = code; t.existsGrade = ((grade == "") ? "none" : grade); if ( code.match(/(priority|importance) *= *(\w+)/i) ) { t.existsPriority = RegExp.$2; } t.isUsers = ( isUsers ) ? true : false; a.push(t); s = s.replace(code, ""); } return a; } function writeActivations { return '  [<a href="javascript:switchActivation(\'2\')">On</a>] • [<a   href="javascript:switchActivation(\'1\')">Hide</a>] • [<a href="javascript:switchActivation(\'0\')">Off</a>] '; } function switchActivation(level) { Cookie.create("wpasStatus", level,180); if (level == "2" && document.getElementById("selectionDiv") === null) { begin; document.getElementById("selectionDiv").style.display = "block" ; } else if ( document.getElementById("selectionDiv") != null && (level == "1" || level == "0" ) ) { document.getElementById("selectionDiv").style.display = "none"; } } var Cookie= { // from http://www.quirksmode.org/js/cookies.html create: function(name,value,days) {		var expires; if (days) {			var date = new Date; date.setTime(date.getTime+(days*24*60*60*1000)); expires = "; expires="+date.toGMTString; }		else { expires = ""; } document.cookie = name+"="+value+expires+"; path=/"; },	read: function(name) {		var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) {			var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } }		return null; },	erase: function(name) {		Cookie.create(name,"",-1); } }; //