MediaWiki:Gadget-easyPeerReview.js
Nota: Después de guardar, debes recargar la caché de tu navegador para ver los cambios:
- Mozilla: Pulsa Recargar (o Ctrl-R)
- Internet Explorer / Opera: Ctrl-F5
- Safari: Cmd-R
- Konqueror Ctrl-R.
/*Gadget importado desde [[en:MediaWiki:Gadget-easyPeerReview.js]] y desarrollado por el usuario Bawolff de Wikinoticias en Inglés */
/*Adaptado y Mantenido por AlvaroMolina */
/*jslint browser: true, devel: true, undef: true, eqeqeq: true, newcap: true, immed: true, maxerr: 80 */
/*global jsMsg, Bawolff, _hasAttribute, window */
/*members AsyncQueue, EasyReview_comment, EasyReview_copyright,
EasyReview_copyright_comment, EasyReview_news, EasyReview_news_comment,
EasyReview_npov, EasyReview_npov_comment, EasyReview_revid,
EasyReview_sg, EasyReview_sg_comment, EasyReview_sources,
EasyReview_sources_comment, Request, action, add, comment, confirm,
content, createElement, delaySend, edit, exec, failReview, getAttribute,
getElementById, getElementsByName, getElementsByTagName, getPage,
indexOf, innerHTML, lastIndex, length, level, mwapi, next, page,
postReview, previousSibling, prop, redraw, replace, revid, review,
rvprop, section, selectChange, sight, src, start, style, submit,
substring, summary, titles, toString, value, visibility review_i18n,
review_tab, review_tab_tooltip, isFail, name, message, doWeirdGoogleHack,
newid, LazyVar, bien, fail, not_reviewed, form_comment, form_comment_overall,
form_rev_numb, form_submit, form_copyright, form_copyright_page, form_news_page,
form_news, form_sources_page, form_sources, form_npov, form_npov_page,
form_sg, form_sg_page, unknownError, softEditError, pub_edit_summary,
review_comment, review_header_bien, review_header_fail
*/
//So that this doesn't interfere with var names of anything else
if (typeof Bawolff === "undefined") Bawolff = {};
// Quick hack - IF THIS BREAKS REVERT
jsMsg2 = function(arg) {
if ( $( '#mw-js-notice2' ).length == 0 ) {
$( '#siteNotice' ).after( $( '<div id="mw-js-notice2" ></div>' ) );
}
$( '#mw-js-notice2' ).empty();
$( '#mw-js-notice2' ).html( arg );
}
Bawolff.sight_status = 3; // Ugly error checking code, but I don't really know whats going on.
if (!Bawolff.review_i18n) {
//this has issue of not allowing partial translation.
//These are treated as raw HTML. don't give yourself an XSS! (basically avoid >, <, and " unless its part of html)
//Anything that ends in _page should be in url form (Aka [[project:ét b]] would be 'project:%C3%A9t_b' not 'project:ét b' )
Bawolff.review_i18n = {
review_tab: 'Revisar',
review_tab_tooltip: 'Revisar esta página',
bien: 'Aprobado',
fail: 'Reprobado',
not_reviewed: 'No revisado',
form_comment: 'Comentarios: ',
form_comment_overall: 'Comentarios del revisor: ',
form_rev_numb: 'Revisando la versión ',
form_submit: 'Enviar revisión',
form_copyright: 'Derechos de autor',
form_copyright_page: 'Wikinoticias:Derechos_de_autor',
form_news_page: 'Wikinoticias:Guía_de_contenido',
form_news: 'Interés periodístico',
form_sources_page: 'Wikinoticias:Cita_tus_fuentes',
form_sources: 'Verificabilidad',
form_sg: 'Estilo',
form_sg_page: 'Wikinoticias:Guía de estilo',
form_npov_page: 'Wikinoticias:Punto de vista neutral',
form_npov: 'PVN',
form_read_talk: 'Confirmo haber leído todos los comentarios de la página de discusión (<a href="' + mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1', 'Talk:' + encodeURIComponent(mw.config.get('wgTitle').replace(/\s/g, '_'))) + '" target="_blank">abrir página de discusión en una nueva pestaña</a>)',
read_talk: 'No puedes revisar el artículo hasta haber marcado la casilla de confirmación',
tasksError: 'No se pudieron agregar las plantillas de mantenimiento al artículo debido al error: "$1".',
unknownError: 'Easy Peer Reeview tuvo una excepción no detectada: ',
softEditError: "Ha ocurrido algo malo (error de edición recuperable, como un captcha o algo similar). Sin embargo, no se pudo averiguar cómo recuperarlo.",
errorNoPub: "No se pudo agregar \{\{Publicado\}\} al artículo. Debido a un error: '$1'. Continuando con el resto del proceso de revisión.",
errorFetchFailureSuccess: "No se pudo recuperar el origen de la página desde el servidor al intentar reemplazar la revisión por publicar en una revisión exitosa.",
errorFetchFailFail: "No se pudo recuperar el origen de la página desde el servidor al intentar reemplazar la revisión con las tareas en la revisión no realizada.",
ErrorEditConflictCancel: "Revisión cancelada prematuramente debido a un conflicto de edición",
warningNoArticleID: 'Advertencia: No se pudo obtener el ID de revisión de la nueva versión publicada del artículo. Volviendo a usar el ID de revisión de la penúltima revisión. Puede tener que vista la versión más reciente de este artículo manualmente.',
pub_edit_summary: "Publicación del artículo (usando [[Ayuda:Easy Peer Review|Easy Peer Review]])",
review_comment: "Enviado (usando Easy Peer Review - MediaWiki:Gadget-easyPeerReview.js)", //Comentario en la Discusión arriba de la RPP
review_header_bien: "Revisión de la versión $1 [Aprobada]",
review_header_fail: "Revisión de la versión $1 [Reprobada]",
review_revid: 'revid', //Parámetro de ID de revisión en la Plantilla de RPP
review_copyright: 'derechos de autor',
review_newsworthy: 'periodístico',
review_verifiable: 'verificable',
review_npov: 'pvn',
review_style: 'estilo',
review_reviewer: 'revisor',
review_comments_field: 'comentarios',
review_time: 'fecha',
review_peer_reviewed: 'Revisión_por_pares', //Nombre de la Plantilla de RPP
tasks: 'Tareas', //Nombre de la Plantilla Contenedora de las Plantillas de Mantenimiento
tasks_copyvio: 'copyvio',
tasks_news: 'noticias',
tasks_src: 'fuentes',
tasks_npov: 'pvn',
tasks_mos: 'estilo',
tasks_rereview: 'revisar',
publish: 'Publicado', //Nombre de la Plantilla de Publicación
editSummary_sight: "Publicación del artículo (usando [[Ayuda:Easy Peer Review|Easy Peer Review]]): ",
editSummary_failReview: "Adición de plantillas de mantenimiento (usando [[Ayuda:Easy Peer Review|Easy Peer Review]])",
editConflict: "*********[Conflicto de edición]********** \nAlguien ha editado esta página desde que la revisaste. ¿Desea revisar esta página (incluyendo las ediciones más recientes) de todos modos?",
done: 'Hecho',
commentPageExists: 'La página de comentarios al parecer ya había sido creada. Presiona OK para sobreescribir cualquier comentario existente o Cancelar para abortar esta operación.',
success: '"$1" ha sido revisado y publicado exitosamente $2', //$1 = Nombre del Artículo, $2= Botón para Colocar Artículo en la Portada (deshabilitado al no contar con esta opción en este proyecto)
success_ml: 'Colocar este artículo en la portada', //$1 = Nombre del Artículo
success_ml_url: mw.config.get('wgArticlePath').replace('$1', 'Wikinoticias:Titulares en Portada'),
fail_review: '<b>Hecho</b> "$1" ha sido revisado exitosamente (El artículo <b>falló</b> el proceso de revisión)', //$1 = Nombre del Artículo
trigger_id: 'revisar', // Nombre de la Plantilla de Revisar
regex_sources: /\*\{\{(?:[sS]ource(-pr|-science)?|[aA]pasource|[pP]apersource|[oO]rsource|[sS]ourceReg)\|[^}]*\}\}/gm,
trigger_func: function () {}, // No modificar este parámetro
prePubTransform: function (page) {
//Plantillas a reemplazar cuando una revisión es exitosa y se publica el artículo
page = page.replace(/\{\{(?:[rR]evisar|)(?:\|[^}]*)?\}\}(?:\n)?/g, ""); //RM {{Tl|Revisar}}
page = page.replace(/\{\{[eE]n progreso(?:ing)?(?:\|[^}]*)?\}\}(?:\n)?/g, ""); //RM {{Tl|En progreso}}
return page;
},
stripReviewForFail: function (page, tasks_template) {
//Si la revisión falla, se debe remover la plantilla de revisión y colocar la de tareas
page = page.replace(/\{\{(?:[rR]evisar|)(?:\|[^}]*)?\}\}/, tasks_template); //Reemplazo de {{Tl|Revisar}} por {{Tl|Tareas}}
page = page.replace(/\{\{(?:[rR]evisar|)(?:\|[^}]*)?\}\}(?:\n)?/g, ""); //En caso de haber varias plantillas de revisión
return page;
}
}
}
Bawolff.review = function() {
/* Verificación de si el usuario pertenece al grupo "editor/revisor", adicional a la condicional predeterminada de [[MediaWiki:Gadgets-definition]] */
if (document.getElementById(Bawolff.review_i18n.trigger_id) || Bawolff.review_i18n.trigger_func()) {
mw.util.addPortletLink("p-cactions", "javascript:Bawolff.review.start();void%200;", Bawolff.review_i18n.review_tab, "ca-peerReview", Bawolff.review_i18n.review_tab_tooltip);
}
}
/* Botón de "Revisar" para utilizar [[MediaWiki:Gadget-easyPeerReview.js]] */
$(function () {
var hist; var url;
var actionPortlet = "p-cactions";
var purgeText = (mw.config.get('skin') === "vector" ? "Revisar" : "Revisar");
if (!(hist = document.getElementById('ca-history') )) return;
if (!(url = hist.getElementsByTagName('a')[0] )) return;
if (!(url = url.href )) return;
mw.util.addPortletLink(actionPortlet, 'javascript:Bawolff.review.start()',
purgeText, 'ca-purge', 'Revisar esta página', 'Revisar');
});
Bawolff.review.doWeirdGoogleHack = false; // FIXME: this is crap.
if (mw.config.get('wgDBname') === 'enwikinews') {
Bawolff.review.doWWC = true;
}
Bawolff.review.start = function () {
if (mw.config.get('wgDBname') === 'enwikinews') {
mw.loader.load( '/w/index.php?title=' + 'User:Bawolff/mwapilib.js' + '&action=raw&ctype=text/javascript' ); //needed when pressing submit
if (Bawolff.review.doWWC) mw.loader.load( '/w/index.php?title=' + 'User:Bawolff/mwapilib2.js' + '&action=raw&ctype=text/javascript' );
} else {
mw.loader.load('//en.wikinews.org/w/index.php?title=User%3ABawolff%2Fmwapilib.js&action=raw&ctype=text/javascript&scrver=2');
}
var talk = document.getElementById('ca-talk');
var readTalk = '';
if (talk && talk.className.indexOf('new') === -1) {
readTalk = '<br/><input type="checkbox" id="read-talk-box"/> <label for="read-talk-box">' + Bawolff.review_i18n.form_read_talk + '</label>';
}
//This draws the dialog. called on click
var container = document.createElement("div");
container.innerHTML ='<form id="easyReviewForm" action="javascript:void 0" onsubmit="Bawolff.review.submit(); return false;"><table class="metadata plainlinks ambox ambox-notice EasyReview" id="EasyReview-mainAmbox" style="line-height: 1.2"><tr><td class="ambox-image"><a href="/wiki/File:Antu_checkbox-qt.svg" class="image" title="Pictogram_voting_question-blue.svg"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Antu_checkbox-qt.svg/60px-Antu_checkbox-qt.svg.png" width="60" height="62" border="0" /></a></td><td>' + Bawolff.review_i18n.form_rev_numb + mw.config.get('wgCurRevisionId') + '<ul style="line-height:1.6;"><li><b><a href="/wiki/' + Bawolff.review_i18n.form_copyright_page + '" title="' + decodeURIComponent(Bawolff.review_i18n.form_copyright_page).replace(/_/g, ' ') + '">' + Bawolff.review_i18n.form_copyright + '</a>:</b> <img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png" id="EasyReview-copyright-image" width="13" height="13" border="0" /><select name="EasyReview-copyright" onchange="Bawolff.review.selectChange()"><option value="bien">' + Bawolff.review_i18n.bien + '</option><option value="fail" >' + Bawolff.review_i18n.fail + '</option><option value="n/a" selected="selected">' + Bawolff.review_i18n.not_reviewed + '</option></select> <label for="EasyReview-copyright-comment" style="visibility:hidden">' + Bawolff.review_i18n.form_comment + '</label><input id="EasyReview-copyright-comment" name="EasyReview-copyright-comment" type="text" length="30" style="visibility: hidden"/></li><li><b><a href="/wiki/' + Bawolff.review_i18n.form_news_page + '" title="' + decodeURIComponent(Bawolff.review_i18n.form_news_page).replace(/_/g, ' ') + '">' + Bawolff.review_i18n.form_news + '</a>:</b> <img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png" id="EasyReview-news-image" width="13" height="13" border="0" /><select name="EasyReview-news" onchange="Bawolff.review.selectChange()"><option value="bien">' + Bawolff.review_i18n.bien + '</option><option value="fail" >' + Bawolff.review_i18n.fail + '</option><option value="n/a" selected="selected">' + Bawolff.review_i18n.not_reviewed + '</option></select> <label for="EasyReview-news-comment" style="visibility:hidden">' + Bawolff.review_i18n.form_comment + '</label><input id="EasyReview-news-comment" name="EasyReview-news-comment" type="text" length="30" style="visibility: hidden"/></li><li><b><a href="/wiki/' + Bawolff.review_i18n.form_sources_page + '" title="' + decodeURIComponent(Bawolff.review_i18n.form_sources_page).replace(/_/g, ' ') + '">' + Bawolff.review_i18n.form_sources + '</a>:</b> <img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png" id="EasyReview-sources-image" width="13" height="13" border="0" /><select name="EasyReview-sources" onchange="Bawolff.review.selectChange()"><option value="bien">' + Bawolff.review_i18n.bien + '</option><option value="fail" >' + Bawolff.review_i18n.fail + '</option><option value="n/a" selected="selected">' + Bawolff.review_i18n.not_reviewed + '</option></select> <label for="EasyReview-sources-comment" style="visibility:hidden">' + Bawolff.review_i18n.form_comment + '</label><input id="EasyReview-sources-comment" name="EasyReview-sources-comment" type="text" length="30" style="visibility: hidden"/></li><li><b><a href="/wiki/' + Bawolff.review_i18n.form_npov_page + '" title="' + decodeURIComponent(Bawolff.review_i18n.form_npov_page).replace(/_/g, ' ') + '">' + Bawolff.review_i18n.form_npov + '</a>:</b> <img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png" id="EasyReview-npov-image" width="13" height="13" border="0" /><select name="EasyReview-npov" onchange="Bawolff.review.selectChange()"><option value="bien">' + Bawolff.review_i18n.bien + '</option><option value="fail" >' + Bawolff.review_i18n.fail + '</option><option value="n/a" selected="selected">' + Bawolff.review_i18n.not_reviewed + '</option></select> <label for="EasyReview-npov-comment" style="visibility:hidden">' + Bawolff.review_i18n.form_comment + '</label><input id="EasyReview-npov-comment" name="EasyReview-npov-comment" type="text" length="30" style="visibility: hidden"/></li><li><b><a href="/wiki/' + Bawolff.review_i18n.form_sg_page + '" title="' + decodeURIComponent(Bawolff.review_i18n.form_sg_page).replace(/_/g, ' ') + '">' + Bawolff.review_i18n.form_sg + '</a>:</b> <img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png" id="EasyReview-sg-image" width="13" height="13" border="0" /><select name="EasyReview-sg" onchange="Bawolff.review.selectChange()"><option value="bien">' + Bawolff.review_i18n.bien + '</option><option value="fail" >' + Bawolff.review_i18n.fail + '</option><option value="n/a" selected="selected">' + Bawolff.review_i18n.not_reviewed + '</option></select> <label for="EasyReview-sg-comment" style="visibility:hidden">' + Bawolff.review_i18n.form_comment + '</label><input id="EasyReview-sg-comment" name="EasyReview-sg-comment" type="text" length="30" style="visibility: hidden"/></li></ul><p><b><label for="EasyReview-commentBox">' + Bawolff.review_i18n.form_comment + '</label></b> <textarea row="3" id="EasyReview-commentBox" name="EasyReview-commentBox"></textarea>' + readTalk + '</p><input type="submit" value="'+ Bawolff.review_i18n.form_submit + '"/> <input type="submit" value="Cancelar" onclick="jsMsg2(\'\');return false"/></td></tr></table></form>';
/*<img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png" id="EasyReview-sg-image" width="13" height="13" border="0" /><select name="EasyReview-sg" onchange="Bawolff.review.selectChange()"><option value="bien">bien</option><option value="fail" selected="selected">Fail</option></select> <label for="EasyReview-sg-comment" style="visibility:hidden">Comment: </label><input id="EasyReview-sg-comment" name="EasyReview-sg-comment" type="text" length="30" style="visibility: hidden"/>
*/
/*//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/13px-Yes_check.svg.png
//upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Red_x.svg/13px-Red_x.svg.png
*/
jsMsg2(container);
Bawolff.review.selectChange();
}
Bawolff.review.selectChange = function () {
/* Parámetros para rellenar como "aprobados" los ítems de la Plantilla RPP */
Bawolff.review.redraw("sg", document.getElementsByName("EasyReview-sg")[0].value === "bien", document.getElementsByName("EasyReview-sg")[0].value !== "fail");
Bawolff.review.redraw("npov", document.getElementsByName("EasyReview-npov")[0].value === "bien", document.getElementsByName("EasyReview-npov")[0].value !== "fail");
Bawolff.review.redraw("sources", document.getElementsByName("EasyReview-sources")[0].value === "bien", document.getElementsByName("EasyReview-sources")[0].value !== "fail");
Bawolff.review.redraw("news", document.getElementsByName("EasyReview-news")[0].value === "bien", document.getElementsByName("EasyReview-news")[0].value !== "fail");
Bawolff.review.redraw("copyright", document.getElementsByName("EasyReview-copyright")[0].value === "bien", document.getElementsByName("EasyReview-copyright")[0].value !== "fail");
}
Bawolff.review.redraw = function (prefix, state, hidden) {
var base = "EasyReview-" + prefix;
if (state) {
document.getElementById(base + "-image").src = "//upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Antu_running.svg/14px-Antu_running.svg.png";
} else {
document.getElementById(base + "-image").src = "//upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Antu_waiting.svg/14px-Antu_waiting.svg.png";
}
if (hidden) {
document.getElementById(base + "-comment").previousSibling.style.visibility = "hidden";
document.getElementById(base + "-comment").style.visibility = "hidden";
} else {
document.getElementById(base + "-comment").previousSibling.style.visibility = "visible";
document.getElementById(base + "-comment").style.visibility = "visible";
}
}
Bawolff.review.isFail = function ( value ) {
//Valor de "No revisado"
if (value === 'bien' || value === 'n/a') {
return true;
}
return false;
}
Bawolff.review.submit = function () {
var readTalk = document.getElementById('read-talk-box');
if (readTalk && !readTalk.checked ) {
alert( Bawolff.review_i18n.read_talk );
return false;
}
/* Valores de la opción "Reprobado" */
try {
var text;
var review = {
"EasyReview_revid": mw.config.get('wgCurRevisionId'),
"EasyReview_sg" : Bawolff.review.isFail(document.getElementsByName("EasyReview-sg")[0].value),
"EasyReview_sg_comment" : document.getElementsByName("EasyReview-sg")[0].value !== 'fail' ? document.getElementsByName("EasyReview-sg")[0].value : document.getElementById("EasyReview-sg-comment").value,
"EasyReview_npov" : Bawolff.review.isFail(document.getElementsByName("EasyReview-npov")[0].value),
"EasyReview_npov_comment" : document.getElementsByName("EasyReview-npov")[0].value !== 'fail' ? document.getElementsByName("EasyReview-npov")[0].value : document.getElementById("EasyReview-npov-comment").value,
"EasyReview_sources" : Bawolff.review.isFail(document.getElementsByName("EasyReview-sources")[0].value),
"EasyReview_sources_comment" : document.getElementsByName("EasyReview-sources")[0].value !== 'fail' ? document.getElementsByName("EasyReview-sources")[0].value : document.getElementById("EasyReview-sources-comment").value,
"EasyReview_news" : Bawolff.review.isFail(document.getElementsByName("EasyReview-news")[0].value),
"EasyReview_news_comment" : document.getElementsByName("EasyReview-news")[0].value !== 'fail' ? document.getElementsByName("EasyReview-news")[0].value : document.getElementById("EasyReview-news-comment").value,
"EasyReview_copyright" : Bawolff.review.isFail(document.getElementsByName("EasyReview-copyright")[0].value),
"EasyReview_copyright_comment" : document.getElementsByName("EasyReview-copyright")[0].value !== 'fail' ? document.getElementsByName("EasyReview-copyright")[0].value : document.getElementById("EasyReview-copyright-comment").value,
"EasyReview_comment" : document.getElementById("EasyReview-commentBox").value
}
// True -> bien
/* No longer needed (I think)
review.EasyReview_sg_comment = (review.EasyReview_sg ? 'bien' : review.EasyReview_sg_comment );
review.EasyReview_npov_comment = (review.EasyReview_npov ? 'bien' : review.EasyReview_npov_comment );
review.EasyReview_sources_comment = (review.EasyReview_sources ? 'bien' : review.EasyReview_sources_comment );
review.EasyReview_news_comment = (review.EasyReview_news ? 'bien' : review.EasyReview_news_comment );
review.EasyReview_copyright_comment = (review.EasyReview_copyright ? 'bien' : review.EasyReview_copyright_comment );
*/
/* Valor de un ítem aprobado */
var aprobado = review.EasyReview_sg_comment === 'bien' && review.EasyReview_npov_comment === 'bien' && review.EasyReview_sources_comment === 'bien' && review.EasyReview_news_comment === 'bien' && review.EasyReview_copyright_comment === 'bien';
/* Para publicar el artículo en caso de una revisión exitosa */
if (aprobado) {
Bawolff.review.postReview(review);
} else {
Bawolff.review.failReview(review);
}
} catch(err) {
alert(Bawolff.review_i18n.unknownError + err.name + ': ' + err.message);
}
return false;
}
Bawolff.review.failReview = function(r) {
/*var cont = confirm('review failed. continue posting review?'); //Para Debugging
*if (!cont) {throw new Error("User bailed [failed rev]");}*/
//Colocar {{Tl|Tareas|copyvio|noticias|fuentes|pvn|estilo|revisar}} en la página, después de la revisión en la página de discusión del artículo.
//Primero colocar la plantilla de revisión por pares en la discusión
//Generación de contenido para agregar a la página de discusión
var reviewText = "<!-- " + Bawolff.review_i18n.review_comment + " --> \{\{" + Bawolff.review_i18n.review_peer_reviewed + "|" + Bawolff.review_i18n.review_revid + "=" + r.EasyReview_revid + "|" + Bawolff.review_i18n.review_copyright + "=" + r.EasyReview_copyright_comment + "|" + Bawolff.review_i18n.review_newsworthy + "=" + r.EasyReview_news_comment + "|" + Bawolff.review_i18n.review_verifiable + "=" + r.EasyReview_sources_comment + "|" + Bawolff.review_i18n.review_npov + "=" + r.EasyReview_npov_comment + "|" + Bawolff.review_i18n.review_style + "=" + r.EasyReview_sg_comment + "|" + Bawolff.review_i18n.review_reviewer + "=" + mw.config.get('wgUserName') + "|" + Bawolff.review_i18n.review_comments_field + "=" + r.EasyReview_comment + "|" + Bawolff.review_i18n.review_time + "=~~" + "~~" + "~}}";
var reviewHeader = Bawolff.review_i18n.review_header_fail.replace(/\$1/, r.EasyReview_revid);
//Llamada a AJAX para insertar la plantilla en la página de discusión del artíclo
var talk_rev_cb = function (success) {
if (success) {
if (!Bawolff.review.isError()) {
jsMsg2('<p><a class="image" href="/wiki/File:X_mark.svg"><img height="17" width="15" src="//upload.wikimedia.org/wikipedia/commons/thumb/a/a2/X_mark.svg/15px-X_mark.svg.png" alt="X mark.svg"/></a> ' + Bawolff.review_i18n.fail_review.replace(/\$1/g, mw.html.escape(mw.config.get('wgTitle'))) + '</p>');
location = '#mw-js-message';
}
}
else {
throw new Error(Bawolff.review_i18n.softEditError);
}
}
Bawolff.mwapi.edit({content: reviewText, page: mw.config.get('wgFormattedNamespaces')[1] + ":" + mw.config.get('wgTitle'), summary: reviewHeader, section: "new"}, talk_rev_cb);
/***FIN Adición de Plantilla de Revisión por Pares****/
/***INICIO Reemplazo de {{Tl|Revisar}} por {{Tl|Tareas}}****/
//Generación de Plantilla de Tareas ({{Tl|Tareas|copyvio|noticias|fuentes|pvn|estilo|revisar}})
var tasks_template = "\{\{" + Bawolff.review_i18n.tasks;
//For each one, if failed (if false) add the tag
tasks_template += (r.EasyReview_copyright ? "" : "|" + Bawolff.review_i18n.tasks_copyvio);
tasks_template += (r.EasyReview_news ? "" : "|" + Bawolff.review_i18n.tasks_news);
tasks_template += (r.EasyReview_sources ? "" : "|" + Bawolff.review_i18n.tasks_src);
tasks_template += (r.EasyReview_npov ? "" : "|" + Bawolff.review_i18n.tasks_npov);
tasks_template += (r.EasyReview_sg ? "" : "|" + Bawolff.review_i18n.tasks_mos);
tasks_template += "|" + Bawolff.review_i18n.tasks_rereview + "}}";
//Obtener la página
var final_article_text = ""; //string that contains page that will be posted to server (Pay attention to variable scope)
var apiOps = new Bawolff.mwapi.AsyncQueue; //Container to chain api requests
var getPage_cb = function (res) {
//callback to do work on the current page (aka put article flag)
var page = res[mw.config.get('wgTitle')]; //wgPageName is url escaped
if (page === undefined) { //if not in main ns
page = res[mw.config.get('wgCanonicalNamespace') + ":" + mw.config.get('wgTitle')];
}
if (page === undefined) { //badness happened
throw new Error(Bawolff.review_i18n.errorFetchFailFail);
}
page = Bawolff.review_i18n.stripReviewForFail(page, tasks_template);
if (page.indexOf(tasks_template) === -1) {
page = tasks_template + page; // if the above regexs fail for some reason, add tasks to top.
}
final_article_text = page;
}
//Add Obtain and modify page to queue of api operations
Bawolff.mwapi.getPage(mw.config.get('wgPageName'), getPage_cb, apiOps);
/****end obtain and modify page***/
/***start save page to server****/
//this is really ugly.
//wrap in function so it uses the variable in the outer function's scope (final_article_text) at time of execution
var postChanges = function () {
var edit_cb = function(success, resp) {
if (!success) {
var APIerror = resp.getElementsByTagName("error");
var err = "Unknown Error (not API)"; //default
if (APIerror.length !== 0) {
err = APIerror[0].getAttribute("info");
}
alert(Bawolff.review_i18n.taskError.replace(/\$1/, err));
}
apiOps.next(); //go to next action
}
Bawolff.mwapi.edit({content: final_article_text, page: mw.config.get('wgPageName'), summary: Bawolff.review_i18n.editSummary_failReview}, edit_cb);
}
apiOps.add(postChanges); //add to ops queue
/******End incredibly ugly add {{tl|tasks}} to page, code*******/
try {
apiOps.start(); //start editing
} catch (e) {
alert(Bawolff.review_i18n.unknownError + e.message)
}
}
Bawolff.review.postReview = function(r) {
//argument: review object
//called from form handler if review was SUCCESSFUL
/***** DO WEIRD GOOGLE NEWS HACK ********/
//FIXME: this is stupid
//create a redirect with a numb in it.
if (Bawolff.review.doWeirdGoogleHack) {
var googleOps = new Bawolff.mwapi.AsyncQueue;
var google_cb = function(success, resp) {
//alert("We reached the callback");
//this is a callback for after done editing.
if (!success) {
var APIerror = resp.getElementsByTagName("error");
if (APIerror.length !== 0) {
var err = APIerror[0].getAttribute("info");
}
alert("Could not make a redirect for google news. Contact Bawolff. Error: "+ err + ". Continuing with rest of review process");
}
var editTags = resp.getElementsByTagName('edit');
if (editTags && editTags[0] && (+editTags[0].getAttribute('newrevid')) > 2) {
//so we sight the page.
var GoogleRedirId = editTags[0].getAttribute('newrevid');
Bawolff.mwapi.sight({revid: GoogleRedirId, level: '1', comment: "Making redirect for google with a really long number, as those google people like long numbers.(Using [[MediaWiki:Gadget-easyPeerReview.js]]) "});
} else if (editTags && editTags[0] && _hasAttribute(editTags[0], 'nochange')) {
alert('It appears this article already has a redirect for google. Please double check that [[Article/' + mw.config.get('wgArticleId') + "/" + mw.config.get('wgPageName') +']] is sighted properly');
}
else {
var error = (editTags ? (editTags[0] ? "newrevid=" + editTags[0].getAttribute('newrevid') : "0th edit tag is false") : "Error getting edit elms");
alert('Warning (Please leave user:Bawolff a note): Could not figure out revision id of google news redirect to article. Falling back to dying in a hole. you may have to sight the google redirect manually.\n--------------\nTechnical info: ' + error);
}
}
Bawolff.mwapi.edit({content: "#Redirect[[" + mw.config.get('wgPageName') + "]]\n\n{\{Google News}}", page: "Article/" + mw.config.get('wgArticleId') + "/" + mw.config.get('wgPageName'), summary: "Add a redirect for google (Using [[MediaWiki:Gadget-easyPeerReview.js]])", minor: "true"}, google_cb);
}
/**********END GOOGLE NEWS HACK *******/
/*var cont = confirm('review aprobado. continue posting review?'); //for debuging
if (!cont) {throw new Error("User bailed [aprobado rev]");}*/
// alert(reviewText); //make it do stuff later.
/**************
*Post changes to server.
*prereq: assume user has ability to edit page and to sight it
*first edit current page
**<nowiki>{{review}} -> {{publish}}</nowiki> (in correct position)
**sight that revision
**get rev number of published version, and update review template
**Post a new section named "Review" with the peer review template.
**************/
var apiOps = new Bawolff.mwapi.AsyncQueue; //list of apiops we have to do.
//Check if rev we are looking at is most current.
var actual_rev;
//Make a callback function that
//checks if theres been an edit
//and if so prompts the user as to wether to proceed.
var checkEditConfilict_cb = function (res) {
//Get the revid from the api query
actual_rev = res.getElementsByTagName('rev')[0].getAttribute('revid');
//if its different from what we're looking at, prompt if we want to continue.
if (actual_rev != r.EasyReview_revid) {
var keep_going = window.confirm(Bawolff.review_i18n.editConflict);
if (!keep_going) {throw new Error(Bawolff.review_i18n.ErrorEditConflictCancel);}
//fixme: should be some soft error thats less ugly
//perhaps subclass of error thats recognized by mwapilib
}
}
var checkEditConflict = new Bawolff.mwapi.Request({action:"query", prop: "revisions", titles: mw.config.get('wgPageName'), rvprop: "ids"});
checkEditConflict.delaySend(apiOps, checkEditConfilict_cb);
/***End checking for edit conflict ****/
/***Start editng of article (add pub tag, rm review)*****/
//Get the page
var final_article_text = ""; //string that contains page that will be posted to server
var getPage_cb = function (res) {
//callback to do work on the current page (aka publish it)
var page = res[mw.config.get('wgTitle')]; //wgPageName is url escaped
if (page === undefined) { //if not in main ns
page = res[mw.config.get('wgCanonicalNamespace') + ":" + mw.config.get('wgTitle')];
}
if (page === undefined) { //badness happened
throw new Error(Bawolff.review_i18n.errorFetchFailureSuccess);
}
page = Bawolff.review_i18n.prePubTransform(page); //remove developing. fix date, etc
//Add {{tl|publish}} (code slightly inelegant)
var src = Bawolff.review_i18n.regex_sources;
var endOfSrc = page.length;
while (src.exec(page) !== null) {endOfSrc = src.lastIndex;}
page = page.substring(0, endOfSrc) + "\n\n{\{" + Bawolff.review_i18n.publish + "}}" + page.substring(endOfSrc, page.length);
//end insertion of publish template.
final_article_text = page; //push to outside scope.
if (final_article_text.length < 10) {
//if result less than length of pub tag, wine.
throw new Error(Bawolff.review_i18n.errorNoPub.replace(/\$1/, 'Regex Error'));
}
/***WWC code ***/
if (Bawolff.review.doWWC) {
Bawolff.review.countThoseChars(page);
}
if (mw.config.get('wgDBname') === 'enwikinews') {
try {
api().setDefaultSummary('Creación de página de comentarios (usando [[Ayuda:Easy Peer Review|Easy Peer Review]])').checkPageExists(mw.config.get('wgFormattedNamespaces')[100] + ':' + mw.config.get('wgPageName')).lift(function (exists) { return !exists ? true : confirm( Bawolff.review_i18n.commentPageExists ); }).abortIfFalse().getPage('Plantilla:Comentarios_preload').savePage(mw.config.get('wgFormattedNamespaces')[100] + ':' + mw.config.get('wgPageName')).exec();
} catch (e) {
alert('Easy Peer Review no ha podido crear la página de comentarios debido a un fallo en el software.\n--------\nDetalles técnicos: ' + e.message); //just in case, should not happen
}
}
}
//add Obtain and modify page to queue of api operations
Bawolff.mwapi.getPage(mw.config.get('wgPageName'), getPage_cb, apiOps);
/****end obtain and modify page***/
/***start save page to server****/
//this is really ugly.
//wrap in function so it uses the global variable at time of execution
var postChanges = function () {
var edit_cb = function(success, resp) {
if (!success) {
var APIerror = resp.getElementsByTagName("error");
if (APIerror.length !== 0) {
var err = APIerror[0].getAttribute("info");
}
alert(Bawolff.review_i18n.errorNoPub.replace(/\$1/, err));
}
var editTags = resp.getElementsByTagName('edit');
if (editTags && editTags[0] && editTags[0].getAttribute('newrevid') > 2) {
//so we sight the published revision
Bawolff.review.newid = editTags[0].getAttribute('newrevid');
} else {
alert(Bawolff.review_i18n.warningNoArticleID);
}
apiOps.next(); //go to next action
}
Bawolff.mwapi.edit({content: final_article_text, page: mw.config.get('wgPageName'), summary: Bawolff.review_i18n.pub_edit_summary}, edit_cb);
}
apiOps.add(postChanges); //add to ops queue
/******End incredibly ugly publish page code*******/
//Sight the apropriate revision.
try {
Bawolff.sight_status = 4;
Bawolff.mwapi.sight({revid: new Bawolff.LazyVar('Bawolff.review.newid'), level: '2', comment: Bawolff.review_i18n.editSummary_sight + r.EasyReview_comment },
(function (res) { Bawolff.sight_status = 0; if (!res) {alert("Error al marcar el artículo como revisado"); Bawolff.sight_status = 5}}),
undefined, apiOps);
} catch (e) {
alert('Ocurrió un error al marcar como revisado este artículo. Ponte en contacto con AlvaroMolina si persisten los problemas.\n\n----------------\nDetalles: ID de Revisión: ' + Bawolff.review.newid + '; Error: ' + e.name + ': ' + e.message);
}
/******Start put review template on talk page*****/
//generate template
var reviewText = "<!-- " + Bawolff.review_i18n.review_comment + " --> \{\{" + Bawolff.review_i18n.review_peer_reviewed + "|" + Bawolff.review_i18n.review_revid + "=" + r.EasyReview_revid + "|" + Bawolff.review_i18n.review_copyright + "=" + r.EasyReview_copyright_comment + "|" + Bawolff.review_i18n.review_newsworthy + "=" + r.EasyReview_news_comment + "|" + Bawolff.review_i18n.review_verifiable + "=" + r.EasyReview_sources_comment + "|" + Bawolff.review_i18n.review_npov + "=" + r.EasyReview_npov_comment + "|" + Bawolff.review_i18n.review_style + "=" + r.EasyReview_sg_comment + "|" + Bawolff.review_i18n.review_reviewer + "=" + mw.config.get('wgUserName') + "|" + Bawolff.review_i18n.review_comments_field + "=" + r.EasyReview_comment + "|" + Bawolff.review_i18n.review_time + "=~~" + "~~" + "~}}";
var reviewHeader = Bawolff.review_i18n.review_header_bien.replace(/\$1/, r.EasyReview_revid);
var talk_rev_cb = function (success) {
if (success) {
var ua = navigator.userAgent.toLowerCase();
var sMesg = function () {
jsMsg2('<p><a href="/wiki/File:Yes_check.svg" class="image" title="Yes check.svg"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/16px-Yes_check.svg.png" width="16" height="16" /></a> <b>' + Bawolff.review_i18n.done + '</b> ' + Bawolff.review_i18n.success.replace(/\$2/, ' <form action="' + Bawolff.review_i18n.success_ml_url + '" method="GET"><button type="submit" value="' + mw.html.escape(mw.config.get('wgTitle')) + '" name="use-page">' + (ua.indexOf('msie') === -1 ? Bawolff.review_i18n.success_ml : mw.html.escape(mw.config.get('wgTitle')) ) + '</button></form></p>').replace(/\$1/, '<i>' + mw.html.escape(mw.config.get('wgTitle')) + '</i>'));
location = '#mw-js-message';
}
if ( Bawolff.sight_status !== 0 ) {
if ( Bawolff.sight_status === 4 ) {
// maybe people navigate away before its done?
jsMsg2('<img src="//upload.wikimedia.org/wikipedia/commons/2/21/Throbber_allbackgrounds_stroopwafel.gif"> Tu revisión esta siendo procesada. Espera un momento...');
window.setTimeout( (function () {
if ( Bawolff.sight_status === 4 ) {
window.setTimeout( arguments.callee, 250 );
} else {
sMesg();
}
}), 250 );
} else {
alert("Ocurrió un error al marcar como revisado este artículo. Ponte en contacto con AlvaroMolina si persisten los problemas.\n\n---------------\nCódigo de error de revisión: " + Bawolff.sight_status + ".");
}
}
else if (!Bawolff.review.isError()) {
sMesg();
}
}
else {
throw new Error(Bawolff.review_i18n.softEditError);
}
}
Bawolff.mwapi.edit({content: reviewText, page: mw.config.get('wgFormattedNamespaces')[1] + ":" + mw.config.get('wgTitle'), summary: reviewHeader, section: "new"}, talk_rev_cb, undefined, apiOps);
/****End talk page editing ***/
/****Start making edits!*****/
try {
apiOps.start(); //start editing
} catch (e) {
alert(Bawolff.review_i18n.unknownError + e.message)
}
}
if ((mw.config.get('wgAction') === "view") && (mw.config.get('wgNamespaceNumber') === 0) && ((mw.config.get('wgUserGroups').toString().indexOf("editor") > -1) || (mw.config.get('wgUserGroups').toString().indexOf("review") > -1))) {
$(Bawolff.review);
}
Bawolff.review.isError = function () {
//mw-js-message-mwapi-error
var msg = document.getElementById('mw-js-message');
return msg && (msg.className.indexOf('mw-js-message-mwapi-error') !== -1)
}
/**** WWC code ***/
Bawolff.review.countThoseChars = function (page) {
try {
//precond page =page contents.
api(page).push().lift(function (p) { return p.length;}).swap().
replace(/\<[^>]*\>/g, '').
replace(/^\s{0,4}(={1,6})([\s\S]*)\1\s*$/mg, "$2").
replace(/\'{2,5}/g, '').
replace(/\{\{[dD]ate\|[^\}]*\}\}/g, '').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/(\{\{[^\|}]*)\|(\|[^\}=]*\|)?[^\|\}=]*=([^\|}]*)((?:\|[^\}]*)?\}\})/g, '$1$2$4 $3 ').
replace(/\{\{[^\|}]*\}\}/g, '').
replace(/\{\{[^\|}]*\|([^\}]*)\}\}/g, ' $1 ').
replace(/\[http(?:s)?:\/\/\S*\s([^\]]*)]/g, ' $1 ').
replace(/http(?:s)?:\/\/\S*/g, '').
replace(/\[\[[iIfF][mMiI][aAlL][gGeE][eE]?\:[^\]]*\|([^\]]*)\]\]/g, ' $1 ').
replace(/\[\[[cC]ategoría\:([^\]]*)\]\]/g, ' $1 ').
replace(/\[\[[^\|\]]*\|([^\]]*)\]\]/g, '$1').
replace(/\[\[([^\]]*)\]\]/g, '$1').
replace(/\s{2,}/g, ' ').
lift2(Bawolff.review.convertToPoints).exec();
} catch (e) {
//jsMsg(document.createTextNode('WWC error [step 1] [tell bawolff]:' + e.message));
alert('WWC error [step 1] [tell bawolff]:' + e.message);
}
}
Bawolff.review.convertToPoints = function (count, raw) {
try {
count = count.length;
var log = '\n# '
var cats = document.getElementById('catlinks').getElementsByTagName('a');
var OR, user, points, catName, userCat, inContest;
for (var i = 0; i < cats.length; i++) {
catName = cats[i].title
if (catName.substring(catName.length - 12, catName.length) === "(Wikinewsie)") {
user = catName.substring(9, catName.length - 13);
userCat = catName;
}
if (catName === "Category:Original reporting") {
OR = true;
}
if (catName === "Category:Writing Contests/May 2010") {
inContest = true;
}
}
var detailed;
if (!userCat || !inContest) return; //not a contest entry
log += '[[:' + userCat + '|' + user + ']] submitted: [[' + mw.config.get('wgTitle') + "]] for '''";
if (count < 1200) {
detailed = '1 pt [as short] ';
points = 1;
} else {
detailed = '3 pts [as synth] ';
points = 3;
}
if ((count - 1200)/700 > 0) {
detailed += '+' + 2*Math.floor((count - 1200)/700) + 'pts [per extra length] ';
points += 2*Math.floor((count - 1200)/700);
}
if (OR) {
detailed += '+6 pts [as OR] ';
points += 6;
}
if (document.getElementById('broadcast-report')) {
detailed += '+4 pts [as Broadcast] ';
points += 4;
}
log += points + "''' points. <small>(Normalized/Raw chars:" + count + '/' + raw + '; ' + detailed + ')</small>';
api('Wikinews:May 2010 writing contest/log').setDefaultSummary('Appending to contest log [via EzPR]; ' + points + ' points for ' + user).getPage().lift(function (p) { return p + log}).savePage().exec();
} catch (e) {
alert('WWC error [step 2] [tell bawolff]:' + e.message);
}
}