MediaWiki:Common.js

From WikiZagłębie

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* "Duplicate article" + "Write an article" w sidebarze (tylko NS=0, view, nie strona główna) */
mw.loader.using([ 'mediawiki.util', 'mediawiki.api' ]).then(function () {
	$(function () {

		// tylko przestrzeń główna i zwykły podgląd
		if (mw.config.get('wgNamespaceNumber') !== 0) return;
		if (mw.config.get('wgAction') !== 'view') return;
		if (mw.config.get('wgIsMainPage')) return;

		// wybierz portlet (zależnie od skórki)
		var targetPortlet =
			document.getElementById('p-navigation') ? 'p-navigation' :
			(document.getElementById('p-tb') ? 'p-tb' : null);

		// fallback: weź pierwszy dostępny portlet (różne skórki)
		if (!targetPortlet) {
			var firstPortlet = $('.mw-portlet').first().attr('id');
			if (firstPortlet) targetPortlet = firstPortlet;
		}

		if (!targetPortlet) return;

		var api = new mw.Api();
		var srcPage = mw.config.get('wgPageName'); // np. "Sosnowiec"
		var srcTitle = mw.config.get('wgTitle');   // np. "Sosnowiec"

		// 1) Napisz artykuł – kreator Specjalna:Utwórz_artykuł (tytuł, kategorie, infobox sugerowany z kategorii)
		mw.util.addPortletLink(
			targetPortlet, mw.util.getUrl( 'Special:Create_article' ), 'Write an article', 'n-write-article',
			'New article wizard: title, categories, and infobox.'
		);

		// 2) Powiel artykuł (preload treścią bieżącej strony)
		var link = mw.util.addPortletLink(
			targetPortlet,
			'#',
			'Duplicate article',
			'n-duplicate-article',
			'Create a new page using this page\'s content as a preload.'
		);

		if (!link) return;

		link.addEventListener('click', function (e) {
			e.preventDefault();

			var defaultTitle = srcTitle + ' (kopia)';
			var newTitle = window.prompt('New page title:', defaultTitle);
			if (!newTitle) return;

			api.get({ action: 'query', titles: newTitle, formatversion: 2 }).then(function (data) {
				var page = data && data.query && data.query.pages && data.query.pages[0];
				if (page && !page.missing) {
					window.alert('Page "' + newTitle + '" already exists. Choose a different title.');
					return;
				}

				var url = mw.util.getUrl(newTitle, { action: 'edit', preload: srcPage });
				window.location.href = url;
			});
		});
	});
});