By Rohit Kumbhar
Has no other scripts.
// ==UserScript==
// @name TopLabels
// @namespace GMAIL.Labels
// @description Draws the labels on top of the active window so that you dont have to scroll down
// @include https://mail.google.com/mail/*
// @include http://mail.google.com/*
// @include https://mail.google.com/a/*
// @include http://mail.google.com/a/*
// ==/UserScript==
var GM_JQ = document.createElement('script');
// Ugly hack. Please don't laugh at me.
var toggleFuncStr = "function toggleLabels(show) {";
toggleFuncStr += "if(document.getElementById('gmail.lazy.labels').style.display == 'none'){";
toggleFuncStr += "document.getElementById('gmail.lazy.labels').style.display = '';} else {";
toggleFuncStr += "document.getElementById('gmail.lazy.labels').style.display = 'none';}";
toggleFuncStr += "}";
GM_JQ.innerHTML = toggleFuncStr;
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
window.addEventListener('load', function() {
if (unsafeWindow.gmonkey) {
unsafeWindow.gmonkey.load('1.0', function(gmail) {
function drawLabels(){
var lblLinkStr = '';
var allnodes = gmail.getNavPaneElement().childNodes[0].childNodes;
var labelsDiv = allnodes[6];
var t = innerText(labelsDiv.innerHTML);
t = t.replace(/ /,"");
t = t.replace(/Labels/ig,"");
t = t.replace(/\u25BC/ig,",");
// At this point, t is holding a comma seperated list of labels
var lblArr = t.split(',');
var lblLinkStr = "";
for(i = 0; i < (lblArr.length - 1); i++){
lblLinkStr = lblLinkStr + " | ";
lblLinkStr = lblLinkStr + getLblLink(lblArr[i],i);
}
var doka = gmail.getActiveViewElement();
var fc = doka.firstChild;
var selfId = fc.getAttribute("id");
var labelTabs = document.createElement("div");
var container = document.createElement("div");
var showHide = document.createElement("div");
showHide.innerHTML = "<a href=# style='font-family:verdana; font-color:#000055; font-size:small; text-decoration:none;' show=true onClick=' toggleLabels(this.show); this.show=!(this.show);'>Show/Hide Labels</a>";
labelTabs.innerHTML = lblLinkStr;
labelTabs.setAttribute("id","gmail.lazy.labels");
container.setAttribute("id","gmail.lazy.labels.container");
container.appendChild(showHide);
container.appendChild(labelTabs);
if(selfId == "gmail.lazy.labels.container"){
doka.removeChild(doka.firstChild);
}
doka.insertBefore(container,doka.firstChild);
}
gmail.registerViewChangeCallback(drawLabels);
drawLabels();
});
}
}, true);
function getLblLink(lbl,i){
var style = " style='font-family:verdana; font-color:#000055; font-size:small; text-decoration:none;";
if(hasUnreadEmails(lbl)){
style = style + " background-color:#FFE5B4;";
}
style = style + "' ";
var str = "<a href=#"+i + style +" id='"+ formatLabel(lbl) +"' onClick='document.getElementById(\"1fbj\").value=\"label:\"+this.id; document.getElementById(\"1fbi\").click()' >";
str = str + lbl + "</a>";
return str;
}
var regExp = /<\/?[^>]+>/gi;
function innerText(xStr){
xStr = xStr.replace(regExp,"");
return xStr;
}
function trim(str){
return str.replace(/^\s+|\s+$/g,"");
}
function formatLabel(lbl){
lbl = lbl.toLowerCase();
lbl = lbl.replace(/\(\d*\)$/g,'');
lbl = trim(lbl);
lbl = lbl.replace(/\s+/g,'-');
lbl = lbl.replace(/\//g,'-');
lbl = lbl.replace(/&/g,'-');
return lbl;
}
function hasUnreadEmails(lbl){
var x = lbl.replace(/\(\d*\)$/g,'');
return (x != lbl);
}