User:BrownHairedGirl/metadatatest.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 workGroupSelect;

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 filmTaskForceArray = ["", "Awards-task-force", "Festival-task-force", "Filmmaking-task-force", "War-task-force", "Argentine-task-force", "Chinese-task-force", "French-task-force", "Indian-task-force", "Italian-task-force", "Persian-task-force", "Spanish-task-force"];

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"];

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 ( mw.config.get('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(mw.config.get('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('

update("#0066CC", 'A 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 *= *c[ \|\n}]/i) ) { update("#AA801A", "A " + linkLead + "C-class 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 article", otherInfo);}

else if ( asTalkPage.match(/class *= *stub[ \|\n}]/i) ) { update("#990011", "A " + linkLead + "Stub-class article", otherInfo);}

else { update("#000000", "An " + linkLead + "unassessed 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) {

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 for imgs

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 || "Film" == templateChoice || "FilmsWikiProject" == templateChoice) {

myWorkGroupArray = ("WPBiography" == templateChoice) ? bioWorkGroupArray : filmTaskForceArray;

workGroupSelect = document.createElement("select");

for (x = 0; x < myWorkGroupArray.length ; x++) {

workGroupSelect.options[x] = new Option(myWorkGroupArray[x], myWorkGroupArray[x]);

if (typeof assessmentDefaultWorkGroup != "undefined" && myWorkGroupArray[x] == assessmentDefaultWorkGroup ) {

workGroupSelect.selectedIndex = x;

}

}

myDiv.appendChild(workGroupSelect);

}

if ( "WPBiography" == templateChoice ) {

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") ? ' • Future' : "" ;

grades.innerHTML = '(' + count + ' assessed) StubStartCBGAAList' + 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" || template=="Film" || template=="FilmsWikiProject") {

thisTemplateMatch = thisTemplateMatch.replace("importance", "priority");

if ( workGroupSelect.options[workGroupSelect.selectedIndex].value != "" ) {

thisTemplateMatch = updateTemplate(thisTemplateMatch, workGroupSelect.options[workGroupSelect.selectedIndex].value, "yes" );

}

}

if (template=="WPBiography") {

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(mw.config.get('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(mw.config.get('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 = '';

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(/

var editToken = RegExp.$1;

}

if ( talkpagehtml.match(/

var autoSummary = RegExp.$1;

}

if ( talkpagehtml.match(/

var startTime = RegExp.$1;

}

if ( talkpagehtml.match(/

var editTime = RegExp.$1;

}

if ( document.body.innerHTML.match('id="ca-unwatch"') ) {

watchPageHTML = '';

}

else if ( talkpagehtml.match(/

if ( ( typeof assessmentOverrideWatchPref == "undefined" ) || ( typeof assessmentOverrideWatchPref != "undefined" && !assessmentOverrideWatchPref ) ) {

watchPageHTML = '';

}

}

mydiv = document.createElement("div");

mydiv.innerHTML = '

';

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 "c":

return "#FC6"

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 '   [On] • [Hide] • [Off]';

}

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);

}

};

//