« Emacsのコマンド入力を練習するタイピングゲーム | メイン | 脆弱性検証用画像を作成 »

miya2000さんの「ブックマークレットの状態を保存する」を再実装してみる

miya2000さんからTBを頂いた。「ブックマークレットの状態を保存する」というBookmarkletを作成した際に、当サイトで公開しているLibraryを参考にして頂いたとの事。おもしろい内容だったので同じ機能を再実装してみた。もとのBookmarkletはボタンによる制御だったが、こちらはリアルタイムにBookmarkletを生成し、キャンセルはダブルクリックとなっている。同時にGOLFを行なったのでかなり分かりにくく、汎用性のないものになってしまった。反省。

javascript:(
    function(t){
        var
         l  =   "addEventListener"
        ,c  =   "childNodes"
        ,g  =   "createElement"
        ,p  =   "appendChild"
        ,z  =   "replace"
        ,m  =   arguments.callee
        ,d  =   document
        ,b  =   d.body
        ,v  =   d[g]("div")
        ,a  =   d[g]("a")
        ,h  =   d[g]("textarea")
        ,s  =   v.style
        ,f  =   false
        ,x
        ,y
        ,r  =   function(){
                    a.href  =   "javascript:("              +
                                m.toString()                +
                                ")(\""                      +
                                v[c][0].value
                                    [z](/\\/ig,"\\\\")
                                    /*[z](/\b/ig,"\\b")*/
                                    [z](/\f/ig,"\\f")
                                    [z](/\n/ig,"\\n")
                                    [z](/\r/ig,"\\r")
                                    [z](/\t/ig,"\\t")
                                    [z](/'/ig,"\\'")
                                    [z](/"/ig,"\\\"")       +
                                "\")"
                }
        ;
        s.cssText="width:30em;padding:5px;position:absolute;top:20px;left:20px;background-color:white;border:black solid 1px;cursor:move;z-index:99";
        h.style.cssText="width:100%;height:7em;display:block";
        a.innerHTML="Bookmarklet";
        b[p](v);
        v[p](h);
        v[p](a);
        h[l]("click",r,0);
        h[l]("keyup",r,0);
        h[l]("change",r,0);
        v[l]("dblclick",function(){b.removeChild(v)},0);
        v[l]("mousedown",function(e){f=true;x=e.pageX-v.offsetLeft;y=e.pageY-v.offsetTop},0);
        d[l]("mousemove",function(e){if(f){s.left=e.pageX-x+"px";s.top=e.pageY-y+"px"}},0);
        d[l]("mouseup",function(){f=false},0);
        h.value=t
    }
)("")
追記(2007/10/01)
変数名が親のscopeの変数と重複していたので変更した。
e="createElement"; -> g="createElement";

トラックバック

このエントリーのトラックバックURL:
http://www.kanasansoft.com/cgi/mt/mt-tb.cgi/51

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google