Uživatel:Sintakso/common.js

Z Wikislovníku
Skočit na navigaci Skočit na vyhledávání

Poznámka: Po zveřejnění musíte vyprázdnit cache vašeho prohlížeče, jinak změny neuvidíte.

  • Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)
  • Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)
  • Internet Explorer / Edge: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5
  • Opera: Stiskněte Ctrl-F5.
window.hotcat_translations_from_commons = true;

/*
 This imports the latest version of HotCat from Commons.
 HotCat is a gadget to make changes to categories much easier.
 Full documentation can be found at http://commons.wikimedia.org/wiki/Help:Gadget-HotCat
*/
mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript' );

// <nowiki>

/*
 * Uživatelské nástroje
 */
mw.loader.using("mw.Api").then(function (mw, $) {
	'use strict';
	
	/* Odkazy na pískoviště */
	mw.util.addPortletLink(
		'p-personal',
		'https://cs.wiktionary.org/wiki/U%C5%BEivatel:Sintakso/P%C3%ADskovi%C5%A1t%C4%9B',
		'Pískoviště',
		'pt-u-sandbox1',
		'Odkaz na pískoviště',
		'p',
		'#pt-mytalk'
    );
    var NUM_SANDBOXES = 4;
    for (var i = 2; i <= NUM_SANDBOXES; i++) {
    	mw.util.addPortletLink(
			'p-personal',
			'https://cs.wiktionary.org/wiki/U%C5%BEivatel:Sintakso/P%C3%ADskovi%C5%A1t%C4%9B' + i,
			i,
			('pt-u-sandbox' + i),
			'Odkaz na pískoviště',
			'p',
			'#pt-mytalk'
	    );
    }
    
    var sapi = {};
    sapi.errorTypes = {NOT_FOUND: 1, UNEXPECTED_RESPONSE: 2};
	
	sapi.capitalize = function(string) {
		return string.charAt(0).toUpperCase() + string.slice(1);
	};
	
	sapi.createTitle = function(string, level) {
		return "=".repeat(level) + " " + string + " " + "=".repeat(level);
	};
	
	sapi.trimTitle = function(title) {
		return title.replace(/=/g, "").trim();
	};
	
	sapi.trimTrailing = function(string) {
		return string.replace(/\n$/, '');
	};
	
	/*
     * Získá obsah stránky s názvem pageTitle z API
     */
    sapi.getPageContent = function(pageTitle) {
    	var result = new $.Deferred();
    	var error = {msg: undefined, type: undefined};
    	
		new mw.Api().get({
			action: 'query',
			prop: 'revisions',
			rvslots: '*',
			rvprop: ['content'],
			titles: [pageTitle],
		}).then(function (data) {
			if (!data.query || !data.query.pages) {
				error.msg = "Unexpected response: No query or no pages!";
				error.type = sapi.errorTypes.UNEXPECTED_RESPONSE;
				return result.reject(error);
			}
			var pages = data.query.pages;
			if (Object.keys(pages).length === 0) {
				error.msg = "Unexpected response: No pages!";
				error.type = sapi.errorTypes.UNEXPECTED_RESPONSE;
				return result.reject(error);
			}
			var page = pages[Object.keys(pages)[0]];
			if (page.missing !== undefined) {
				error.msg = "The requested page does not exist!";
				error.type = sapi.errorTypes.NOT_FOUND;
				return result.reject(error);
			}
			if (!page.revisions || page.revisions.length === 0
				|| !page.revisions[0].slots
				|| !page.revisions[0].slots.main) {
				error.msg = "Unexpected response: No revisions!";
				error.type = sapi.errorTypes.UNEXPECTED_RESPONSE;
				return result.reject(error);
			}
			var revision = page.revisions[0].slots.main;
			if (!revision['*']) {
				error.msg = "Unexpected response: No content!";
				error.type = sapi.errorTypes.UNEXPECTED_RESPONSE;
				return result.reject(error);
			}
			var content = revision['*'];
			return result.resolve(content);
		});
		
		return result.promise();
    };
    
    /*
     * Averti — nástroj pro zjednodušené vkládání varování na diskusní stránky
       uživatelů
     */
    var averti = {};
    averti.ANIMATION_TIME = 200;
    averti.scriptLink = "Special:PermaLink/1107588";
    averti.warningTypes = [
    	{name: "Experimenty", pageNameParameter: true},
    	{name: "Experimenty2", pageNameParameter: false},
    	{name: "Spam", pageNameParameter: true},
    	{name: "Mimo záběr", pageNameParameter: true}
    ];
    
    averti.warnUser = function(event, title, username, warnElement, warningType) {
    	event.preventDefault();
    	var talkPageTitle = "User talk:" + username;
    	
    	/* Připravit varovnou zprávu a shrnutí editace */
    	var warningMessage = "{{subst:" + warningType.name;
		if (warningType.pageNameParameter === true) {
			warningMessage += "|" + title;
		}
		warningMessage += "}} ~~~~";
		var summary = "[[" + averti.scriptLink
			+ "|Averti]]: Vloženo varování " + warningType.name;
    	
    	/* Pokusit se získat text diskusní stránky uživatele */
    	sapi.getPageContent(talkPageTitle).done(function(content) {
    		/* Text úspěšně získán */
    		
    		/* Připravit nadpis s měsícem a rokem */
	    	var today = new Date();
	    	var month = sapi.capitalize(
	    		today.toLocaleString('default', {month: 'long'}));
	    	var year = today.getFullYear();
	    	var titleName = month + " " + year;
	    	var titleString = sapi.createTitle(titleName, 2);
	    	
	    	/* Vyhledat nadpisy existujících vláken */
    		var titleRegex = /^==\s?(.+?)\s?==$/gm;
    		var matches = content.match(titleRegex);
    		
    		content = sapi.trimTrailing(content) + "\n\n";
    		if (matches === null || matches.length === 0
    			|| sapi.trimTitle(matches[matches.length - 1]) != titleName) {
    			/* Přidat nadpis pokud již není vložen jako poslední sekce
    			   na stránce */
    			content += titleString + "\n";
    		}
    		content += warningMessage;
    		
    		/* Uložit nový text stránky */
			new mw.Api().edit(
			    talkPageTitle,
			    function ( revision ) {
			        return {
			            text: content,
			            summary: summary
			        };
		    	}
		    ).done(function() {
		    	mw.notify("Varování vloženo.");
			}).fail(function(error) {
				console.log(error);
				mw.notify("Při ukládání varování došlo k chybě.");
			});
    	}).fail(function(error) {
    		if (error.type == sapi.errorTypes.NOT_FOUND) {
    			/* Diskusní stránka dosud neexistuje — založit */
    			new mw.Api().create(talkPageTitle,
				    {summary: summary},
				    warningMessage
				).done(function() {
					mw.notify("Založena diskusní stránka s varováním.");
				}).fail(function(error) {
					console.log(error);
					mw.notify("Při vytváření diskusní stránky došlo k chybě.");
				});
    		} else {
    			mw.notify("Chyba: " + error.msg);
    		}
    	});
    };
    
    averti.initiateWarning = function(event, title, username, warnElement) {
    	event.preventDefault();
    	$(warnElement.children()[0]).hide(averti.ANIMATION_TIME, function() {
    		var span = $("<span></span>").text("Zvolte varování ");
    		for (var i = 0; i < averti.warningTypes.length; i++) (function(i) {
    			var link = $("<a></a>").attr("href", "https://cs.wiktionary.org/wiki/Diskuse_s_uživatelem:" + username).text(averti.warningTypes[i].name);
    			span.append(link).append(" ");
    			link.click(function(event) {
    				averti.warnUser(event, title, username, span, averti.warningTypes[i]);
    			});
    		})(i);
    		var cancel = $("<a></a>").attr("href", "https://cs.wiktionary.org/wiki/Diskuse_s_uživatelem:" + username).text("storno");
    		cancel.click(function(event) {
    			event.preventDefault();
    			span.hide(averti.ANIMATION_TIME, function() {
    				span.remove();
    				$(warnElement.children()[0]).show(averti.ANIMATION_TIME);
    			});
    		});
    		span.append(cancel);
    		span.hide();
    		warnElement.append(span);
    		span.show(averti.ANIMATION_TIME);
    	});
    };

    averti.init = function() {
      $(".mw-changeslist-line-inner").each(function() {
        /* Získat název editované stránky a uživatelské jméno */
        var titleElem = $(this).children(".mw-title")[0];
        if (titleElem === undefined) {
          return;
        }
        var title = $(titleElem).children(".mw-changeslist-title")[0].text;
        var userElem = $(this).children(".mw-userlink")[0];
        var username = userElem.innerText;
        
        /* Vložit odkaz pro varování */
        var span = $("<span></span>");
        var link = $("<a></a>")
          .attr("href", "https://cs.wiktionary.org/wiki/Diskuse_s_uživatelem:" + username)
          .text("varovat");
        span.append(link);
        span.hide();
        var links = $(this).children(".mw-usertoollinks")[0];
        $(links).append(span);
        span.show(averti.ANIMATION_TIME);
        
        /* Při kliknutí provést akci */
        $(link).click(function(event) {
          averti.initiateWarning(event, title, username, span);
        });
      });
    };
    
    if (mw.config.get('wgCanonicalNamespace') === 'Special') {
      averti.init();
      console.log("Averti načteno.");
    }
} (mediaWiki, jQuery));

/**
 * @brief
 *  Automatické kosmetické úpravy.
 * 
 * @details
 *  Před uložením stránky provádí následující kosmetické úpravy:
 *  * nadpisy volně s odřádkováním před a bez odřádkování za
 *  * volný zápis * a # seznamů
 *  * reference přiražené k textu
 *  * dlouhá pomlčka místo krátké nebo spojovníku v proškrtnutých položkách seznamů
 *  * číslování {{Překlady}}
 *  * rozložený zápis prázdné šablony {{Překlady}}
 *  * správný zápis kategorií
 *  * formátování víceřádkových šablon
 *  * správný zápis <br /> a <hr />
 *  * správný zápis <references />
 *  * odstranění mezer na konci řádku
 *  * odstranění vícenásobných mezer v textu
 *  * odstranění vícenásobného odřádkování
 * 
 * @author
 *  [[meta:User:Danny B.]]
 */

/*global mediaWiki, jQuery */
/*jslint browser: true, plusplus: true, white: true */
/*jshint browser:true, laxbreak:false, plusplus:false, white:false, undef:true, unused:true */

( function ( mw, $ ) {
	
	'use strict';
	
	
	if ( mw.config.get( 'wgNamespaceNumber' ) || !/^(edit|submit)$/.test( mw.config.get( 'wgAction' ) ) ) {
		return;
	}
	
	
	$( document ).ready( function () {
		
		var replacements = [
			[
				/(^|\n)(==+)([^=]+)(\2) *(?=\n)/g,
				function ( $0, $1, $2, $3, $4 ) {
					return $1 + '\n' + $2 + ' ' + $.trim( $3 ) + ' ' + $4;
				}
			], [
				/\n\{\{\s*[Ss][Uu][Bb][Ss][Tt]\s*:\s*Vzor /g,
				'\n\n{{subst:Vzor '
			], [
				/\n([#\*]+)([^\n]*)/g,
				function ( $0, $1, $2 ) {
					return '\n' + $1 + ' ' + $.trim( $2 );
				}
			], [
				/([^\n]) *<ref/,
				'$1<ref'
			], [
				/# [-–] */g,
				'# —'
			], [
				/\n *\{\{Překlady/g,
				'\n# {{Překlady'
			], [
				/# \{\{Překlady *\}\}/g,
				'# {{Překlady\n}}'
			], [
				/\[\[ *Kategorie *:([^\]]+)\]\]/gi,
				function ( $0, $1 ) {
					return '\n[[Kategorie:' + $.trim( $1 ) + ']]\n';
				}
			], [
				/(\[\[Kategorie:[^\]]+\]\])\n+(?!\[\[[a-z])/g,
				'$1\n'
			], [
				/\n+ *\|([^=\n]+)=(?![^\n\|]*\|\|[^\n]*\n)([^\n]*)(?=\n)/g,
				function ( $0, $1, $2 ) {
					return '\n  | ' + $.trim( $1 ) + ' = ' + $.trim( $2 );
				}
			], [
				/< *\/? *([bh]r) *\/? *>/g,
				'<$1 />'
			], [
				/< *references *\/ *>/g,
				'<references />'
			], [
				/([^=]) +\n/g,
				'$1\n'
			], [
				/([^\n]) +/g,
				'$1 '
			], [
				/\n{3,}/g,
				'\n\n'
			], [
				// Oprava ohýbacích šablon zanechávajících za sebou volný řádek
				/(\{\{subst:Vzor .+?\|.+?\|x}})\n{2,}([=]+.+?[=]+)/g,
				'$1\n$2'
			], [
				// Automatická optimalizace wikiodkazů (např. [[odkaz|odkazu]]
				// -> [[odkaz]]u)
				/\[\[([^\|\]]+)\|\1([^\]]*)\]\]/g,
				'[[$1]]$2'
			]
		];
		
		$( '#wpSave' ).click( function () {
			
			$( '#wpTextbox1' ).val( function ( index, oldPageText ) {
				
				var newPageText = oldPageText;
				
				$.each( replacements, function ( index, replacement ) {
					newPageText = newPageText.replace( replacement[0], replacement[1] );
				});
				
				newPageText = $.trim( newPageText ) + '\n';
				
				if ( newPageText !== oldPageText ) {
					$( '#wpSummary' ).val( function ( index, summary ) {
						var summarySeparator = '';
						summary = $.trim( summary );
						if ( summary !== '' ) {
							summarySeparator = /^\/\*.*\*\/$/.test( summary ) ? ' ' : ', ';
						}
						return summary + summarySeparator + '[[Special:PermaLink/1087762|AKÚ (upravená verze)]]';
					});
				}
				
				return newPageText;
				
			});
			
			return true;
			
		});
		
	});
	
}( mediaWiki, jQuery ) );

// </nowiki>

//Zobrazení rozbalených tabulek
(function ($) {
	$("table").removeClass("mw-collapsed");
}(jQuery));