MediaWiki:Gadget-insert-inflection.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 modules = [
'ext.gadget.insert-inflection-data',
'mediawiki.confirmCloseWindow',
'mediawiki.storage',
'jquery.textSelection'
],
messages = {
'inflection-insert-noun-subject': 'Wstaw temat',
'inflection-noun-subject': 'Temat rzeczownika:',
'inflection-insert-button-title': 'Wstaw odmianę',
'inflection-insert-button-alt': 'Wstaw odmianę',
'inflection-language': 'Język:',
'inflection-template': 'Szablon:',
'inflection-cancel-button': 'Anuluj',
'inflection-insert-template': 'Wstaw szablon'
},
templates = null, // MediaWiki:Gadget-insert-inflection-data.js
$panel = null,
$languageSelector = null,
$templateSelector = null,
$formContainer = null,
isLoading = false,
storageKey = 'ext.gadget.insert-inflection.selection',
storage = mw.storage.getObject( storageKey ) || {
language: '',
template: ''
};
/** Sets up the gadget */
function init() {
mw.messages.set( messages );
mw.libs.toolbarGadget.addButton( {
icon: '//upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png',
title: mw.msg( 'inflection-insert-button-title' ),
alt: mw.msg( 'inflection-insert-button-alt' ),
id: 'insertInflectionButton',
onclick: function () {
if ( !$panel ) {
if ( !isLoading ) {
isLoading = true;
mw.loader.using( modules ).done( function ( require ) {
templates = require( 'ext.gadget.insert-inflection-data' );
loadPanel();
} );
}
} else {
$panel.toggle();
}
}
} );
}
function loadPanel() {
$panel = $( '<div>' ).addClass( 'inflection-gadget-panel' );
$languageSelector = $( '<select>' )
.addClass( 'inflection-gadget-language-selector' )
.on( 'change', selectLanguage );
$templateSelector = $( '<select>' )
.addClass( 'inflection-gadget-template-selector' )
.on( 'change', selectTemplate );
$.each( templates, function ( i, template ) {
var $option = $( '<option>' )
.val( i )
.text( template.title )
.appendTo( $languageSelector );
if ( template.title === storage.language ) {
$option.prop( 'selected', true );
}
} );
// top line
$( '<div>' )
.append( [
mw.msg( 'inflection-language' ),
' ',
$languageSelector,
mw.msg( 'inflection-template' ),
' ',
$templateSelector
] )
.appendTo( $panel );
$formContainer = $( '<div>' ).appendTo( $panel );
// bottom line
$( '<div>' )
.append( [
$( '<input>' )
.attr( 'type', 'button' )
.val( mw.msg( 'inflection-insert-template' ) )
.on( 'click', insertTemplate )
.on( 'click', mw.confirmCloseWindow( {
test: function () {
return $panel.find( 'input[type="text"]' ).get()
.some( function ( input ) {
return input.value !== '';
} );
},
namespace: 'insert-inflection'
} ).release ),
' ',
$( '<input>' )
.attr( 'type', 'button' )
.val( mw.msg( 'inflection-cancel-button' ) )
.on( 'click', function ( evt ) {
$panel.toggle();
} )
] )
.appendTo( $panel );
$( '#wpTextbox1' ).before( $panel );
selectLanguage( storage.template );
isLoading = false;
}
function selectLanguage( selectedTemplate ) {
var language = templates[ $languageSelector.val() ];
mw.storage.setObject( storageKey, $.extend( storage, {
language: $languageSelector.find( ':selected' ).text()
} ) );
$templateSelector.empty();
$.each( language.templates, function ( i, template ) {
var $option = $( '<option>' )
.val( i )
.text( template.title )
.appendTo( $templateSelector );
if ( template.title === selectedTemplate ) {
$option.prop( 'selected', true );
}
} );
selectTemplate();
}
function selectTemplate() {
var $form, $table, elements, $row,
language = templates[ $languageSelector.val() ],
template = language.templates[ $templateSelector.val() ];
mw.storage.setObject( storageKey, $.extend( storage, {
template: $templateSelector.find( ':selected' ).text()
} ) );
$templateSelector.data( 'selectedTemplate', template );
$formContainer.children().hide();
if ( template.$element ) {
template.$element.show();
return;
}
elements = [];
$.each( template.fields, function ( i, field ) {
var $input;
if ( field.caption !== null ) {
$input = $( '<input>' ).attr( 'type', 'text' );
elements.push( field.caption, $input );
field.$input = $input;
}
} );
$table = $( '<table>' );
while ( elements.length > 0 ) {
$row = $( '<tr>' );
$.each( elements.splice( 0, 4 ), function ( i, rowElement ) {
$( '<td>' )
.append( rowElement )
.appendTo( $row );
} );
$table.append( $row );
}
$form = $( '<div>' );
if ( template.title === 'rzeczownik' ) {
$( '<div>' )
.append( [
mw.msg( 'inflection-noun-subject' ),
' ',
$( '<input>' ).attr( 'type', 'text' ),
$( '<input>' )
.attr( 'type', 'button' )
.val( mw.msg( 'inflection-insert-noun-subject' ) )
.on( 'click', function () {
$form.find( 'input[type="text"]' )
.val( $( this ).prev().val() );
} )
] )
.prependTo( $form );
}
template.$element = $form
.append( $table )
.appendTo( $formContainer );
}
function insertTemplate() {
var data = $templateSelector.data( 'selectedTemplate' ),
text = mw.format( '{{$1\n', data.template ),
fields = {},
padding = 0;
$.each( data.fields, function ( i, field ) {
if ( field.$input ) {
fields[ field.name ] = field.$input.val();
} else {
fields[ field.name ] = field.value;
}
if ( field.name.length > padding ) {
padding = field.name.length;
}
} );
padding++;
$.each( fields, function ( name, value ) {
while ( name.length < padding ) {
name += ' ';
}
if ( name[ 0 ] >= '0' && name[ 0 ] <= '9' ) {
text += mw.format( '|$1\n', value );
} else {
text += mw.format( '|$1 = $2\n', name, value );
}
} );
text += '}}';
$( '#wpTextbox1' ).focus().textSelection( 'encapsulateSelection', {
pre: text
} );
}
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
$( init );
}