MediaWiki:Gadget-renamereasons.js

A Wikipédiából, a szabad enciklopédiából

Megjegyzés: közzététel után frissítened kell a böngésződ gyorsítótárát, hogy lásd a változásokat.

  • Firefox / Safari: tartsd lenyomva a Shift gombot és kattints a Frissítés gombra a címsorban, vagy használd a Ctrl–F5 vagy Ctrl–R (Macen ⌘–R) billentyűkombinációt
  • Google Chrome: használd a Ctrl–Shift–R (Macen ⌘–Shift–R) billentyűkombinációt
  • Internet Explorer / Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
  • Opera: Nyomj Ctrl–F5-öt
/*
 * [[hu:user:Bináris/Renamereasons.js]] – Please don't remove comments upon copying! / Másoláskor, kérlek, hagyd benne a megjegyzéseket!
 * Derived from: [[hu:MediaWiki:Gadget-defaultsummaries.js]]
 * Original credits:
 *
 * Betölti a gyakori átnevezések listáját a Szerkesztő:<én>/renamereasons.list
 * lapról; ha az nem létezik, akkor a MediaWiki:Gadget-renamereasons.list
 * lapról. (Egy csillag: kategória, két csillag: választható opció.)
 *
 * Importálva az angol Wikipédiából:
 * https://en.wikipedia.org/wiki/MediaWiki:Gadget-defaultsummaries.js
 *
 * Imported as of 09/06/2011 from [[User:ErrantX/defaultsummaries.js]]
 * Edited version from [[User:MC10/defaultsummaries.js]]
 * Implements default edit summary dropdown boxes
 */

if (mw.config.get('wgCanonicalSpecialPageName') === 'Movepage') {
    var $summaryBox = $('[name="wpReason"]');

    function editsummAddOptionToDropdown(dropdown, optionText) {
        var option = document.createElement("option");
        var optionTextNode = document.createTextNode(optionText);
        option.appendChild(optionTextNode);
        dropdown.appendChild(option);
    }

    function editsummAddCatToDropdown(dropdown, catText) {
        var option = document.createElement("option");
        option.disabled = true;
        option.selected = true;
        var optionTextNode = document.createTextNode(catText);
        option.appendChild(optionTextNode);
        dropdown.appendChild(option);
    }

    function editsummOnCannedSummarySelected() {
        var idx = this.selectedIndex;
        var canned = this.options[idx].text;
        $summaryBox.val(canned).trigger('change');
    }

	/**
	 * Gets the content of the given pages via API, returns a promise that
	 * on success resolves with the content of the first one (in the given
	 * order) that exists.
	 */
	function getListPromise(titles) {
		var formattedTitles,
			api = new mw.Api();
		formattedTitles = $.map(titles, function(title) {
			return new mw.Title(title).getPrefixedText()
		});
		return api.get({
			formatversion: 2,
			action: 'query',
			titles: formattedTitles.join('|'),
			prop: 'revisions|info',
			rvprop: 'content',
			rvslots: 'main',
			inprop: 'displaytitle',
			redirects: 1
		}).fail(function (err) {
			console.log(err)
		}).then(function (data) {
			var pages = {};
			$.each(data.query.pages, function (i, page) {
				if (page.revisions && page.revisions[0]) {
	    			pages[page.displaytitle] = page.revisions[0].slots.main.content;
				}
			});
			for (var i = 0; i < formattedTitles.length; i++) {
				if (pages[formattedTitles[i]]) {
					return pages[formattedTitles[i]];
				}
			}
			return false;
		});
	}
	
	/**
	 * Takes wikitext in the same format as MediaWiki:Movepage-reason-dropdown
	 * (one star for category, two for selectable option).
	 * Returns a list of [isCat, text] pairs.
	 */
	function parseList(listText) {
		return $.map(listText.split('\n'), function (line) {
			if (line[0] !== '*') return [];
			var isCat = line[1] !== '*',
			text = line.substr(isCat ? 1 : 2).replace(/^\s+|\s+$/, '');
			return [[isCat, text]];
		});
	}

    function insertSummaryOptions(list, $insertBeforeThis, dropdownWidth) {
        // For convenience, add a dropdown box with some canned
        // rename reasons to the form.
        if ($('#defaultsummaries').length || !list.length) {
            return;
        }
        var $div = $('<div id="defaultsummaries" />');
        var dropdown = document.createElement("select");
        dropdown.style.width = dropdownWidth;
        dropdown.style.margin = "0 4px 0 0";
        dropdown.onchange = editsummOnCannedSummarySelected;
        $.each(list, function (i, pair) {
        	if (pair[0]) {
        		editsummAddCatToDropdown(dropdown, pair[1]);
        	} else {
        		editsummAddOptionToDropdown(dropdown, pair[1]);
        	}
        });
        $div.append(dropdown);
        $insertBeforeThis.before($div);
    }

	/**
	 * Gets the content of the following two pages via API:
	 * - Special:MyPage/renamereasons.list
	 * - MediaWiki:Gadget-renamereasons.list
	 * Returns a promise that on success resolves with the content of the
	 * first one (in the order above) that exists.
	 */
    $(function() {
        var $insertBeforeThis = $('#wpReason');
        // If we failed to find the wpReason id
        if (!$insertBeforeThis.length) {
            return;
        }
        
		var pages = [
			'User:' + mw.user.getName() + '/renamereasons.list',
			'MediaWiki:Gadget-renamereasons.list'
		];
		getListPromise(pages)
			.then(parseList)
			.then(function (options) {
		        insertSummaryOptions(options, $insertBeforeThis, "100%");
			});
    });
}