Utilisateur:Orlodrim/PaStec-pagesliees.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.if (typeof(rblOpenInNewWindow) == 'undefined') rblOpenInNewWindow = true;
var rblFrame;
var rblPage;
function rblMakeActionLink(page, url, action) {
var formattedPage = mw.html.escape(page);
if (page.substr(0, 14) == 'Modèle:Palette') {
formattedPage = '<b>' + formattedPage + '</b>';
}
var target = rblOpenInNewWindow ? ' target="rblWindow"' : '';
return formattedPage + ' [<a href="' + mw.html.escape(url) + '"' + target + '>' + mw.html.escape(action) + '</a>]';
}
function rblMakeArticleLink(page, linkTarget) {
var url = mw.util.getUrl(page, {'action': 'edit', 'rblink': linkTarget}) + '#editform';
return rblMakeActionLink(page, url, 'éditer');
}
function rblMakeRedirLink(page) {
if (mw.config.get('wgUserGroups') && mw.config.get('wgUserGroups').indexOf('sysop') != -1) {
var reason = 'Redirection vers la page « ' + rblPage + ' », supprimée par [[' + mw.config.get('wgPageName') + '|décision PàS]]';
var url = mw.util.getUrl(page, {'action': 'delete', 'wpReason': reason});
return rblMakeActionLink(page, url, 'supprimer la redirection');
} else {
return mw.html.escape(page) + ' (redirection)';
}
}
function rblIgnoreNamespace(namespace) {
return namespace != 0 && namespace != 10;
}
function rblReadList(obj) {
var html = '';
for (var i = 0; i < obj.query.backlinks.length; i++) {
var bl = obj.query.backlinks[i];
if (rblIgnoreNamespace(bl.ns)) continue;
if (typeof bl.redirect != 'undefined') {
var rlTags = bl.redirlinks;
html += rblMakeRedirLink(bl.title) + '<br>';
if (typeof bl.redirlinks != 'undefined') {
for (var j = 0; j < bl.redirlinks.length; j++) {
if (rblIgnoreNamespace(bl.redirlinks[j].ns)) continue;
html += '- ' + rblMakeArticleLink(bl.redirlinks[j].title, bl.title) + '<br>';
}
}
} else {
html += rblMakeArticleLink(bl.title, rblPage) + '<br>';
}
}
if (obj.query.embeddedin.length > 0) {
html += rblMakeActionLink('Utilisations en tant que modèle, par transclusion',
mw.util.getUrl('Spécial:Pages_liées/' + rblPage, {'hidelinks': 1, 'hideredirs': 1}), 'voir') + '<br>';
}
if (html != '') {
html = 'Liste des pages liées :<br>' + html + '[<a href="javascript:rblCreateList();">rafraîchir</a>]';
} else {
html = "Il n'y a pas de pages liées";
}
rblFrame.innerHTML = html;
}
function rblCreateList() {
var ns = mw.config.get('wgNamespaceNumber');
rblPage = (ns == 1 ? '' : mw.config.get('wgFormattedNamespaces')[ns - 1] + ':') +
mw.config.get('wgTitle').replace(/\/Suppression$/, "");
rblFrame = document.getElementById("rblFrame");
if (!rblFrame) {
rblFrame = document.createElement("div");
rblFrame.id = "rblFrame";
var nextElement = document.getElementById("firstHeading").nextSibling;
nextElement.parentNode.insertBefore(rblFrame, nextElement);
}
rblFrame.innerHTML = "Chargement des pages liées...";
query = {'format': 'json', 'action': 'query', 'list': 'backlinks|embeddedin',
'bltitle': rblPage, 'blredirect': 1, 'bllimit': 250,
'eititle': rblPage, 'eilimit': 100};
$.getJSON(mw.util.wikiScript('api'), query, rblReadList);
}
// Recherche des liens sur les pages d'édition
var rblList;
var rblLastPos;
function rblNormalizeLink(s) {
var i = s.indexOf("#");
if (i == -1) i = s.length;
var article = s.substr(0, i).replace(/^ +/, "").replace(/ +$/, "").replace(/ /g, "_");
if (article == "")
article = mw.config.get('wgPageName');
else if (article[0] == ":")
article = article.substr(1);
article = article.substr(0, 1).toUpperCase() + article.substr(1); // Ne marche que dans l'espace principal
return article;
}
/* Rend inactif un lien javascript, de façon visible. */
function rblDisableLink(link) {
link.href = "javascript:;";
link.style.color = "silver";
link.style.cursor = "default";
link.style.textDecoration = "none";
}
/* Recherche la première occurence d'une ancre à partir d'une position donnée. */
function rblFindNext(s, link, start) {
var i = start, j, k, pageLink;
var linkN = rblNormalizeLink(link);
while (true) {
i = s.indexOf("[[", i);
if (i == -1) return false;
i += 2;
j = s.indexOf("]]", i);
if (j == -1) return false;
pageLink = s.substr(i, j - i);
k = pageLink.indexOf("|");
if (k != -1)
pageLink = pageLink.substr(0, k);
else
k = pageLink.length;
if (linkN == rblNormalizeLink(pageLink))
return [i, i + k];
i = j + 2;
}
}
function rblSetSelection(start, end) {
var txt = document.getElementById('editform').getElementsByTagName('textarea')[0];
txt.focus();
txt.setSelectionRange(start, start);
var evt = document.createEvent('KeyEvents');
evt.initKeyEvent('keypress', true, true, window, false, false, false, false, 0, 32);
txt.dispatchEvent(evt);
evt = document.createEvent('KeyEvents');
evt.initKeyEvent('keypress', true, true, window, false, false, false, false, 8, 0);
txt.dispatchEvent(evt);
txt.setSelectionRange(start, end);
}
function rblSelectLink2() {
rblSelectLink();
}
/* Sélectionne l'occurence suivante d'une ancre brisée donnée. */
function rblSelectLink() {
var s = document.getElementById("editform").getElementsByTagName("textarea")[0].value;
var pos = rblFindNext(s, rblPage, rblLastPos[1]);
var msg = document.getElementById("rblMsg");
if (!pos) var pos = rblFindNext(s, rblPage, 0);
if (!pos) {
msg.innerHTML = "(non trouvé)";
return false;
}
rblLastPos = pos;
msg.innerHTML = rblFindNext(s, rblPage, pos[1]) ? "" : "[dernière occurence]";
rblSetSelection(pos[0], pos[1]);
return true;
}
function rblRemoveLink() {
var textArea = document.getElementById('editform').getElementsByTagName('textarea')[0];
var txt = textArea.value;
var i = rblLastPos[0], j = rblLastPos[1];
if (i != j && i >= 2 && txt.substr(i - 2, 2) == "[[" &&
rblNormalizeLink(txt.substr(i, j - i)) == rblNormalizeLink(rblPage)) {
if (txt.substr(j, 1) == "|") {
var k = txt.indexOf("]]", j + 1);
if (k == -1) k = txt.length;
textArea.value = txt.substr(0, i - 2) + txt.substr(j + 1, k - j - 1) + txt.substr(k + 2);
rblLastPos = [i - 2, i - 2];
if (!rblSelectLink()) rblSetSelection(i - 2, i - 2 + k - j - 1);
} else if (txt.substr(j, 2) == "]]") {
textArea.value = txt.substr(0, i - 2) + txt.substr(i, j - i) + txt.substr(j + 2);
rblLastPos = [i - 2, i - 2];
if (!rblSelectLink()) rblSetSelection(i - 2, i - 2 + j - i);
}
}
}
/* Crée des liens sous la fenêtre d'édition pour chercher les différentes
occurrences du lien dans l'article. */
function rblFormatEditPage() {
var rblList = document.createElement("span");
var p = document.getElementById("MediaWiki-summary");
p.insertBefore(rblList, p.firstChild);
var wpSummary = document.getElementById("wpSummary");
if (wpSummary) wpSummary.value = "Retrait du lien vers la page « " + rblPage + " » supprimée par décision PàS";
var wpMinoredit = document.getElementById("wpMinoredit");
if (wpMinoredit) wpMinoredit.checked = true;
var copyWarn = document.getElementById("editpage-copywarn");
if (copyWarn) copyWarn.style.display = "none";
rblList.innerHTML = mw.html.escape(rblPage) +
" (<a href=\"javascript:rblSelectLink2();\">chercher</a> | <a href=\"javascript:rblRemoveLink();\" id=\"rblRBLLink\">déwikifier</a>)" +
" <span id=\"rblMsg\"></span><br />";
rblLastPos = [0, 0];
rblSelectLink();
}
$(function() {
var action = mw.config.get('wgAction');
if (action == 'view' && mw.config.get('wgTitle').match(/\/Suppression$/)) {
mw.loader.using('mediawiki.util', function() {
mw.util.addPortletLink('p-tb', 'javascript:rblCreateList();', 'Déwikif pages liées', 'r-blinks', 'Assistant de suppression des liens vers cette page');
});
} else if (action == 'edit') {
rblPage = mw.util.getParamValue('rblink');
if (rblPage !== null) rblFormatEditPage();
}
});