Gmail Unread Labels

By Tomas Skäre Last update Jul 6, 2009 — Installed 1,389 times. Daily Installs: 0, 1, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 0, 0, 1, 4, 2, 0, 0, 1, 1, 3, 3, 0, 0, 0, 0, 1, 1

There are 4 previous versions of this script.

// ==UserScript==
// @name           Gmail Unread Labels
// @namespace      http://userscripts.org/scripts/show/24297
// @description    Only show unread labels in Gmail
// @version        1.4
//
// @include        http://gmail.google.com/*
// @include        https://gmail.google.com/*
// @include        http://mail.google.com/*
// @include        https://mail.google.com/*

// ==/UserScript==

if(document.location != top.location) return;

var labelsShowAll = 0;

(function ()
{
  var interval = window.setInterval(tryToHideLabels, 3000);
  var showAllObj;



  function tryToHideLabels()
  {
    if (document.getElementById("canvas_frame") && frames[3].document) {
	hideLabels(frames[3].document);
    }
  }

  function labelsToggleAll()
  {
    labelsShowAll = !labelsShowAll;
    hideLabels(frames[3].document);
    if(labelsShowAll) {
	showAllObj.innerHTML = '<div id="labelsToggleAll" class="pU">Show unread</div>';
    } else {
	showAllObj.innerHTML = '<div id="labelsToggleAll" class="pU">Show all</div>';
    }
  }

  function addExpander(parentItem)
  {
    var toggleXpath = "//div[@id = 'labelsToggleAll']";
    var toggle = parentItem.evaluate(toggleXpath, parentItem, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

    if(toggle)
	return;

    var labelsTableXpath = "//table[@class = 'cf nX']";
    var labels = parentItem.evaluate(labelsTableXpath, parentItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(1);

    if(!labels || !labels.parentNode)
	return;

    var editLabel = labels.parentNode;

    showAllObj = parentItem.createElement("span");
    showAllObj.innerHTML = '<div id="labelsToggleAll" class="pU">Show all</div>';
    showAllObj.addEventListener('click', labelsToggleAll, true);
    editLabel.parentNode.insertBefore(showAllObj, null);
  }

  function hideLabels(parentItem)
  {
    var labelsTableXpath = "//table[@class = 'cf nX']";
    var labels = parentItem.evaluate(labelsTableXpath, parentItem, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(1);

    if(!labels || !labels.rows.length)
      return;

    window.clearInterval(interval);
    labels.addEventListener("DOMNodeInserted",tryToHideLabels, false)

    for(var i = 0; i < labels.rows.length; i++) {
      var labelRow = labels.rows[i];
      var div = labelRow.cells[1].firstChild.firstChild;
      // fix for folders4gmail
      if(div.nextSibling)
	  div = div.nextSibling;
      var labelText = div.firstChild.firstChild.textContent;

      if(labelsShowAll || labelText.match(/ \([1-9][0-9]*\)$/)) {
        labelRow.style.display = "table-row";
      } else {
        labelRow.style.display = "none";
	}
    }

    addExpander(parentItem);
  }

})();