Más acciones
mSin resumen de edición |
Sin resumen de edición |
||
Línea 26: | Línea 26: | ||
} | } | ||
mw.loader.using( [ | |||
'oojs-ui', | |||
'mediawiki.api', | |||
'mediawiki.widgets.DateInputWidget' | |||
] ).then( () => { | |||
if ( | |||
mw.config.get( 'wgArticleId' ) !== ELECTION_2024_STATEMENTS_PAGE_ID || | |||
!mw.config.get( 'wgUserName' ) | |||
) { | |||
return; | |||
} | |||
const FALLBACK_LANGUAGE_CODE = 'es'; | |||
const userLanguage = mw.user.options.get( 'language' ); | |||
const messages = { | |||
realNameInputPlaceholder: { | |||
en: 'Your real name (optional)', | |||
es: 'Tu nombre real (opcional)' | |||
}, | |||
realNameInputLabel: { | |||
} | en: 'Real name', | ||
es: 'Nombre real' | |||
}, | |||
statementInputPlaceholder: { | |||
en: 'Why do you want to join the Administrative Council?', | |||
} | es: 'Por qué quieres ser miembro del Consejo de Administración...' | ||
}, | |||
statementInputLabel: { | |||
en: 'Statement', | |||
es: 'Presentacion' | |||
}, | |||
submitButtonLabel: { | |||
en: 'Submit', | |||
es: 'Publicar' | |||
}, | |||
spokenLanguagesInputLabel: { | |||
en: 'Spoken languages', | |||
es: 'Idiomas hablados' | |||
}, | |||
signupDateInputLabel: { | |||
en: 'Sign-up date', | |||
es: 'Fecha de ingreso' | |||
}, | |||
projectsInputLabel: { | |||
en: 'Projects', | |||
es: 'Proyectos' | |||
}, | |||
agreesWithPoliciesCheckboxLabel: { | |||
en: 'I confirm I have read and understood <a href="$1">this group\'s policies</a>, ' + | |||
'which I am committed to abide with, if elected.', | |||
es: 'He leído <a href="$1">las políticas del grupo</a> ' + | |||
'y tengo el compromiso suficiente en caso de ser electo.' | |||
}, | |||
legalAgeCheckboxLabel: { | |||
en: 'I am of legal age in my country of residence.', | |||
es: 'Soy mayor de edad en mi país de residencia.' | |||
}, | |||
fieldsetLabel: { | |||
en: 'Insert your data', | |||
es: 'Ingresa los datos de tu candidatura' | |||
} | }, | ||
formSubmitted: { | |||
en: 'Statement added successfully. Reloading...', | |||
es: 'Candidatura agregada con éxito. Recargando...' | |||
} | |||
}; | |||
function getMessage( key, language, ...parameters ) { | |||
const parsedParameters = parseParameters( parameters ); | |||
const message = findMessage( key, language ); | |||
const parsedMessage = parseMessage( message, parsedParameters ); | |||
return parsedMessage; | |||
} | |||
function parseParameters( ...parameters ) { | |||
const parsedParameters = {}; | |||
for ( const [ index, value ] of parameters.entries() ) { | |||
parsedParameters[ `$${index + 1}` ] = value; | |||
} | |||
return parsedParameters; | |||
} | |||
function findMessage( key, language ) { | |||
return ( | |||
messages[ key ][ language ] || | |||
messages[ key ][ FALLBACK_LANGUAGE_CODE ] | |||
); | |||
} | |||
function parseMessage( message, parameters ) { | |||
let parsedMessage = message; | |||
for ( const [ key, value ] of Object.entries( parameters ) ) { | |||
parsedMessage = parsedMessage.replaceAll( key, value ); | |||
} | |||
return parsedMessage; | |||
} | |||
setTimeout( () => { | const realNameInput = new OO.ui.TextInputWidget( { | ||
placeholder: getMessage( 'realNameInputPlaceholder', userLanguage ) | |||
} ); | |||
const spokenLanguagesInput = new OO.ui.TextInputWidget( { | |||
placeholder: 'es-n, en-2, ...', | |||
required: true, | |||
indicator: 'required' | |||
} ); | |||
const signupDateInput = new mw.widgets.DateInputWidget( { | |||
required: true, | |||
indicator: 'required' | |||
} ); | |||
const projectsInput = new OO.ui.TextInputWidget( { | |||
placeholder: 'eswiki, eswikivoyage, ...', | |||
required: true, | |||
indicator: 'required' | |||
} ); | |||
const statementInput = new OO.ui.MultilineTextInputWidget( { | |||
placeholder: getMessage( 'statementInputPlaceholder', userLanguage ), | |||
required: true, | |||
indicator: 'required', | |||
rows: 5 | |||
} ); | |||
const agreesWithPoliciesCheckbox = new OO.ui.CheckboxInputWidget( { | |||
required: true | |||
} ); | |||
const legalAgeCheckbox = new OO.ui.CheckboxInputWidget( { | |||
required: true | |||
} ); | |||
const submitButton = new OO.ui.ButtonInputWidget( { | |||
label: getMessage( 'submitButtonLabel', userLanguage ), | |||
type: 'submit', | |||
flags: [ | |||
'primary', | |||
'progressive' | |||
] | |||
} ); | |||
const fieldset = new OO.ui.FieldsetLayout( { | |||
label: getMessage( 'fieldsetLabel', userLanguage ), | |||
classes: [ 'container' ] | |||
} ); | |||
fieldset.addItems( [ | |||
new OO.ui.FieldLayout( realNameInput, { | |||
label: getMessage( 'realNameInputLabel', userLanguage ) | |||
} ), | |||
new OO.ui.FieldLayout( spokenLanguagesInput, { | |||
label: getMessage( 'spokenLanguagesInputLabel', userLanguage ) | |||
} ), | |||
new OO.ui.FieldLayout( signupDateInput, { | |||
label: getMessage( 'signupDateInputLabel', userLanguage ) | |||
} ), | |||
new OO.ui.FieldLayout( projectsInput, { | |||
label: getMessage( 'projectsInputLabel', userLanguage ) | |||
} ), | |||
new OO.ui.FieldLayout( statementInput, { | |||
label: getMessage( 'statementInputLabel', userLanguage ) | |||
} ), | |||
new OO.ui.FieldLayout( agreesWithPoliciesCheckbox, { | |||
label: $( | |||
`<span>${getMessage( | |||
'agreesWithPoliciesCheckboxLabel', | |||
userLanguage, | |||
'https://wikisp.org/wiki/Pol%C3%ADtica_electoral' | |||
)}</span>` | |||
), | |||
align: 'inline' | |||
} ), | |||
new OO.ui.FieldLayout( legalAgeCheckbox, { | |||
label: getMessage( 'legalAgeCheckboxLabel', userLanguage ), | |||
align: 'inline' | |||
} ), | |||
new OO.ui.FieldLayout( submitButton ) | |||
] ); | |||
const form = new OO.ui.FormLayout( { | |||
items: [ fieldset ], | |||
id: 'create-new-statement' | |||
} ); | |||
form.on( 'submit', ( event ) => { | |||
const username = mw.config.get( 'wgUserName' ); | |||
const realName = realNameInput.getValue(); | |||
const spokenLanguages = spokenLanguagesInput.getValue(); | |||
const signupDate = signupDateInput.getValue(); | |||
const projects = projectsInput.getValue(); | |||
const statement = statementInput.getValue(); | |||
const template = ` | |||
{{election/statement | |||
|username = ${username} | |||
|real-name = ${realName} | |||
|languages = ${spokenLanguages} | |||
|signup-date = ${signupDate} | |||
|projects = ${projects} | |||
|statement = ${statement} | |||
}}`.replace( /\s{2,}/g, '\n'); | |||
const parameters = { | |||
action: 'edit', | |||
title: 'Internal:Elecciones/CA/2024/Candidaturas/lista', | |||
appendtext: template, | |||
format: 'json' | |||
}; | |||
const api = new mw.Api(); | |||
api.postWithToken( 'csrf', parameters ).done( () => { | |||
mw.notify( getMessage( 'formSubmitted', userLanguage ) ); | |||
setTimeout( () => { | |||
window.location.reload(); | |||
}, 3000 ); | |||
} ); | } ); | ||
} ); | } ); | ||
} | |||
$( '#form-anchor' ).append( form.$element ); | |||
} ); |
Revisión actual - 17:40 28 oct 2024
// ocultar mw-pt-translate-header para los anónimos
mw.loader.using( [ 'mediawiki.user' ], function () {
if ( mw.user.isAnon() === 1 ) {
mw.util.addCSS( '.mw-pt-translate-header { display: none; }' );
}
} );
const ELECTION_2024_PAGE_ID = 1792;
const ELECTION_2024_STATEMENTS_PAGE_ID = 1794;
const ELECTION_2024_RESULTS_PAGE_ID = 1794;
const ELECTION_2024_PAGE_IDS = [
ELECTION_2024_PAGE_ID,
ELECTION_2024_STATEMENTS_PAGE_ID,
ELECTION_2024_RESULTS_PAGE_ID
];
if ( ELECTION_2024_PAGE_IDS.includes( mw.config.get( 'wgArticleId' ) ) ) {
$( '.navbar li:has(a.selflink)' )
.css( {
'border-radius': '5px 5px 0 0',
'border-bottom-left-radius': '0px',
'border-bottom': '3px solid #833ab4'
} );
}
mw.loader.using( [
'oojs-ui',
'mediawiki.api',
'mediawiki.widgets.DateInputWidget'
] ).then( () => {
if (
mw.config.get( 'wgArticleId' ) !== ELECTION_2024_STATEMENTS_PAGE_ID ||
!mw.config.get( 'wgUserName' )
) {
return;
}
const FALLBACK_LANGUAGE_CODE = 'es';
const userLanguage = mw.user.options.get( 'language' );
const messages = {
realNameInputPlaceholder: {
en: 'Your real name (optional)',
es: 'Tu nombre real (opcional)'
},
realNameInputLabel: {
en: 'Real name',
es: 'Nombre real'
},
statementInputPlaceholder: {
en: 'Why do you want to join the Administrative Council?',
es: 'Por qué quieres ser miembro del Consejo de Administración...'
},
statementInputLabel: {
en: 'Statement',
es: 'Presentacion'
},
submitButtonLabel: {
en: 'Submit',
es: 'Publicar'
},
spokenLanguagesInputLabel: {
en: 'Spoken languages',
es: 'Idiomas hablados'
},
signupDateInputLabel: {
en: 'Sign-up date',
es: 'Fecha de ingreso'
},
projectsInputLabel: {
en: 'Projects',
es: 'Proyectos'
},
agreesWithPoliciesCheckboxLabel: {
en: 'I confirm I have read and understood <a href="$1">this group\'s policies</a>, ' +
'which I am committed to abide with, if elected.',
es: 'He leído <a href="$1">las políticas del grupo</a> ' +
'y tengo el compromiso suficiente en caso de ser electo.'
},
legalAgeCheckboxLabel: {
en: 'I am of legal age in my country of residence.',
es: 'Soy mayor de edad en mi país de residencia.'
},
fieldsetLabel: {
en: 'Insert your data',
es: 'Ingresa los datos de tu candidatura'
},
formSubmitted: {
en: 'Statement added successfully. Reloading...',
es: 'Candidatura agregada con éxito. Recargando...'
}
};
function getMessage( key, language, ...parameters ) {
const parsedParameters = parseParameters( parameters );
const message = findMessage( key, language );
const parsedMessage = parseMessage( message, parsedParameters );
return parsedMessage;
}
function parseParameters( ...parameters ) {
const parsedParameters = {};
for ( const [ index, value ] of parameters.entries() ) {
parsedParameters[ `$${index + 1}` ] = value;
}
return parsedParameters;
}
function findMessage( key, language ) {
return (
messages[ key ][ language ] ||
messages[ key ][ FALLBACK_LANGUAGE_CODE ]
);
}
function parseMessage( message, parameters ) {
let parsedMessage = message;
for ( const [ key, value ] of Object.entries( parameters ) ) {
parsedMessage = parsedMessage.replaceAll( key, value );
}
return parsedMessage;
}
const realNameInput = new OO.ui.TextInputWidget( {
placeholder: getMessage( 'realNameInputPlaceholder', userLanguage )
} );
const spokenLanguagesInput = new OO.ui.TextInputWidget( {
placeholder: 'es-n, en-2, ...',
required: true,
indicator: 'required'
} );
const signupDateInput = new mw.widgets.DateInputWidget( {
required: true,
indicator: 'required'
} );
const projectsInput = new OO.ui.TextInputWidget( {
placeholder: 'eswiki, eswikivoyage, ...',
required: true,
indicator: 'required'
} );
const statementInput = new OO.ui.MultilineTextInputWidget( {
placeholder: getMessage( 'statementInputPlaceholder', userLanguage ),
required: true,
indicator: 'required',
rows: 5
} );
const agreesWithPoliciesCheckbox = new OO.ui.CheckboxInputWidget( {
required: true
} );
const legalAgeCheckbox = new OO.ui.CheckboxInputWidget( {
required: true
} );
const submitButton = new OO.ui.ButtonInputWidget( {
label: getMessage( 'submitButtonLabel', userLanguage ),
type: 'submit',
flags: [
'primary',
'progressive'
]
} );
const fieldset = new OO.ui.FieldsetLayout( {
label: getMessage( 'fieldsetLabel', userLanguage ),
classes: [ 'container' ]
} );
fieldset.addItems( [
new OO.ui.FieldLayout( realNameInput, {
label: getMessage( 'realNameInputLabel', userLanguage )
} ),
new OO.ui.FieldLayout( spokenLanguagesInput, {
label: getMessage( 'spokenLanguagesInputLabel', userLanguage )
} ),
new OO.ui.FieldLayout( signupDateInput, {
label: getMessage( 'signupDateInputLabel', userLanguage )
} ),
new OO.ui.FieldLayout( projectsInput, {
label: getMessage( 'projectsInputLabel', userLanguage )
} ),
new OO.ui.FieldLayout( statementInput, {
label: getMessage( 'statementInputLabel', userLanguage )
} ),
new OO.ui.FieldLayout( agreesWithPoliciesCheckbox, {
label: $(
`<span>${getMessage(
'agreesWithPoliciesCheckboxLabel',
userLanguage,
'https://wikisp.org/wiki/Pol%C3%ADtica_electoral'
)}</span>`
),
align: 'inline'
} ),
new OO.ui.FieldLayout( legalAgeCheckbox, {
label: getMessage( 'legalAgeCheckboxLabel', userLanguage ),
align: 'inline'
} ),
new OO.ui.FieldLayout( submitButton )
] );
const form = new OO.ui.FormLayout( {
items: [ fieldset ],
id: 'create-new-statement'
} );
form.on( 'submit', ( event ) => {
const username = mw.config.get( 'wgUserName' );
const realName = realNameInput.getValue();
const spokenLanguages = spokenLanguagesInput.getValue();
const signupDate = signupDateInput.getValue();
const projects = projectsInput.getValue();
const statement = statementInput.getValue();
const template = `
{{election/statement
|username = ${username}
|real-name = ${realName}
|languages = ${spokenLanguages}
|signup-date = ${signupDate}
|projects = ${projects}
|statement = ${statement}
}}`.replace( /\s{2,}/g, '\n');
const parameters = {
action: 'edit',
title: 'Internal:Elecciones/CA/2024/Candidaturas/lista',
appendtext: template,
format: 'json'
};
const api = new mw.Api();
api.postWithToken( 'csrf', parameters ).done( () => {
mw.notify( getMessage( 'formSubmitted', userLanguage ) );
setTimeout( () => {
window.location.reload();
}, 3000 );
} );
} );
$( '#form-anchor' ).append( form.$element );
} );