HatenaStar on Google Readerの改良
何度もはてなスターのロードに入ってしまい途中で激重になるのを解消した。
// ==UserScript== // @name HatenaStar on Google Reader // @namespace http://www.google.com/reader // @description Automatically load the feature of HatenaStar. // @include http://www.google.com/reader/* // ==/UserScript== (function(){ var head = document.getElementsByTagName('head')[0]; var s = document.createElement('script'); s.type='text/javascript'; s.src='http://s.hatena.ne.jp/js/HatenaStar.js' var w=unsafeWindow; var entries_count=0; var onloading=false; function loadHatenaStarFeature(f){ var retry=0; onloading=true; setTimeout(function(){ var entries=document.getElementById('entries'); if(entries&&entries.className=='single-source cards'){ if(!f){ entries_count=entries.childNodes.length-1; w.Hatena.Star.EntryLoader(); }else{ w.Hatena.Star.EntryLoader.loadAddedEntries(); } onloading=false; }else{ if(retry<2) setTimeout(arguments.callee,500); else onloading=false; retry+=1; } },1000); } function checkItem(evt){ if(((evt.keyCode==79 && !evt.ctrlKey && evt.shiftKey)||evt.button==0)&&!onloading){ loadHatenaStarFeature(); } } function addedItem(evt){ var entries=document.getElementById('entries'); if(entries&&entries.className=='single-source cards' && entries.childNodes.length-entries_count>3&&!onloading){ loadHatenaStarFeature(true); } } function setEntryLoader(){ if(w.Hatena){ w.Hatena.Star.EntryLoader.headerTagAndClassName = ["h2","entry-title"]; loadHatenaStarFeature(); w.Hatena.Star.EntryLoader.loadAddedEntries = function(node) { var c = w.Hatena.Star.EntryLoader; if (!node) node = document.body; var entries_org = c.entries; c.entries = null; var entries; entries = c.loadEntriesByHeader(node); c.entries = []; if (entries && typeof(entries.length) == 'number') { for (var i = entries_count; i < entries.length; i++) { var e = new w.Hatena.Star.Entry(entries[i]); e.showButtons(); c.entries.push(e); } entries_count=entries.length; } c.getStarEntries(); if (entries_org) { c.entries.push(entries_org); c.entries = w.Ten.Array.flatten(c.entries); } } }else{ setTimeout(arguments.callee,500); } } window.addEventListener('load',setEntryLoader,false); head.appendChild(s); window.addEventListener('keydown',checkItem,false); window.addEventListener('keydown',addedItem,false); document.getElementById('viewer-top-links').addEventListener('mousedown',checkItem,false); document.getElementById('entries').addEventListener('scroll',addedItem,false); document.getElementById('sub-tree').addEventListener('mousedown',checkItem,false); })();