I ran across a script on UserScripts.org called Google topbar. It doesn’t appear to be maintained any longer and doesn’t worked in FireFox 13 (not sure if it didn't work before, but that is what I tested on). So I decided that I would use it as a base for an updated script to make it display the links I most commonly use.
// ==UserScript== // @name Google Top Bar Rearrange // @namespace com.blogspot.intellectualponderings.GoogleToolBarRearrange // @description Custom Google Links and Order, based on http://userscripts.org/scripts/show/18128 // @include http://*.google.*/* // @include https://*.google.*/* // ==/UserScript== (function(undefined) { var shared = { more: ['Maps', 'Images', 'Play', 'YouTube', 'News', 'Shopping'], top: ['Blogger', 'Calendar', 'Reader'], topBarList: "//ol[@class='gbtc']", topBarNode: "//li[@class='gbt'][a[span[text()='{{0}}']]]", moreList: "//ol[@id='gbmm']", moreNode: "//li[@class='gbmtc'][a[text()='{{0}}']|text()='{{0}}']", nodeLink: "//a" }; var node = function(path, text, context) { path = (text) ? path.replace(/\{\{0\}\}/g, text) : path; context = context || document; return document.evaluate(path, context, null, XPathResult.ANY_TYPE,null).iterateNext(); }, toMoreMenu = function(text) { var tag = node(shared.topBarNode, text); if (tag) { var more = node(shared.moreList); if (more) { more.appendChild(tag); tag.className = 'gbmtc'; } } }, toTopMenu = function(text) { var more = node(shared.moreList), tag = node(shared.moreNode, text, more), alink, moreli; if (tag) { var topBar = node(shared.topBarList); if (topBar) { moreli = topBar.lastChild; topBar.appendChild(tag); tag.className = "gbt"; alink = node(shared.nodeLink); alink.className = "gbzt"; if (moreli) { topBar.removeChild(moreli); topBar.appendChild(moreli); } } } }; if (window.top == window.self) { var i; for (i = 0; i < shared.more.length; i++) { toMoreMenu(shared.more[i]); } for (i = 0; i < shared.top.length; i++) { toTopMenu(shared.top[i]); } } })();
And then I decided to change it so that it would use jQuery and be a bit more complete. In fact, I didn't keep much.
// ==UserScript== // @name Google Top Bar Rearrange // @namespace com.blogspot.intellectualponderings.GoogleToolBarRearrange // @description Custom Google Links and Order, based on http://userscripts.org/scripts/show/18128 // @include http://*.google.*/* // @include https://*.google.*/* // @grant GM_getValue // @grant GM_setValue // @require https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js // ==/UserScript== (function(undefined) { var context = $("#gbz ol.gbtc"), more = ['Maps', 'Images', 'Play', 'YouTube', 'News', 'Shopping'], top = ['Blogger', 'Calendar', 'Reader']; var addItem = function(url, text) { var item = $("<li />").addClass("gbt").append( $("<a />").attr("href", url).addClass("gbzt").attr("target", "_blank").append( $("<span/>").addClass("gbtb2") ).append( $("<span />").addClass("gbts").html(text) ) ); $(context).find("li.gbt:last-child").before(item); }, removeItem = function(text) { var link = $(context).find("li.gbt span:contains('" + text + "')").parent(), href = link.attr("href"); link.remove(); return href; }, moveItemToMore = function(text) { if ($(context).find("ol.gbmcc li.gbmtc a:contains('" + text + "')").size() == 0) { var url = removeItem(text); addMoreItem(url, text); } }, addMoreItem = function(url, text) { var item = $("<li />").addClass("gbmtc").append( $("<a />").attr("href", url).addClass("gbmt").attr("target", "_blank").html(text)); $(context).find("ol.gbmcc li.gbmtc:last-child").prev().before(item); }, removeMoreItem = function(text) { var link = $(context).find("ol.gbmcc li.gbmtc a:contains('" + text + "')"), href = link.attr("href"); link.remove(); return href; }, moveItemToTop = function(text) { if ($(context).find("a span.gbts:contains('" + text + "')").size() == 0) { var url = removeMoreItem(text); addItem(url, text); } }; if (window.top == window.self) { var i; for (i = 0; i < more.length; i++) { moveItemToMore(more[i]); } for (i = 0; i < top.length; i++) { moveItemToTop(top[i]); } } })();
I am much happier with this one. Using the DOM XML functions seems so pre-jQuery.
UPDATE 2012-08-29: GreaseMonkey updated and made Google Reader not display feed items. I added some @grant lines in the header and everything works again. My discussion on Google Groups is located here.
// @grant GM_getValue // @grant GM_setValue
No comments:
Post a Comment