MediaWiki:Gadget-insert-inflection.js: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
przeniesienie szablonow do MediaWiki:Gadget-insert-inflection-data.js dla przejrzystosci kodu |
m jeszcze problem z 'this' |
||
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 12: | Linia 12: | ||
window.inflectionGadget = { /** Version of the gadget */ |
window.inflectionGadget = { /** Version of the gadget */ |
||
version: |
version: 11, |
||
templates: templates, // MediaWiki:Gadget-insert-inflection-data.js |
templates: templates, // MediaWiki:Gadget-insert-inflection-data.js |
||
panel: null, |
panel: null, |
||
Linia 126: | Linia 126: | ||
var selectedTemplate = parseInt( jQuery.cookie( 'inflectionTemplate' ) ); |
var selectedTemplate = parseInt( jQuery.cookie( 'inflectionTemplate' ) ); |
||
this.selectLanguage( selectedTemplate ); |
this.selectLanguage( selectedTemplate ); |
||
var allowCloseWindow = mw.confirmCloseWindow( { |
|||
test: function () { |
|||
return $( that.panel ).find( 'input[type="text"]' ).get() |
|||
.some( function ( input ) { |
|||
return input.value !== ''; |
|||
} ); |
|||
}, |
|||
namespace: 'insert-inflection' |
|||
} ); |
|||
$( '#editform' ).on( 'submit', allowCloseWindow.release ); |
|||
}, |
}, |
||
Wersja z 18:17, 4 cze 2016
/*
* @author: [[:pl:User:Beau]]
*/
/* Translatable strings - FIXME: extract all messages */
mw.messages.set( {
'inflection-insert-noun-subject': 'Wstaw temat',
'inflection-noun-subject': 'Temat rzeczownika: ',
'inflection-insert-button-title': 'Wstaw odmianę (wersja $1)',
'inflection-insert-button-alt': 'Wstaw odmianę'
} );
window.inflectionGadget = { /** Version of the gadget */
version: 11,
templates: templates, // MediaWiki:Gadget-insert-inflection-data.js
panel: null,
languageSelector: null,
templateSelector: null,
selectedTemplate: null,
formContainer: null,
/** Sets up the gadget */
init: function() {
if ( mw.config.get( "wgAction" ) != 'edit' && mw.config.get( "wgAction" ) != 'submit' ) {
return;
}
if ( this.templates.length < 1 ) {
return;
}
var that = this;
toolbarGadget.addButton( {
icon: "//upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png",
title: mw.msg( 'inflection-insert-button-title', this.version ),
alt: mw.msg( 'inflection-insert-button-alt' ),
id: 'insertInflectionButton',
onclick: function() {
that.togglePanel();
}
} );
},
togglePanel: function() {
if ( this.panel ) {
if ( this.panel.style.display == 'none' ) {
this.panel.style.display = 'block';
} else {
this.panel.style.display = 'none';
}
return;
}
this.panel = document.createElement( 'div' );
this.panel.style.paddingTop = '0.2em';
this.panel.style.paddingBottom = '0.2em';
var that = this;
this.languageSelector = document.createElement( "select" );
this.languageSelector.onchange = function() {
that.selectLanguage();
};
this.languageSelector.style.verticalAlign = 'middle';
this.templateSelector = document.createElement( "select" );
this.templateSelector.onchange = function() {
that.selectTemplate();
};
this.templateSelector.style.verticalAlign = 'middle';
var selectedLanguage = parseInt( jQuery.cookie( 'inflectionLanguage' ) );
if ( !selectedLanguage ) {
selectedLanguage = 0;
}
for ( var i in this.templates ) {
var template = this.templates[i];
var option = document.createElement( 'option' );
option.value = i;
if ( i == selectedLanguage ) {
option.selected = true;
}
option.appendChild( document.createTextNode( template.title ) );
this.languageSelector.appendChild( option );
}
var topLine = document.createElement( 'div' );
topLine.appendChild( document.createTextNode( 'Język: ' ) );
topLine.appendChild( this.languageSelector );
topLine.appendChild( document.createTextNode( 'Szablon: ' ) );
topLine.appendChild( this.templateSelector );
this.formContainer = document.createElement( 'div' );
var insertButton = document.createElement( "input" );
insertButton.type = "button";
insertButton.value = "Wstaw szablon";
insertButton.onclick = function() {
that.insertTemplate();
};
var cancelButton = document.createElement( "input" );
cancelButton.type = "button";
cancelButton.value = "Anuluj";
cancelButton.onclick = function() {
that.togglePanel();
};
var bottomLine = document.createElement( 'div' );
bottomLine.appendChild( insertButton );
bottomLine.appendChild( document.createTextNode( ' ' ) );
bottomLine.appendChild( cancelButton );
this.panel.appendChild( topLine );
this.panel.appendChild( this.formContainer );
this.panel.appendChild( bottomLine );
var textarea = document.getElementById( 'wpTextbox1' );
if ( !textarea ) {
return;
}
textarea.parentNode.insertBefore( this.panel, textarea );
var selectedTemplate = parseInt( jQuery.cookie( 'inflectionTemplate' ) );
this.selectLanguage( selectedTemplate );
var allowCloseWindow = mw.confirmCloseWindow( {
test: function () {
return $( that.panel ).find( 'input[type="text"]' ).get()
.some( function ( input ) {
return input.value !== '';
} );
},
namespace: 'insert-inflection'
} );
$( '#editform' ).on( 'submit', allowCloseWindow.release );
},
selectLanguage: function( selectedTemplate ) {
var language = this.templates[this.languageSelector.value];
jQuery( this.templateSelector ).children().remove();
if ( !selectedTemplate ) {
selectedTemplate = 0;
}
for ( var i in language.templates ) {
var template = language.templates[i];
var option = document.createElement( 'option' );
option.value = i;
if ( i == selectedTemplate ) {
option.selected = true;
}
option.appendChild( document.createTextNode( template.title ) );
this.templateSelector.appendChild( option );
}
this.selectTemplate();
},
selectTemplate: function() {
var language = this.templates[this.languageSelector.value];
var template = language.templates[this.templateSelector.value];
jQuery.cookie( 'inflectionLanguage', this.languageSelector.value, {
expires: 30
} );
jQuery.cookie( 'inflectionTemplate', this.templateSelector.value, {
expires: 30
} );
this.selectedTemplate = template;
jQuery( this.formContainer ).children().css( 'display', 'none' );
if ( template.element ) {
template.element.style.display = 'block';
return;
}
var form = document.createElement( 'div' );
var table = document.createElement( 'table' );
var elements = [];
for ( var i in template.fields ) {
var field = template.fields[i];
if ( field.caption !== null ) {
var caption = document.createTextNode( field.caption );
var input = document.createElement( 'input' );
input.type = 'text';
elements.push( caption );
elements.push( input );
field.input = input;
}
}
while ( elements.length > 0 ) {
var row = document.createElement( 'tr' );
var rowElements = elements.splice( 0, 4 );
for ( var i in rowElements ) {
var cell = document.createElement( 'td' );
cell.appendChild( rowElements[i] );
row.appendChild( cell );
}
table.appendChild( row );
}
if ( template.title == 'rzeczownik' ) {
var $form = jQuery( form );
var $div = jQuery( '<div/>' );
var $inputSubject = jQuery( '<input type="text" />' );
var $inputButton = jQuery( '<input type="button" />' );
$inputButton.bind( 'click', function() {
$form.find( 'input[type="text"]' ).val( $inputSubject.val() );
} );
$inputButton.val( mw.msg( 'inflection-insert-noun-subject' ) );
$div.append( mw.msg( 'inflection-noun-subject' ), $inputSubject, $inputButton );
$form.prepend( $div );
}
form.appendChild( table );
this.formContainer.appendChild( form );
template.element = form;
},
insertTemplate: function() {
var data = this.selectedTemplate;
var fields = {};
var padding = 0;
for ( var i in data.fields ) {
var field = data.fields[i];
if ( field.input != null ) {
fields[field.name] = field.input.value;
} else {
fields[field.name] = field.value;
}
if ( field.name.length > padding ) {
padding = field.name.length;
}
}
padding++;
var text = "{{" + data.template + "\n";
for ( var name in fields ) {
var value = fields[name];
while ( name.length < padding ) {
name += ' ';
}
if (name[0]>='0' && name[0]<='9')
text += "|" + value + "\n";
else
text += "|" + name + " = " + value + "\n";
}
text += "}}";
jQuery( "#wpTextbox1" ).focus();
mw.toolbar.insertTags( text, '', '' );
}
};
inflectionGadget.init();