Wikisłownikarz:Beau/newArticle.js
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();
} );