Benutzer:CennoxX/js/bkl-replace.js
Zur Navigation springen
Zur Suche springen
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
// Script from [[User:CennoxX]]
// CC BY-SA 3.0
// beta version 0.4.6
//
// Dieses Script ermöglicht das schnelle Korrigieren von Links auf Begriffsklärungen mithilfe von Auswahllisten.
// In den Auswahllisten werden alle auf der entsprechenden Begriffsklärungsseite angegebenen Links aufgeführt.
// Sobald alle geöffneten Auswahllisten in einem Artikel ausgefüllt wurden, werden die Änderungen gespeichert.
// Die Seite wird daraufhin aktualisiert.
(function($, mw){
var pageTitle = mw.config.get("wgRelevantPageName");
var bkls = $(".mw-disambig");
var unsolvedBkls = 0;
var changes = [];
bkls.each(addEditButton);
function addEditButton(index,bkl){
var editButton = $("<span role='button' style='color:green;cursor:pointer;'>✎</span>");
$(bkl).after(editButton);
$(editButton).on("click", function(o){
replaceButtons(this);
addSelectBox(bkl);
});
}
function replaceButtons(editButton){
unsolvedBkls++;
var deleteButton = $("<span role='button' style='color:red;cursor:pointer;'>✘</span>");
deleteButton.on("click", deleteSelectBox);
$(editButton).after(deleteButton);
$(editButton).remove();
}
function deleteSelectBox(e){
var selectBox = $(e.target).prev()[0];
var link = selectBox[0].value;
var label = selectBox[0].innerText;
var bklLink = $("<a href='/wiki/" + link + "' class='stub mw-disambig' title='" + link + "'>" + label + "</a>");
$(selectBox).replaceWith(bklLink);
var deleteButton = e.target;
$(deleteButton).remove();
addEditButton(null,bklLink[0]);
if (changes.filter(i => i.old == selectBox[0].value)[0])
{
changes.pop(changes.filter(i => i.old==selectBox[0].value)[0]);
}
//if all Bkls resolved
else if(--unsolvedBkls === 0 && changes.length !== 0)
{
getWikiText();
}
}
function addSelectBox(bkl){
//get article name
var link = decodeURIComponent(bkl.href.replace(/.*\/wiki\//,"").replace(/_/g," "));
var innerOptions = "";
var selectBox = $("<select style='color:#723;background-color:#f99;'></select>");
$.get(
mw.util.wikiScript("api"),
{
format: "json",
action: "query",
prop: "links",
titles: link,
pllimit: 50,
plnamespace: 0
},
"json"
).done(function(data){
try{
var pageId = Object.keys(data.query.pages)[0];
//create an option for every link
$.each(data.query.pages[pageId].links, function(i,e){
innerOptions += "<option style='color:#000;background-color:#fff;' value='" + e.title + "'>" + e.title + "</option>";
});
selectBox.html("<option disabled selected style='display:none;color:#723;background-color:#f99;' value='" + link + "'>" + bkl.innerText + "</option>" + innerOptions);
$(bkl).replaceWith(selectBox);
}
catch(e)
{
errorHandling();
}
})
.fail(errorHandling);
selectBox.on("change", selectBoxChosen);
}
function selectBoxChosen(e){
$(e.target).css({"color":"#000","background-color":"#fff"});
if (changes.filter(e => e.old == this[0].value)[0])
{
changes.filter(e => e.old == this[0].value)[0].new = this.value;
}
else
{
changes.push({old: this[0].value, new: this.value});
//if all Bkls resolved
if(--unsolvedBkls === 0 && changes.length !== 0)
{
getWikiText();
}
}
}
function getWikiText(){
$.get(
mw.util.wikiScript("api"),
{
format: "json",
action: "query",
prop: "revisions",
rvprop: "content",
rvslots: "*",
rvlimit: 1,
titles: pageTitle
},
"json"
)
.done(function(data){
var page, wikitext;
try
{
for (page in data.query.pages){
wikitext = editText(data.query.pages[page].revisions[0].slots.main["*"]);
getToken(wikitext);
}
}
catch(e)
{
errorHandling();
}
})
.fail(errorHandling);
}
function editText(wikitext){
$.each(changes, function(i,c){
wikitext = wikitext.replace("[["+c.old+"]]","[["+c.new+"|"+c.old+"]]");
wikitext = wikitext.replace("[["+c.old+"|","[["+c.new+"|");
});
return wikitext;
}
function getToken(wikitext){
$.get(
mw.util.wikiScript("api"),
{
format: "json",
action: "query",
meta: "tokens"
},
"json"
).done(function(tokendata){
try
{
var token = tokendata.query.tokens.csrftoken;
editPage({
title: pageTitle,
text: wikitext,
summary: "BKL ersetzt mit [[Benutzer:CennoxX/js/bkl-replace.js|bkl-replace]]",
token: token
});
}
catch(e)
{
errorHandling();
}
})
.fail(errorHandling);
}
function editPage(info){
mw.notify("Änderung speichern …", {title: "Begriffsklärungen ersetzen", tag: "bkl-replace"});
$.post(
mw.util.wikiScript("api"),
{
format: "json",
action: "edit",
title: info.title,
text: info.text,
summary: info.summary,
token: info.token,
minor: true
},
"json"
)
.done (function(data){
if(data && data.edit && data.edit.result && data.edit.result == "Success")
{
location.reload();
}
else
{
errorHandling();
}
})
.fail(errorHandling);
}
function errorHandling(){
console.log("Ein Fehler ist aufgetreten");
}
}(jQuery, mediaWiki));