W dzisiejszym świecie
Wikipedysta:Saper/scripts/redir.js to temat, który zyskuje coraz większe znaczenie i uwagę. Od lat
Wikipedysta:Saper/scripts/redir.js jest przedmiotem badań i zainteresowań różnych sektorów społeczeństwa, od nauki po politykę, w tym sztukę i kulturę. W miarę upływu czasu
Wikipedysta:Saper/scripts/redir.js staje się centralnym punktem debaty i refleksji, generując sprzeczne opinie i różnorodne stanowiska. Dlatego tak ważne jest pogłębienie naszej wiedzy i zrozumienia
Wikipedysta:Saper/scripts/redir.js, aby móc kompleksowo się nim zająć i podejmować świadome decyzje dotyczące jego wpływu na nasze życie. W tym artykule zbadamy różne aspekty
Wikipedysta:Saper/scripts/redir.js i przeanalizujemy jego znaczenie w bieżącym kontekście, a także konsekwencje, jakie ma na przyszłość.
// ==UserScript==
// @name Fix redirects
// @namespace mediawiki
// @description Replace redirects with the target articlename
// @include *
// ==/UserScript==
addOnloadHook(function start()
{
// user error messages
var NoAjaxError = new Error("Przeglądarka nie obsługuje AJAX");
var NoLocationError = new Error
("Nie mogę znaleźć adresu bieżącej strony");
var NoEditBoxError = new Error
("Nie mogę znaleźć okna edycji");
var CannotQueryAPIError = new Error
("MediaWiki zwraca błąd w zapytaniu o przekierowania");
// Summary text generation
var SummaryText = "Zmiana linków do przekierowań";
// used is summary was non-empty
var ExistingSummarySeparator = ", ";
var SummaryTextSubsequent = "zmiana linków do przekierowań";
// separates above text from the links
var AfterSummaryTextSeparator = " ";
// separates every reported link
var ReplacementSummarySeparator = ", ";
// how many links to mention in the summary
var MaxSummaryItems = 4;
// what to say when there are more links than MaxSummaryItems
var MoreThanMaxSummaryItems = "...";
// using a right-to-left language? no problem!
var SummaryRightToLeft = false;
var args = new Object();
var location = window.location;
var redirects;
var ajax;
var foreachtag = function(startnode, tag, action) {
if (startnode) {
var tag_list = startnode.getElementsByTagName(tag);
for (var i = 0; i < tag_list.length; i++)
action(tag_list);
}
}
var replace_function = function () {
var editbox = document.getElementById('wpTextbox1');
var summarybox = document.getElementById('wpSummary');
if (!ajax)
throw NoAjaxError();
if (!editbox)
throw NoEditBoxError;
if (ajax.readyState == 4) {
if (ajax.status == 200) {
var edit_text = editbox.value;
var link_match;
var link_label;
var replacements = new Array();
var summary = new Array();
var changed = false;
foreachtag(ajax.responseXML, "r", function(r) {
re = new RegExp("\\[\\[\\s*(" +
r.getAttribute("from") + ")\\s*" +
"(\\|\\s*(.*)\\s*)?\\]\\]", "gi")
while ((link_match = re.exec(edit_text)) != null) {
if (link_match)
link_label = link_match.replace(/\|\s*/, "").replace(/\s*$/, "")
else
link_label = r.getAttribute("from")
if (link_label != r.getAttribute("to"))
link_label = r.getAttribute("to") + "|" + link_label;
var new_text = edit_text.replace(link_match,
"]");
if (new_text != edit_text)
changed = true
edit_text = new_text;
};
if (changed) {
changed = false;
if (replacements.length < MaxSummaryItems) {
replacements.push("]")
}
if (replacements.length == MaxSummaryItems)
replacements.push(MoreThanMaxSummaryItems)
}
});
if (replacements.length > 0) {
if (summarybox.value.length > 0) {
summary.push(summarybox.value);
summary.push(ExistingSummarySeparator);
summary.push(SummaryTextSubsequent);
} else
summary.push(SummaryText);
summary.push(AfterSummaryTextSeparator);
if (SummaryRightToLeft)
replacements = replacements.reverse();
summary.push(replacements.join(ReplacementSummarySeparator));
if (SummaryRightToLeft)
summary = summary.reverse();
summarybox.value = summary.join("");
}
editbox.value = edit_text;
} else
throw CannotQueryAPIError;
}
};
try {
if (!location)
throw NoLocationError;
var parameters = location.search.split("&");
for (i in parameters) {
name_value = parameters.split("=");
if (name_value.length == 2)
args)] = unescape(name_value);
}
switch(args.action) {
case 'edit':
if (args.fixredir) {
redirects = unescape(args.fixredir);
//from QuickEdit 2 by ASM, modified
if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
if (ajax.overrideMimeType)
ajax.overrideMimeType('text/xml');
} else if (window.ActiveXObject) {
ajax = new ActiveXObject('Microsoft.XMLHTTP');
} else
throw NoAjaxError;
var url = location.protocol + "//" + location.host +
"/w/api.php?action=query&redirects&format=xml" +
"&titles=" + args.fixredir;
ajax.open("GET", url, true);
ajax.onreadystatechange = replace_function;
ajax.send(null);
}
break;
default:
// Find all <a title="xxx" class="mw-redirect"> links
var body_content = document.getElementById('bodyContent') ||
document.getElementById('article');
var redirect_object = new Object();
foreachtag(body_content, 'a', function(link) {
if (link.className == 'mw-redirect')
if (! redirect_object)
redirect_object = link.title
});
var redirect_list = new Array();
for (var i in redirect_object)
redirect_list.push(i);
redirects = redirect_list.join("|");
}
if (redirects) {
// Iterate links on a page to find edit links
// This way even links on an edit page are changed
// (Do we want this?)
foreachtag(document, 'a', function(link) {
if (link.href)
if (link.href.indexOf("action=edit") >= 0 &&
link.className != "new")
link.href += "&fixredir=" +
escape(redirects);
});
}
} catch(e) {
alert(e.message);
}
});