LepraNewComments_Updated

By h8every1 Last update Oct 17, 2009 — Installed 304 times.
// ==UserScript==
// @name           LepraNewComments_Updated
// @namespace      leprosorium.ru
// @include        http://*leprosorium.ru/comments/*
// @include        http://*leprosorium.ru/my/inbox/*
// ==/UserScript==

    var navLinkNext;
    var navLinkPrev;
    var pp = document.getElementsByTagName("DIV");
	var newpp = [];
	var currentPost = -1;

	var css = "\
	.lp-nc-block { \
        position: fixed; \
        top: 90px; \
        right: 0px; \
        z-index: 100; \
      } \
      .lp-nc-block input { \
        display: block; \
        width: 28px; \
        height: 28px; \
        color: #000; \
        background-color: #fff; \
        border: 1px solid #000; \
        padding: 0pt; \
        margin: 0pt; \
        margin-bottom: 1px; \
        cursor: pointer; \
        opacity: 0.25; \
      } \
      .lp-nc-block input:hover { \
        opacity: 1; \
      } \
	  ";

var script = "\
      function LP_scrollTo(aThis) { \
        aThis.blur(); \
        var pId = aThis.getAttribute('postid'); \
        var offset = parseInt(aThis.getAttribute('offset')); \
        var p = $(pId); \
        var f = new Fx.Scroll(window, {duration: 'short'}); \
        if(!p || !offset || !f) return; \
        f.start(0, offset); \
        (function(){p.childNodes[1].highlight('#f4fbac');p.childNodes[3].highlight('#f4fbac');}).delay(250); \
      } \
    ";

	  
var ppLength = pp.length;
for(var i = 0; i < ppLength; i++) {
	if(/new/.test(pp[i].className)) {
		newpp.push(pp[i]);
	}
}

if(newpp.length > 0) {
	var style = document.createElement("STYLE");
	style.type = "text/css";
	style.innerHTML = css;
	document.body.appendChild(style);
	var scriptBlock = document.createElement("SCRIPT");
	scriptBlock.type = "text/javascript";
	scriptBlock.innerHTML = script;
	document.body.appendChild(scriptBlock);
	InitializeNavLink();
}

function InitializeNavLink() {
	var navBlock = document.createElement("DIV");
	navBlock.className = "lp-nc-block";
	
    navLinkNext = document.createElement("INPUT");
    navLinkNext.addEventListener("click", function() { navigate(1); }, false);
    navLinkNext.setAttribute("type", "button");
    navLinkNext.setAttribute("value", "↓");
    navLinkNext.setAttribute("postid", newpp[0].id);
    navLinkNext.setAttribute("onclick", "LP_scrollTo(this);");

    navLinkPrev = document.createElement("INPUT");
    navLinkPrev.addEventListener("click", function() { navigate(-1); }, false);
    navLinkPrev.setAttribute("type", "button");
    navLinkPrev.setAttribute("value", "↑");
    navLinkPrev.setAttribute("postid", newpp[0].id);
    navLinkPrev.setAttribute("onclick", "LP_scrollTo(this);");

    navBlock.appendChild(navLinkPrev);
    navBlock.appendChild(navLinkNext);
    document.body.appendChild(navBlock);
}

    function navigate(aDirection) {
      if(aDirection > 0) {
        currentPost++;
        if(currentPost >= newpp.length) {
          currentPost = newpp.length - 1;
        }
      } else {
        currentPost--;
        if(currentPost < 0) {
          currentPost = 0;
        }
      }
      navLinkNext.setAttribute("postid", newpp[currentPost].id);
      navLinkPrev.setAttribute("postid", newpp[currentPost].id);
      setOffset(newpp[currentPost]);
    }

    function setOffset(aElement) {
      var elTop = getOffsetTop(aElement);
      var html = document.documentElement;
      var maxHtmlTop = html.scrollHeight - html.clientHeight;
      var htmlTopOld = html.scrollTop;
      var htmlTopNew;
      if(aElement.offsetHeight > html.clientHeight) {
        htmlTopNew = elTop;
      } else {
        var htmlHalfHeight = Math.round(html.clientHeight / 2);
        htmlTopNew = elTop - htmlHalfHeight + Math.round(aElement.offsetHeight / 2);
      }
      if(htmlTopNew > maxHtmlTop) {
        htmlTopNew = maxHtmlTop;
      }
      navLinkNext.setAttribute("offset", htmlTopNew);
      navLinkPrev.setAttribute("offset", htmlTopNew);
    }

    function getOffsetTop(aElement) {
      var offsetTop = aElement.offsetTop;
      while(aElement.offsetParent && aElement.offsetParent.offsetTop) {
        aElement = aElement.offsetParent;
        offsetTop += aElement.offsetTop;
      }
      return offsetTop;
    }


delete pp;
delete style;