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);})()
コメントが打てないのが難点か。