Google Reader Minimalistic ++

By jtanner28 Last update Aug 27, 2008 — Installed 1,384 times.

There are 1 previous version of this script.

// ==UserScript==
// @author              Jack R. Tanner
// @name                Google Reader Minimalistic ++
// @namespace       http://userscripts.org/users/58648
// @description      Original scripts by Scott Cowan, Thin Light, Jordi De Groof, and Dossy. Integrates multiple scripts plus additional functionality. Press "W" to toggle the header and "X" to toggle the Share panel.
// @include             http://google.com/reader/*
// @include             http://*.google.com/reader/*
// @include             https://google.com/reader/*
// @include             https://*.google.com/reader/*
// @include             http://www.google.tld/reader/*
// @include             https://www.google.tld/reader/*
// ==/UserScript==

var selectorsBox = null;
var selectorsToggler = null;
var imgExternal= "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC";
var entries=document.getElementById("entries");

(function() {

 var ids = ["add-box","search","logo-container","global-info","gbar"];

 function toggle_gr ()
 {
   var length = ids.length;
   var is_visible = document.getElementById(ids[0]).style.display != "none";

   for (var i=0; i<length; i++){
     if(document.getElementById(ids[i]) != null)
		document.getElementById(ids[i]).style.display = is_visible?"none":"block";
   }
   GM_addStyle(".gbh { display:none !important; }");  //Hide dividing line
   GM_addStyle("#viewer-box { padding:0pt; }"); //Hide blue border around news
   if(is_visible){
	var logo = document.getElementById('main');
	logo.style.marginTop = '0';

	var logo = document.getElementById('chrome');
	logo.style.paddingTop = '0';
   }
   else {
	var logo = document.getElementById('main');
	logo.style.marginTop = '0.3em';
	
	var logo = document.getElementById('chrome');
	logo.style.paddingTop = '0.3em';
   }
//   unsafeWindow.AK();
 }

 function GRT_key(event) {
   element = event.target;
   elementName = element.nodeName.toLowerCase();
   if (elementName == "input") {
     typing = (element.type == "text" || element.type == "password");
   } else {
     typing = (elementName == "textarea");
   }
   if (typing) return true;
   if (String.fromCharCode(event.which)=="W" && !event.ctrlKey && !event.altKey && !event.metaKey) {
     toggle_gr();
     try {
       event.preventDefault();
     } catch (e) {
     }
     return false;
   }
   if (String.fromCharCode(event.which)=="X" && !event.ctrlKey) {
     toggleSelectors();
     try {
       event.preventDefault();
     } catch (e) {
     }
     return false;
   }
   return true;
 }

 function toggleSelectors() {
	if (!selectorsBox || !selectorsToggler) {
		return;
	}
	
	if (selectorsBox.style.display == 'none') {
		selectorsToggler.className = '';
		selectorsBox.style.display = '';
	} else {
		selectorsToggler.className = 'down';
		selectorsBox.style.display = 'none';
	}
	if (typeof(unsafeWindow.gG) == 'function') {
		unsafeWindow.gG();
	}
}

function onSidebarToggle() {
	if (document.body.className.indexOf('hide-nav') == -1) {
		// sidebar is to be hidden and the mini toggle icon is to be shown (google's handler gets called afterwards)
		selectorsToggler.style.display = 'none';
	} else {
		selectorsToggler.style.display = 'block';
	}
}

window.addEventListener('load', function(e) {
	// add CSS styles for the toggler
	var style = '#selectors-toggler {display:block;height:7px;background:#FFFFFF url(http://i25.tinypic.com/300cs5d.jpg) no-repeat center center;}'
		+ '#selectors-toggler:hover {background-color:#F3F3F3;}'
		+ '#selectors-toggler.down {height:10px;background:#FFFFFF url(http://i32.tinypic.com/x5r143.jpg) no-repeat center center;}'
		+ '#selectors-toggler.down:hover {background-color:#F3F3F3;}';
	GM_addStyle(style);
	
	// create and insert the selectors toggler
	var navBar = document.getElementById('nav');
	selectorsBox = document.getElementById('selectors-box');
	selectorsToggler = document.createElement('a');
	selectorsToggler.id = 'selectors-toggler';
	selectorsToggler.href = 'javascript:void(0);';
	selectorsToggler.className = 'down';
	navBar.insertBefore(selectorsToggler, document.getElementById('add-box'));
	selectorsBox.style.display = 'none';
	selectorsToggler.addEventListener('click', toggleSelectors, true);
	
	// do something when the navigation sidebar toggler is clicked.
	document.getElementById('nav-toggler').addEventListener('click', onSidebarToggle, true);
}, false);

function nodeInserted(event){	
	if (event.target.tagName=="DIV"){
			if (event.target.className === "entry-actions"){
				// List mode
				var linkbar=event.target;
			} else if (event.target.firstChild && event.target.firstChild.className=="card"){
				// Expanded mode
				var linkbar=event.target.firstChild.firstChild.childNodes[2].childNodes[1].firstChild;
			} else
				return;
			
			var parent= linkbar;
			while (parent.tagName != "TBODY") {
				parent= parent.parentNode;
			}
			
			var link = parent.getElementsByClassName("entry-title-link")[0].getAttribute('href');
			var site = parent.getElementsByClassName("entry-source-title-parent")[0].getElementsByTagName("A")[0].firstChild.nodeValue;
			var title = parent.getElementsByClassName("entry-title-link")[0].firstChild.nodeValue;
			
			var span = document.createElement("span");
			span.className = "original-article link";
			var a_link = document.createElement("a");
			a_link.href = link;
			a_link.title = site + ": " + title;
			a_link.setAttribute('style','text-decoration:none;padding-right:10px;margin-right:10px; background: url(' + imgExternal +') center right no-repeat;');
			a_link.appendChild(document.createTextNode("Original Article"));
			span.appendChild(a_link);
			linkbar.appendChild(span);
	}
}
 
var u = document.createElement('table');
  u.setAttribute('id', 'unsubscribe-button');
  u.setAttribute('class', 'button-container unselectable button-container-tight viewer-buttons');
  u.innerHTML += '<tbody><tr><td class="btl"></td><td class="btr"></td></tr><tr><td class="bbl"></td><td class="bbr"><div class="button-body-container"><span class="button-body unselectable">Unsubscribe</span></div></td></tr></tbody>';
  u.addEventListener('click', function(e) {
    var ce = document.getElementById('current-entry');
    if (!ce) ce = document.getElementById('entries').firstChild;
    var cx = ce.getElementsByTagName('A');
    var m = null, f = null, t = null;
    for (var i = 0; i < cx.length; i++) {
      var o = cx[i].wrappedJSObject;
      if (o.getAttribute('class') && o.getAttribute('class').search(/entry-source-title/) >= 0) {
        f = o.getAttribute('href');
        if (m = f.match(/^\/reader\/view\/(feed\/.*)$/)) {
          f = unescape(m[1]);
        }
        t = o.textContent;
        break;
      }
    }
    if (!f) {
      alert('Could not identify feed to unsubscribe from.');
      return;
    }
    window.setTimeout("TB(['" + f + "'], '" + t.replace(/'/g, "\\'")
       + "', null, false)", 10);
  }, true);

  var r = document.getElementById('viewer-refresh');
  r.parentNode.insertBefore(u, r.nextSibling);
 
var accountname = document.getElementById('email-address');
document.title = document.title + " | " + accountname.innerHTML + " | ";

document.addEventListener("keydown", GRT_key, false);
if(entries)
	entries.addEventListener('DOMNodeInserted', function(event){nodeInserted(event);},true);
 toggle_gr();
 toggleSelectors();
 
 })();