cgiによる開発テンプレート

一行でブックマークレット書くのがいまいちつらいので以下のようなものを作ってみた。
インデントや改行込みでブックマークレットを作った後、cgiが改行とインデントを削除してアンカーを作成する。

#!/usr/bin/ruby

title="選択領域数字半角化"
program=<<'PROGRAM'
s=(t=document.getElementsByTagName('textarea')[0]).selectionStart;
e=t.selectionEnd;
v=t.value;
p=t.scrollTop;
t.value=(v.substr(0,s)+(f=v.substr(s,e-s).replace(/([0-9a-zA-Z])/g,function (match_str){return String.fromCharCode(match_str.charCodeAt(0) - 65248);}))+v.substr(e,v.length));
t.scrollTop=p;
t.setSelectionRange(s,s+f.length);
PROGRAM

print <<EOF
Content-Type: text/html; charset=EUC-JP

<html>
</body>
<h1>ブックマークレット開発テンプレート</h1>

<a href="javascript:(function(){#{program.gsub(/\n|^\s+/,'')}})()">#{title}</a> 左のアンカーをブックマークする。

<h2>実験エリア</h2>
<form>
<textarea style='width:100%;height:10%'></textarea>
</form>

</body>
</html>
EOF

以下ができあがったブックマークレット

javascript:(function(){s=(t=document.getElementsByTagName('textarea')[0]).selectionStart;e=t.selectionEnd;v=t.value;p=t.scrollTop;t.value=(v.substr(0,s)+(f=v.substr(s,e-s).replace(/([%EF%BC%90-%EF%BC%99%EF%BD%81-%EF%BD%9A%EF%BC%A1-%EF%BC%BA])/g,function (match_str){return String.fromCharCode(match_str.charCodeAt(0) - 65248);}))+v.substr(e,v.length));t.scrollTop=p;t.setSelectionRange(s,s+f.length);})()

コメントが打てないのが難点か。