MediaWiki:Gadget-kinai.js

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
/**
 * Knávom, azaz a kínai nevek átírását váltogató mechanika
 *
 * [[Sablon:Kínai]] stb.
 * Eredeti kód: [[User:Chery/kínai.js]]
*/

var kinai_primary = 'magyaros';

/**
 * Switch between transliterations
 *
 * @param {jQuery.Event|null} e The jQuery event, if available. The default
 *  action will be prevented if given.
 * @param {jQuery|undefined} $content Content block to work on. If omitted,
 *  work on whole page.
 */
function switchKinai( e, $content ) {
	if ( e ) e.preventDefault();
	$( '.kinai-szoveg', $content ).each( function kinai_switch_foreach() {
		var pinyin = $( 'span.pinyin', this ).prop( 'outerHTML' ) || '';
		var magyaros = $( 'span.magyaros', this ).prop( 'outerHTML' ) || '';
		var hanzi = $( 'span.hanzi', this ).prop( 'outerHTML' );
		var egyeb = $( 'span.egyeb', this ).prop( 'outerHTML' );
		var cimszo = $( 'span.cimszo', this ).length;
		var hidden = $( 'span.hidden', this ).length;

		var str0 = (kinai_primary === 'pinyin') ? magyaros : pinyin;
		var str1 = (kinai_primary === 'pinyin') ? pinyin : magyaros;

		if (cimszo) {
			str0 = '<span class="cimszo"><b>' + str0 + '</b></span>';
		}

		if (!hidden) {
			str0 += ' ';
			str0 += (hanzi) ? '(' + hanzi + ', <i>' : '<i>(';
			str0 += str1;
			str0 += (egyeb) ? ',</i> ' + egyeb + ')' : ')</i>';
		} else {
			if (hanzi) {
				str0 += ' (' + hanzi + ')';
			}
			str0 += '<span class="hidden">' + str1 + '</span>';
		}

		$(this).html(str0);
	} );

	if (kinai_primary === 'pinyin') {
		kinai_primary = 'magyaros';
		mw.storage.set('kinai-primary', 'magyaros');
	} else {
		kinai_primary = 'pinyin';
		mw.storage.set('kinai-primary', 'pinyin');
	}
}

/**
 * Initialization on page or content load
 *
 * @param {jQuery} $content The content element
 */
function magyarosKinaiInit( $content ) {
	// Csak akkor rakjuk ki a fület, ha van a cikkben megjelölt kínai név.
	if ( !$content.find( '.kinai-szoveg' ).length ) {
		return;
	}

	// Odacsapjuk a fület, ha még nincs.
	$.when(
		mw.loader.using( 'mediawiki.util' ),
		$.ready
	).then( function addTab() {
		if ( !$( '#ca-kinai-switch' ).length ) {
			var portletLink = mw.util.addPortletLink( 'p-cactions', '#', 'p./m.', 'ca-kinai-switch', 'Váltás pinjin és magyaros átírás közt' );
			$( portletLink ).click( switchKinai );
		}
	} );

	// Meg a kapcsolót a szócikk fölötti szöveghez is.
	$content.find( '#kinai_switch, .kinai_switch' ).each( function addInlineLink() {
		$( '<a>' )
			.attr( 'href', '#' )
			.addClass( 'kinai_switch' )
			.click( switchKinai )
			.html( $( this ).html() )
			.replaceAll( this );
	} );

	// Váltunk is rögtön, hogy kezdetben is a szkript szerint jelenjen meg. Persze ezt szebben is lehetne.
	kinai_primary = (mw.storage.get('kinai-primary') == 'pinyin') ? 'magyaros' : 'pinyin';
	// Ha elég gyorsak voltunk, akkor itt még mindig nincs a DOM-ban a cikk szövege, úgyhogy átadjuk.
	switchKinai( null, $content );
}
mw.hook( 'wikipage.content' ).add( magyarosKinaiInit );