hack のためのネタ帳, etc,,,

Bookmarklet

閲覧のサポート

enable javascript: links
"javascript:" で始まる URI をリンク化して bookmarklet の登録をし易くします。
javascript:(function(){var e = document.getElementsByTagName("*");for (var i = e.length - 1; 0 <= i; i--) {if (0 < e[i].childNodes.length) {var t = e[i].childNodes[0];if (t.nodeName == '#text' && t.nodeValue.match('^javascript:.*;[ \n]*$')) {var a = document.createElement("A");a.href = t.nodeValue;e[i].replaceChild(a, t);a.appendChild(t);}}}})();
table width 100%
TABLE の幅を 100% にして見易くします。
javascript:(function() {var e = document.getElementsByTagName("TABLE"); for (var i = 0; i < e.length; i++) e[i].style.width = '100%';})();

編集のサポート

easy edit custumize for livedoor wiki
レイアウトを調整して編集し易くします。resizable Elementresizable TEXTAREA も併用すると便利です。
javascript:(function(){var e = document.getElementById("maincont"); e.width = ""; var m = document.getElementById("mainleft"); m.width = "100"; var t = (function(e){if (e.tagName == "TABLE") return e; return arguments.callee(e.parentNode);})(m.parentNode); e = document.getElementsByTagName("TABLE"); for (var i = 0; i < e.length; i++) {e[i].width ="100%"; if (e[i] == t) break; e[i].style.display = "none";} e = document.getElementById("inputBody"); e.style.height = "20em"; e = document.getElementById("footer"); e.style.display = "none";})();
sort wiki_category
wikiカテゴリーのコンボボックスをソートして探し易くします。
javascript:(function() {var e = document.getElementById("wiki_category_id");var txt = typeof(e.innerText) == "undefined" ? "textContent" : "innerText";var items = [];for (var i = 0; i < e.childNodes.length; i++) {items.push(e.childNodes[i]);}items.sort(function(a, b){if (a[txt] < b[txt]) return -1;if (a[txt] == b[txt]) return 0;return 1;});for (var i = 0; i < items.length; i++) {e.appendChild(items[i]);}})();

sort SELECT を利用すると wiki カテゴリーの SELECT 要素がソートされて探し易くなります。
textarea で選択中の文字列を numeric entity に変換します。
javascript:(function(){ var ne=function(s){var d="";for(var i=0;i<s.length;i++){d+="&#x"+("00"+s.charCodeAt(i).toString(16)).slice(-2)+";"}return d;}; var e=document.getElementById("content"); var p1=e.selectionStart; var p2=e.selectionEnd; var s=ne(e.value.substring(p1,p2)); var d=e.value.substring(0,p1)+s+e.value.substring(p2); e.value=d; e.selectionStart=p1; e.selectionEnd=p1+s.length; })();
動作確認は Firefox でしかしてないので IE だと動かないと思います。

相互リンク支援

Trackback
livedoor wiki から trackback ping を投げます。
javascript:(function(){var D=document,E=encodeURI,I="getElementById",T="getElementsByTagName",C="createElement",A="appendChild",CT="createTextNode",S="style",W="width",WD="40em";var t=D.body.innerText?"innerText":"textContent";var blog_name=D[I]("wiki-title")[t];var title=D[I]("main")[T]("H2")[0][t].match(/^[\s]*(.*?)[\s]*$/)[1];var url=D.location.href;var excerpt=D[I]("content_block_1").parentNode[t].replace(/[\n]/g,"").match(/^[\s]*(.*?)[\s]*$/)[1].substr(0,252)+"...";var post="blog_name="+E(blog_name)+"&title="+E(title)+"&url="+E(url)+"&excerpt="+E(excerpt);var f=D[C]("FORM");f.method = "POST";f.target = "_blank";f.onsubmit=function(){this.action=this.trackbackto.value;};f[A](D[CT]("Track back to"));var e=D[C]("input");e.type="text";e[S][W]=WD;e.name="trackbackto";f[A](e);f[A](D[C]("BR"));f[A](D[CT]("Track back from"));e=D[C]("input");e.type="text";e[S][W]=WD;e.name="url";e.value=url;f[A](e);f[A](D[C]("BR"));f[A](D[CT]("Site Title"));e=D[C]("input");e.type="text";e[S][W]=WD;e.name="blog_name";e.value=blog_name;f[A](e);f[A](D[C]("BR"));f[A](D[CT]("Title"));e=D[C]("input");e.type="text";e[S][W]=WD;e.name="title";e.value=title;f[A](e);f[A](D[C]("BR"));f[A](D[CT]("Excerpt"));e=D[C]("textarea");e[S][W]=WD;e.name="excerpt";e.value=excerpt;f[A](e);f[A](D[C]("BR"));e=D[C]("input");e.type="submit";e.value="trackback";f[A](e);D.body.appendChild(f);})();

trackback spam とか見ると ping だけなのは片手落ちと言うか ping 検証するための pong とかあってた方が良いんじゃないかと思うんだよね。

管理

check comment spam
コメント認証を OFF のままにしてたらコメントスパムに荒らされ始めたのでとりあえず。
正規表現でマッチした IP アドレスのコメント削除ボックスにチェックを付けます。
javascript:(function(){var reg = RegExp(prompt("regexp for IP", "."));var t = document.forms["WikiPageList"].getElementsByTagName("TABLE")[0];var s = "";for (var i = 1; i < t.rows.length; i++) {var r = t.rows.item(i);if (r.cells.length == 6) {var checked = "";if (r.cells.item(3).textContent.match(reg)) {checked = "checked";}r.cells.item(0).firstChild.checked = checked;}}})();
show search keyword
管理ページの「過去7日間のリンク元」にサーチされたキーワードを表示します。
euc のクエリについてはとりあえず仮名のみ適当に。
Firefox 専用。
javascript:(function(){function unescapeEUC(s) {s = unescape(s);var r = "";var c = 0, w = 0;for (var i = 0; i < s.length; i++) {c = s.charCodeAt(i);if (w) {c = w | c;if (0x8e21 <= c && c <= 0x8e5f) c += 0xff61 - 0x8e21;else if (0xa5a1 <= c && c <= 0xa5f6) c += 0x30a1 - 0xa5a1;} else if (0x8e <= c && c <= 0xfe && c != 0x8f && c != 0xa0) {w = c << 8;continue;}r += String.fromCharCode(c);w = 0;}return r;}var a = document.getElementsByTagName("A");for (var i = 0; i < a.length; i++) {if (a[i].href.match(/(yahoo|google|).\/search.*[^a-z][qp]=([^&]+)/)) {var sp = RegExp.$1;var q = RegExp.$2;var e = "";if (a[i].href.match(/(ie|ei)=([^&]+)/)) {e = RegExp.$2.toUpperCase().replace(/_/g, "-");}q = q.replace(/\+/g, " ");switch(e) {case "EUC-JP":q = unescapeEUC(q);break;default:q = decodeURIComponent(q);break;}a[i].textContent = q;}}})();

その他

make "include JavaScript" bookmarklet
指定された JavaScript を include する bookmarklet を作成します。
javascript:(function() {var url = prompt("URL of JavaScript file.");if(url!=null){var s="javascript:(function(url){var h=document.getElementsByTagName('head'); var s=document.createElement('script'); s.type='text/javascript';s.src=url;h[0].appendChild(s);})('"+url+"');"; prompt("Following bookmarklet will execute JavaScript file.",s);}})();

JavaScript の添付

livedoor wiki は画像/PDF/音声ファイル以外は添付出来ないのですが、実は .wav ファイルの偽装ヘッダを追加する事で JavaScript のソースも添付が可能になります。やり方は以下の1行をファイルの先頭に挿入するだけ。
RIFF2=0;WAVEfmt =0;
具体的には以下のサンプルを参照してください。 添付したファイルを BOOKMARKLET から include してみた例を以下に示します。
javascript:(function(url) {var h = document.getElementsByTagName("HEAD"); var s = document.createElement("SCRIPT"); s.type = "text/javascript"; s.src = url; h[0].appendChild(s);})( '\x68ttp://image01.wiki.livedoor.jp/k/a/kou1okada/1563c86adac3eb2d.js');
唯一、欠点と言えばファイル名がハッシュ値になってしまう点ですが、同じファイル名で知らないうちに別のファイルで上書きされてしまうと、セキュリティ上かなりヤバイ問題が生じてしまうため仕方のないところでしょう。

バックアップ

wget を使うと簡単です。以下のように。
wikiname は適当に自分の wiki の名前に変えて実行してください。
wget -I/wikiname/d -I/wikiname/l -m -k -l0 -np http://wiki.livedoor.jp/wikiname/

追記: 2013-03-24
2013-03-24 現在、EUC-JP 表記されたページ名がそのまま Percent-Encoding されているため、上記のやり方で wget でミラーリングすると EUC-JP コードのファイル名が生成されてしまう。このため、--restrict-file-name=ascii オプションをつけておいたほうが良い。
wget --restrict-file-name=ascii -I/wikiname/d -I/wikiname/l -m -k -l0 -np http://wiki.livedoor.jp/wikiname/
ただし、ページ名に「/」を含む場合、フォルダを掘られてしまうという問題が残る事に加え、「Ruby」「Ruby/Tk」のようなページ名が存在する場合、一方を保存できないという問題も生ずる。

ファイル名は Percent-Encoding された EUC-JP のまま保存されてしまうため、元のページ名一覧を得たい場合は以下のようにすれば良い。
find . -type f | ruby -rcgi -nle 'puts CGI.unescape($_).force_encoding("EUC-JP").encode(Encoding.find(Encoding.locale_charmap))'

「Ruby」「Ruby/Tk」のようなケースは wget 単体だとどうしようもないので、スクリプト書いてみた。

ライブラリ

2010-05-28 現在 prototype_1_5.js が include されている模様。

関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます