MediaWiki:Gadget-RfDHelper.js
Revisión del 09:00 9 abr 2014 de Bth0 (discusión | contribuciones) (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));