MediaWiki:Gadget-delete.js
Catatan: Setelah menyimpan, Anda harus memintas tembolok (cache) peramban Anda untuk melihat perubahannya. Google Chrome, Firefox, Microsoft Edge dan Safari: Tahan tombol ⇧ Shift dan klik Muat ulang (Reload) di tombol bilah alat. Untuk detail dan instruksi tentang peramban lain, lihat halaman menghapus singgahan (Inggris).
// <nowiki>
// UWAGA! Z tego gadżetu korzystają także inne projekty (Wikisłownik, Wikiźródła)
// Style CSS → [[Mediawiki:Common.css]] ↓
// .userSummaryButtons
window.del$talkNamespace = /(?:talk$|^dyskusja)/i;
window.del$redirect = /#(?:REDIRECT|PATRZ|PRZEKIERUJ|TAM)(?:\s*\[\[(.+?)(\|.*?)?\]\])?/i;
window.del$speedy = /\{\{(?:ek|delete|speedy)\|(?:1=)?(.+?)(?:\}\}|$)/i;
window.del$nowCommons = /\{\{(?:NowCommons|Do commons)\|(?:1=)?(?:Plik:|File:|Image:|Grafika:)?(.+?)\}\}/i;
// ---------------------------------------------------------
// Ustawienia - linkujące oraz historia
// ---------------------------------------------------------
// del_max_links - maksymalna liczba pobieranych linkujących, 0 - nie pobiera
// del_max_versions - maksymalna liczba pobieranych wpisów z historii, 0 - nie pobiera
// del_hardcore - czy włączony jest tryb hardcode?
// del_talk_highlight - czy włączone jest podświetlanie linku do strony dyskusji
// ---------------------------------------------------------
window.deleteGadget = {
version: 3,
loadingLinks: '<b>Wczytywanie linkujących...</b>',
loadingHistory: '<b>Wczytywanie historii zmian...</b>',
noLinks: '<span style="color: green; font-size: larger; font-weight:bold">Brak linkujących</span>',
linksRedirect: 'strona przekierowująca',
linksEmbedded: 'dołączony szablon',
linksHeader: 'Linkujące <span style="font-size: x-small;">(pierwsze $1)</span>',
historyHeader: 'Historia i autorzy <span style="font-size: x-small;">(ostatnie $1)</span>',
showAllCaption: 'pokaż wszystkie',
processLinks: function(data) {
var pages = [];
for (var id in data.query.embeddedin) {
var page = data.query.embeddedin[id];
page.embedded = true;
pages.push( page );
}
for (var id in data.query.backlinks) {
var page = data.query.backlinks[id];
pages.push( page );
}
this.addLinks(pages);
},
processImageUsage: function(data) {
var pages = [];
for (var id in data.query.imageusage) {
var page = data.query.imageusage[id];
pages.push( page );
}
this.addLinks(pages);
},
addLinks: function(list) {
var container = document.getElementById( 'links_content' );
if (list.length > 0) {
var ul = document.createElement('ul');
var limit = list.length;
if (limit > this.maxLinks)
limit = this.maxLinks;
for (var i = 0; i < limit; i++) {
var page = list[i];
var li = document.createElement('li');
var link = document.createElement('a');
link.title = page.title;
link.href = mw.util.getUrl(page.title);
link.appendChild( document.createTextNode(page.title) );
li.appendChild(link);
var sufix = [];
if (typeof(page.redirect) != 'undefined')
sufix.push(this.linksRedirect);
if (page.embedded)
sufix.push(this.linksEmbedded);
if (sufix.length)
li.appendChild( document.createTextNode(" (" + sufix.join(', ') + ")"));
ul.appendChild(li);
}
container.innerHTML = '';
container.appendChild(ul);
return;
}
container.innerHTML = this.noLinks;
},
createButtons: function(parentNode, buttonArray) {
var that = this;
for (var i = 0; i < buttonArray.length; i++)
{
var button = buttonArray[i];
// sprawdzenie czy przycisk ma zostać dodany
if (button.visibility && !button.visibility())
continue;
var newButton = document.createElement('a');
// atrybuty
newButton.title = button.reason;
if (button.callback) {
newButton.onclick = button.callback;
}
else {
newButton.onclick = function() { that.insertReason(this.title) };
}
newButton.appendChild(document.createTextNode(button.caption));
// dodanie przycisku
parentNode.appendChild(newButton);
}
},
createGroup: function(name, group) {
tr = document.createElement('tr');
tr.id = "del_" + name;
td_caption = document.createElement('td');
td_caption.align = 'right';
td_caption.appendChild( document.createTextNode(group.caption) );
tr.appendChild(td_caption);
td_buttons = document.createElement('td');
td_buttons.align = 'left';
td_buttons.className = 'userSummaryButtons';
this.createButtons(td_buttons, group.buttons);
tr.appendChild(td_buttons);
if ( group.visibility() ) {
tr.firstChild.style.fontWeight = 'bold';
}
else {
tr.style.display = 'none';
}
return tr;
},
showAll: function() {
for (var name in del$buttons) {
document.getElementById("del_" + name).style.display = '';
}
document.getElementById("del_general").cells[0].style.visibility = 'hidden';
},
init: function() {
if ( (mw.config.get('wgAction') != "delete" || mw.config.get('wgArticleId') == 0) && mw.config.get('wgCanonicalSpecialPageName') != "Nuke") {
return;
}
this.maxLinks = (typeof(del_max_links) == 'undefined') ? 10 : del_max_links;
this.maxRevisions = (typeof(del_max_versions) == 'undefined') ? 5 : del_max_versions;
this.hardcore = (typeof(del_hardcore) == 'undefined') ? false : del_hardcore;
this.talkHighlight = (typeof(del_talk_highlight) == 'undefined') ? true : del_talk_highlight;
this.defaultReason = '';
var catalk = document.getElementById('ca-talk');
if ( this.talkHighlight && catalk && catalk.className == '') {
catalk.style.textDecoration = 'blink';
catalk.firstChild.style.backgroundColor = 'orange';
}
var wpReason = document.getElementById('wpReason');
if ( wpReason ) {
wpReason.parentNode.align = "left";
wpReason.style.width = "100%";
this.defaultReason = wpReason.value;
var p = new RegExp('(\\?|&)wpReason=');
if (!p.exec(window.location)) {
wpReason.value = '';
}
}
else {
return;
}
var table;
var tr_watch;
if (mw.config.get('wgCanonicalSpecialPageName') == "Nuke") {
var label = wpReason.form.getElementsByTagName("label");
if (!label.length) {
return;
}
table = document.createElement("table");
var row = document.createElement("tr");
var tdLabel = document.createElement("td");
tdLabel.appendChild( document.createTextNode( label[0].textContent ) );
row.appendChild(tdLabel);
var tdReason = document.createElement("td");
tdReason.appendChild(wpReason);
row.appendChild(tdReason);
table.appendChild(row);
label[0].parentNode.insertBefore(table, label[0]);
label[0].parentNode.removeChild(label[0]);
}
else if (mw.config.get('wgNamespaceNumber') == 6 && !document.getElementById('wpConfirmB')) {
var mwfiledeletesubmit = document.getElementById('mw-filedelete-submit');
tr_watch = mwfiledeletesubmit.parentNode.parentNode;
table = tr_watch.parentNode;
}
else {
var wpWatch = document.getElementById('wpWatch');
if (wpWatch) {
tr_watch = wpWatch.parentNode.parentNode;
table = tr_watch.parentNode;
}
}
for (var name in del$buttons) {
var group = del$buttons[name];
var new_tr = this.createGroup(name, group);
if (name == 'general') {
var newButton = document.createElement('a');
// atrybuty
newButton.appendChild(document.createTextNode(this.showAllCaption));
newButton.onclick = this.showAll;
newButton.style.cursor = 'pointer';
// dodanie przycisku
new_tr.firstChild.appendChild(newButton);
// przywróć normalny styl
new_tr.firstChild.style.fontWeight = 'normal';
}
if (tr_watch) {
table.insertBefore(new_tr, tr_watch);
}
else {
table.appendChild(new_tr);
}
}
if (mw.config.get('wgCanonicalSpecialPageName') == "Nuke") {
return;
}
var bodyContent = document.getElementById('bodyContent');
var deletionlog = document.getElementById('mw-article-delete-deletionlog');
if (this.maxRevisions > 0) {
var history_header = document.createElement('h2');
history_header.innerHTML = this.historyHeader.replace('$1', this.maxRevisions);
bodyContent.insertBefore(history_header, deletionlog);
var history_content = document.createElement('div');
history_content.id = 'history_content';
history_content.innerHTML = this.loadingHistory;
bodyContent.insertBefore(history_content, deletionlog);
jQuery( '#history_content' ).load(
mw.config.get('wgServer') +
mw.config.get('wgScript') +
'?limit=' + this.maxRevisions +
'&title=' + encodeURIComponent(mw.config.get('wgPageName')) +
'&action=history #mw-history-compare'
);
}
if (this.maxLinks > 0) {
var links_header = document.createElement('h2');
links_header.innerHTML = this.linksHeader.replace('$1', this.maxLinks);
bodyContent.insertBefore(links_header, deletionlog);
var links_content = document.createElement('div');
links_content.id = 'links_content';
links_content.className = 'plainlinks';
links_content.innerHTML = this.loadingLinks;
bodyContent.insertBefore(links_content, deletionlog);
var that = this;
if (mw.config.get('wgNamespaceNumber') == 6) { // file
var request = {
action: 'query',
list: 'imageusage',
iulimit: this.maxLinks,
iutitle: mw.config.get('wgPageName'),
format: 'json',
requestid: new Date().getTime()
};
jQuery.getJSON( mw.config.get( 'wgScriptPath' ) + '/api.php', request, function(result) {
that.processImageUsage(result);
});
}
else {
var request = {
action: 'query',
list: 'backlinks|embeddedin',
bllimit: this.maxLinks,
bltitle: mw.config.get('wgPageName'),
eilimit: this.maxLinks,
eititle: mw.config.get('wgPageName'),
format: 'json',
requestid: new Date().getTime()
};
jQuery.getJSON( mw.config.get( 'wgScriptPath' ) + '/api.php', request, function(result) {
that.processLinks(result);
});
}
}
},
insertReason: function(reason) {
var element = document.getElementById('wpReason');
element.value = reason;
if (this.hardcore) {
element.form.submit();
}
},
insertReasonEx: function(reason, reasonFormat, regex) {
var matches = this.defaultReason.match(regex);
if (matches && matches.length > 1 && typeof(matches[1]) != 'undefined') {
return this.insertReason(reasonFormat.replace('$1', matches[1]));
}
else {
return this.insertReason(reason);
}
}
}
jQuery(document).ready(function() {
deleteGadget.init()
});