Usuario:Peter Bowman/insert-delete-template.js
Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.
- Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
- Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
- Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
// Author: Peter Bowman @ plwikt
( function ( mw, $ ) {
var gadget = window.insert_delete_tmpl = {
version: 4.2
};
var api, gui, isNotifiable;
var r_del_reason = /, ?/g;
var source = [
{
value: 'G1',
label: 'G1: Vandalismo',
desc: 'Páginas como ejemplo de vandalismo, son casos evidentes de falsedad, carecen de sentido común o contienen insultos de una manera deliberada'
},
{
value: 'G2',
label: 'G2: Etiqueta',
desc: 'Páginas que contengan insultos, o ataques a cualquier persona, sea de Wikcionario o no.'
},
{
value: 'G3',
label: 'G3: Páginas promocionales',
desc: 'Páginas que contengan spam o textos de autopromoción, propaganda, publicidad.'
},
{
value: 'G4',
label: 'G4: Páginas de pruebas de edición',
desc: 'Páginas que no tienen contexto claro, ni un formato enciclopédico legible.'
},
{
value: 'G5',
label: 'G5: Wikcionario no es una colección de palabras inventadas ni un directorio de nombres',
desc: 'Cuando una entrada es un intento por engañar una audiencia haciéndola creer que algo falso es real.'
},
{
value: 'G6',
label: 'G6: Violaciones de derechos de autor',
desc: 'La entrada consiste en la copia literal del contenido de otras páginas web o de otros medios que están protegidos por derechos de autor.'
},
{
value: 'G7',
label: 'G7: Recreación de material borrado',
desc: 'Páginas borradas anteriormente, mediante el borrado rápido o por una consulta de borrado, y recreadas sin solucionar los criterios que llevaron a su eliminación.'
},
{
value: 'G8',
label: 'G8: A petición del único autor',
desc: 'Siempre que no haya más ediciones en el historial si este desea fusionar el texto en otro artículo o publicarlo de otra forma.'
},
{
value: 'G9',
label: 'G9: Error ortográfico o archivo duplicado',
desc: 'Páginas que poseen error en su escritura o ya existe bajo el lema correcto.'
},
{
value: 'A1',
label: 'A1: Lo que Wikcionario no es.',
desc: 'Artículos de personas, empresas, grupos musicales, sitios web, entre otros, que sean claramente no de diccionario.'
},
{
value: 'U3',
label: 'U3: Si viola la política sobre páginas de usuario',
desc: 'Ver <span style="color:#0645AD;"><a href="//es.wikipedia.org/wiki/WP:PU">política sobre páginas de usuario</a></span>.'
},
{
value: 'vacío',
label: 'Vacío: Entrada sin contenido',
desc: 'La entrada no contiene información, está vacía o solo contiene imágenes o plantillas.'
}
];
mw.messages.set( {
'idt-template-name': 'destruir',
'idt-header': 'Introduce el parámetro de la plantilla «$1»:',
'idt-preview': 'Ver vista previa.',
'idt-dialog-title': 'Destruir página',
'idt-preview-button': 'Vista previa',
'idt-delete-button': 'Destruir',
'idt-cancel-button': 'Cancelar',
'idt-watch-page-cbx': 'Añadir página a mi lista de seguimiento',
'idt-notify-user-cbx': 'Notificar al usuario en su PD',
'idt-notify-user-cpt': 'solo es posible si es el único autor de la página',
'idt-portlet-label': 'Destruir',
'idt-portlet-title': 'Colocar la plantilla de borrado',
'idt-processing-call': 'Procesando llamada a API...',
'idt-processing-tmpl': 'Procesando plantilla...',
'idt-notifying-user': 'Notificando al usuario...',
'idt-delete-summary': '(script) destruir',
'idt-notify-summary': '(script) aviso de borrado de «[' + '[$1]]»',
'idt-delete-reason': 'motivo: $1',
'idt-success': 'Editado. Recargando página...',
'idt-error': 'Error en llamada a API.'
} );
function resetInputs() {
gui.input.val( '' );
gui.input_val.val( '' );
gui.input_desc.html( '' );
gui.preview.text( mw.msg( 'idt-preview' ) );
}
function refreshState() {
gadget.reason = gui.input_val.val() || gui.input.val();
gadget.tmpl = '{' + '{' + mw.msg( 'idt-template-name' ) + ( gadget.reason
? '|' + gadget.reason.replace( r_del_reason, '|' ) + '}}'
: '}}' );
}
function previewButtonHandler() {
refreshState();
gui.preview.text( mw.msg( 'idt-processing-tmpl' ) );
api
.parse( gadget.tmpl )
.done( function ( data ) {
var parsed = $.trim( data.slice( 0, data.indexOf( '<!--' ) ) );
gui.preview.html( $( parsed ).find( 'ul' ) );
} );
}
function deleteButtonHandler() {
refreshState();
gui.label.text( mw.msg( 'idt-processing-call' ) );
gui.input.prop( 'disabled', true );
api.postWithEditToken( {
action: 'edit',
title: mw.config.get( 'wgPageName' ),
watchlist: gui.checkbox_watch.prop( 'checked' )
? 'watch'
: 'unwatch',
prependtext: gadget.tmpl,
summary: mw.format(
gadget.reason ? '$1, $2' : '$1',
mw.msg( 'idt-delete-summary' ),
mw.msg( 'idt-delete-reason', gadget.reason )
),
nocreate: true,
basetimestamp: gadget.page.revisions[ 0 ].timestamp,
starttimestamp: gadget.curtimestamp
} )
.then( function ( data ) {
if ( isNotifiable && gui.checkbox_notify.prop( 'checked' ) ) {
notifyUser( function ( data ) {
gui.label.text( mw.msg( 'idt-success' ) );
window.location.reload();
}, function ( data ) {
if ( data && data.error ) {
printErrorMsg( 'notify user', data.error.info );
} else {
gui.label.text( mw.msg( 'idt-error' ) );
}
} );
} else {
gui.label.text( mw.msg( 'idt-success' ) );
window.location.reload();
}
}, function ( data ) {
if ( data && data.error ) {
printErrorMsg( 'delete page', data.error.info );
} else {
gui.label.text( mw.msg( 'idt-error' ) );
}
} );
}
function notifyUser( done_callback, fail_callback ) {
gui.label.text( mw.msg( 'idt-notifying-user' ) );
var title = gadget.page.title;
api.postWithEditToken( {
action: 'edit',
title: 'User talk:' + gadget.page.revisions[ 0 ].user,
appendtext: '\n{{subst:Aviso BR|' + title + '|'
+ gadget.reason.replace( r_del_reason, '|' ) + '}} ~~' + '~~',
summary: mw.msg( 'idt-notify-summary', title )
} )
.then( done_callback, fail_callback );
}
function printErrorMsg( type, info ) {
gui.label.html( 'Error (' + type + '): <span style="color:red;">' +
info +
'</span>' );
}
gadget.openDialog = function ( evt ) {
gadget.$dialog.dialog( 'open' );
};
gadget.init = function () {
api.get( {
prop: 'revisions',
rvprop: [ 'timestamp', 'user' ],
titles: mw.config.get( 'wgPageName' ),
rvlimit: 50,
indexpageids: true,
curtimestamp: true,
rawcontinue: true
} )
.done( function ( data ) {
var id;
if ( data && data.error ) {
return false;
}
id = data.query.pageids[ 0 ];
gadget.page = data.query.pages[ id ];
gadget.curtimestamp = data.timestamp;
isNotifiable = true;
if ( !data[ 'query-continue' ] ) {
var rev_array = gadget.page.revisions;
var user_name = rev_array[ 0 ].user;
for ( var i = 1; i < rev_array.length; i++ ) {
if ( user_name !== rev_array[ i ].user ) {
isNotifiable = false;
break;
}
}
} else {
isNotifiable = false;
}
gui.label = $( '<label>' )
.attr( 'for', 'ac-input' )
.text( mw.msg( 'idt-header', mw.msg( 'idt-template-name' ) ) );
gui.input_val = $( '<input>' )
.attr( {
id: 'ac-input-value',
type: 'hidden'
} );
gui.input_desc = $( '<p>' )
.attr( 'id', 'ac-input-description' );
gui.input = $( '<input>' )
.attr( {
id: 'ac-input',
type: 'text',
size: 34
} )
.on( 'focus', resetInputs )
.autocomplete( {
minLength: 0,
source: source,
focus: function ( event, ui ) {
gui.input.val( ui.item.label );
return false;
},
select: function ( event, ui ) {
gui.input
.val( ui.item.label )
.trigger( 'blur' );
gui.input_val.val( ui.item.value );
gui.input_desc.html( ui.item.desc );
return false;
}
} );
gui.preview = $( '<div>' )
.attr( 'id', 'ac-input-preview' )
.css( 'margin-top', '6px' )
.text( mw.msg( 'idt-preview' ) );
gui.checkbox_watch = $( '<input>' )
.attr( {
id: 'idt-watch-page',
type: 'checkbox'
} );
gui.checkbox_notify = $( '<input>' )
.attr( {
id: 'idt-notify-user',
type: 'checkbox'
} )
.prop( 'disabled', !isNotifiable );
gadget.$dialog = $( '<div>' )
.append( [
gui.label,
gui.input,
$( '<hr>' ),
gui.preview
] )
.dialog( {
title: mw.msg( 'idt-dialog-title' ),
autoOpen: false,
buttons: [
{
text: mw.msg( 'idt-preview-button' ),
click: previewButtonHandler
},
{
text: mw.msg( 'idt-delete-button' ),
click: deleteButtonHandler
},
{
text: mw.msg( 'idt-cancel-button' ),
click: function () {
gadget.$dialog.dialog( 'close' );
}
}
],
open: function ( event, ui ) {
gui.input.focus();
},
close: function ( event, ui ) {
resetInputs();
refreshState();
gui.input.autocomplete( 'close' );
}
} );
gui.input
.after(
gui.input_val,
gui.input_desc
);
gadget.$dialog
.parent()
.find( '.ui-dialog-buttonpane' )
.prepend( gui.checkbox_watch, gui.checkbox_notify );
gui.checkbox_watch
.after( $( '<label>' )
.attr( 'for', 'idt-watch-page' )
.text( mw.msg( 'idt-watch-page-cbx' ) )
.css( {
'margin-left': '5px',
'cursor': 'pointer'
} )
);
gui.checkbox_notify
.after( $( '<label>' )
.attr( {
'for': 'idt-notify-user',
'title': mw.msg( 'idt-notify-user-cpt' )
} )
.text( mw.msg( 'idt-notify-user-cbx' ) )
.css( {
'margin-left': '5px',
'opacity': isNotifiable ? '1.0' : '0.5',
'cursor': 'pointer'
} )
);
$( mw.util.addPortletLink(
'p-cactions',
'#',
mw.msg( 'idt-portlet-label' ),
'ca-delete',
mw.msg( 'idt-portlet-title' ),
'D',
'#ca-history'
) )
.on( 'click', gadget.openDialog );
} );
};
if (
mw.config.get( 'wgNamespaceNumber' ) > -1 &&
mw.config.get( 'wgAction' ) === 'view'
) {
$( function () {
mw.loader.using( [
'mediawiki.api',
'mediawiki.util',
'jquery.ui'
] )
.done( function () {
api = new mw.Api();
gui = {};
gadget.init();
} );
} );
}
}( mediaWiki, jQuery ) );