کاربر:ExtraTools/ExtraToolsWithUpdate.js

از ویکی‌پدیا، دانشنامهٔ آزاد.

نکته: پس از ذخیره‌سازی ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را خالی کنید. موزیلا / فایرفاکس / Safari: کلید Shift را نگه‌دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-Shift-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های Cmd-Shift-Rاینترنت اکسپلورر: کلید Ctrl نگه‌دارید و روی دکمهٔ Refresh کلیک‌ کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید؛ Konqueror: روی دکمهٔ Reload کلیک کنید و یا کلید F5 را فشار دهید؛ اُپرا: کاربران اُپرا ممکن است لازم باشد که بطور کامل حافظهٔ نهانی مرورگر را در منوی Tools→Preferences خالی کنند.

/**********************************************************
                 Extra Edit Tools, ver 1.0.1
 ************************************************************/
 
var Version = "1.0.1";
var autoUpdateHours = 24;
var autoUpdateURL = 'http://fa.wikipedia.org/w/index.php?title=User:ExtraTools/Version&action=raw&maxage=0';
var CookieExpireSec = (30 * 24 * 60 * 60); //One month
 
// Check cookie for last update check date
var cookie = GetCookie('ExtraToolsUpdate');
var lastCheck = new Date(cookie);
 
// Set the cookie if not already set
var cookieExpire = new Date();
cookieExpire.setTime(cookieExpire.getTime() + CookieExpireSec * 3600 * 1000);
if (isNaN(lastCheck.valueOf()) == true) {
  SetCookie('ExtraToolsUpdate', 'January 1, 1970', cookieExpire.toUTCString(), '/');
}
 
// Get the hours since last update check
var currentDate = new Date();
var diffHours = ((currentDate - lastCheck) / 1000) / 3600;
if (diffHours > autoUpdateHours) {
  //doAutoUpdate();
  if (typeof(addOnloadHook) == 'function') {
    addOnloadHook(doAutoUpdate);
  }
  else {
    window.onload = doAutoUpdate;
  }
}
 
function doAutoUpdate(){
  /***********************************************
      Acquired from EN WP User:Cacycle/wikEd.js
  ************************************************/
  // Save current update check date to cookie
  SetCookie('ExtraToolsUpdate', currentDate.toUTCString(), cookieExpire.toUTCString(), '/');
 
  // Make the AJAX request
  var ajax = AjaxInitObject();
 
  if (ajax == null) {
    return;
  }
 
/************
  ajax.open('GET', autoUpdateURL, true);
  ajax.send(null);
 
  // AJAX response handler function
  ajax.onreadystatechange = function() {
  if (ajax.readyState != 4) {
    return;
  }
 
  // Get the response
  var html = ajax.responseText;
 
  // Get current version number from string
  var ver = Version.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
  if (ver == null) {
    return;
  }
  var currentVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 100 + Number(ver[3])) * 10;
 
  // Get new version number from string
  var ver = html.match(/(\d+)\.(\d+)\.(\d+)(\w?)/);
  if (ver == null) {
    return;
  }
  var newVersion = ((Number(ver[1]) * 1000 + Number(ver[2])) * 100 + Number(ver[3])) * 10;
 
  // Compare the versions
  if (currentVersion >= newVersion) {
    return;
  }
 
  // Here we are! An update is there...
  // Update by reloading the page with cache bypassing
  // (equivalent to Shift-Reload or Shift-F5 or Ctrl-F5)
  // BUT DOES NOT WORK IN OPERA
  if (window.opera){
    //..??
  } else {
    window.location.reload(true);
  }
*********************/
}
 
function AjaxInitObject() {
  var ajax;
 
  // current browsers
  try {
    ajax = new XMLHttpRequest();
  }
  catch (e) {
    // IE 6
    try {
      ajax = new ActiveXObject('Microsoft.XMLHTTP');
    }
    catch (e) {
      // IE 5.5
      try {
        ajax = new ActiveXObject('Msxml2.XMLHTTP');
      }
      catch (e) { } // No AJAX support
    }
  }
  return(ajax);
}
 
function SetCookie(name, value, expires, path, domain, secure) {
  var cookie = name + '=' + encodeURIComponent(value);
  if (expires != null) {
    // generate a date 1 hour ago to delete the cookie
    if (expires == -1) {
      var cookieExpire = new Date();
      expires = cookieExpire.setTime(cookieExpire.getTime() - 3600 * 1000); //WHY A MINUS?
      expires = cookieExpire.toUTCString();
    }
    cookie += '; expires=' + expires
  }
  if (path != null) {
    cookie += '; path=' + path;
  }
  if (domain != null)  {
    cookie += '; domain=' + domain;
  }
  if (secure != null) {
    cookie += '; secure';
  }
  document.cookie = cookie;
}
 
function GetCookie(name) {
  var cookie = ' ' + document.cookie;
  var search = ' ' + name + '=';
  var setStr = '';
  var offset = 0;
  var end = 0;
  offset = cookie.indexOf(search);
  if (offset != -1) {
    offset += search.length;
    end = cookie.indexOf(';', offset)
    if (end == -1) {
      end = cookie.length;
    }
    setStr = cookie.substring(offset, end);
    setStr = setStr.replace(/\\+/g, ' ');
    setStr = decodeURIComponent(setStr);
  }
  return(setStr);
}