Utilisateur:Zelda/counter.js

Un article de Wikipédia, l'encyclopédie libre.

Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.

/**
 * Display a counter of how many times the page has been consulted.
 * The counter is displayes in the upper right corner of the page.
 * It requires Firefox 2.0 (uses client side persistent storage),
 * and will NOT work under other non-gecko browsers (IE, OPERA, ...)
 * author : Zelda for fr.wikipedia.org
 */
 
// counter label (internationnalizable and personnalizable variable)
var pgCounterLabel = "<small>page consultée <b>$count</b> fois  [<a href=\"javascript:resetPageCounter()\">RAZ</a>]</small>";
 
// prefix for counter storage (shorter is better)
var pgCounterPrefix = "counter."
 
/**
 * Increments and displays page counter
 */
function pageCounter() {
  if (typeof globalStorage == "undefined") {
    alert("This page counter uses persistent storage features and requires Mozilla Firefox 2.0");
    return;
  }
  // Counter only available in main namespace to spare storage
  if (wgNamespaceNumber != 0)
    return;
  if (wgAction != "view")
    return;
  // Retrieve and increment counter
  var count = getPageCounter() + 1;
  setPageCounter(count);
  displayPageCounter(count);
}
 
/**
 * Return page counter global storage
 */
function getPageCounterStorage() {
  return globalStorage[location.hostname];
}
 
/**
 * Return page counter as an integer
 */
function getPageCounter() {
  var count = getPageCounterStorage().getItem(pgCounterPrefix + wgArticleId);
  if (! count) return 0;
  return parseInt(count);
}
 
/**
 * Page counter setter
 */
function setPageCounter(count) {
  getPageCounterStorage().setItem(pgCounterPrefix + wgArticleId, count);
}
 
/**
 * Reset counter for ALL pages
 */
function resetPageCounter() {
  var storage = getPageCounterStorage();
  for (var i = 0; i < storage.length; i++) {
    var key = storage.key(i);
    if (key.substr(0, pgCounterPrefix.length) == pgCounterPrefix) {
      storage.removeItem(key);
    }
  }
  // updating counter
  var counter = document.getElementById("page-counter");
  if (counter) {
    counter.innerHTML = pgCounterLabel.replace(/\$count/, getPageCounter());
  }
}
 
/**
 * Display page counter
 */
function displayPageCounter(count) {
  var counterDiv = document.createElement("div");
  counterDiv.innerHTML = pgCounterLabel.replace(/\$count/, count);
  counterDiv.style.textAlign="right";
  counterDiv.id = "page-counter";
  var contentNode = document.getElementById("content");
  contentNode.insertBefore(counterDiv, contentNode.firstChild);
}
 
addLoadEvent(pageCounter);