javascript
GreaseMonkeyのスクリプトはかなり書きやすい。それは良いのだが、探し方がいまいち判らない。googleで検索してもそれほど引っかからないし、repositoryでの探し方もよく判らない。(チラ見で理解できる程の英語力があればrepositoryも使いやすいのかもしれな…
別サイトの宣伝でもしようかな。ここでは私の作ったGreaseMonkeyスクリプトを紹介したりします。 xxxholic(http://kilrey.hp.infoseek.co.jp/gm/xxxholic.user.js) 中毒者の名前通り、mixi中毒や2ch中毒の人向けのスクリプトです。 ユーザーが読み終わった後…
(function(){ var noAction = true; var touch = function(event){ noAction = false; }; window.addEventListener("click",touch,false); window.addEventListener("keydown",touch,false); window.addEventListener("scroll",touch,false); /*------------…
XML->DOMのライブラリが出来た。 あとはNN4でレンダリングに反映させる方法を考えねば。
Netscape Navigater 4で使ってみた。 createElementがないって……、どうしたものかな。
元ネタは http://ma.la/mirrorman/wiki.cgi/IFRAMEHttpRequest なのだが読めなくなっているね。 webarchiveも貼っておこう。 http://web.archive.org/web/20060414173301/http://ma.la/mirrorman/wiki.cgi/IFRAMEHttpRequest とりあえず簡単に言うと iframe…
googleのDOM parserのソースを眺めた。 これなら実装できそう。 分量の大半はNodeクラスのコードになるだろう。
DOMXMLの相互変換を書いている。 IE,Firefox,Operaはデフォルトの機能をラップして同じインターフェースで触れるようにした。 DOM->XMLに関してはデフォルトの機能が使えなくてもそこそこ読める形に変換出来るようにした。問題はXML->DOMである。 結構大きな…
X Libraryの利点はライブラリ圧縮できること、なのだろうか。 まだこの機能は使っていないから良く判らない。
script要素の書き足しで動的にjavascriptを読み込むという手法がある。 それを利用してimportシステムを作った。 .jsファイルごとに依存するファイルを記述する。 既に読み込んだファイルは読み込まない。 という感じになった。なかなか便利。
X Libraryを使って簡易Windowシステムを作ってみた。 割と簡単に書けたのだが、見栄えも悪くない。
X Libraryというのがあった。 http://d.hatena.ne.jp/brazil/20060111/1136987311 で、suggestをX Libraryで書き直してみた。 prototype.jsのbindとkeyCode関連がないことが不便だがなかなか悪くない。 Object汚染がないので安心して利用出来るのも良い。
prototype.jsなのだけど、クロスブラウザ部分しか使っていないのよね。 他に良いクロスブラウザライブラリないかな。
suggestをリファクタした。 prototype.jsへの依存度がアップしてすっきりしたコードになった。
ブラウザ判別してIEでも動くようなコードを入れた。 ちょっと汚い感じになるのは仕方ないのだろうか。 現在3,259byte!4kB以下なら良いとしよう。
と思ったらIEで動かなかった……。
suggestをちょっと書き直した。 大きさはなんと圧縮なしで2,600byte!小さい!味噌はポップアップを使わずにselectを使った点にある。 要するにGUIのコードを書いていない分小さいのね。
google suggestみたいに候補がポップアップするのを作った。 上下キーで選択してReturnを押すとinputの中にそのデータが入る。自分で実装してみると、案外簡単だと思った。 AJAXってアイディアが重要なのかもしれないな。
SPANなどをクリックすると編集できるようにするライブラリを書いた。 FFとIEで動作を確認した。
久しぶりに書くがjavascriptいじりは続けている。 最近はprototype.jsなどAJAXライブラリを中心に遊んでいる。で、ふと疑問に思ったのだが、 prototype.js(ver.1.4.0)の同期通信の挙動が妙だ。 respondToReadyStateにデバッグコードを挿入しても全く反応がな…
昔書いたものが検索に引っかかった。 現在HIT数608か……少なっ。ダウンロード数を数えておけば良かったかも。 http://threesixty.hp.infoseek.co.jp/
解析後の動作を関数化して渡す版。これで作ったbefore()をwrap()に渡せば少し軽くなる。 var makeBefore = function(original){ var re = /function(?:\s+[a-z$_]+)?\s*\(\s*((?:[a-z$_]+\s*)(,\s*[a-z$_]+\s*)*)?\)/i; var str = original.toString().match…
var rec = function _f(tgt,list,func){ array = list[tgt]; if(array instanceof Array){ for(var i=0; i
型検査2のコードはobjectの場合に正しく動かないな。 if(!eval(args[i]+" instanceof "+cond)){ throw "TypeError"; }ではなくて、 if(!eval("args[i] instanceof "+cond)){ throw "TypeError"; }または if(!args[i] instanceof eval(cond)){ throw "TypeErr…
結局、typeof,instanceof程度の型検査が現実的な落としどころだということが判った。http://d.hatena.ne.jp/kilrey/20051009#p1の解法(ex.x$number)は見た目も打鍵数も穏当であり、実用に耐えるものであると信じる。 では、関数の型検査化を簡略にする手段を…
変数名に疑似コードを織り込むというやり方についてなのだが、全角でコードを書いてしまうという手法が最も強力なのは間違いない。しかし、強力すぎて本来のコードを見失いかねない(というより絶対に見失う)ので、実用性は皆無だろう。 許せる範囲で言えば変…
少し簡略化して「変数名$型名」という形式にしてみた。 var before = function check(original,args,result){ var re = /function(?:\s+[a-z$_]+)?\s*\(\s*((?:[a-z$_]+\s*)(,\s*[a-z$_]+\s*)*)?\)/i; var str = original.toString().match(re)[1];//引数名…
関数を作る際、引数名に型検査を行うためのコード片を埋め込む。 それを適切に変換して評価する関数をaspectとして織り込む。 評価の結果が真ならば型検査に通ったとみなす。 という機構を考えた。コードは後で書く。
実用性を考えた結果、beforeやafterにはoriginalを渡す方が便利だし、aroundも欲しいということで↓のようになった。 var wrap = function(original,before,after,around){ var func = function(){ if(before){ before.apply(this,[original,arguments]); } v…
乗っ取りの実行部に約束事が残るのは嫌。なので var wrap2 = function(obj,id,before,after){ obj[id] = wrap(obj[id],before,after); } var obj = { _x:"X", getX:function(){return this._x;} }; // 乗っ取りの実行 wrap2(obj, "getX", function(){alert("…