Menú alternativo
Menú alternativo personal
No has accedido
Tu dirección IP será visible si haces alguna edición

Diferencia entre revisiones de «MediaWiki:Common.js»

Página de la interfaz de MediaWiki
Sin resumen de edición
Sin resumen de edición
 
(No se muestra una edición intermedia del mismo usuario)
Línea 26: Línea 26:
}
}


if (
mw.loader.using( [
mw.config.get( 'wgArticleId' ) === ELECTION_2024_STATEMENTS_PAGE_ID &&
'oojs-ui',
mw.config.get( 'wgUserName' ) !== null
'mediawiki.api',
) {
'mediawiki.widgets.DateInputWidget'
mw.loader.using( [
] ).then( () => {
'oojs-ui',
if (
'mediawiki.api',
mw.config.get( 'wgArticleId' ) !== ELECTION_2024_STATEMENTS_PAGE_ID ||
'mediawiki.widgets.DateInputWidget'
!mw.config.get( 'wgUserName' )
] ).then( () => {
) {
const realNameInput = new OO.ui.TextInputWidget( {
return;
placeholder: 'Tu nombre real (opcional)'
}
} );
const spokenLanguagesInput = new OO.ui.TextInputWidget( {
const FALLBACK_LANGUAGE_CODE = 'es';
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: 'Por qué quieres ser miembro del Consejo de Administración...',
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( {  
const userLanguage = mw.user.options.get( 'language' );
label: 'Publicar',
const messages = {
type: 'submit',
realNameInputPlaceholder: {
flags: [
en: 'Your real name (optional)',
'primary',
es: 'Tu nombre real (opcional)'
'progressive'
},
]
realNameInputLabel: {
} );
en: 'Real name',
es: 'Nombre real'
const fieldset = new OO.ui.FieldsetLayout( {  
},
label: 'Ingresa los datos de tu candidatura',
statementInputPlaceholder: {
classes: [ 'container' ]
en: 'Why do you want to join the Administrative Council?',
} );
es: 'Por qué quieres ser miembro del Consejo de Administración...'
},
fieldset.addItems( [
statementInputLabel: {
new OO.ui.FieldLayout( realNameInput, {
en: 'Statement',
label: 'Nombre real'
es: 'Presentacion'
} ),
},
new OO.ui.FieldLayout( spokenLanguagesInput, {
submitButtonLabel: {
label: 'Idiomas hablados'
en: 'Submit',
} ),
es: 'Publicar'
new OO.ui.FieldLayout( signupDateInput, {
},
label: 'Fecha de ingreso'
spokenLanguagesInputLabel: {
} ),
en: 'Spoken languages',
new OO.ui.FieldLayout( projectsInput, {
es: 'Idiomas hablados'
label: 'Proyectos'
},
} ),
signupDateInputLabel: {
new OO.ui.FieldLayout( statementInput, {
en: 'Sign-up date',
label: 'Presentación'
es: 'Fecha de ingreso'
} ),
},
new OO.ui.FieldLayout( agreesWithPoliciesCheckbox, {
projectsInputLabel: {
label: $(
en: 'Projects',
'<span>He leído <a href="https://wikisp.org/wiki/Pol%C3%ADtica_electoral">las políticas del grupo</a> ' +
es: 'Proyectos'
'y tengo el compromiso suficiente en caso de ser electo</span>.'
},
),
agreesWithPoliciesCheckboxLabel: {
align: 'inline'
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.',
new OO.ui.FieldLayout( legalAgeCheckbox, {
es: 'He leído <a href="$1">las políticas del grupo</a> ' +
label: 'Soy mayor de edad en mi país de residencia.',
'y tengo el compromiso suficiente en caso de ser electo.'
align: 'inline'
},
} ),
legalAgeCheckboxLabel: {
new OO.ui.FieldLayout( submitButton )
en: 'I am of legal age in my country of residence.',
] );
es: 'Soy mayor de edad en mi país de residencia.'
},
const form = new OO.ui.FormLayout( {
fieldsetLabel: {
items: [ fieldset ],
en: 'Insert your data',
id: 'create-new-statement'
es: 'Ingresa los datos de tu candidatura'
} );
},
formSubmitted: {
en: 'Statement added successfully. Reloading...',
es: 'Candidatura agregada con éxito. Recargando...'
}
};
form.on( 'submit', ( event ) => {
function getMessage( key, language, ...parameters ) {
const username = mw.config.get( 'wgUserName' );
const parsedParameters = parseParameters( parameters );
const realName = realNameInput.getValue();
const message = findMessage( key, language );
const spokenLanguages = spokenLanguagesInput.getValue();
const parsedMessage = parseMessage( message, parsedParameters );
const signupDate = signupDateInput.getValue();
const projects = projectsInput.getValue();
return parsedMessage;
const statement = statementInput.getValue();
}
const template = `
function parseParameters( ...parameters ) {
{{election/statement
const parsedParameters = {};
|username = ${username}
|real-name = ${realName}
for ( const [ index, value ] of parameters.entries() ) {
|languages = ${spokenLanguages}
parsedParameters[ `$${index + 1}` ] = value;
|signup-date = ${signupDate}
}
|projects = ${projects}
|statement = ${statement}
return parsedParameters;
}}`.replace( /\s{2,}/g, '\n');
}
const parameters = {
function findMessage( key, language ) {
action: 'edit',
return (
title: 'Internal:Elecciones/CA/2024/Candidaturas/lista',
messages[ key ][ language ] ||
appendtext: template,
messages[ key ][ FALLBACK_LANGUAGE_CODE ]
format: 'json'
);
};
}
const api = new mw.Api();
api.postWithToken( 'csrf', parameters ).done( () => {
function parseMessage( message, parameters ) {
mw.notify( 'Candidatura agregada con éxito. Recargando...' );
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( {
window.location.reload();
placeholder: getMessage( 'realNameInputPlaceholder', userLanguage )
}, 3000 );
} );
} );
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 );
} );
} );
}
 
$( '#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 );
} );