MediaWiki:Gadget-checkVoteRights.js

Napomena: Nakon što objavite izmjene, možda ćete morati osvježiti keš preglednika da biste vidjeli izmjene.

  • Firefox / Safari: Držite Shift i kliknite na Reload ili pritisnite Ctrl-F5 ili Ctrl-R (⌘-R na Macu)
  • Google Chrome: Pritisnite Ctrl-Shift-R (⌘-Shift-R na Macu)
  • Internet Explorer / Edge: Držite Ctrl i kliknite na Refresh ili pritisnite Ctrl-F5
  • Opera: Pritisnite Ctrl-F5.
/*
 * Preuzeto sa he.wikipedije
 *
 */

function updateVoteRightResult(userName, id, result) {
 var span = document.getElementById('votelink' + id);
 var text = '<font color="';
 if (result == 'עבר') // pass
  text += 'green';
 else // failed
  text += 'red';
 text += '">' + result + '</font>';
 span.innerHTML = ' (' + text + ') ';
}

function check100EditsAnd90Days(userName, id) {
 var a = new XMLHttpRequest();
 a.open('GET', '//bs.wikipedia.org/w/api.php?action=query&format=xml&list=usercontribs&ucuser=' +
                userName +
                '&ucprop=title|timestamp&ucnamespace=0|6|8|10|12|14|100&uclimit=100&ucstart=' +
                myCheckDate.getFullYear() +
                (( (myCheckDate.getMonth() + 1) <= 9 ) ? '0' + (myCheckDate.getMonth() + 1) : (myCheckDate.getMonth() + 1)) +
                (( myCheckDate.getDate() <= 9 ) ? '0' + myCheckDate.getDate() : myCheckDate.getDate()) +
                (( myCheckDate.getHours() <= 9 ) ? '0' + myCheckDate.getHours() : myCheckDate.getHours()) +
                (( myCheckDate.getMinutes() <= 9 ) ? '0' + myCheckDate.getMinutes() : myCheckDate.getMinutes()) +
                '00', true);
 a.onreadystatechange = function() {
   if (a.readyState != 4) return;
   var rx = new RegExp('timestamp="(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})', 'g');
   var m;
   var counter = 1;
   while (counter < 101) {
    m = rx.exec(a.responseText);
    if (!m) { // no 100 edits
     updateVoteRightResult(userName, id, 'Korisnik nema 100 izmjena'); // failed - no 100 edits
     return;
    }
    counter++;
   }
   // if reached here, there are 100 edit - check 90 day rule
   var compareDate = new Date();
   compareDate.setFullYear(m[1], eval(m[2]) - 1, m[3]);
   compareDate.setHours(m[4], m[5]);
   if (((myCheckDate - compareDate)/60/60/1000/24) > 91) { // more than 91 days
    updateVoteRightResult(userName, id, 'Korisnik izvršio manje od 100 izmjena ili u roku od više od 90 dana'); // failed - more than 90 days
    return;
   }
   // if reached here, passed all tests.
   updateVoteRightResult(userName, id, 'OK'); // passed
  };
 a.send(null);
}

function checkUserSeniority(userName, id) {
 var a = sajax_init_object();
 a.open('GET', '//bs.wikipedia.org/w/api.php?action=query&list=usercontribs&ucuser=' + userName + '&ucprop=title|timestamp&format=xml&ucdir=newer&uclimit=1' , true);
 a.onreadystatechange = function() {
   if (a.readyState != 4) return;
   if (a.responseText.indexOf('item user=') == -1) { // there are no contributions
    updateVoteRightResult(userName, id, 'nema izmjena'); // failed - no contributions
    return;
   } else { // there are contributions - check first edit date
    var rx = new RegExp('timestamp="(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})');
    var m = rx.exec(a.responseText);
    if (m && m[0]) {
     var compareDate = new Date();
     compareDate.setFullYear(m[1], eval(m[2]) - 1, m[3]);
     compareDate.setHours(m[4], m[5]);
     if (((myCheckDate - compareDate)/60/60/1000/24) < 30) { // less than 30 days
      updateVoteRightResult(userName, id, 'manje od 30 dana'); // failed - less than 30 days
      return;
     } else { // passes seniority - on to next test
      check100EditsAnd90Days(userName, id);
     }
    }
   }
  };
 a.send(null);
}

var myCheckDate = new Date();

function checkVoteRights(userName, id) {
 var textboxTime = document.getElementById('checkTime');
 var rxTime = new RegExp("[0-2][0-9]:[0-5][0-9]");
 var mTime = rxTime.exec(textboxTime.value);
 if (!mTime) // no time added, use default
  textboxTime.value = '12:00';

 var textboxDate = document.getElementById('checkDate');
 if (textboxDate == 'ddmmyyyy') {
  alert("Upišite datum provjere u zadani okvir."); // type check date in the appropriate textbox
  return;
 }
 var rxDate = new RegExp("[0-3][0-9][0-1][0-9]20[0-9][0-9]");
 var mDate = rxDate.exec(textboxDate.value);
 if (!mDate) { // date not inserted correctly
  alert('Neispravan datum.'); // incorrect date
  return;
 }
 
 if (id == "-1") { // checking user from user page - add span
  var link = document.getElementById('checkDateLink');
  var span = document.createElement('span');
  span.id = 'votelink-1';
  span.innerHTML = '<font color="orange">provjeravam...</font>'; // checking...
  link.parentNode.insertBefore(span, link);
  link.parentNode.removeChild(link);
 }
 else { // get ready-made span
  var span = document.getElementById('votelink' + id);
  span.innerHTML = ' (<font color="orange">provjeravam...</font>) '; // checking...
 }
 
 myCheckDate.setFullYear(textboxDate.value.substr(4, 4), eval(textboxDate.value.substr(2, 2)) - 1, textboxDate.value.substr(0, 2)); // year, month, day
 myCheckDate.setHours(textboxTime.value.substr(0, 2), textboxTime.value.substr(3, 2));

 checkUserSeniority(userName, id);
}

function addVoteRightsLinks(type) {
 var textbox1 = document.createElement('input');
 textbox1.size = "10";
 textbox1.id = 'checkDate';
 textbox1.value = 'ddmmyyyy';
 var toolLink = document.getElementById('t-showvoterights');
 toolLink.parentNode.insertBefore(textbox1, toolLink);
 var textbox2 = document.createElement('input');
 textbox2.id = 'checkTime';
 textbox2.size = "10";
 textbox2.value = 'hh:mm';
 toolLink.parentNode.insertBefore(textbox2, toolLink);
 
 if (type == 1) { // one-user check
  var link = document.createElement('a');
  link.id = 'checkDateLink';
  link.appendChild(document.createTextNode('test'));
  link.href = 'javascript:checkUserVoteRight()';
  toolLink.innerHTML = "";
  toolLink.appendChild(link);
 }
 else { // page check
 
  toolLink.parentNode.removeChild(toolLink);

  var links = document.getElementById('bodyContent').getElementsByTagName('a');

  if (!links || !links[0]) return; // no links in page
 
  for (var i = 0; i < links.length; i++) {
   if (links[i].title.indexOf('Korisnik:') == -1 || links[i].title.indexOf('Korisnik') == 0) continue;
 
   var span = document.createElement('span');
   span.id = 'votelink' + i;
   span.innerHTML = ' (';
   var a = document.createElement('a');
   a.appendChild(document.createTextNode('±'));
   var userName = links[i].title.substring(6);
   if (userName.indexOf(' (Stranica ne postoji)') != -1)
    userName = userName.substring(0, userName.indexOf(' (Stranica ne postoji)'));
   a.href = 'javascript:checkVoteRights("' + userName + '", ' + i + ')';
   a.title = 'provjeri glasanje ovog korisnika'; // check this user's voting rights
   span.appendChild(a);
   span.innerHTML += ') ';
   links[i].parentNode.insertBefore(span, links[i]);
   i++; // because we just added a new link
  }
 }
}

function checkUserVoteRight() {
 var textbox = document.getElementById('checkDate');
 if (textbox == 'ddmmyyyy') {
  alert("Unesi datum na koji se provjerava u predviđeno mjesto."); // type check date in the appropriate textbox
  return;
 }
 
 var title = mw.config.get('wgTitle');
 var username = (title.indexOf('/') == -1) ? title : title.substr(0, title.indexOf('/'));
 checkVoteRights(username, '-1');
}

function initCheckVoteRights() {
 var namespaceNumber = mw.config.get('wgNamespaceNumber')
 if (namespaceNumber % 2 == 1 || namespaceNumber == 4)
  mw.util.addPortletLink('p-tb', "javascript:addVoteRightsLinks(0)", 'provjera glasanja', 't-showvoterights', 'Provjera prava glasanja korisnika na ovoj stranici', "", 't-specialpages');
 if (namespaceNumber == 2)
  mw.util.addPortletLink('p-tb', "javascript:addVoteRightsLinks(1)", 'provjeri pravo glasanja', 't-showvoterights', 'provjeri pravo glasanja', "", 't-specialpages');
}

$( initCheckVoteRights );