All pastes #1854104 Raw Edit

Mine

public text v1 · immutable
#1854104 ·published 2010-03-27 19:51 UTC
rendered paste body
// ==UserScript==
// @include http://forums.somethingawful.com/*
// ==/UserScript==

// by moho

(function(){

var saName = "ColdPie";
var colorForumView = true;



var quoteRegExp = new RegExp("^"+saName+" posted:$");

var sl = new StreamLoader(fix,1000);
sl.start();

addStyleSheet("\
.cloneop tr.altcolor2 td { background-color: #F1DEF8 !important; }\
.cloneop tr.altcolor1 td { background-color: #F1DEF8 !important; }\
.cloneop tr.seen2 td { background-color: #F1DEF8 !important; }\
.cloneop tr.seen1 td { background-color: #F1DEF8 !important; }\
.cloneop dt.author { color: #620EAD; }\
.cloneop .clonespan { content:'Thread Author'; display: block; font-size: 60%; color: #620EAD; font-weight: bold; }\
\
.clonequoter.clonequoter tr.altcolor2 td { background-color: #e3cebd !important; }\
.clonequoter.clonequoter tr.altcolor1 td { background-color: #f3decd !important; }\
.clonequoter.clonequoter tr.seen2 td { background-color: #e3cebd !important; }\
.clonequoter.clonequoter tr.seen1 td { background-color: #f3decd !important; }\
\
.cloneme.cloneme.cloneme tr.altcolor2 td { background-color: #c5e3bd !important; }\
.cloneme.cloneme.cloneme tr.altcolor1 td { background-color: #d4f3cd !important; }\
.cloneme.cloneme.cloneme tr.seen2 td { background-color: #c5e3bd !important; }\
.cloneme.cloneme.cloneme tr.seen1 td { background-color: #d4f3cd !important; }\
\
tr.new_posts > td { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADACAYAAADFoQmYAAAALklEQVQoU2OqW/g0k4mBgYGRMMFEWIyJMItiCWLV4WQR6xkiCAZU1igxStCXAAD27gREAbZstgAAAABJRU5ErkJggg==') !important; background-position: top left; background-repeat: repeat-x; }\
tr.no_new_posts > td { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADACAYAAADFoQmYAAAALklEQVQ4y2PYv39/JhMDAwMjYYKJsBgTYRbFEqQbgN+l+MXwEwyorFFilKAvAQDFMgR7ua/RWgAAAABJRU5ErkJggg==') !important; background-position: top left; background-repeat: repeat-x; }\
\
");

function fix () {
  var view = window.cloneview
  if (!view) {
    var locm = window.location.href.match(/showthread.php|forumdisplay.php/);
    if (!locm) { sl.stop(); return; }
    else {
      view = window.cloneview = locm[0];
    }
  }

  if (view == "showthread.php") {
    fixThread();
  }
  else if ((view == "forumdisplay.php") && (colorForumView)) {
    fixForum();
  }
}

function fixForum () {
  var postxp = xpathFind("//tr[@class='thread']");
  for (var i = 0; i < postxp.snapshotLength; i++) {
    var tr = postxp.snapshotItem(i);
    if (tr.doneclone) { continue; }
    if (!hasFollowers(tr)) { break; }

    var xp = xpathFindContext(tr,".//div[@class='lastseen']");
    if (xp.snapshotLength) {
      if (xpathFindContext(tr,".//a[@class='count']").snapshotLength) {
        tr.className += " new_posts";
      }
      else {
        tr.className += " no_new_posts";
      }
    }

    tr.doneclone = true;
    // post loop end
  }
}


function fixThread () {
  var postxp = xpathFind("//table[@class='post']");
  for (var i = 0; i < postxp.snapshotLength; i++) {
    var pt = postxp.snapshotItem(i);
    if (pt.doneclone) { continue; }
    if (!hasFollowers(pt)) { break; }

    var xp = xpathFindContext(pt,".//dt[contains(@class,' op')]");
    if (xp.snapshotLength) {
      var dt = xp.snapshotItem(0);
      var span = document.createElement("SPAN");
      span.className = "clonespan";
      dt.appendChild(span);

      pt.className += " cloneop";
    }

    var xp = xpathFindContext(pt,".//dt[contains(@class,'author')]");
    if (xp.snapshotLength) {
      var dt = xp.snapshotItem(0);
      if (dt.firstChild.data == saName) {
        pt.className += " cloneme";
      }
    }

    var qbs = xpathFindContext(pt,".//div[@class='bbc-block']/h4/text()");
    for (var j = 0; j < qbs.snapshotLength; j++) {
      var text = qbs.snapshotItem(j).data;
      if (text.match(quoteRegExp)) {
        pt.className += " clonequoter";
        break;
      }
    }

    pt.doneclone = true;
    // post loop end
  }
}

function hasFollowers (node) { var o = xpathFindContextSingle(node,"following::*").singleNodeValue; if (o) { return true; } return false; }
function xpathFind (query) { return document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); }
function xpathFindContext (context, query) { return document.evaluate(query, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); }
function xpathFindContextSingle (context, query) { return document.evaluate(query, context, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null); }
function addStyleSheet (stylestring) {
  try {
    var ss = document.createElement("style");
    ss.type = "text/css";
    ss.appendChild(document.createTextNode(stylestring));
    document.getElementsByTagName("head")[0].appendChild(ss);
  }
  catch (e) { return false; }
  return ss;
}
function StreamLoader (func, delay) {
  var self = this;
  var timer = null;
  var timerStop = false;
  this.runs = 0;
  this.stub = function (onload, e) {
    if (timerStop) { return; }
    self.runs++;
    if (onload) { self.stop(); func(true); }
    else {
      func(false);
      if (!timerStop) { timer = setTimeout(function () { self.stub(false); }, delay); }
    }
  }
  this.start = function () {
    window.addEventListener('DOMContentLoaded',function(e){ self.stub(true,e); }, false);
    self.stub(false);
  }
  this.stop = function () { timerStop = true; clearTimeout(timer); }
  this.doLast = function () { self.stub(true,{}); }
}

})();