MediaWiki:Common.js/Wikinoticias:Diálogo/diagnostic panel

/* Para Wikinoticias:Diálogo/diagnostic panel. Ver Especial:LoQueEnlazaAqui/Wikinoticias:Diálogo/diagnostic panel. */

function panelVersion() { return '1.0 (en español) (2017-02-06)'; }

var modeSelectRegion = {

       // setup
       // expertFlag
       // simpleOnly
       // expertOnly
       // handleComplicateButton
       // handleSimplifyButton
   };

var idSelectRegion = {

       // setup
       // handleMenuChange
       // handleExamineButton
   };

var basicDataRegion = {

       // setup
       // handleShowButton
       // handleWriteButton
   };

var detailedDataRegion = {

       // collect
   };

function safeHtml(s) {

    return s.replace(/\</g,'<').replace(/\>/g,'>');

};

detailedDataRegion.collect = function (buildEntry) {

   //
   // assemble a string describing all the detailed data,
   // by calling buildEntry with info about each datum
   //
   var id = $('.wikidialog-panel-data-id').text();
   var s = ;
   $('.wikidialog-panel-check-param').each(function () {
       var param = $(this);
       if (param[0].checked) {
           var n = param.attr('id').substring(9);
           var v = sessionStorage['wikidialog:' + id + ':in:' + n];
           s += buildEntry('incoming', n, v);
       }
   });
   $('.wikidialog-panel-check-field').each(function () {
       var save = $(this);
       if (save[0].checked) {
           var n = save.attr('id').substring(8);
           var v = sessionStorage['wikidialog:' + id + ':sv:wikidialog-' + n];
           s += buildEntry('field', n, v);
       }
   });
   $('.wikidialog-panel-rbparam').each(function () {
       var rollback = $(this);
       if (rollback[0].checked) {
           var n = rollback.attr('id').substring(12);
           var v = sessionStorage['wikidialog:' + id + ':rb-in:' + n];
           s += buildEntry('rollback incoming', n, v);
       }
   });
   $('.wikidialog-panel-check-rbfield').each(function () {
       var saverb = $(this);
       if (saverb[0].checked) {
           var n = saverb.attr('id').substring(11);
           var v = sessionStorage['wikidialog:' + id + ':sv-rb:wikidialog-' + n];
           s += buildEntry('rollback field', n, v);
       }
   });
   return s;

}

basicDataRegion.handleShowButton = function (event) {

   $('.wikidialog-panel-region-detail').replaceWith(function () {

return '

' +
           detailedDataRegion.collect(function (c, n, v) {
               return '
' + c + ' ' + n + (v ? (':  "' + safeHtml(v) + '"')  : ' null');
}) + '

';

   });

}

basicDataRegion.handleWriteButton = function (event) {

   function stepFour(header, add, pageName, existing) {
       //
       // check for duplication
       //
       if (existing) {
           if (existing.indexOf(add) >= 0) {
               alert('Los datos que se escriben parecen estar\nya presentes en su página de discusión');
               return;
           }
       }
       //
       // confirm
       //
       if (! confirm('¿Guardar los datos del diálogo en la página de discusión?')) return;
       //
       // save to page
       //
       var apidata = { format:       'json',
                       action:       'edit',
                       text:         (header + '\n' + add),
                       title:        pageName,
                       section:      'new',
                       sectiontitle: 'Datos de Diálogo (Guardados Usando el Panel de Diagnostico)',
                       summary:      'Sección nueva: /* 'Datos de Diálogo (Guardados Usando el Panel de Diagnostico) */',
                     };
       apidata.token = mw.user.tokens.get('editToken'); // always the last field added
       $.ajax({
           type: 'POST',
           url:  mw.util.wikiScript('api'),
           data: apidata,
           datatype: 'json'
       }).done(function(data) {
           if (data && data.edit && data.edit.result && (data.edit.result == 'Success'))
               alert('Datos de diálogo guardados');
           else if (data && data.error)
               alert('Error en guardado de datos de diálogo ' + data.error.code);
           else
               alert('Error desconocido en guardado de datos de diálogo');
       }).fail(function () {
           alert('Los datos de diálogo salen fallidos');
       });
   }
   function stepThree(header, add, pageName) {
       //
       // check status of talk page
       //
       $.getJSON(
           mw.util.wikiScript('api'),
           {
               format: 'json',
               action: 'query',
               prop:   'revisions',
               rvprop: 'content',
               rvlimit: 1,
               titles:  pageName,
           }
       ).done(function(data) {
           var error = ;
           var existing = ;
           if (! (data.query && data.query.pages)) {
               error = 'Consulta de página fallida';
           }
           else for (var p in data.query.pages) {
               if ('invalid' in data.query.pages[p]){
                   error = 'Nombre de página invalido';
               } else if ('missing' in data.query.pages[p]) {
                   stepFour(header, add, pageName);
                   return;
               } else {
                   if (data.query.pages[p].revisions &&
                       data.query.pages[p].revisions[0] &&
                       data.query.pages[p].revisions[0]['*']
                      ) {
                       stepFour(header, add, pageName, data.query.pages[p].revisions[0]['*']);
                       return;
                   }
                   else error = 'Consulta de página fallida';
               }
           }
           alert('Se encontró un error mientras se preparaba para escribir los datos:\n    ' + error);
       }).fail(function () {
           alert('Se encontró un error mientras se preparaba para escribir los datos:\n    Consulta de página fallida');
       });
   }
   function stepTwo(header, add) {
       //
       // work out page to write to
       //
       var userName = mw.config.get('wgUserName');
       if (! userName) { // should prevent the button from being created, but check here anyway
           alert('Tienes que estar registrado para escribir los datos');
           return;
       }
       var pageName = 'User talk:' + userName;
       stepThree(header, add, pageName);
   }
   function stepOne() {
       //
       // what to write
       //
       var id = $('.wikidialog-panel-data-id').text();
       var header = sessionStorage['wikidialog:' + id + ':incoming'];
       if (header) {
           header = 'Dirección de la página ' + header + '.';
       } else {
           header = 'No hay dirección de página';
       }
       header = 'ID ' + id + ', ' + header;
       var add = detailedDataRegion.collect(function (c, n, v) {
           return ('\n----\n----\n' + c + ' ' + n +
               (v ? (':\n----\n' + v)
                  : ' null'));
       });
       if (! add) {
           alert('Parece que no hay nada que escribir.');
           return;
       }
       stepTwo(header, add);
   }
   stepOne();

}

basicDataRegion.setup = function (id) {

   $('.wikidialog-panel-region-basic').replaceWith(function () {
       var s = ;
       //
       // stuff for expert mode
       //
       var incoming = sessionStorage['wikidialog:' + id + ':incoming'];
       if (incoming) {
           s += 'Dirección de la página por ID: ' + safeHtml(incoming);
       } else {
           s += 'Advertencia: No hay dirección de página para este ID.';
       }
       //
       s += '
Solicitud entrante '; var origin = sessionStorage['wikidialog:' + id + ':origin']; if (origin) { s += 'Autenticado desde: ' + safeHtml(origin); var proxy = sessionStorage['wikidialog:' + id + ':proxy']; if (proxy) { s += '
                ' + '                ' + '                 Vía proxy: ' + safeHtml(proxy); } } else { var unauth = sessionStorage['wikidialog:' + id + ':unauth']; if (unauth) { s += 'raw from: ' + safeHtml(sessionStorage['wikidialog:' + id + ':unauth']); } else { s += 'not found.'; } } // var prevurl = sessionStorage['wikidialog:' + id + ':prevurl']; var dravail = sessionStorage['wikidialog:' + id + ':rb-available']; if (prevurl) { s += '
Reversión simple disponible: ' + prevurl; } else if (dravail) { s += '
Reversión delegada disponible.'; var drincoming = sessionStorage['wikidialog:' + id + ':rb-incoming']; if (drincoming) { s += '
    Restauración entrante: ' + drincoming; } else { s += "
    No es entrante para restaurar (algo está mal)."; } var drunauth = sessionStorage['wikidialog:' + id + ':rb-unauth']; if (drunauth) { s += '
    Restauración de origen no autorizado: ' + drunauth; } else { s += '
    Nulo origen no autorizado.'; } var drorigin = sessionStorage['wikidialog:' + id + ':rb-origin']; if (drorigin) { s += '
    Restauración de origen autorizado: ' + drorigin; } else { s += '
    Nulo origen autorizado'; } var drproxy = sessionStorage['wikidialog:' + id + ':rb-proxy']; if (drproxy) { s += '
    Restauración de proxy pre-autorizado: ' + drproxy; } else { s += '
    Nulo proxy autorizado.'; } } else { s += '
Reversión no disponible.'; } // var notes = sessionStorage['wikidialog:' + id + ':notes']; if (notes) {

s += '
Notas de diálogo por ID:


' + notes + '


';

       } else {
           s += '
No hay notas de diálogo para este ID.
'; } // // all modes //

s = '


Datos para este ID de diálogo ' +
           id + ':
' + modeSelectRegion.expertOnly(s); // var params = sessionStorage['wikidialog:' + id + ':params']; if (params) { s += 'Parámetros entrantes para este ID:
'; params = params.split(','); for (var k=0; (k < params.length); k += 1) if (params[k]) { s += '    ' + params[k]; } } else { s += 'No hay parámetros entrantes para este ID.'; } // s += '
'; var saves = sessionStorage['wikidialog:' + id + ':saves']; if (saves) { s += 'Campos guardados para este ID:
'; saves = saves.split(','); for (var k=0; (k < saves.length); k += 1) if (saves[k]) { saves[k] = saves[k].substring(11); s += '    ' + saves[k]; } } else { s += 'No hay campos guardados para este ID.'; } // if ((! prevurl) && dravail) { s += '
'; var dradded = sessionStorage['wikidialog:' + id + ':rb-added']; if (dradded) { s += 'Parámetros añadidos para eliminar en reversión para este ID:
    ' + dradded; } else { s += 'No hay parámetros añadidos para eliminar en reversión para este ID.'; } s += '
'; var drchanged = sessionStorage['wikidialog:' + id + ':rb-changed']; if (drchanged) { s += 'Parámetros modificados para restaurar en reversión para este ID:
'; drchanged = drchanged.split(','); for (var k=0; (k < drchanged.length); k += 1) if (drchanged[k]) { s += '    ' + drchanged[k]; } } else { s += 'No hay parámetros modificados para restaurar en reversión desde este ID.'; } s += '
'; var drsaves = sessionStorage['wikidialog:' + id + ':saves-rb']; if (drsaves) { s += 'Campos guardados para restaurar en reversión para este ID:
'; drsaves = drsaves.split(','); for (var k=0; (k < drsaves.length); k += 1) if (drsaves[k]) { drsaves[k] = drsaves[k].substring(11); s += '    ' + drsaves[k]; } } else { s += 'No hay campos guardados para restaurar en reversión para este ID.'; } } // s += '

 '; if (mw.config.get('wgUserName')) { s += '  '; } s += ' '; //
s += '

';

       return s;
   });
   $('.wikidialog-panel-check-param').replaceWith(function () {
       var i = $(this).attr('id');
       return $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-panel-check-param').attr('id',i);
   });
   $('.wikidialog-panel-check-field').replaceWith(function () {
       var i = $(this).attr('id');
       return $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-panel-check-field').attr('id',i).attr('checked','yes');
   });
   $('.wikidialog-panel-rbparam').replaceWith(function () {
       var i = $(this).attr('id');
       return $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-panel-rbparam').attr('id',i);
   });
   $('.wikidialog-panel-check-rbfield').replaceWith(function () {
       var i = $(this).attr('id');
       return $(document.createElement('input')).attr('type','checkbox').addClass('wikidialog-panel-check-rbfield').attr('id',i);
   });
   $('.wikidialog-panel-button-show').replaceWith(function () {
       return $(document.createElement('input')).attr('type','button').addClass('wikidialog-panel-button-show')
           .val('show').attr('title','show selected values for this ID').click(basicDataRegion.handleShowButton);
   });
   $('.wikidialog-panel-button-write').replaceWith(function () {
       return $(document.createElement('input')).attr('type','button').addClass('wikidialog-panel-button-write')
           .val('write').attr('title','write selected values for this ID').click(basicDataRegion.handleWriteButton);
   });

}

idSelectRegion.handleExamineButton = function (event) {

   var id = $.trim($('.wikidialog-panel-input-id').val());
   if (id != id.match(/\d+/)) {
       alert('No es un ID valido (debe ser de uno o más dígitos): ' + safeHtml(id));
       return;
   }
   basicDataRegion.setup(id);

}

idSelectRegion.handleMenuChange = function (event) {

   var select = event.target;
   if (select.selectedIndex < 0) return;
   $('.wikidialog-panel-input-id').val(select.options[select.selectedIndex].value);

}

idSelectRegion.setup = function () { // assumes sessionStorage is available

   //
   // prepare content for page
   //
   $('.wikidialog-panel-region-selectid').replaceWith(

'

' +
     modeSelectRegion.expertOnly(
       (sessionStorage.wikidialogSequenceBound
        ? ('Secuencia de acción en progreso; ligado = ' + sessionStorage.wikidialogSequenceBound + '.
')  : 'No hay secuencias de acción en progreso.
')) + modeSelectRegion.expertOnly( (sessionStorage.wikidialogNextID  ? ('ID de diálogo no utilizado disponible para el siguiente uso: ' + (Number(sessionStorage.wikidialogNextID) - 1))  : 'No hay registro de un ID de diálogo disponible para el siguiente uso.') + '
') + (sessionStorage.wikidialogActiveList  ? (modeSelectRegion.simpleOnly('Los estados de diálogo disponibles para su examen, listados por ID de estado desde') + modeSelectRegion.expertOnly('Los ID de diálogo ahora se muestran como en uso,') + ' Más reciente a menos reciente: ' + sessionStorage.wikidialogActiveList + modeSelectRegion.simpleOnly((function () { var active = sessionStorage.wikidialogActiveList; active = active.split(','); var stack = sessionStorage.wikidialogStack; stack = (stack ? stack.split('&') : []); var result = ; for (var j = (stack.length - 2); (j >= 0); j -= 2) { for (var k = (active.length - 1); (k >= 0); k--) if (stack[j] == active[k]) { stack[j] = ; break; } if (stack[j]) { result += ',' + stack[j]; } } return result; })()) + modeSelectRegion.expertOnly('; ' + (sessionStorage.wikidialogStack  ? (function () { var stack = sessionStorage.wikidialogStack; stack = stack.split('&'); var result = ; for (var j = (stack.length - 2); (j >= 0); j -= 2) { result += (result ? (',' + stack[j]) : stack[j]); } return 'Stack, de arriba a abajo: ' + result; })()  : 'No hay stack')) + '.
Seleccionar un ID activo:  ' + modeSelectRegion.expertOnly(' or'))  : modeSelectRegion.simpleOnly(sessionStorage.wikidialogStack  ? ("Los estados de diálogo disponibles para su examen, listados por ID de estado de los más recientes a los menos recientes: " + (function () { var stack = sessionStorage.wikidialogStack; stack = stack.split('&'); var result = ; for (var j = (stack.length - 2); (j >= 0); j -= 2) { result += (result ? (',' + stack[j]) : stack[j]); } return result + '.'; })())  : "No hay estados de diálogo disponibles para su examen.") + modeSelectRegion.expertOnly("No hay identificadores de diálogo listos como en uso; " + (sessionStorage.wikidialogStack  ? (function () { var stack = sessionStorage.wikidialogStack; stack = stack.split('&'); var result = ; for (var j = (stack.length - 2); (j >= 0); j -= 2) { result += (result ? (',' + stack[j]) : stack[j]); } return 'Stack, de arriba a abajo: ' + result; })()  : 'No hay stack') + ".
Puedes")) + modeSelectRegion.expertOnly( ' Introducir un ID de diálogo de forma manual:  ') + ((sessionStorage.wikidialogActiveList || sessionStorage.wikidialogStack)  ? '  '  : modeSelectRegion.expertOnly('  ')) + '  ' +
'

Versión del Panel ' + panelVersion() + '

');

   var first = ;
   $('.wikidialog-panel-menu-id').replaceWith(function () {
       var e = document.createElement('select');
       var active = sessionStorage.wikidialogActiveList;
       active = (active ? active.split(',') : []);
       for (var k=0; (k < active.length); k += 1) if (active[k]) {
           if (! first) first = active[k];
           e.appendChild(new Option(active[k],active[k],false,false));
       }
       var stack = sessionStorage.wikidialogStack;
       stack = (stack ? stack.split('&') : []);
       for (var j = (stack.length - 2); (j >= 0); j -= 2) {
           for (var k = (active.length - 1); (k >= 0); k--)
               if (stack[j] == active[k]) {
                   stack[j] = ;
                   break;
               }
           if (stack[j]) { e.appendChild(new Option(stack[j],stack[j],false,false)); }
       }
       return $(e).addClass('wikidialog-panel-menu-id');
   });
   $('.wikidialog-panel-input-id').replaceWith(function () {
       return $(document.createElement('input')).attr('type','text').addClass('wikidialog-panel-input-id').val(first).attr('size',3);
   });
   $('.wikidialog-panel-button-examine').replaceWith(function () {
       return $(document.createElement('input')).attr('type','button').addClass('wikidialog-panel-button-examine')
           .val('examine').attr('title','Examinar los datos de este ID').click(idSelectRegion.handleExamineButton);
   });
   $('.wikidialog-panel-menu-id').change(idSelectRegion.handleMenuChange);

}

modeSelectRegion.expertFlag = false;

modeSelectRegion.simpleOnly = function (s) {

   return '' + s + '';

}

modeSelectRegion.expertOnly = function (s) {

   return '' + s + '';

}

modeSelectRegion.handleComplicateButton = function (event) {

   $('.wikidialog-panel-mode-simple').css('display', 'none');
   $('.wikidialog-panel-mode-expert').css('display', 'inline');
   modeSelectRegion.expertFlag = true;

}

modeSelectRegion.handleSimplifyButton = function (event) {

   $('.wikidialog-panel-mode-simple').css('display', 'inline');
   $('.wikidialog-panel-mode-expert').css('display', 'none');
   modeSelectRegion.expertFlag = false;

}

modeSelectRegion.setup = function () {

$('div.wikidialog-diagnostic-panel').replaceWith('

' +
       modeSelectRegion.simpleOnly(
           'Esta es la versión simple del panel; también hay una versión experta. ' +
           ' ') +
       modeSelectRegion.expertOnly(
           'Esta es la versión experta del panel; también hay una versión simple. ' +
           ' ') +
'
' +
       '  ' +
'

');

   $('.wikidialog-panel-button-complicate').replaceWith(function () {
       return $(document.createElement('input')).attr('type','button').addClass('wikidialog-panel-button-complicate')
           .val('Modo experto').attr('title','Cambiar al modo de panel experto').click(modeSelectRegion.handleComplicateButton);
   });
   $('.wikidialog-panel-button-simplify').replaceWith(function () {
       return $(document.createElement('input')).attr('type','button').addClass('wikidialog-panel-button-simplify')
           .val('Modo simple').attr('title','Cambiar al modo de panel simple').click(modeSelectRegion.handleSimplifyButton);
   });
   idSelectRegion.setup();

}

if (sessionStorage) {

   modeSelectRegion.setup();

} else {

   $('div.wikidialog-diagnostic-panel').replaceWith(

'

' +
       "No hay acceso al almacenamiento de diálogo desde aquí. Si está viendo esta página a través de la misma sesión del navegador como un diálogo cuyos datos está intentando recuperar, algo extraño está ocurriendo. La razón más probable para no almacenar el diálogo es un navegador muy antiguo, y si así fuera, no debería haber sido posible ejecutar un diálogo en él en absoluto." +
'

'

   );

}