User:Dudemanfellabra/AssessNRHP.js

// global vars

var Articles=[]

var currentlyDisplayed=""

var CheckDefaults={"autoload":false, "ignoreconfirm":false, "watchtarget":true}

function MaintenanceButton() {

var button=document.createElement("input")

button.setAttribute("type", "button");

if (mw.config.get('wgPageName')=="Wikipedia:WikiProject_National_Register_of_Historic_Places/to_do") {

button.setAttribute("value", "Assess quality/importance of unassessed articles");

button.setAttribute("id", "maintenancebutton");

button.setAttribute("onclick", "MaintenanceClick('maintenance')");

} else if ((mw.config.get('wgPageName').search("National_Register_of_Historic_Places_listings") != -1 || mw.config.get('wgPageName').search("National_Historic_Landmarks_in") != -1) && mw.config.get('wgNamespaceNumber')==0 && location.href.indexOf('action')==-1 && mw.config.get('wgArticleId')!=0) {

button.setAttribute("value", "Assess quality/importance of unassessed articles");

button.setAttribute("id", "untaggedbutton");

button.setAttribute("onclick", "MaintenanceClick('untagged')");

} else if (mw.config.get('wgPageName')=="Category:Pages_using_infobox_NRHP_with_unknown_parameters") {

button.setAttribute("value", "Clean up infoboxes");

button.setAttribute("id", "infoboxbutton");

button.setAttribute("onclick", "MaintenanceClick('infobox')");

} else {

return;

}

var content=document.getElementById('mw-content-text')

content.parentNode.insertBefore(button, content)

}

function MaintenanceClick(param) {

var button = document.getElementById(param+'button')

button.disabled = true

var DisplayDiv=document.createElement("div")

var content=document.getElementById("mw-content-text")

DisplayDiv.setAttribute('id', 'DisplayDiv')

DisplayDiv.setAttribute("style", "width:100%; border:1px solid black; padding:5px")

content.parentNode.insertBefore(DisplayDiv, content)

var UIDiv=document.createElement("div")

UIDiv.setAttribute('id', 'UIDiv')

UIDiv.setAttribute("style", "width:100%; height:280px; border:1px solid black; padding:5px; text-align:center; vertical-align:top")

DisplayDiv.parentNode.insertBefore(UIDiv, DisplayDiv)

if (param=="maintenance") {

QueryMaintenance()

} else if (param=="untagged") {

QueryUntagged()

} else if (param=="infobox") {

QueryInfoboxCleanup()

} else {

return;

}

}

function QueryMaintenance() {

var NoQuality = JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

list: 'categorymembers',

cmtitle: 'Category:Unassessed National Register of Historic Places articles',

cmprop: 'title',

cmtype: 'page',

cmlimit: 'max'

},

async:false

})

.responseText

);

for (var c in NoQuality.query.categorymembers) {

Articles[Articles.length]=NoQuality.query.categorymembers[c].title.replace("Talk:","")

}

if (NoQuality["query-continue"]) {

var cmcontinue = NoQuality["query-continue"].categorymembers.cmcontinue

while (true) {

var NoQuality = JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

list: 'categorymembers',

cmtitle: 'Category:Unassessed National Register of Historic Places articles',

cmprop: 'title',

cmtype: 'page',

cmlimit: 'max',

cmcontinue: cmcontinue

},

async:false

})

.responseText

);

for (var c in NoQuality.query.categorymembers) {

Articles[Articles.length]=NoQuality.query.categorymembers[c].title.replace("Talk:","")

}

if (NoQuality["query-continue"]) {

cmcontinue = NoQuality["query-continue"].categorymembers.cmcontinue

} else {

break;

}

}

}

// have all members of Unassessed category; now get unknown-importance

var NoImportance = JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

list: 'categorymembers',

cmtitle: 'Category:Unknown-importance National Register of Historic Places articles',

cmprop: 'title',

cmtype: 'page',

cmlimit: 'max'

},

async:false

})

.responseText

);

for (var c in NoImportance.query.categorymembers) {

Articles[Articles.length]=NoImportance.query.categorymembers[c].title.replace("Talk:","")

}

if (NoImportance["query-continue"]) {

var cmcontinue = NoImportance["query-continue"].categorymembers.cmcontinue

while (true) {

var NoImportance = JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

list: 'categorymembers',

cmtitle: 'Category:Unknown-importance National Register of Historic Places articles',

cmprop: 'title',

cmtype: 'page',

cmlimit: 'max',

cmcontinue: cmcontinue

},

async:false

})

.responseText

);

for (var c in NoImportance.query.categorymembers) {

Articles[Articles.length]=NoImportance.query.categorymembers[c].title.replace("Talk:","")

}

if (NoImportance["query-continue"]) {

cmcontinue = NoImportance["query-continue"].categorymembers.cmcontinue

} else {

break;

}

}

}

// have all articles; now remove duplicates (articles that are both unassessed AND unknown-importance

for (var i=0;i

for (var j=i+1;j

if (Articles[i]==Articles[j]) {Articles.splice(j,1);j--}

}

}

Articles.sort()

UpdateUIDiv(-1, false, false, false)

}

function QueryUntagged() {

var wikitext=getAssessmentWikitext(mw.config.get('wgPageName'))

if (wikitext=="error") {

alert("Could not retrieve wikitext! Assessment script aborted!")

return;

}

var TableStartIndex=0

var currentTable=0

while (1) {

var Rows=[];

TableStartIndex=wikitext.search(/{{NRHP (former )?header/) // find next table

if (TableStartIndex==-1) {

break;

}

wikitext=wikitext.substr(TableStartIndex+1,wikitext.length-TableStartIndex) // get rid everything before current table

var UnassessedStr = ""

var UntaggedStr = ""

var tabletext=wikitext.substr(0,wikitext.indexOf("\n|}"))

tabletext=tabletext.replace(/\<\!\-\-(.|[\r\n])*?\-\-\>/g, "") // get rid of commented out rows

var index, RowLocations = [];

var str = "{{NRHP row"

var skip = str.length

var StartIndex = 0

while ((index = tabletext.indexOf(str, StartIndex)) > -1) {

RowLocations.push(index);

StartIndex = index + skip;

}

RowLocations.push(tabletext.length) // last row ends at end of table

for (var i=0; i

Rows.push(tabletext.substr(RowLocations[i],RowLocations[i+1]-RowLocations[i]))

}

var TitlesArray = [];

for (var j=0; j

var link=Rows[j].match(/\|[ ]*?article[ ]*?=[ ]*?.*?[\n|\|]/g)

var blank=Rows[j].match(/\|[ ]*?article[ ]*?=[ ]*?[\n|\|]/g) // default to name param if article

if (link==null||blank!=null) link=Rows[j].match(/\|[ ]*?name[ ]*?=[ ]*?.*?[\n|\|]/g) // blank or missing

link=link[0].replace(/\|[ ]*?(article|name)[ ]*?=[ ]*?/g,"").replace(/[\n|\|]/g,"") // strip param name, final line break

link=decodeURIComponent(link.split("#")[0].trim()) // corrections for weird titles

TitlesArray.push(link)

}

for (var i=0;i

for (var j=i+1;j

if (TitlesArray[i]==TitlesArray[j]) {TitlesArray.splice(j,1);j--}

}

}

toQuery=TitlesArray.length

var done = "no"

var loops = 0

while (done=="no") {

if (toQuery>50) {

var TempTitlesArray = TitlesArray.slice(50*loops,50*(loops+1))

} else {

var TempTitlesArray = TitlesArray.slice(50*loops)

}

TempTitlesArray.sort() // query below returns results in alphabetical order

var temptitle=TempTitlesArray[0]

for (var k=1; k

temptitle+="|"+TempTitlesArray[k]

}

var dabs=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'categories',

clcategories: 'Category:All disambiguation pages',

cllimit: 'max',

titles: temptitle,

redirects: 'true'

},

async:false

})

.responseText

);

if (dabs.query.normalized) { // normalize any weird titles

for (var n in dabs.query.normalized) {

for (var k=0; k

if (TempTitlesArray[k]==dabs.query.normalized[n].from) TempTitlesArray[k]=dabs.query.normalized[n].to

}

}

}

if (dabs.query.redirects) { // resolve any redirects

for (var r in dabs.query.redirects) {

for (var k=0; k

if (TempTitlesArray[k]==dabs.query.redirects[r].from) TempTitlesArray[k]=dabs.query.redirects[r].to

}

}

}

for (var i=0;i

for (var j=i+1;j

if (TempTitlesArray[i]==TempTitlesArray[j]) {TempTitlesArray.splice(j,1);j--}

}

}

TempTitlesArray.sort()

for (var page in dabs.query.pages) {

if (typeof dabs.query.pages[page].missing!="undefined") { // if unarticled, get rid of it in preparation for

for (var l=0; l

if (TempTitlesArray[l]==dabs.query.pages[page].title) {TempTitlesArray.splice(l,1); l--}

}

}

if (dabs.query.pages[page].categories) {

for (var category in dabs.query.pages[page].categories) {

for (var l=0; l

if (TempTitlesArray[l]==dabs.query.pages[page].title) {TempTitlesArray.splice(l,1);l--}

}

}

}

}

// Now look at talk pages to find quality stats

if (TempTitlesArray.length>0) {

var temptalktitle="Talk:"+TempTitlesArray[0]

for (var k=1; k

temptalktitle+="|Talk:"+TempTitlesArray[k]

}

var QualityList=["Unassessed", "Stub", "Start", "C", "B", "GA", "A", "FA", "FL", "List", "Redirect", "Category", "Disambig", "File", "Project", "Template", "NA"]

var ImportanceList=["Unknown", "Top", "High", "Mid", "Low", "Related", "NA"]

var catlist="Category:Unassessed National Register of Historic Places articles"

for (var i=1; i

catlist+="|Category:"+QualityList[i]+"-Class National Register of Historic Places articles"

}

for (var i=0; i

catlist+="|Category:"+ImportanceList[i]+"-importance National Register of Historic Places articles"

}

var talkpages=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'categories',

clcategories: catlist,

cllimit: 'max',

titles: temptalktitle

},

async:false

})

.responseText

);

for (var page in talkpages.query.pages) {

var tagged = false

if (talkpages.query.pages[page].categories) {

for (var category in talkpages.query.pages[page].categories) {

tagged = true

var CatTitle=talkpages.query.pages[page].categories[category].title

if (CatTitle.indexOf("Unassessed")!=-1||CatTitle.indexOf("Redirect")!=-1) {

Articles[Articles.length]=talkpages.query.pages[page].title.replace("Talk:","")

}

}

}

if (!tagged) {

Articles[Articles.length]=talkpages.query.pages[page].title.replace("Talk:","")

}

}

}

if (toQuery>50) {

toQuery = toQuery-50

loops++

} else {

done = "yes"

}

}

currentTable++

}

for (var i=0;i

for (var j=i+1;j

if (Articles[i]==Articles[j]) {Articles.splice(j,1);j--}

}

}

Articles.sort()

UpdateUIDiv(-1, false, false, false)

}

function QueryInfoboxCleanup() {

var Infoboxes = JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

list: 'categorymembers',

cmtitle: 'Category:Pages using infobox NRHP with unknown parameters',

cmsort: 'sortkey',

cmprop: 'title',

cmtype: 'page',

cmlimit: 'max'

},

async:false

})

.responseText

);

for (var c in Infoboxes.query.categorymembers) {

Articles[Articles.length]=Infoboxes.query.categorymembers[c].title

}

if (Infoboxes["query-continue"]) {

var cmcontinue = Infoboxes["query-continue"].categorymembers.cmcontinue

while (true) {

var Infoboxes = JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

list: 'categorymembers',

cmtitle: 'Category:Pages using infobox NRHP with unknown parameters',

cmprop: 'title',

cmtype: 'page',

cmlimit: 'max',

cmcontinue: cmcontinue

},

async:false

})

.responseText

);

for (var c in Infoboxes.query.categorymembers) {

Articles[Articles.length]=Infoboxes.query.categorymembers[c].title

}

if (Infoboxes["query-continue"]) {

cmcontinue = Infoboxes["query-continue"].categorymembers.cmcontinue

} else {

break;

}

}

}

UpdateInfoboxUIDiv(-1, false, false, false)

}

function UpdateUIDiv(selected, autoload, ignoreconfirm, watchtarget) {

var DisplayDiv=document.getElementById("DisplayDiv")

var UIDiv=document.getElementById("UIDiv")

UIDiv.innerHTML=""

if (Articles.length==0) {

UIDiv.style.verticalAlign="middle"

UIDiv.innerHTML="There are no more articles to tag/assess. Good job!"

DisplayDiv.innerHTML=""

return;

}

var ListDiv=document.createElement("div")

ListDiv.setAttribute("style","width:39.5%; float:left; text-align:left")

ListDiv.innerHTML="

"+Articles.length+" articles need to be tagged/assessed
"

var select=document.createElement("select")

select.setAttribute("size",15)

select.setAttribute("id","ArticlesList")

select.setAttribute("style","width:300px")

for (var i=0; i

var option=document.createElement("option")

option.innerHTML=Articles[i]

select.appendChild(option)

}

select.selectedIndex=selected

ListDiv.appendChild(select)

var buttondiv=document.createElement("div")

buttondiv.setAttribute("style","width:300px; text-align:center")

var prevbutton=document.createElement("input")

prevbutton.setAttribute("type", "button")

prevbutton.setAttribute("value", "Load previous")

prevbutton.setAttribute("style","margin-top:7px")

prevbutton.setAttribute("onclick", "LoadWrapper('prev')");

buttondiv.appendChild(prevbutton)

var selectbutton=document.createElement("input")

selectbutton.setAttribute("type", "button")

selectbutton.setAttribute("value", "Load selected")

selectbutton.setAttribute("style","margin-top:7px")

selectbutton.setAttribute("onclick", "LoadWrapper('selected')");

buttondiv.appendChild(selectbutton)

var nextbutton=document.createElement("input")

nextbutton.setAttribute("type", "button")

nextbutton.setAttribute("value", "Load next")

nextbutton.setAttribute("style","margin-top:7px")

nextbutton.setAttribute("onclick", "LoadWrapper('next')");

buttondiv.appendChild(nextbutton)

ListDiv.appendChild(buttondiv)

UIDiv.appendChild(ListDiv)

var AssessmentDiv=document.createElement("div")

AssessmentDiv.setAttribute("id","AssessmentDiv")

AssessmentDiv.setAttribute("style","width:59.5%; float:right; text-align:center")

UIDiv.appendChild(AssessmentDiv)

if (currentlyDisplayed=="") {

AssessmentDiv.innerHTML="Select an article from the list to the left and click \"Load selected\" to begin assessment."

} else {

AssessmentDiv.innerHTML="Loading..."

var QualityList=["Unassessed", "Stub", "Start", "C", "B", "GA", "A", "FA", "FL", "List", "Redirect", "Category", "Disambig", "File", "Project", "Template", "NA"]

var ImportanceList=["Unknown", "Top", "High", "Mid", "Low", "Related", "NA"]

var catlist="Category:Unassessed National Register of Historic Places articles"

for (var i=1; i

catlist+="|Category:"+QualityList[i]+"-Class National Register of Historic Places articles"

}

for (var i=0; i

catlist+="|Category:"+ImportanceList[i]+"-importance National Register of Historic Places articles"

}

var cats=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'categories',

clcategories: catlist,

cllimit: 'max',

titles: "Talk:"+currentlyDisplayed

},

async:false

})

.responseText

);

var tagged=false

var quality = "Unassessed"

var importance = "Unknown"

for (var page in cats.query.pages) {

if (cats.query.pages[page].categories) {

tagged=true

for (var category in cats.query.pages[page].categories) {

var CatTitle=cats.query.pages[page].categories[category].title

CatTitle=CatTitle.replace("Category:","").replace(" National Register of Historic Places articles","")

if (CatTitle.indexOf("importance")!=-1) importance=CatTitle.replace("-importance","")

if (CatTitle.indexOf("Class")!=-1||CatTitle.indexOf("Unassessed")!=-1) quality=CatTitle.replace("-Class","")

}

}

}

var TitleDiv=document.createElement("div")

TitleDiv.setAttribute("style","width:100%; text-align:center; font-size:125%; font-weight:bold; white-space:nowrap; overflow:hidden")

TitleDiv.innerHTML=currentlyDisplayed

if (tagged) {

var talkpage=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'revisions',

rvprop: 'content',

rvlimit: 1,

redirects: 'true',

titles: "Talk:"+currentlyDisplayed,

rvsection: 0

},

async:false

})

.responseText

);

for (var page in talkpage.query.pages) {

var talkpagetext=talkpage.query.pages[page].revisions[0]['*']

}

} else {

var talkpagetext=""

}

var templateRedirects="WikiProject NRHP|Wikiproject NRHP|WPNRHP"

var regex=new RegExp("{"+"{( |\\n)*?(WikiProject National Register of Historic Places|"+templateRedirects+")(.|\\n)*?}}","gi")

existingTemplate=talkpagetext.match(regex)

if (existingTemplate==null) {

existingTemplate="{"+"{WikiProject National Register of Historic Places"+"|class=|importance=}}" // split to avoid transcluding

} else {

existingTemplate=existingTemplate[0]

}

regex=new RegExp("("+templateRedirects+")","gi")

var newTemplate=existingTemplate.replace(regex, "WikiProject National Register of Historic Places")

regex=/\|( |\n)*?class[ ]*?=(.|\n)*?(?=\||}})/gi

if (newTemplate.match(regex)==null) {

newTemplate=newTemplate.substr(0,newTemplate.length-2)+"|class="+"}}"

} else {

if (quality!="Unassessed") newTemplate=newTemplate.replace(regex,"|class="+quality)

}

regex=/\|( |\n)*?importance[ ]*?=(.|\n)*?(?=\||}})/gi

if (newTemplate.match(regex)==null) {

newTemplate=newTemplate.substr(0,newTemplate.length-2)+"|importance="+"}}"

} else {

if (importance!="Unknown") newTemplate=newTemplate.replace(regex,"|importance="+importance)

}

AssessmentDiv.style.textAlign="left"

AssessmentDiv.innerHTML=""

AssessmentDiv.appendChild(TitleDiv)

AssessmentDiv.innerHTML+="Current assessment:
Quality: "+quality+"Importance: "+importance+"
"

var existingAssessTextarea=document.createElement("textarea")

if (tagged) {

existingAssessTextarea.innerHTML=existingTemplate

existingAssessTextarea.value=existingTemplate

} else {

existingAssessTextarea.innerHTML="Talk page is not tagged with NRHP project banner."

existingAssessTextarea.value="Talk page is not tagged with NRHP project banner."

}

existingAssessTextarea.readOnly=true

existingAssessTextarea.setAttribute("style","width:500px; height:60px")

existingAssessTextarea.setAttribute("id","existingAssessTextarea")

AssessmentDiv.appendChild(existingAssessTextarea)

AssessmentDiv.innerHTML+="Your assessment:
"

var span=document.createElement("span")

span.setAttribute("style","display:inline-block; width:175px")

span.innerHTML="Quality: "

var QualitySelect=document.createElement("select")

QualitySelect.setAttribute("id","QualitySelect")

QualitySelect.setAttribute("onchange","UpdateNewAssessTextarea()")

for (var i=0; i

var option=document.createElement("option")

option.innerHTML=QualityList[i]

if (QualityList[i]==quality) option.setAttribute("selected","selected")

QualitySelect.appendChild(option)

}

span.appendChild(QualitySelect)

AssessmentDiv.appendChild(span)

AssessmentDiv.innerHTML+="Importance: "

var ImportanceSelect=document.createElement("select")

ImportanceSelect.setAttribute("id","ImportanceSelect")

ImportanceSelect.setAttribute("onchange","UpdateNewAssessTextarea()")

for (var i=0; i

var option=document.createElement("option")

option.innerHTML=ImportanceList[i]

if (ImportanceList[i]==importance) option.setAttribute("selected","selected")

ImportanceSelect.appendChild(option)

}

AssessmentDiv.appendChild(ImportanceSelect)

AssessmentDiv.innerHTML+="
"

var NewAssessTextarea=document.createElement("textarea")

NewAssessTextarea.value=newTemplate

NewAssessTextarea.setAttribute("style","width:500px; height:60px")

NewAssessTextarea.setAttribute("id","NewAssessTextarea")

AssessmentDiv.appendChild(NewAssessTextarea)

var EditButton=document.createElement("input")

EditButton.setAttribute("type", "button");

EditButton.setAttribute("value", "Apply assessment");

EditButton.setAttribute("id", "EditButton");

EditButton.setAttribute("style","margin-top:7px")

EditButton.setAttribute("onclick", "EditPageWithAssessment()");

AssessmentDiv.appendChild(EditButton)

var CheckDiv=document.createElement("div")

CheckDiv.setAttribute("style","display:inline-block; vertical-align:middle; margin-left:15px")

var autoloadcheck=document.createElement("input")

autoloadcheck.setAttribute("type","checkbox")

autoloadcheck.setAttribute("id","autoloadcheck")

if (CheckDefaults.autoload) autoloadcheck.setAttribute("checked","checked")

var autoloadlabel=document.createElement("label")

autoloadlabel.setAttribute("for", "autoloadcheck")

autoloadlabel.innerHTML="Automatically load next page after successful edit"

CheckDiv.appendChild(autoloadcheck)

CheckDiv.appendChild(autoloadlabel)

CheckDiv.innerHTML+="
"

var ignoreconfirmcheck=document.createElement("input")

ignoreconfirmcheck.setAttribute("type","checkbox")

ignoreconfirmcheck.setAttribute("id","ignoreconfirmcheck")

if (CheckDefaults.ignoreconfirm) ignoreconfirmcheck.setAttribute("checked","checked")

var ignoreconfirmlabel=document.createElement("label")

ignoreconfirmlabel.setAttribute("for", "ignoreconfirmcheck")

ignoreconfirmlabel.innerHTML="Ignore confirmation prompt"

CheckDiv.appendChild(ignoreconfirmcheck)

CheckDiv.appendChild(ignoreconfirmlabel)

CheckDiv.innerHTML+="
"

var watchtargetcheck=document.createElement("input")

watchtargetcheck.setAttribute("type","checkbox")

watchtargetcheck.setAttribute("id","watchtargetcheck")

if (CheckDefaults.watchtarget) watchtargetcheck.setAttribute("checked","checked")

var watchtargetlabel=document.createElement("label")

watchtargetcheck.setAttribute("for", "watchtargetcheck")

watchtargetlabel.innerHTML="Watch target page"

CheckDiv.appendChild(watchtargetcheck)

CheckDiv.appendChild(watchtargetlabel)

AssessmentDiv.appendChild(CheckDiv)

}

}

function UpdateNewAssessTextarea() {

var NewAssessTextarea=document.getElementById("NewAssessTextarea")

var QualitySelect=document.getElementById("QualitySelect")

var ImportanceSelect=document.getElementById("ImportanceSelect")

var regex=/\|( |\n)*?class[ ]*?=(.|\n)*?(?=\||}})/gi

var newQuality=""

if (QualitySelect.selectedIndex!=0) newQuality=QualitySelect.options[QualitySelect.selectedIndex].innerHTML

NewAssessTextarea.value = NewAssessTextarea.value.replace(regex, "|class=" + newQuality)

var regex=/\|( |\n)*?importance[ ]*?=(.|\n)*?(?=\||}})/gi

var newImportance=""

if (ImportanceSelect.selectedIndex!=0) newImportance=ImportanceSelect.options[ImportanceSelect.selectedIndex].innerHTML

NewAssessTextarea.value = NewAssessTextarea.value.replace(regex, "|importance=" + newImportance)

}

function UpdateInfoboxUIDiv(selected, autoload, ignoreconfirm, watchtarget) {

var DisplayDiv=document.getElementById("DisplayDiv")

var UIDiv=document.getElementById("UIDiv")

UIDiv.innerHTML=""

if (Articles.length==0) {

UIDiv.style.verticalAlign="middle"

UIDiv.innerHTML="There are no more articles with infoboxes needing cleanup. Good job!"

DisplayDiv.innerHTML=""

return;

}

var ListDiv=document.createElement("div")

ListDiv.setAttribute("style","width:39.5%; float:left; text-align:left")

ListDiv.innerHTML="

"+Articles.length+" articles have infoboxes that
need to be cleaned
"

var select=document.createElement("select")

select.setAttribute("size",15)

select.setAttribute("id","ArticlesList")

select.setAttribute("style","width:300px")

for (var i=0; i

var option=document.createElement("option")

option.innerHTML=Articles[i]

select.appendChild(option)

}

select.selectedIndex=selected

ListDiv.appendChild(select)

var buttondiv=document.createElement("div")

buttondiv.setAttribute("style","width:300px; text-align:center")

var prevbutton=document.createElement("input")

prevbutton.setAttribute("type", "button")

prevbutton.setAttribute("value", "Load previous")

prevbutton.setAttribute("style","margin-top:7px")

prevbutton.setAttribute("onclick", "LoadInfoboxWrapper('prev')");

buttondiv.appendChild(prevbutton)

var selectbutton=document.createElement("input")

selectbutton.setAttribute("type", "button")

selectbutton.setAttribute("value", "Load selected")

selectbutton.setAttribute("style","margin-top:7px")

selectbutton.setAttribute("onclick", "LoadInfoboxWrapper('selected')");

buttondiv.appendChild(selectbutton)

var nextbutton=document.createElement("input")

nextbutton.setAttribute("type", "button")

nextbutton.setAttribute("value", "Load next")

nextbutton.setAttribute("style","margin-top:7px")

nextbutton.setAttribute("onclick", "LoadInfoboxWrapper('next')");

buttondiv.appendChild(nextbutton)

ListDiv.appendChild(buttondiv)

UIDiv.appendChild(ListDiv)

var AssessmentDiv=document.createElement("div")

AssessmentDiv.setAttribute("id","AssessmentDiv")

AssessmentDiv.setAttribute("style","width:59.5%; float:right; text-align:center")

UIDiv.appendChild(AssessmentDiv)

if (currentlyDisplayed=="") {

AssessmentDiv.innerHTML="Select an article from the list to the left and click \"Load selected\" to begin cleanup."

} else {

AssessmentDiv.innerHTML="Loading..."

var TitleDiv=document.createElement("div")

TitleDiv.setAttribute("style","width:100%; text-align:center; font-size:125%; font-weight:bold; white-space:nowrap; overflow:hidden")

TitleDiv.innerHTML=currentlyDisplayed

var pagetext=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'revisions',

rvprop: 'content',

rvlimit: 1,

redirects: 'true',

titles: currentlyDisplayed

},

async:false

})

.responseText

);

for (var page in pagetext.query.pages) {

pagetext=pagetext.query.pages[page].revisions[0]['*']

}

var regex=new RegExp("{"+"{( |\\n)*?Infobox( |_)NRHP( |\\n)*?(?=\\|)","gi")

var str = pagetext.match(regex)[0]

var start=pagetext.indexOf(str)

var open=1

var index=start+str.length

while (open!=0 && index

if (pagetext.substr(index,2)=="}}") {

open--

index++

} else if (pagetext.substr(index,2)=="{{") {

open++

index++

}

index++

}

var existingInfobox=pagetext.substr(start,index-start)

AssessmentDiv.style.textAlign="left"

AssessmentDiv.innerHTML=""

AssessmentDiv.appendChild(TitleDiv)

var OldInfoboxDiv=document.createElement("div")

OldInfoboxDiv.setAttribute("style","width:300px; height:200px; float:left")

OldInfoboxDiv.innerHTML+="Old infobox:"

var existingInfoboxTextarea=document.createElement("textarea")

existingInfoboxTextarea.innerHTML=existingInfobox

existingInfoboxTextarea.value=existingInfobox

existingInfoboxTextarea.readOnly=true

existingInfoboxTextarea.setAttribute("style","width:295px; height:180px")

existingInfoboxTextarea.setAttribute("id","existingInfoboxTextarea")

OldInfoboxDiv.appendChild(existingInfoboxTextarea)

AssessmentDiv.appendChild(OldInfoboxDiv)

var NewInfoboxDiv=document.createElement("div")

NewInfoboxDiv.setAttribute("style","width:300px; height:200px; float:right")

NewInfoboxDiv.innerHTML+="New infobox: "

var previewLink=document.createElement("a")

previewLink.setAttribute("id","previewLink")

previewLink.setAttribute("onclick","PreviewInfoboxHTML()")

previewLink.innerHTML="(preview)"

NewInfoboxDiv.appendChild(previewLink)

var NewInfoboxTextarea=document.createElement("textarea")

NewInfoboxTextarea.value=existingInfobox

NewInfoboxTextarea.setAttribute("style","width:295px; height:180px; float:right")

NewInfoboxTextarea.setAttribute("id","NewInfoboxTextarea")

NewInfoboxDiv.appendChild(NewInfoboxTextarea)

AssessmentDiv.appendChild(NewInfoboxDiv)

var EditButton=document.createElement("input")

EditButton.setAttribute("type", "button");

EditButton.setAttribute("value", "Update infobox");

EditButton.setAttribute("id", "EditButton");

EditButton.setAttribute("style","margin-top:7px")

EditButton.setAttribute("onclick", "EditPageWithInfobox()");

AssessmentDiv.appendChild(EditButton)

var CheckDiv=document.createElement("div")

CheckDiv.setAttribute("style","display:inline-block; vertical-align:middle; margin-left:15px")

var autoloadcheck=document.createElement("input")

autoloadcheck.setAttribute("type","checkbox")

autoloadcheck.setAttribute("id","autoloadcheck")

if (CheckDefaults.autoload) autoloadcheck.setAttribute("checked","checked")

var autoloadlabel=document.createElement("label")

autoloadlabel.setAttribute("for", "autoloadcheck")

autoloadlabel.innerHTML="Automatically load next page after successful edit"

CheckDiv.appendChild(autoloadcheck)

CheckDiv.appendChild(autoloadlabel)

CheckDiv.innerHTML+="
"

var ignoreconfirmcheck=document.createElement("input")

ignoreconfirmcheck.setAttribute("type","checkbox")

ignoreconfirmcheck.setAttribute("id","ignoreconfirmcheck")

if (CheckDefaults.ignoreconfirm) ignoreconfirmcheck.setAttribute("checked","checked")

var ignoreconfirmlabel=document.createElement("label")

ignoreconfirmlabel.setAttribute("for", "ignoreconfirmcheck")

ignoreconfirmlabel.innerHTML="Ignore confirmation prompt"

CheckDiv.appendChild(ignoreconfirmcheck)

CheckDiv.appendChild(ignoreconfirmlabel)

CheckDiv.innerHTML+="
"

var watchtargetcheck=document.createElement("input")

watchtargetcheck.setAttribute("type","checkbox")

watchtargetcheck.setAttribute("id","watchtargetcheck")

if (CheckDefaults.watchtarget) watchtargetcheck.setAttribute("checked","checked")

var watchtargetlabel=document.createElement("label")

watchtargetcheck.setAttribute("for", "watchtargetcheck")

watchtargetlabel.innerHTML="Watch target page"

CheckDiv.appendChild(watchtargetcheck)

CheckDiv.appendChild(watchtargetlabel)

AssessmentDiv.appendChild(CheckDiv)

}

}

function LoadWrapper(direction) {

var DisplayDiv=document.getElementById('DisplayDiv')

var select=document.getElementById('ArticlesList')

if (direction=="selected"&&select.selectedIndex!=-1) {

var article=select.options[select.selectedIndex].text

if (currentlyDisplayed!=article) LoadHTML(article)

} else if (direction=="next") {

select.selectedIndex++

if (select.selectedIndex==-1||select.selectedIndex>=Articles.length) select.selectedIndex=0

var article=select.options[select.selectedIndex].text

if (currentlyDisplayed!=article) LoadHTML(article)

} else if (direction=="prev") {

select.selectedIndex--

if (select.selectedIndex<0) select.selectedIndex=select.options.length-1

var article=select.options[select.selectedIndex].text

if (currentlyDisplayed!=article) LoadHTML(article)

}

}

function LoadInfoboxWrapper(direction) {

var DisplayDiv=document.getElementById('DisplayDiv')

var select=document.getElementById('ArticlesList')

if (direction=="selected"&&select.selectedIndex!=-1) {

var article=select.options[select.selectedIndex].text

if (currentlyDisplayed!=article) LoadInfoboxHTML(article)

} else if (direction=="next") {

select.selectedIndex++

if (select.selectedIndex==-1||select.selectedIndex>=Articles.length) select.selectedIndex=0

var article=select.options[select.selectedIndex].text

if (currentlyDisplayed!=article) LoadInfoboxHTML(article)

} else if (direction=="prev") {

select.selectedIndex--

if (select.selectedIndex<0) select.selectedIndex=select.options.length-1

var article=select.options[select.selectedIndex].text

if (currentlyDisplayed!=article) LoadInfoboxHTML(article)

}

}

function LoadHTML(article) { // loads parsed HTML content of article into innerHTML of DisplayDiv

var DisplayDiv=document.getElementById('DisplayDiv')

var AssessmentDiv=document.getElementById("AssessmentDiv")

var autoload=document.getElementById("autoloadcheck")

if (autoload!=null) CheckDefaults.autoload=autoload.checked

autoload=CheckDefaults.autoload

var ignoreconfirm=document.getElementById("ignoreconfirmcheck")

if (ignoreconfirm!=null) CheckDefaults.ignoreconfirm=ignoreconfirm.checked

ignoreconfirm=CheckDefaults.ignoreconfirm

var watchtarget=document.getElementById("watchtargetcheck")

if (watchtarget!=null) CheckDefaults.watchtarget=watchtarget.checked

watchtarget=CheckDefaults.watchtarget

AssessmentDiv.style.textAlign="center"

AssessmentDiv.innerHTML="Loading..."

var HTMLpage=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'revisions',

rvprop: 'content',

rvparse: true,

rvlimit: 1,

titles: article,

redirects: 'true'

},

async:false

})

.responseText

);

currentlyDisplayed=article

for (var i in HTMLpage.query.pages) {

DisplayDiv.innerHTML="

" + currentlyDisplayed + "

" + HTMLpage.query.pages[i].revisions[0]['*'] + '
'

}

UpdateUIDiv(document.getElementById("ArticlesList").options.selectedIndex, autoload, ignoreconfirm, watchtarget)

}

function LoadInfoboxHTML(article) { // loads parsed HTML content of article into innerHTML of DisplayDiv

var DisplayDiv=document.getElementById('DisplayDiv')

var AssessmentDiv=document.getElementById("AssessmentDiv")

var autoload=document.getElementById("autoloadcheck")

if (autoload!=null) CheckDefaults.autoload=autoload.checked

autoload=CheckDefaults.autoload

var ignoreconfirm=document.getElementById("ignoreconfirmcheck")

if (ignoreconfirm!=null) CheckDefaults.ignoreconfirm=ignoreconfirm.checked

ignoreconfirm=CheckDefaults.ignoreconfirm

var watchtarget=document.getElementById("watchtargetcheck")

if (watchtarget!=null) CheckDefaults.watchtarget=watchtarget.checked

watchtarget=CheckDefaults.watchtarget

AssessmentDiv.style.textAlign="center"

AssessmentDiv.innerHTML="Loading..."

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

action: 'parse',

prop: 'text',

page: article,

preview: 'true',

redirects: 'true'

},

error: function (xhr,status,error) {xhr.errorThrown=error},

complete: function (xhr,status) {InfoboxHTMLFetched(xhr,status,article,DisplayDiv,autoload,ignoreconfirm,watchtarget)}

})

}

function InfoboxHTMLFetched(xhr,status,article,DisplayDiv,autoload,ignoreconfirm,watchtarget) {

if (status!="success") {

alert(status+": "+xhr.errorThrown)

return;

}

var HTMLpage=JSON.parse(xhr.responseText)

currentlyDisplayed=article

DisplayDiv.innerHTML="

" + currentlyDisplayed + "

" + HTMLpage.parse.text['*'] + '
'

UpdateInfoboxUIDiv(document.getElementById("ArticlesList").options.selectedIndex, autoload, ignoreconfirm, watchtarget)

}

function PreviewInfoboxHTML() { // loads parsed HTML content of currentlyDisplayed article into innerHTML of DisplayDiv

var DisplayDiv=document.getElementById('DisplayDiv')

var NewInfoboxTextarea=document.getElementById("NewInfoboxTextarea")

var link=document.getElementById('previewLink')

link.setAttribute("onclick","")

link.innerHTML="(Loading...)"

var pagetext=getAssessmentWikitext(currentlyDisplayed)

if (pagetext=="error") {

alert("Could not retrieve preview!")

return;

}

var regex=new RegExp("{"+"{( |\\n)*?Infobox( |_)NRHP( |\\n)*?(?=\\|)","gi")

var str = pagetext.match(regex)[0]

var start=pagetext.indexOf(str)

var open=1

var index=start+str.length

while (open!=0 && index

if (pagetext.substr(index,2)=="}}") {

open--

index++

} else if (pagetext.substr(index,2)=="{{") {

open++

index++

}

index++

}

var existingInfobox=pagetext.substr(start,index-start)

pagetext=pagetext.replace(existingInfobox, NewInfoboxTextarea.value)

$.ajax({

dataType: "json",

method: "POST",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

action: 'parse',

text: pagetext,

contentmodel: 'wikitext'

},

error: function (xhr,status,error) {xhr.errorThrown=error},

complete: function (xhr,status) {PreviewFetched(xhr,status,DisplayDiv,link)}

})

}

function PreviewFetched(xhr,status,DisplayDiv,link) {

if (status!="success") {

alert(status+": "+xhr.errorThrown)

return;

}

var HTMLpage=JSON.parse(xhr.responseText)

DisplayDiv.innerHTML="

" + currentlyDisplayed + "

" + HTMLpage.parse.text['*'] + '
'

link.setAttribute("onclick","PreviewInfoboxHTML()")

link.innerHTML="(preview)"

}

function EditPageWithAssessment() {

var existingAssessTextarea=document.getElementById("existingAssessTextarea")

var NewAssessTextarea=document.getElementById("NewAssessTextarea")

var QualitySelect=document.getElementById("QualitySelect")

var ImportanceSelect=document.getElementById("ImportanceSelect")

var autoload=document.getElementById("autoloadcheck").checked

CheckDefaults.autoload=autoload

var ignoreconfirm=document.getElementById("ignoreconfirmcheck").checked

CheckDefaults.ignoreconfirm=ignoreconfirm

var watchtarget=document.getElementById("watchtargetcheck").checked

CheckDefaults.watchtarget=watchtarget

if (QualitySelect.selectedIndex==0||ImportanceSelect.selectedIndex==0) {

alert("Please choose a quality AND an importance rating in order to apply the assessment.")

return;

}

if (existingAssessTextarea.innerHTML==NewAssessTextarea.value) return;

if (!ignoreconfirm) {

var confirmstring="Are you sure you want to assess this article as "

confirmstring+=QualitySelect.options[QualitySelect.selectedIndex].innerHTML+"-class, "

confirmstring+=ImportanceSelect.options[ImportanceSelect.selectedIndex].innerHTML+"-importance?"

var confirmtest=confirm(confirmstring)

if (!confirmtest) return;

}

document.getElementById("EditButton").value="Editing..."

document.getElementById("EditButton").disabled=true

var talkpage=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'revisions',

rvprop: 'content',

rvlimit: 1,

redirects: 'true',

titles: "Talk:"+currentlyDisplayed,

rvsection: 0

},

async:false

})

.responseText

);

for (var page in talkpage.query.pages) {

if (typeof talkpage.query.pages[page].missing!="undefined") {

var talkpagetext=""

} else {

var talkpagetext=talkpage.query.pages[page].revisions[0]['*']

}

}

if (talkpagetext=="") {

talkpagetext=NewAssessTextarea.value

} else {

if (existingAssessTextarea.innerHTML=="Talk page is not tagged with NRHP project banner.") {

talkpagetext+="\n"+NewAssessTextarea.value

} else {

talkpagetext=talkpagetext.replace(existingAssessTextarea.innerHTML, NewAssessTextarea.value)

}

}

var summary="Assessing article as "+QualitySelect.options[QualitySelect.selectedIndex].innerHTML+"-class, "

summary+=ImportanceSelect.options[ImportanceSelect.selectedIndex].innerHTML+"-importance for WP:NRHP "

summary+="using script."

var watch="watch"

if (!watchtarget) watch="unwatch"

var api = new mw.Api();

api.postWithToken( "edit", {

action: "edit",

section:0,

title: "Talk:"+currentlyDisplayed,

summary: summary,

watchlist: watch,

text: talkpagetext

}

)

.done( function( data ) {

document.getElementById("EditButton").value="Apply assessment"

document.getElementById("EditButton").disabled=false

if (data && data.edit && data.edit.result && data.edit.result == 'Success') {

alert("Edit success!")

for (var i=0; i

if (Articles[i]==currentlyDisplayed) Articles.splice(i,1)

}

currentlyDisplayed=""

var currentSelection=document.getElementById("ArticlesList").options.selectedIndex

if (currentSelection>=Articles.length) currentSelection--

if (autoload==true) {

currentSelection++

if (currentSelection>=Articles.length) {

currentSelection=0

document.getElementById("ArticlesList").options.selectedIndex=0

}

LoadHTML(document.getElementById("ArticlesList").options[currentSelection].innerHTML)

} else {

UpdateUIDiv(currentSelection, autoload, ignoreconfirm, watchtarget)

}

} else {

alert('Edit query error:\n'+data.error.code+': '+data.error.info);

}

})

.fail( function() {

document.getElementById("EditButton").value="Apply assessment"

document.getElementById("EditButton").disabled=false

alert('Ajax failure.');

});

}

function EditPageWithInfobox() {

var existingInfoboxTextarea=document.getElementById("existingInfoboxTextarea")

var NewInfoboxTextarea=document.getElementById("NewInfoboxTextarea")

var autoload=document.getElementById("autoloadcheck").checked

CheckDefaults.autoload=autoload

var ignoreconfirm=document.getElementById("ignoreconfirmcheck").checked

CheckDefaults.ignoreconfirm=ignoreconfirm

var watchtarget=document.getElementById("watchtargetcheck").checked

CheckDefaults.watchtarget=watchtarget

var testInfobox=NewInfoboxTextarea.value.substr(1,NewInfoboxTextarea.value.length-2).replace(/{\{(.|\n)*?}}/g,"")

var allowedParamsArray=["added", "alt", "architect", "architecture", "area", "borderless", "builder", "built", "caption"]

allowedParamsArray.push("coord_display", "coord_format", "coord_parameters", "coordinates", "customarchitect_title")

allowedParamsArray.push("customarchitect", "decrease", "decrease_refnum", "decrease1", "decrease1_refnum", "decrease2")

allowedParamsArray.push("decrease2_refnum", "decrease3", "decrease3_refnum", "delisted", "delisted_nrhp_type")

allowedParamsArray.push("delisted_nrhp_type2", "delisted_nrhp_type3", "delisted_nrhp_type4", "delisted_other1_date")

allowedParamsArray.push("delisted_other2_date", "delisted_other3_date", "demolished", "designated_nrhp_type")

allowedParamsArray.push("designated_nrhp_type2", "designated_nrhp_type3", "designated_nrhp_type4", "designated_other1")

allowedParamsArray.push("designated_other1_abbr", "designated_other1_color", "designated_other1_date")

allowedParamsArray.push("designated_other1_link", "designated_other1_name", "designated_other1_num_position")

allowedParamsArray.push("designated_other1_number", "designated_other1_textcolor", "designated_other2")

allowedParamsArray.push("designated_other2_abbr", "designated_other2_color", "designated_other2_date")

allowedParamsArray.push("designated_other2_link", "designated_other2_name", "designated_other2_num_position")

allowedParamsArray.push("designated_other2_number", "designated_other2_textcolor", "designated_other3")

allowedParamsArray.push("designated_other3_abbr", "designated_other3_color", "designated_other3_date")

allowedParamsArray.push("designated_other3_link", "designated_other3_name", "designated_other3_num_position")

allowedParamsArray.push("designated_other3_number", "designated_other3_textcolor", "district_map", "embed", "engineer")

allowedParamsArray.push("governing_body", "image", "image_size", "increase", "increase_refnum", "increase1")

allowedParamsArray.push("increase1_refnum", "increase2", "increase2_refnum", "increase3", "increase3_refnum")

allowedParamsArray.push("label_background", "label_position", "label_size", "lat_degrees", "lat_direction", "lat_minutes")

allowedParamsArray.push("lat_seconds", "latitude", "location", "locmap_label", "locmap_label_position", "locmap_relief")

allowedParamsArray.push("locmapin", "long_degrees", "long_direction", "long_minutes", "long_seconds", "longitude", "map_alt")

allowedParamsArray.push("map_caption", "map_label", "map_width", "mpsub", "name", "nearest_city", "nocat", "nrhp_type")

allowedParamsArray.push("nrhp_type2", "nrhp_type3", "nrhp_type4", "partof", "partof_refnum", "refnum", "restored")

allowedParamsArray.push("restored_by", "sigdate", "sigdate_label", "sigdate1", "sigdate1_label", "sigdate2", "sigdate2_label")

allowedParamsArray.push("sigdate3", "sigdate3_label", "visitation_num", "visitation_ref", "visitation_year", "website")

regex=/\|( |\n)*?.*?=/gi

var usedParams=testInfobox.match(regex)

var badParams=[]

for (var i=0; i

var allowed=false

for (var j=0; j

if (usedParams[i].replace(/[\| =]/g,"")==allowedParamsArray[j]) {allowed=true; break}

}

if (!allowed) badParams.push(usedParams[i].replace(/[\| =]/g,""))

}

if (badParams.length>0) {

alert('There are still unknown parameters in the infobox!\nUnknown params: "'+badParams.join('", "')+'"')

return;

}

if (existingInfoboxTextarea.innerHTML==NewInfoboxTextarea.value) return;

if (!ignoreconfirm) {

var confirmstring="Are you sure you want to edit this article?"

var confirmtest=confirm(confirmstring)

if (!confirmtest) return;

}

document.getElementById("EditButton").value="Editing..."

document.getElementById("EditButton").disabled=true

var pagetext=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'revisions',

rvprop: 'content',

rvlimit: 1,

redirects: 'true',

titles: currentlyDisplayed

},

async:false

})

.responseText

);

for (var page in pagetext.query.pages) {

pagetext=pagetext.query.pages[page].revisions[0]['*']

}

var regex=new RegExp("{"+"{( |\\n)*?Infobox( |_)NRHP( |\\n)*?(?=\\|)","gi")

var str = pagetext.match(regex)[0]

var start=pagetext.indexOf(str)

var open=1

var index=start+str.length

while (open!=0 && index

if (pagetext.substr(index,2)=="}}") {

open--

index++

} else if (pagetext.substr(index,2)=="{{") {

open++

index++

}

index++

}

var existingInfobox=pagetext.substr(start,index-start)

pagetext=pagetext.replace(existingInfobox, NewInfoboxTextarea.value)

var summary="Script-assisted infobox cleanup; remove unsupported parameters."

var watch="watch"

if (!watchtarget) watch="unwatch"

var api = new mw.Api();

api.postWithToken( "edit", {

action: "edit",

title: currentlyDisplayed,

summary: summary,

watchlist: watch,

text: pagetext

}

)

.done( function( data ) {

document.getElementById("EditButton").value="Update infobox"

document.getElementById("EditButton").disabled=false

if (data && data.edit && data.edit.result && data.edit.result == 'Success') {

alert("Edit success!")

for (var i=0; i

if (Articles[i]==currentlyDisplayed) Articles.splice(i,1)

}

currentlyDisplayed=""

var currentSelection=document.getElementById("ArticlesList").options.selectedIndex

if (currentSelection>=Articles.length) currentSelection--

if (autoload==true) {

currentSelection++

if (currentSelection>=Articles.length) {

currentSelection=0

document.getElementById("ArticlesList").options.selectedIndex=0

}

LoadInfoboxHTML(document.getElementById("ArticlesList").options[currentSelection].innerHTML)

} else {

UpdateInfoboxUIDiv(currentSelection, autoload, ignoreconfirm, watchtarget)

}

} else {

alert('Edit query error:\n'+data.error.code+': '+data.error.info);

}

})

.fail( function() {

document.getElementById("EditButton").value="Apply assessment"

document.getElementById("EditButton").disabled=false

alert('Ajax failure.');

});

}

function getAssessmentWikitext(title) {

try {

var output=JSON.parse(

$.ajax({

dataType: "json",

url: mw.util.wikiScript('api'),

data: {

format: 'json',

rawcontinue: '',

action: 'query',

prop: 'revisions',

rvprop: 'content',

titles: title,

indexpageids: true,

redirects: 'true'

},

async:false

})

.responseText

);

for (page in output.query.pages) {

wikitext = output.query.pages[page].revisions[0]['*'];

}

return wikitext

}

catch(err) {

return "error"

}

}

$(window).load(MaintenanceButton);