Google Reader をフォルダわけしたいけど、フォルダ単位ではなくフィード単位で読みたい その2
class 属性が変わる場合があるので手直し。
".//a[contains(@class, 'link tree-link-selected cursor')]",
属性の一部がマッチする場合をどう表現するのかがよく分からなかったので時間かかった。
// ==UserScript== // @name Google Reader Scroll Control // @namespace http://d.hatena.ne.jp/spider-man/ // @include http://www.google.co.jp/reader/* // @include http://www.google.com/reader/* // @version 0.5 // ==/UserScript== (function () { var SCROLL_HEIGHT = 150; window.addEventListener('keypress', function(e) { if (e.charCode == 32) { // folder control var subtree = document.getElementById("sub-tree"); var result = document.evaluate( ".//a[contains(@class, 'link tree-link-selected cursor')]", subtree , null , XPathResult.FIRST_ORDERED_NODE_TYPE , null); var href = result.singleNodeValue; if(href.firstChild.getAttribute("class") == "icon icon-d-1" && href.firstChild.getAttribute("src").indexOf("folder") > 0) { e.preventDefault(); e.stopPropagation(); setTimeout(function(){ var feed = document.evaluate( ".//li[@class='sub unselectable collapsed unread']/a", href.parentNode , null , XPathResult.FIRST_ORDERED_NODE_TYPE , null); var event = document.createEvent('MouseEvents'); event.initMouseEvent ('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); feed.singleNodeValue.dispatchEvent(event); } , 30); return; } // scroll control var h = SCROLL_HEIGHT; if(e.shiftKey) { h = h * -1; } var div = document.getElementById("entries"); var current = document.getElementById("current-entry"); if(current == null) { return; } var scrollTop = div.scrollTop; if(current.offsetTop + current.clientHeight > div.scrollTop + SCROLL_HEIGHT) { div.scrollTop += h; } if(div.scrollTop != scrollTop) { e.preventDefault(); e.stopPropagation(); } } }, true); })();
グリモンスクリプトのサイトにアップしてみたい。control の綴りを間違えてたのはナイショ。