//copy of [[User:Dudemanfellabra/ReorderNRHPlist.js]]
/*
This script will place a button at the top of any NRHP county/state list that when clicked on will check and automatically fix
the ordering of the numbers in the first column of the NRHP table. If no reordering is needed, a null edit will be performed.
This is useful when a property has been added to or removed from the list, causing all rows below it to be off by one.
*/
function RenumberButton() {
if ((mw.config.get('wgPageName').search("National_Register_of_Historic_Places_listings_in")==-1 && mw.config.get('wgPageName').search("National_Historic_Landmarks_in")==-1) || mw.config.get('wgNamespaceNumber')!=0) {
return
}
if (location.href.indexOf('action')!=-1||location.href.indexOf('Talk:')!=-1) return
var button=document.createElement("input")
button.setAttribute("type", "button");
button.setAttribute("value", "Renumber list");
button.setAttribute("id", "button");
button.setAttribute("onclick", "RenumberClick()");
var content=document.getElementById('mw-content-text')
content.parentNode.insertBefore(button, content)
}
function RenumberClick() {
var button = document.getElementById('button')
button.value = "Working..."
button.disabled = true
getListWikitext(mw.config.get('wgPageName'))
}
function getListWikitext(title) {
$.getJSON(
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: title,
indexpageids: true
}
)
.done(function (data) {
var page, wikitext;
for (page in data.query.pages) {
wikitext = data.query.pages[page].revisions[0]['*'];
RenumberList(wikitext)
}
})
.fail(function() {
alert('Could not get wikitext; failure.');
});
}
function RenumberList(wikitext) {
var splittext = wikitext.split("|}")
var newwikitext = ''
for (var j=0; j<splittext.length-1; j++) {
var StartIndex = 0
var str = "|pos="
var skip = str.length;
var index, RowLocations = [];
while ((index = splittext[j].indexOf(str, StartIndex)) > -1) {
RowLocations.push(index);
StartIndex = index + skip;
}
var stop=RowLocations.length+1
var comments=splittext[j].match(/\<\!\-\-(.|[\r\n])*?\-\-\>/g)
if (comments!=null) {
for (var l=0; l<comments.length; l++) {
if (comments[l].indexOf(str)==-1) {comments.splice(l,1);l--} // remove comments that don't include a row
}
}
var k = 0
for (var i=1; i<stop; i++) {
var StartIndex = RowLocations[i-1]+1
if (comments!=null && k<comments.length) {
if (StartIndex>splittext[j].indexOf(comments[k])&&StartIndex<splittext[j].indexOf(comments[k])+comments[k].length) {
k++
continue;
}
}
var str="|"
var NextParam = splittext[j].indexOf(str,StartIndex)
var RowNum = i-k
splittext[j] = splittext[j].substr(0,StartIndex-1)+"|pos="+RowNum+splittext[j].substr(NextParam-1,splittext[j].length-NextParam+1)
var StartIndex = 0
var str = "|pos="
var skip = str.length;
var index, RowLocations = [];
while ((index = splittext[j].indexOf(str, StartIndex)) > -1) {
RowLocations.push(index);
StartIndex = index + skip;
}
}
newwikitext+=splittext[j]+"|}"
}
newwikitext+=splittext[splittext.length-1]
editNRHPPage({
title: mw.config.get('wgPageName'),
text: newwikitext,
summary: '[[User:Dudemanfellabra/ReorderNRHPlist.js|Semi-automated]] renumbering of list items after addition/deletion.'
});
}
function editNRHPPage(info) {
$.ajax({
url: mw.util.wikiScript( 'api' ),
type: 'POST',
dataType: 'json',
async: false,
data: {
format: 'json',
action: 'edit',
title: info.title,
text: info.text,
summary: info.summary,
token: mw.user.tokens.get( 'editToken' )
}
})
.done (function( data ) {
if (data && data.edit && data.edit.result && data.edit.result == 'Success') {
alert("Success! Rows renumbered!")
} else {
alert("Error! Rows not renumbered! Refresh the page to try again")
}
})
.fail (function() {
alert('Ajax failure.');
});
}
$(RenumberButton);