2009-01-01から1ヶ月間の記事一覧
Greasemonkeyとかから使えるように、よく使う関数を小さくまとめて javascripter's gist: 54503 — Gist に置いた。
ハッシュのようにアクセスできるけどコンパイル(マクロ展開)時にvectorのインデックスに置き換えられるようにする。 (define-macro (let-pseudo-hashtable accessor-name key&value . body) (let ((key-table (make-eq-hashtable)) (value-vector (gensym)))…
Firefoxでdocument.readyStateがサポートされていた。確認したバージョンはMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre) Gecko/20090124 Minefield/3.2a1pre。 document.readyStateで、document.readyStateがどのような値になる…
4つの数字から10になる式を探すプログラム(切符の問題とも呼ばれる)を書いた。choose関数とfail関数は、404 Not Foundをypsilon上で動くように少し直した物。 (define *paths* '()) (define *fail* (gensym)) (define (choose choices) (if (null? choices) …
の39番目とGM_addStyleの実装と最適化 - 0xFFについて。 まず、style要素を使う方法。 function addStyle(css) { var style = document.getElementsByTagName('style').item(0); if (!style) { style = document.createElement('style'); style.type = 'text…
Perl風 RegExp.prototype.__defineGetter__( 'x', function () { if ('__x' in this) return this.__x; var source = this.source; var flags = ''; var re; source = source.replace(/([^\\]) +/g, '$1'); // trim spaces source = source.replace(/([^\\])…
追記:Twitter / 10th543: あ・・・ボタンが��で指摘されたのでmetaタグを追加した。どちらにしろ、script要素のdefer属性を使っているので、Firefox3.1以降じゃないと動かないと思う。 FIrefoxだと、Function#toSourceに数値を渡せばきれいにインデントして…
最近はこう書いている。 /* copyrightやlicense情報は必要だったら最初に複数行コメントで書く */ // グローバル変数を初めにvarで宣言する var global = window; // 関数を使用する前に関数本体を書く function times(func, n, self) { // var宣言は最初に…
これは便利。 var counter = function () { var static = /(^o^)/; return ('i' in static)? ++static.i: static.i = 0; }; console.log(counter()); // 0 console.log(counter()); // 1 console.log(counter()); // 2 console.log(counter()); // 3 正規表…
ttp://google.co.jp/等の不完全なリンクをロケーションバーにペーストしてサイトに移動したり、リンクをクリックして移動できるようにする。 ttp_processor.cgi等の名前にして保存し、CGIとして動かす。 #!/usr/bin/env ruby require "webrick/cgi" class TT…
追記:2 Common infrastructure — HTML Standardを見て少し直した。 HTML5 differences from HTML4を見ながら、HTMLElement#classListと#relListを作った。 戻り値や毎回同じclassListオブジェクトを返すべきなのかどうかが不明なので、好きなようにした。 v…
JavaScript第5版を見ていたら、結構覚えてない物があったのでメモ。 まず、関数実行される時に、varで宣言された変数は、Callオブジェクトという物に登録される。 var f = function (a, b) { var c, d; }; f(1, 2); の場合だと、 var callObject = { c: unde…
Flash 10 でも「はてなダイアリー」の「バックアップ機能」を使えるようにするグリースモンキー - IT戦記を見て、ユーザーエージェントを切り替えるように、Flashのバージョンも嘘を付けるようにできるといいと思った。 Firefoxだと、 navigator.plugins['Sh…
new Stringの用途を考え、ユニークなキーを生成するgensymを書いた。toString()があるのでobjectのキーとして使用でき、オブジェクトなので===で比較する時は絶対に重ならない。 var gensym = function () { var prefix = 'gensym_'; var id = 0; return fun…
前から作ってみたいと思っていた、Brainfuckのインタプリタを作った。 JavaScript Brainfuck interpreterに置いた。 id:lizanにデバッグを手伝ってもらったり、実装についてアドバイスを貰いながら、けっこう苦労して作った。 var brainfuck = function (sou…
SafariにはStylish相当のものがないので自分で書く。 リアルタイムに編集できるようにするとかなり動作が重くなるので、少し工夫してる。 javascript:(function () { var css_edit = document.getElementsByClassName('_css_edit'); if (css_edit.item(0)) {…