2010-04-11
Amazon Cross Book Check 更新
約1年ぶりに更新。
http://d.hatena.ne.jp/adda/20081112/1226463084
BibliwoやLibronなど、もっと網羅的で完成度の高いものが公開されていたりするなか、正直このスクリプトの役目は終わったなーと思っていたのですが、今でもたまに紹介されたり、ブクマが増えたりと、まだ需要があるみたいです。
FormMemorize フォームの値を記憶するGreasemonkeyスクリプト
仕事でRedmineを使っていて、大量のチケットを上げる時に、いちいちTarget VersionだのWatchersだのを入力するのが面倒すぎて、書いたやつ。
ユーザスクリプトコマンドで「FormMemorize」っていうのを選ぶと、その時のフォームの値がURLとセットでGM_setValueされて、次からその画面を開いたときに、保存されている値が反映されます。
単純にフォーム要素の出現順で保存してるだけなので、要素が増えたりすると普通にズレます。
クッキーでやればChromeでも使えそうとか、いろいろあるけど、とりあえず。
// ==UserScript== // @name FormMemorize // @namespace http://d.hatena.ne.jp/adda/ // @include * // @version 2010.3.18 // ==/UserScript== var targets = [ { xpath: '//select', attr: 'selectedIndex' }, { xpath: '//input[@type="checkbox" or @type="radio"]', attr: 'checked' }, { xpath: '//textarea | //input[@type="text"]', attr: 'value' }, ] var memories = eval(GM_getValue("formValues")) || {}; var currentURL = document.location.href; for(url in memories){ if(url != currentURL) continue; targets.forEach(function(target){ var attr = target.attr; memories[url][attr].forEach(function(value, i){ $x(target.xpath)[i][attr] = value || null; }) }) } GM_registerMenuCommand('FormMemorize', function(){ memories[currentURL] = getFormValues(); GM_setValue("formValues", uneval(memories)); }) function getFormValues(){ var result = {}; targets.forEach(function(target){ var attr = target.attr; result[attr] = $x(target.xpath).map(function(element){ return element[attr]; }) }) return result; } function $x(xpath, doc) { var nodes = document.evaluate(xpath, doc||document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var data = []; for (var i = 0, len = nodes.snapshotLength; i < len; i++) { data.push(nodes.snapshotItem(i)); } return data; }
