User:PicTrans/common.js

/** * * 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));