Google Reader - easy keys

By Charlie Wilkins Last update Apr 15, 2009 — Installed 470 times. Daily Installs: 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3

There are 1 previous version of this script.

// ==UserScript==
// @name           Google Reader - easy keys
// @namespace      http://www.charliewilkins.com
// @description    Easy Keys!
// @include        http://www.google.com/reader*
// ==/UserScript==

function keyHandler(event){

	

	GM_log('foo---: '+ event.target.name);
	if (event.target.name != undefined) {
		return;
	}

	
    // I don't know why this comes out as upper 'B' rather than lower 'b'.
    var key = String.fromCharCode(event.which || event.keyCode);
    switch (key) {
        case 'Q': // Open link in new tab.
            next_button = document.getElementById('entries-down');
            next_button_evt = document.createEvent('MouseEvents');
            next_button_evt.initEvent('click', true, true);
            next_button.dispatchEvent(next_button_evt);
            break;
        case 'W': // Open link in new tab.
            next_button = document.getElementById('entries-up');
            next_button_evt = document.createEvent('MouseEvents');
            next_button_evt.initEvent('click', true, true);
            next_button.dispatchEvent(next_button_evt);
            break;
        case 'D': // Open link in new tab.
            all_read_button = document.getElementById('mark-all-as-read');
            all_read_button_evt = document.createEvent('MouseEvents');
            all_read_button_evt.initEvent('click', true, true);
            all_read_button.dispatchEvent(all_read_button_evt);
            break;
        case '3': // Open next feed or first feed;
            // find the currently selected sub
            currentFeed = null;
            selectedElements = document.getElementsByClassName("tree-link-selected");
            if (selectedElements.length < 1) { // no feed selected
                subTree = document.getElementById('sub-tree-container');
                subsLinks = subTree.getElementsByClassName('link');
                for (var i = 0; i < subsLinks.length; i++) {
                    nextFeed = subsLinks[i];
                    feedParent = nextFeed.parentNode;
                    if (feedParent.className.indexOf('sub') > -1 && feedParent.className.indexOf('unread') > -1) {
                    
                        feed_click_evt = document.createEvent('MouseEvents');
                        feed_click_evt.initEvent('click', true, true);
                        nextFeed.dispatchEvent(feed_click_evt);
                        break;
                    }
                }
                break;
            }
            else {
                currentFeed = selectedElements[0];
            }
            subTree = document.getElementById('sub-tree-container');
            subsLinks = subTree.getElementsByClassName('link');
            for (var i = 0; i < subsLinks.length; i++) {
            
                if (currentFeed.id == subsLinks[i].id) {
                    // get the next feed item
                    for (var j = i + 1; j < subsLinks.length; j++) {
                        nextFeed = subsLinks[j];
                        feedParent = nextFeed.parentNode;
                        if (feedParent.className.indexOf('sub') > -1 && feedParent.className.indexOf('unread') > -1) {
                        
                            feed_click_evt = document.createEvent('MouseEvents');
                            feed_click_evt.initEvent('click', true, true);
                            nextFeed.dispatchEvent(feed_click_evt);
                            break;
                        }
                    }
                    
                    
                    
                    break;
                }
            }
            break;
        case '4': // Open previous feed or first feed;
            // find the currently selected sub
            currentFeed = null;
            selectedElements = document.getElementsByClassName("tree-link-selected");
            if (selectedElements.length < 1) { // no feed selected
                subTree = document.getElementById('sub-tree-container');
                subsLinks = subTree.getElementsByClassName('link');
                for (var i = 0; i < subsLinks.length; i++) {
                    nextFeed = subsLinks[i];
                    feedParent = nextFeed.parentNode;
                    if (feedParent.className.indexOf('sub') > -1 && feedParent.className.indexOf('unread') > -1) {
                    
                        feed_click_evt = document.createEvent('MouseEvents');
                        feed_click_evt.initEvent('click', true, true);
                        nextFeed.dispatchEvent(feed_click_evt);
                        break;
                    }
                }
                break;
            }
            else {
                currentFeed = selectedElements[0];
            }
            subTree = document.getElementById('sub-tree-container');
            subsLinks = subTree.getElementsByClassName('link');
            for (var i = 0; i < subsLinks.length; i++) {
            
                if (currentFeed.id == subsLinks[i].id) {
                    // get the next feed item
                    for (var j = (i-1); j > 0; j--) {
                        nextFeed = subsLinks[j];
                        feedParent = nextFeed.parentNode;
                        if (feedParent.className.indexOf('sub') > -1 && feedParent.className.indexOf('unread') > -1) {
                        
                            feed_click_evt = document.createEvent('MouseEvents');
                            feed_click_evt.initEvent('click', true, true);
                            nextFeed.dispatchEvent(feed_click_evt);
                            break;
                        }
                    }
                    
                    
                    
                    break;
                }
            }
            break;
    }
    return false;
}

// main() invocation 
window.addEventListener('keydown', keyHandler, false);