Utilizator:Gutza/verifier beta.js

Notă: După salvare, trebuie să treceți peste cache-ul browser-ului pentru a vedea modificările.

  • Mozilla, Google Chrome, Safari, Konqueror: țineți apăsat Shift în timp ce apăsați butonul Reload (sau apăsați Ctrl-Shift-R).
  • Internet Explorer: apăsați Ctrl-F5.
  • Opera: apăsați F5.
/**
*    WikiVerifier -- a Wikipedia utility for verifying diffs between versions
*    Copyright (C) 2007  Bogdan Stăncescu a.k.a. Gutza
*
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation version 2.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License along
*    with this program; if not, write to the Free Software Foundation, Inc.,
*    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

/*
 * WikiVerifier variables
 */
var vfStr_compare_current_label='actuală';
var vfStr_remote_url_root='http://bogdan.stancescu.ro/personal_projects/wiki_beta';
var vfStr_ignore_space_prefix=encodeURI('Discuţie');
var vfStr_user_space_name='Utilizator';
var vfStr_unverified_list='WikiVerifier Beta/Neverificate';
var vfStr_blockConfirm="Sigur doriţi să validaţi tot blocul de modificări?\n\n"+
  "Un bloc de modificări înseamnă toate modificările succesive efectuate de acelaşi utilizator. "+
  "Această funcţionalitate este utilă dacă de exemplu aţi constatat că după un număr mare de modificări succesive ale "+
  "aceluiaşi utilizator urmează un revert ale tuturor modificărilor acestuia.";
var vfStr_contributionsBase=encodeURI("Special:Contribuţii")+"/";

hookEvent('load', setupVerifier);

function setupVerifier()
{
  // Start by highlighting anonymous users
  verifierHighlightIPs();
  // Populate WikiVerifier link
  verifierShowLink();
  // Show "unverified" link
  verifierShowUnverified();
  // Show "anon" Recentchanges
  verifierShowAnon();
  // Check whether we should reload
  verifierHookReload();

  var loc=new String(window.location);

  // ---- ASSIGNER --------------------------------------
  if (
    window.wgCanonicalSpecialPageName!='Recentchanges' &&
    window.wgCanonicalSpecialPageName!='Watchlist' &&
    !(window.wgTitle==vfStr_unverified_list && window.wgAction=='view') &&
    loc.indexOf(vfStr_contributionsBase)==-1 &&
    loc.indexOf('action=history')==-1
  ) {
    if (loc.indexOf('diff=')==-1) return false;
    if (loc.indexOf('diff=0')!=-1) return false;
    if (loc.indexOf('title='+vfStr_ignore_space_prefix)!=-1) return false;
    var fh=document.getElementsByTagName('h1');
    if (fh==undefined) {
      alert("Nu găsesc titlul paginii (1)! Te rog anunţă-l pe Gutza!");
      return false;
    }
    var ppos=loc.indexOf('?');
    var param=loc.substr(ppos+1);
    var origURL=vfStr_remote_url_root+"/assigner.php?"+param;
    var blockURL=vfStr_remote_url_root+"/validate_block.php?"+param;
    var undoURL=vfStr_remote_url_root+"/undo_assignment.php?"+param;
    fh[0].innerHTML="<img src='"+origURL+"' id='wv_large_icon' onClick='"+'this.src="'+undoURL+'"'+"'> "+fh[0].innerHTML;

    var tmp=document.getElementsByTagName('td');
    var successive=true;
    var i=0;
    for(i=0;i<tmp.length;i++) {
      if (tmp[i].className=='diff-multi') {
        successive=false;
        break;
      }
    }
    if (successive) {
      var newnode=document.createElement("div");
      newnode.innerHTML="<small>WikiVerifier: <a href='#' onClick='if (confirm(vfStr_blockConfirm)) { document.getElementById(\"wv_large_icon\").src=\""+blockURL+"\"; this.parentNode.style.display=\"none\"; } return(false);'>Validează acest bloc de modificări</a></small>";
      newnode.style.textAlign='right';
      fh[0].parentNode.insertBefore(newnode,fh[0].nextSibling);
    }

    var prevlink=document.getElementById('differences-prevlink');
    if (prevlink) {
      var tloc=prevlink.href;
      var tparam=tloc.substr(tloc.indexOf('?')+1);
      var newnode=document.createElement("span");
      newnode.innerHTML="<img src='"+vfStr_remote_url_root+"/verifier.php?"+tparam+"' onClick='verifierPopup("+'"'+tparam+'"'+")'> ";
      newnode.style.marginLeft='10px';
      prevlink.parentNode.appendChild(newnode);
    }

    var nextlink=document.getElementById('differences-nextlink');
    if (nextlink) {
      var tloc=nextlink.href;
      var tparam=tloc.substr(tloc.indexOf('?')+1);
      var newnode=document.createElement("span");
      newnode.innerHTML="<img src='"+vfStr_remote_url_root+"/verifier.php?"+tparam+"' onClick='verifierPopup("+'"'+tparam+'"'+")'> ";
      newnode.style.marginRight='5px';
      nextlink.parentNode.insertBefore(newnode,nextlink);
    }

    return false;
  }

  // ---- VERIFIER --------------------------------------
  var links=document.getElementsByTagName('a');
  var tmp="";
  var re=/^[0-9]+ modificări$/;
  var contributor='';
  var scpos;
  if ((scpos=loc.indexOf(vfStr_contributionsBase))!=-1) {
    contributor=loc.substr(scpos+vfStr_contributionsBase.length);
  } else {
    var re2=new RegExp("title="+vfStr_contributionsBase+"(.*?)&target=([^&]+)");
    var results=re2.exec(loc);
    if (results) {
      contributor=results[2];
    }
  }
  var diff_user;
  for(var i=0;i<links.length;i++) {
    if (links[i].href.indexOf('diff=')==-1) continue;
    if (links[i].href.indexOf('diff=0')!=-1) continue;
    if (links[i].innerHTML==vfStr_compare_current_label) continue;
    var ppos=links[i].href.indexOf('?');
    var param=links[i].href.substr(ppos+1);
    var article_name=param;
    article_name=article_name.substr(6);
    article_name=article_name.substr(0,article_name.indexOf('&'));
    if (param.indexOf('title='+vfStr_ignore_space_prefix)!=-1) continue;
    var succ; // i.e. null
    if (
      links[i].innerHTML=='dif' ||
      links[i].innerHTML=='prec'
    ) {
      param=param+"&succ=yes";
      succ=true;
    } else if (
      re.exec(links[i].innerHTML)
    ) {
      param=param+"&succ=no";
      succ=false;
    }
    diff_user=false;
    if (succ && !contributor) {
      // Ok, let's try to determine who done it
      if (links[i].innerHTML=='dif') {
        // On recent changes, there's typically "prec"; if we're on the recent changes pages
        // and we encounter a dif, that's because the user doesn't have JS mode on, which
        // changes things a bit.
        if (window.wgCanonicalSpecialPageName=='Recentchanges') {
          var userlink=links[i+3];
        } else {
          // Now, we know we're on Watched pages; still, depending on whether JS mode is on
          // or not, we need to shift by 2 or 4 links
          if (links[i].parentNode.nodeName=='LI') {
            var userlink=links[i+4];
          } else {
            var userlink=links[i+2];
          }
        }
      } else if (links[i].innerHTML=='prec') {
        if (loc.indexOf('action=history')==-1) {
          var userlink=links[i+1];
        } else {
          var userlink=links[i+2];
        }
      }
      var upos;
      if ((upos=userlink.href.indexOf('Utilizator:'))!=-1) {
        diff_user=userlink.href.substr(upos+11); // 11='Utilizator';
      } else if ((upos=userlink.href.indexOf(vfStr_contributionsBase))!=-1) {
        diff_user=userlink.href.substr(upos+vfStr_contributionsBase.length);
      }
    }
    var user_name=null;
    if (contributor) {
      user_name=contributor;
    } else if (diff_user) {
      user_name=diff_user;
    }
    if (user_name) {
      var tmp=vfStr_user_space_name+':'+user_name;
      if (article_name.substr(0,tmp.length)==tmp) {
        // We don't care about changes by a user on their own user page
        continue;
      }
      param=param+"&wv_user="+user_name;
    }
    var newnode=document.createElement("span");
    newnode.innerHTML="<img src='"+vfStr_remote_url_root+"/verifier.php?"+param+"' onClick='verifierPopup("+'"'+param+'"'+")'> ";
    links[i].parentNode.insertBefore(newnode,links[i]);
  }
  return true;
}

function verifierHighlightIPs()
{
  var links=document.getElementsByTagName('a');
  var re_href=new RegExp("^http://ro.wikipedia.org/wiki/"+vfStr_contributionsBase+"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}");
  var re_html=/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/;
  for(var i=0;i<links.length;i++) {
    if (re_href.exec(links[i].href) && re_html.exec(links[i].innerHTML)) {
      links[i].style.backgroundColor='#ffccdd';
      links[i].style.padding='1px';
      links[i].style.borderStyle='solid';
      links[i].style.borderWidth='1px';
      links[i].style.borderColor='#ffaabb';
    }
  }
  return true;
}

function verifierShowLink()
{
  var logout_li=document.getElementById('pt-logout');
  if (logout_li==undefined) {
    // Now really
    return false;
  }
  var newnode=document.createElement("li");
  newnode.innerHTML="<a href='"+vfStr_remote_url_root+"' title='Vizitează site-ul WikiVerifier'>WikiVerifier</a>";
  logout_li.parentNode.insertBefore(newnode,logout_li);
  return true;  
}

function verifierPopup(param)
{
  var newWin=window.open(vfStr_remote_url_root+"/popup.php?"+param,"verifierPopup","width=450,height=600");
  return newWin;
}

function verifierShowAnon()
{
 var recentchanges_li=document.getElementById('n-recentchanges');
 if (recentchanges_li==undefined) {
   // Now really
   return false;
 }
 var newlistentry=document.createElement("li");
 newlistentry.id='n-anonchanges';
 var newnode=document.createElement("a");
 newnode.href='/w/index.php?title=Special:RecentChanges&hideliu=1';
 newnode.innerHTML='Schimbări anonime';
 newlistentry.appendChild(newnode);
 recentchanges_li.parentNode.insertBefore(newlistentry,recentchanges_li.nextSibling);
 return true;  
}

function verifierShowUnverified()
{
 var recentchanges_li=document.getElementById('n-recentchanges');
 if (recentchanges_li==undefined) {
   // Now really
   return false;
 }
 var newlistentry=document.createElement("li");
 newlistentry.id='n-unverified';
 var newnode=document.createElement("a");
 newnode.href='http://bogdan.stancescu.ro/personal_projects/wiki_beta/goto_unverified.php';
 newnode.innerHTML='Modificare neverificată';
 newlistentry.appendChild(newnode);
 recentchanges_li.parentNode.insertBefore(newlistentry,recentchanges_li.nextSibling);
 return true;  
}

function verifierHookReload()
{
  var loc=new String(window.location);
  if (
    window.wgCanonicalSpecialPageName != "Recentchanges" ||
    loc.indexOf('wv_action=reload')==-1
  ) {
    return true;
  }

  // Find the CURRENT ts
  var i_list=document.getElementsByTagName('input');
  var i=0;
  var from_ts=0;
  for(i=0;i<i_list.length;i++) {
    if (i_list[i].name!='from') {
      continue;
    }
    from_ts=i_list[i].value;
    break;
  }
  if(from_ts==0) {
    return false;
  }
  
  var a_list=document.getElementsByTagName('a');
  var new_href='';
  for(i=0;i<a_list.length;i++) {
    var href=a_list[i].href;  
    if (
      href.indexOf('Special:Schimb%C4%83ri_recente')==-1 ||
      href.indexOf('from=')==-1 ||
      href.indexOf('from='+from_ts)!=-1
    ) {
      continue;
    }
    new_href=href+'&wv_action=reload';
  }
  if (new_href=='') {
    return false;
  }

  mycode = 'window.location="'+new_href+'"';

  setTimeout(mycode,60000);
}