Source for "Webwereld Killfile 0.1.6"

By pkoopmanpk
Has 3 other scripts.


// ==UserScript==
// @name           Webwereld Killfile 0.1.6
// @namespace      WebwereldKillfile
// @description    Webwereld met ingeklapte en gemarkeerde reacties van opgegeven personen
// @include        http://www.webwereld.nl/comments/*
// @include        http://webwereld.nl/comments/*
// ==/UserScript==

/* ================================================================================

Changelog:

0.1 (NB)
+ Eerste release

0.1.5 (NB)
+ verbeterde snelheid

0.1.5 (27-5-2008) Fix
+ Fout in de style opgelost, waardoor geblockte mensen geen rode balk kregen in FF3

0.1.6 (9-6-2008)
+ Er wordt eerst gepositioneerd op een anker. Daarna werden de ongewenste reacties
  dicht geklapt. Hierdoor kan de gefocusde reactie volledig verloren gaan. Daarom
  zet ik nog een keer de focus aan het einde van het script
================================================================================ */

addEventListener('load', function(event) {

  // ============================================================
  // Gebruikte variabelen
  // ============================================================
  var css = getObjectCss();
  
  var nodes = document.getElementById('comments').getElementsByTagName('span');

  var colorSet = new Array;
  var peildatum = '';
  var cd = '';

  // ============================================================
  // Variabelen die aanpasbaar zijn
  // ============================================================
  // Zet op false om de blocklist uit te schakelen
  var gebruikBlocklist = true;
  
  // Zet op false om de kleurtjes uit te schakelen
  var gebruikKleuren = true;
  
  // Hier users toevoegen (Gescheiden door een komma. Vergeet de spatie achter de naam niet)
  var users = ['SED. ', 'baseline '];

  // ============================================================
  // MAINLINE
  // ============================================================
  // Creer de style 
  if ( gebruikBlocklist ) {
    addCssRule(css, "#comments li cite .killfiled", "background-color:#F9D0D0; background-image: url(/images/layout/thumb_down.gif); background-repeat: no-repeat; background-position: left; padding-left: 20px;");
  }

  // Creer de kleurensets
  if ( gebruikKleuren ) {
    fillColorArray();
  }
  
  // Doorloop de nodes
  for ( i = 0; i < nodes.length; i++ ) {

    // Author blocklijst
    if ( gebruikBlocklist && nodes[i].className == 'author' ) {
      for ( j = 0; j < users.length; j++ ) {
        if ( nodes[i].innerHTML == users[j] ) {
          nodes[i].className = 'killfiled';
          nodes[i].parentNode.parentNode.style.backgroundColor = '#E9E0E0';
          hideComment(nodes[i].parentNode.parentNode.parentNode.parentNode.id);
          break;
        }
      }
    }

    // Recente datums een kleurtje geven
    if ( gebruikKleuren && nodes[i].className == 'date' ) {
      // dd-mm-yyyy hh:mm
      cd = nodes[i].innerHTML;
      cd = cd.substring(6, 10) + cd.substring(3, 5) + cd.substring(0, 2) + cd.substring(11, 13) + cd.substring(14, 16);
      if (cd > peilDatum ) {
        for ( j = 0; j < colorSet.length; j++ ) {
          if ( cd > colorSet[j][0] ) {
            addColor( nodes[i], colorSet[j][1], colorSet[j][2]);
            break;
          }
        }
      }
    }
  }
  
  // Plaats focus op de juiste positie
  moveWindow ();
    
  // ============================================================
  // FUNCTIES
  // ============================================================
  // Haal css referentie
  // ============================================================
  function getObjectCss() {
    var css = null;
    try {
      css = document.styleSheets[0];
      if (!css) {
        var head = document.getElementsByTagName("head").item(0);
        head.appendChild(document.createElement("style"));
        css = document.styleSheets[0];
      }
    } 
    catch (ex) {
      css = document.createStyleSheet("styles.css");
    }
    return css;
  }

  // ============================================================
  // Zet css tag
  // ============================================================
  function addCssRule(css, selector, rule) {
    if (css.insertRule) { // ff
      css.insertRule(""+selector+" { "+rule+" }", css.cssRules.length);
    } 
    else if(css.addRule) { // ie
      css.addRule(selector, rule);
    }
  }

  // ============================================================
  // Vul de array met kleurtags voor datering van berichten
  // ============================================================
  function fillColorArray() {
    var localTime = new Date().getTime();
    var minuten = 0;
    var uren = 1;
    var index = 0;
  
    // Eerste uur gradaties van rood
    var r = 255; var g = 192; var b = 192;
    
    for (i = 0; i < 12; i++) {
      localTime -= 300000; // 5 minuten
      minuten += 5;
      
      colorSet[index] = [createStringFromTime(localTime), 
                         r + ', ' + g + ', ' + b,
                         minuten.toString() + 'm'];
      index += 1;
      
      if (g > 0) {
        g -= 24;
        b -= 24;
      }
      else {
        r -= 24;
      }
    }
    
    // Daarna een gradatie van geel via groen naar blauw
    r = 255; g = 255; b = 0;
    
    for (i = 0; i < 11; i++) {
      localTime -= 3600000; // 1 uur
      uren += 1;
      
      colorSet[index] = [createStringFromTime(localTime), 
                         r + ', ' + g + ', ' + b,
                         uren.toString() + 'u'];
      index += 1;
      r -= 15; g -= 5; b += 5;
    }
    for (i = 0; i < 11; i++) {
      localTime -= 3600000; // 1 uur
      uren += 1;
      
      colorSet[index] = [createStringFromTime(localTime), 
                         r + ', ' + g + ', ' + b,
                         uren.toString() + 'u'];
      index += 1;
      r -= 12; g -= 10; b += 15;
    }
    
    peilDatum = createStringFromTime(localTime);
  }
  
  // ======================================================================
  // Maak een string van een time 
  // ======================================================================
  function createStringFromTime(lt) {
    var ld = new Date;
    var cr = '';
    var h  = 0;

    ld.setTime(lt);

    // Year
    cr = ld.getFullYear().toString();

    // Month
    h = ld.getMonth() + 1;
    if ( h < 10 ) cr += '0';
    cr += h.toString();

    // Day
    h = ld.getDate();
    if ( h < 10 ) cr += '0';
    cr += h.toString();
  
    // Hours
    h = ld.getHours();
    if ( h < 10 ) cr += '0';
    cr += h.toString();

    // Minutes
    h = ld.getMinutes();
    if ( h < 10 ) cr += '0';
    cr += h.toString();

    return (cr);
  }
  
  // ======================================================================
  // verberg een commentaar
  // ======================================================================
  function hideComment(commentId) {
    if ( document.getElementById(commentId + '_container').className != 'disabled' ) {
      document.getElementById(commentId + '_container').className = 'disabled';
      document.getElementById(commentId + '_showhide').innerHTML = 'Toon reactie';
      document.getElementById(commentId + '_collapser').src = '/images/layout/plus.gif';
    }
  }

  // ======================================================================
  // Zet een gekleurde dateringstag
  // ======================================================================
  function addColor(object, color, tag) {
    object.innerHTML = '<span style="font-size:xx-small;border:thin solid gray;background:rgb(' + color + ');">&nbsp;&nbsp;&nbsp;&nbsp;</span> '+object.innerHTML.substring(11) + ' <span style="font-size:xx-small;">-' + tag + '</span>';
  }

  // ======================================================================
  // Herpositioneer
  // ======================================================================
  function moveWindow () {
    var anchor = location.hash
    if ( anchor != '' ) {
      window.location.hash = anchor;
    }  
  }

}, false);