Diferencia entre revisiones de «Usuario:Leoncastro/Taller/MediaWiki:Gadget-DeluxeHistory.js»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
MediaWiki:Gadget-DeluxeHistory.js
 
Arreglo problema con template strings
Línea 69: Línea 69:
var scCSS = document.createElement('style');
var scCSS = document.createElement('style');
scCSS.type = 'text/css';
scCSS.type = 'text/css';
scCSS.innerHTML = `
scCSS.innerHTML = '.mw-userlink{background-color:#ff8;}\r\n' +
.mw-userlink{background-color:#ff8;}
'.mw-userlink.mw-anonuserlink{background-color:#f88;}\r\n' +
.mw-userlink.mw-anonuserlink{background-color:#f88;}
'.mw-userlink[class*="mw-listuserlink-"]{background-color:#8cf;}\r\n' +
.mw-userlink[class*="mw-listuserlink-"]{background-color:#8cf;}
'.mw-userlink.mw-listuserlink-sysop{background-color:#8f8;}\r\n' +
.mw-userlink.mw-listuserlink-sysop{background-color:#8f8;}
'.mw-userlink.mw-listuserlink-bot{background-color:#8ff;}\r\n' +
window.deluxehistory.style;
.mw-userlink.mw-listuserlink-bot{background-color:#8ff;}

` + window.deluxehistory.style;
document.getElementsByTagName('head')[0].appendChild(scCSS);
document.getElementsByTagName('head')[0].appendChild(scCSS);



Revisión del 14:32 13 feb 2017

(function(mw, $){

 if(window.deluxehistory && window.deluxehistory.loaded)
  return;

 var op = window.deluxehistory ? (window.deluxehistory.options ? window.deluxehistory.options : window.deluxehistory) : ['sysop', 'bot'];
 var cs = window.deluxehistory ? (window.deluxehistory.css ? window.deluxehistory.css : '') : '';
 var ls = window.deluxehistory ? (window.deluxehistory.cache ? window.deluxehistory.cache : 90) : 90; // 90 days cache
 window.deluxehistory = { loaded: true, options: typeof op == 'string' ? [op] : op, style: cs, cache: parseInt(ls) };

 var lsDateName = 'mw-deluxehistory-userlist-date';
 var lsListName = 'mw-deluxehistory-userlist-list';
 var lsDelCache = '&deluxehistory=nocache';

 function addClassName(item, name)
 {
  item.className = (' ' + item.className + ' ').split(' ' + name + ' ').join('').trim() + ' ' + name;
 }

 function checkUserlist()
 {
  var opts = window.deluxehistory.options;
  if( !localStorage[lsDateName] || localStorage[lsDateName] < Date.now() )
  {
   var valid_groups = [
    'abusefilter', 'accountcreator', 'autopatrolled', 'bot', 'bureaucrat', 'checkuser', 'confirmed',
    'epcampus', 'epcoordinator', 'epinstructor', 'eponline', 'extendedmover', 'filemover',
    'flood', 'flow-bot', 'founder', 'import', 'ipblock-exempt', 'massmessage-sender', 'oversight',
    'patroller', 'researcher', 'reviewer', 'rollbacker', 'sysop', 'templateeditor', 'transwiki'
    /* 'autoreviewer': obsolete type replaced by 'autopatrolled' */
    /* 'extendedconfirmed': too big // [[:en:Wikipedia:User_access_levels#Extended_confirmed_users]] (31632 users) */
    /* 'steward': only listed on [[:m:Template:StewardsList]], CORS */
   ];
   var file = [];
   opts.forEach(function(group){
    if( $.inArray(valid_groups, group) )
    {
     file.push(
      $.get( mw.util.wikiScript(), {title: 'Special:Listusers', group: group, limit: 10000 } ) // en:wiki reviewer (6721 users) (27-jan-2017)
       .done(function(d){
        var list = localStorage[lsListName] ? JSON.parse(localStorage[lsListName]) : {};
        var html = new DOMParser().parseFromString(d, 'text/html');
        Array.prototype.forEach.call(html.querySelectorAll('#mw-content-text > #mw-listusers-form + ul > li'), function(li){
         var a = li.querySelector('a.mw-userlink');
         var user = a.querySelector('bdi');
         user = user.innerText || user.textContent;
         list[user] = list[user] || {className: ''};
         addClassName(list[user], 'mw-listuserlink-' + group);
        });
        
        localStorage[lsListName] = JSON.stringify(list);
       })
     );
    }
   });
   return $.when.apply($, file)
           .done(function(d){
            localStorage[lsDateName] = Date.now() + window.deluxehistory.cache * 24 * 60 * 60 * 1000;
           })
           .fail(function(e){
            mw.notify('DeluxeHistory: Error en la recuperación de datos de la API');
           });
  }
  return $.when(true);
 }

 function markHistory(ul)
 {
  var scCSS = document.createElement('style');
  scCSS.type = 'text/css';
  scCSS.innerHTML = '.mw-userlink{background-color:#ff8;}\r\n' +
                    '.mw-userlink.mw-anonuserlink{background-color:#f88;}\r\n' +
                    '.mw-userlink[class*="mw-listuserlink-"]{background-color:#8cf;}\r\n' +
                    '.mw-userlink.mw-listuserlink-sysop{background-color:#8f8;}\r\n' +
                    '.mw-userlink.mw-listuserlink-bot{background-color:#8ff;}\r\n' +
                    window.deluxehistory.style;
  document.getElementsByTagName('head')[0].appendChild(scCSS);

  checkUserlist().done(function(){
   if(ul)
   {
    var list = JSON.parse(localStorage[lsListName]);
    Array.prototype.forEach.call(document.querySelectorAll(ul), function(li){
     var user, a = li.querySelector('a.mw-userlink, .wikibase-edit ~ .mw-changeslist-separator + a.extiw');
     user = a.querySelector('bdi') || a;
     user = user.innerText || user.textContent;
     if( !li.querySelector('a.mw-userlink') )
      addClassName(a, 'mw-userlink');
     if( /(\d{1,3}\.){3}\d{1,3}|([\da-f]{1,4}:){7}[\da-f]{1,4}/i.test(user) )
      addClassName(a, 'mw-anonuserlink');
     if( li.querySelector('a.mw-anonuserlink') )
      addClassName(li, 'mw-anonuserlink');
     if( list[user] && list[user].className )
     {
      addClassName(li, list[user].className);
      addClassName(a, list[user].className);
     }
    });
   }
  });
 }

 if( mw.util.getParamValue('historydeluxe') == 'nocache' )
 {
  localStorage.removeItem(lsDateName);
  localStorage.removeItem(lsListName);
  location.href = location.href.replace(lsDelCache, '');
 }

 if( mw.config.get('wgAction') == 'history' )
 {
  mw.util.addPortletLink(
   'p-cactions',
   location.href + lsDelCache,
   'Purgar historial',
   'ca-purge-deluxehistory',
   'Purgar la caché del historial'
  );
  markHistory('#pagehistory > li');
 }
 else if( mw.config.get('wgCanonicalSpecialPageName') == 'Recentchanges' ||
          mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' )
 {
  markHistory('.mw-changeslist > ul.special > li');
 }

})(mediaWiki, jQuery);