選択範囲のリンク一覧からPathtraqの解析クエリ編集画面を開くBookmarklet
作ってみますた。
DOM Rangeに対応してるブラウザなら動くと思います。
(function(contentWindow) { var links = []; var seen = {}; var selection = contentWindow.getSelection(); if (!selection || !selection.rangeCount) return; var findLinks = function(selectionRange, links, seen) { var dummy = contentWindow.document.createElement("div"); dummy.appendChild(selectionRange.cloneContents()); var anchors = dummy.getElementsByTagName("a"); for (var i = 0, l = anchors.length; i < l; i++) { var url = anchors.item(i).href; if (url && url.indexOf("http") == 0 && !seen[url]) { links.push(url + "*"); seen[url] = true; } } }; for (var i = 0, l = selection.rangeCount; i < l; i++) { findLinks(selection.getRangeAt(i), links, seen); } links.push("javascript:void(0);"); contentWindow.location.href = "http://pathtraq.com/analytics?url=" + encodeURIComponent(links.join("\r\n")) + "&m=hot"; })(window);
最後の方にわざとjavascript:void(0)なリンクを差し込んでPathtraq側でinvalidな形にして編集画面のままにしてあります。
あと、cloneContents()で出来たDocumentFragmentだけど、getElement*なメソッドは使えないっぽぃ。
仕方無いのでcreateElement()で適当なelement node作ってappendChild()してみた。
DOMもJavaScriptも良く分からんです。
- http://subtech.g.hatena.ne.jp/
- http://shibuyapm.ring.hatena.ne.jp/
- http://d.hatena.ne.jp/antipop/20050628/1119966355
辺りでやると面白いかも。
蛇足だけどshibuyapm.ring.hatena.ne.jpで未だに参加承認がおりません。w
id:naoyaさん、気づいてくれないかなー。
参考
- XUL Apps > Tips > 選択範囲のリンクを収集する ~ DOM2 RangeのcompareBoundaryPointsの使い方 - outsider reflex -- 但しDocumentFragmentからgetElementsByTagNameは叩けない
- http://codezine.jp/a/article/aid/1519.aspx -- ん〜、まぁ勉強にはなった