Cambios

Saltar a: navegación, buscar

MediaWiki:Gadget-RfDHelper.js

4152 bytes añadidos, 09:00 9 abr 2014
Página creada con «/*! * Some enhancement on RfD that is enabled by default just for admins * Originally was developed inside Merge.js by me but I decided to split it * It will add a quick...»
/*!
* Some enhancement on RfD that is enabled by default just for admins
* Originally was developed inside Merge.js by me but I decided to split it
* It will add a quick delete button near each header that is requested by merge.js
* and will add a number near links button so admins can quickly detect an item has
* not any back link then safely delete it. It also will check recent delete
* log every 5 seconds and will make deleted item links on RfD red link
* to prevent conflicts on deletion.
*
* @author User:Ebraminio <ebrahim -at- gnu.org>
* @license CC-Zero
*/

/*jslint indent: 2, regexp: true, unparam: true, browser: true*/
/*jshint unused: false*/
/*global mediaWiki, jQuery*/
(function ($, mw) {
'use strict';

/**
* Get backlink (50 limited)
*/
function getBackLinks(itemId, callback) {
new mw.Api().get({
action: 'query',
list: 'backlinks',
bltitle: itemId,
blnamespace: 0,
bllimit: 50,
format: 'json'
}).done(function (data) {
callback($.map(data.query.backlinks, function (value) {
return value.title;
}));
});
}

/**
* Delete an item
*/
function deleteItem(id, reason, callback) {
new mw.Api().post({
action: 'delete',
title: id,
reason: reason,
token: mw.user.tokens.get('editToken')
}).done(callback);
}

/**
* Get recent deletions
*/
function recentDeletions(callback) {
new mw.Api().get({
action: 'query',
list: 'recentchanges',
rctype: 'log',
format: 'json',
rcprop: 'title|loginfo'
}).done(callback);
}

if (mw.config.get('wgPageName').indexOf('Wikidata:Requests_for_deletions') === 0 &&
mw.config.get('wgAction') === 'view') {
$(function () {
var itemLinks = {};
$('a[href^="/wiki/Q"]:not(.new)').each(function (i, x) { itemLinks[x.href.replace(/.*\//, '')] = x; });

setInterval(function () {
recentDeletions(function (r) {
$.each(r.query.recentchanges, function (i, x) {
if (x.ns !== 0 || x.logtype !== 'delete') { return; }
$(itemLinks[x.title]).addClass('new');
itemLinks[x.title] = undefined;
});
});
}, 5000);

$("#mw-content-text > p > .plainlinks").each(function (i, x) {
var link = $(x).find('a:first'),
deleteQuery = new mw.Uri(link.prop('href')).query,
header,
button;
if (deleteQuery.action !== 'delete') {
return;
}

header = link.parent().parent().prev().find('.mw-headline a');

// add backlinks count
getBackLinks(deleteQuery.title, function (backlinks) {
var blcount = backlinks.length;
if (blcount === 50) {
blcount = '50+';
}

$('[href*="Special:WhatLinksHere"]', x).after(
$('<span />')
.css('color', blcount === 0 ? 'black' : 'red')
.text(' (' + mw.language.convertNumber(blcount) + ')')
);
});

// if deletion request is not done by merge.js and admin has not
// `var rfdHero = true` on her/his common.js don't add quick delete button
if (deleteQuery.wpReason.indexOf('Merge.js') === -1 && window.rfdHero !== true) {
return;
}

// don't add delete button if is deleted already
if (header.hasClass('new')) {
return;
}

button = $('<button>', {
title: 'Quick Delete',
style: 'cursor: pointer'
}).append($('<img />', {
src: '//upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_delete_vote.svg/15px-Symbol_delete_vote.svg.png',
width: '15',
height: '15'
})).click(function (x) {
header.css('text-decoration', 'line-through');
deleteItem(deleteQuery.title, deleteQuery.wpReason, function () {
header.addClass('new');
});
// delete button after delete request
button.remove();
});
// insert the button
header.after(button);
});
});
}
}(jQuery, mediaWiki));
552
ediciones

Menú de navegación