Wikisłownikarz:Beau/newArticle.js

Z Wikisłownika – wolnego słownika wielojęzycznego

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
// Author: [[pl:User:Beau]]
var newArticleGadget = {};

newArticleGadget.version = 12;

newArticleGadget.languages = [
	'esperanto',
	'język angielski',
	'język czeski',
	'język francuski',
	'język grecki',
	'język hiszpański',
	'język litewski',
	'język niemiecki',
	'język polski',
	'język rosyjski',
	'język szwedzki',
	'język ukraiński'
	];

newArticleGadget.parts = [
	'czasownik',
	'liczebnik',
	'partykuła',
	'przyimek',
	'przymiotnik',
	'przysłówek',
	'rzeczownik',
	'spójnik',
	'wykrzyknik',
	'zaimek',
	'związek frazeologiczny'
	];

newArticleGadget.tips = {
	'język polski': {
		'czasownik': {
			question: 'co można robić?',
			examples: ['pisać', 'gotować']
		},
		'liczebnik': {
			question: 'ile? który z kolei?',
			examples: ['osiem', 'trzeci']
		},
		'partykuła': {
			examples: ['bodaj', 'oby']
		},
		'przyimek': {
			examples: ['do', 'na', 'bez']
		},
		'przymiotnik': {
			question: 'jaki?, czyj?, który?',
			examples: ['wesoły']
		},
		'przysłówek': {
			question: 'jak?',
			examples: ['szybko']
		},
		'rzeczownik': {
			question: 'kto?, co?',
			examples: ['rolnik', 'usta']
		},
		'spójnik': {
			examples: ['oraz', 'czyli']
		},
		'wykrzyknik': {
			examples: ['ach', 'plusk']
		},
		'zaimek': {
			examples: ['ja', 'mój']
		},
		'związek frazeologiczny': {
			examples: ['pies ogrodnika']
		}
	}
};

newArticleGadget.panel = null;
newArticleGadget.languageSelect = null;
newArticleGadget.partSelect = null;
newArticleGadget.tipsLine = null;

newArticleGadget.showPanel = function() {
	if ( this.panel ) {
		if ( this.panel.style.display === 'none' ) {
			this.panel.style.display = 'block';
		} else {
			this.panel.style.display = 'none';
		}
	} else {
		this.buildPanel();
	}

}

newArticleGadget.storeGadgetSettings = function( language, part ) {
	jQuery.cookie( 'newArticleLanguage', language, {
		expires: 30
	} );
	jQuery.cookie( 'newArticlePart', part, {
		expires: 30
	} );
};
newArticleGadget.getStoredLanguage = function() {
	return jQuery.cookie( "newArticleLanguage" );
};

newArticleGadget.getStoredPart = function() {
	return jQuery.cookie( "newArticlePart" );
};

newArticleGadget.buildPanel = function() {
	var that = this;
	this.panel = document.createElement( 'div' );
	this.panel.style.paddingTop = '0.2em';
	this.panel.style.paddingBottom = '0.2em';

	var firstLine = document.createElement( 'div' );

	this.languageSelect = document.createElement( "select" );
	this.languageSelect.onchange = function() {
		that.selectionChanged();
	};
	this.languageSelect.style.verticalAlign = 'middle';

	var selected = this.getStoredLanguage();
	if ( !selected ) {
		selected = "język polski";
	}

	for ( var i in this.languages ) {
		var language = this.languages[i];
		var option = document.createElement( 'option' );
		option.value = language;
		if ( language === selected ) {
			option.selected = true;
		}
		option.appendChild( document.createTextNode( language ) );
		this.languageSelect.appendChild( option );
	}

	firstLine.appendChild( document.createTextNode( 'Nowa sekcja językowa: ' ) );
	firstLine.appendChild( this.languageSelect );

	this.partSelect = document.createElement( "select" );
	this.partSelect.onchange = function() {
		that.selectionChanged();
	};
	this.partSelect.style.verticalAlign = 'middle';

	selected = this.getStoredPart();

	for ( var i in this.parts ) {
		var part = this.parts[i];
		var option = document.createElement( 'option' );
		option.value = part;
		if ( part === selected ) {
			option.selected = true;
		}

		option.appendChild( document.createTextNode( part ) );
		this.partSelect.appendChild( option );
	}

	firstLine.appendChild( document.createTextNode( 'Część mowy: ' ) );
	firstLine.appendChild( this.partSelect );

	this.button = document.createElement( "input" );
	this.button.type = "button";
	this.button.value = "Wstaw szablon";
	this.button.onclick = function() {
		that.insertTemplate();
	};

	firstLine.appendChild( this.button );

	this.panel.appendChild( firstLine );

	this.tipsLine = document.createElement( "p" );
	this.panel.appendChild( this.tipsLine );

	var textarea = document.getElementById( 'wpTextbox1' );
	if ( !textarea ) {
		return;
	}

	textarea.parentNode.insertBefore( this.panel, textarea );
	this.selectionChanged();
};

newArticleGadget.selectionChanged = function() {
	this.storeGadgetSettings( this.languageSelect.value, this.partSelect.value );

	this.tipsLine.innerHTML = '';

	var tips = this.tips[this.languageSelect.value];
	if ( !tips ) {
		return;
	}
	tips = tips[this.partSelect.value];
	if ( !tips ) {
		return;
	}

	if ( tips.question ) {
		this.tipsLine.appendChild( document.createTextNode( "Pytanie: " ) );
		var span = document.createElement( 'span' );
		span.style.fontWeight = 'bold';
		span.appendChild( document.createTextNode( tips.question ) );
		this.tipsLine.appendChild( span );
		this.tipsLine.appendChild( document.createTextNode( ". " ) );
	}
	if ( tips.examples ) {
		this.tipsLine.appendChild( document.createTextNode( "Zobacz przykładowe hasło: " ) );
		for ( var i = 0; i < tips.examples.length; i++ ) {
			var example = tips.examples[i];
			var link = document.createElement( 'a' );
			link.title = example;
			link.href = wgArticlePath.replace( "$1", example );
			link.appendChild( document.createTextNode( example ) );
			if ( i > 0 ) {
				this.tipsLine.appendChild( document.createTextNode( ", " ) );
			}
			this.tipsLine.appendChild( link );
		}
		this.tipsLine.appendChild( document.createTextNode( ". " ) );
	}
};

newArticleGadget.ucfirst = function( str ) {
	return str.substr( 0, 1 ).toUpperCase() + str.substr( 1, str.length );
};

newArticleGadget.insertTemplate = function() {
	var lines = [];

	var language = this.languageSelect.value;
	var part = this.partSelect.value;

	var langshort = language.replace( "język ", "" ); // usuń prefiks
	lines.push( "== " + wgTitle + " ({{" + language + "}}) ==" );

	if ( language === 'język rosyjski' || language === 'język ukraiński' ) {
		lines.push( "{{transliteracja}}" );
	}
	lines.push( "{{wymowa}}" );
	lines.push( "{{znaczenia}}" );

	if ( part === "rzeczownik" && language === "język angielski" ) {
		lines.push( "''" + part + " policzalny/niepoliczalny''" );
	} else {
		lines.push( "''" + part + "''" );
	}

	lines.push( language === "język polski" ? ": (1.1) krótka definicja" : ": (1.1) polski odpowiednik" );
	var infl = "{{odmiana}}"
	if ( part === "zaimek" ) {
		infl += " {{zob|[[Aneks:" + this.ucfirst( language ) + " - zaimki]]}}"
	}
	lines.push( infl );

	lines.push( "{{przykłady}}" );
	if ( language === "język polski" ) {
		lines.push( ": (1.1) ''przykład''" );
	} else {
		lines.push( ": (1.1) ''przykład " + langshort + "'' → tłumaczenie na język polski" );
	}
	lines.push( "{{składnia}}" );
	lines.push( "{{kolokacje}}" );
	lines.push( "{{synonimy}}" );
	lines.push( "{{antonimy}}" );
	lines.push( "{{pokrewne}}" );
	lines.push( "{{frazeologia}}" );
	lines.push( "{{etymologia}}" );
	var notes = "{{uwagi}}";

	if ( part === "związek frazeologiczny" ) {
		notes += " zobacz też: [[Indeks:" + this.ucfirst( langshort ) + " - Związki frazeologiczne]]";
	} else if ( part === "liczebnik" && language !== "język polski" ) {
		notes += " zobacz też: [[Indeks:" + this.ucfirst( langshort ) + " - Liczebniki]]";
	}
	lines.push( notes );

	if ( language === "język polski" ) {
		lines.push( "{{tłumaczenia}}" );
		lines.push( "* angielski: (1.1) [[ ]]" );
	}
	lines.push( "{{źródła}}" );

	var text = lines.join( "\n" );
	// znajdź definicję i podziel tekst
	var m = text.match( /^([\s\S]+?\(1\.1\) )([^\n]*)([\s\S]+)$/ );
	if ( m ) {
		insertTags( m[1], m[3], m[2] );
	} else {
		insertTags( text, "", "" );
	}
};

newArticleGadget.isNewPageInMainNamespaceCreated = function() {
	return !mw.config.get( 'wgArticleId' ) && mw.config.get( 'wgNamespaceNumber' ) === 0;
};

newArticleGadget.isPageEdited = function() {
	return mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit';
};

newArticleGadget.init = function() {
	if ( !this.isPageEdited() ) {
		return;
	}
	var that = this;
	mw.loader.using( 'ext.gadget.lib-toolbar' ).done( function() {
		mw.libs.toolbarGadget.addButton( {
			icon: "//upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png",
			title: 'Nowa sekcja językowa (wersja ' + that.version + ')',
			alt: 'Nowa sekcja językowa',
			id: 'newArticleGadgetButton',
			onclick: function() {
				that.showPanel();
			}
		} );

		if ( that.isNewPageInMainNamespaceCreated() ) {
			that.showPanel();
		}
	} )
};

jQuery( document ).ready( function() {
	newArticleGadget.init();
} );