User:Sminthopsis84/common.js

importScript('User:Numbermaniac/goToTop.js'); // User:Numbermaniac/goToTop.js

/**

* Code copied from https://species.wikimedia.org/w/index.php?title=User:Orchi/common.js&action=edit

* Thanks to User:Orchi who passed this on from wikispecies to some EN wikipedia users

*

* Create redirects to a given page

* First click on the toolbox link

* highlights possible redirects

* second click creates them

*

* It requires a h3 section which is exactly named "Synonyms" and

* then a ul/li structure and italic names of the redirects to create.

*

* Tested at Epipactis helleborine subsp. helleborine

*

* @author Rillke

* @license GPL v.3

**/

(function ($, mw) {

mw.util.addCSS(

'.syn-x { background:#ddd; cursor:pointer; }' +

'.syn-to-create { background:#ffb; outline:dotted 1px #999; }' +

'.syn-to-create:before { content: \" to be created - \"; }' +

'.syn-created { background:#bfb; }' +

'.syn-create-err { background:#fbb; }');

var p = mw.util.addPortletLink('p-tb', '#createRedirs', 'Create Redirects',

't-syn-redir', 'Create redirects using AJAX in batch');

if (!p) return;

var $p = $(p),

$syns = $(),

$count = $(''),

$txt = $p.find('a');

$txt = $txt.length ? $txt : $p;

var __updateCount = function () {

$count.text('(' + $syns.filter('.syn-to-create').length + ')');

};

var __create = function () {

var mwa = new mw.Api();

// At the time of writing this mw.Api.edit was broken

// (no callback because it did not return the promise object

// nor did it forward the callback functions properly)

var _post = function () {

if (!$syns.filter('.syn-to-create').length) return $txt.text("Done!");

var $el = $syns.filter('.syn-to-create').eq(0),

title = $el.text();

__updateCount();

mwa.post({

action: 'edit',

createonly: true,

token: mw.user.tokens.get('csrfToken'),

text: '#REDIRECT ' + mw.config.get('wgPageName').replace(/_/g, ' ') + '',

title: title,

watchlist: 'nochange'

}).done(function () {

$el.removeClass('syn-to-create').addClass('syn-created');

_post();

}).fail(function () {

$el.removeClass('syn-to-create').addClass('syn-create-err');

_post();

});

};

_post();

};

var __highlight = function () {

var _textsWeHave = {};

var _highlightLi = function (i, el) {

var $el = $(el),

$i = $el.find('i:first'),

t = $i.text();

if (t in _textsWeHave) return;

_textsWeHave[t] = true;

$syns = $syns.add($i.addClass('syn-to-create syn-x'));

};

$('h3').find('#Synonyms').parents('h3').nextUntil('h3,h2,hr').find('li').each(_highlightLi);

$syns.click(function () {

$(this).toggleClass('syn-to-create');

__updateCount();

});

__updateCount();

$txt.text("Create Redirs: ").append($count);

$p.unbind('click').click(function (e) {

e.preventDefault();

$p.unbind('click').addClass('ui-state-disabled');

$.createSpinner().prependTo($txt);

__create($syns);

});

};

$p.click(function (e) {

e.preventDefault();

$p.unbind('click');

mw.loader.using(['jquery.spinner', 'mediawiki.util', 'mediawiki.api', 'mediawiki.user'], function () {

__highlight();

});

});

}(jQuery, mediaWiki));