prototype 1.6.1 RC2 の CHANGELOG を翻訳してみる
先日 1.6.1 RC2 のニュースを訳してみました が、CHANGELOG もざっと訳してみました。 今回は55個ぐらい? 喜ぶヒトが居るかは不明ですが、置いておきますね。
- ユニットテストの間、一貫して Prototype.emptyFunction を使用するように
- deprecation extension: Array#reduce() を削除としてマーク
- "length" という名前の要素があっても Form.serialize が安全に動作するようになった
- IE で Element#update が SCRIPT 要素を考慮するようになった
- Element.extend から使用されていないローカル変数を削除。 form テストの1つで、_extendedByPrototype を false でなく undefined をセットすることにより削除するよう修正。(_extendedByPrototype が false の場合、Element.extend が要素を強制的に再extendしない動作になる)
- 1.6.0.3: if (!element || element._extendedByPrototype ||
- 1.6.1 RC2: if (!element || typeof element._extendedByPrototype != 'undefined' ||
- escapeHTML と unescapeHTML へのテストをより厳格に。(Chrome 1.x は "<" "&" をエスケープするが、">" はしない)
- DOMテストの1つより、ブラウザ判別を削除。 これで最後の IE8 対応。
- HTMLAppletElement と HTMLObjectElement オブジェクトが Element.prototype から継承されないという IE8 のバグに Element.extend が対応した
- DOMテストで setOpacity をテストする際に、正式の機能テストを使用するよう修正
- 属性の get/set で、for/htmlFor を変換していたが、IE8 で問題になり対応
- 正式な機能テストの不足により発生した、IE8 における Element#writeAttribute と Element#readAttribute の問題に対応
- IE8 で問題を発生していたブラウザ判別を DOMテストの1つから削除した
- Form.reset テストの際、IEでは関数ではなく単なるオブジェクトが返されるため、respondsTo がメソッドを認識しない問題を修正
- JS1.8 を実装したクライアント(例: Firefox 3+)において、Array#reduce がネイティブの reduce を上書きしてしまうため削除
- try/finally をサポートしないクライアントのため、かわりに try/catch/finally を使用することを明確化
- 2.0.4 以前の Safari でクラッシュするのを防ぐため、 ノードリストのプロパティにアクセスするため in オペレータを使用する
- Element#clone をネイティブの cloneNode のラッパーとして追加
- Element コンストタクタで、IE8 が適切なクラス名をアサインしているかを確認するテストを追加
- IEで破壊された setAttribute を検出する際に、ブラウザ判別を止めた
- Element.updateで機能検出して分岐する際に、ブラウザ判別を止めた
- escapeHTML と unescapeHTML の分岐で、ブラウザ判別を止めた
- セレクタが与えられない場合、IE 6-7 で全ての子要素を返さないよう、Element#down を再定義した
- 無駄な計算を省くため、Event#pointer(X|Y) と Event#pointer の定義を反転させた
- IE以外のブラウザに mouseenter と mouseleave イベントに関するちゃんとしたサポートを追加 (IEはネイティブでサポートしている)
- 幾つかの環境で問題が発生したため、 _extendedByPrototype, _countedByPrototype, prototypeUID のノード拡張は typeof 演算子でアクセスすることを明確化
- Opera 9.x で子要素を含んだセレクター指定をすると、誤った結果が返される問題を修正
- ページの unload 時に、キャッシュ中の要素に対する参照を Null クリアする。 これは Event#stopObserving 中にメモリーリーク対策で追加される。
- IE6 で toString と valueOf プロパティが必要なときにだけサブクラスにコピーされるよう確認
- iframe の type 属性にアクセスする際、getAttribute がフラグ無しで使用されるように明確化 (そうしないとIEでエラーになる)
- String#gsub は最初の引数が文字列の場合、RegExp メタ文字をエスケープする
- 1.6.1 rc2: if (Object.isString(pattern))
- 1.6.1 rc2: pattern = RegExp.escape(pattern);
- String#unescapeHTML における置換の順番を修正
- 1.6.0.3: return this.stripTags().replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
- 1.6.1 rc2: return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');
- ルート要素が文書に関連づけられていない場合、IE でセレクター指定が失敗する問題に対応
- ハイフン文字を含んだ属性にセレクターがマッチするよう修正
- Form.reset が常に受け側の要素への参照を返すよう明確化
- querySelectorAll をサポートしたブラウザでは、contextual CSS 選択の際に ":" と "." の文字をエスケープする
- IE でイベントの target 属性がけっして undefined にならないよう確認
- Element#descendants が常に配列を返すように確認
- Element.getDimensions で fixed position 要素を absolute に変換しないようにする
- 空のパターンで String#sub が無限ループに陥らないようにする
- 1.6.1 rc2: if (!(pattern.length || pattern.source)) {
- 1.6.1 rc2: replacement = replacement('');
- 1.6.1 rc2: return replacement + source.split('').join(replacement) + replacement;
- 1.6.1 rc2: }
- Prototype の配布ファイル作成ツールを Sprockets に変更
- Object.is(Array|String|Number)を Juriyさんの発見した、より汎用的で優れた手法を利用するよう変更
- 1.6.0.3: isString: function(object) {
- 1.6.0.3: return typeof object == "string";
- 1.6.0.3: },
- 1.6.1 rc2: function getClass(object) {
- 1.6.1 rc2: return Object.prototype.toString.call(object)
- 1.6.1 rc2: .match(/^\[object\s(.*)\]$/)[1];
- 1.6.1 rc2: }
- 1.6.1 rc2: function isString(object) {
- 1.6.1 rc2: return getClass(object) === "String";
- 1.6.1 rc2: }
- IE のホストオブジェクトで、Object.is(String|Number) が例外を発生しないように修正
- Enumerable#grep が RegExp メタ文字を含む文字列を扱えるよう修正
- dom:loaded カスタムイベントを「doScroll アプローチ」に切り替えた
- 1.6.1 RC2: function pollDoScroll() {
- 1.6.1 RC2: try { document.documentElement.doScroll('left'); }
- 1.6.1 RC2: catch(e) {
- 1.6.1 RC2: timer = pollDoScroll.defer();
- 1.6.1 RC2: return;
- 1.6.1 RC2: }
- 1.6.1 RC2: fireContentLoadedEvent();
- 1.6.1 RC2: }
- document.viewport.get(Dimensions|Width|Height) を最適化
- 文字列と数値のラッパーに対し、Object#isString と Object#isNumber が false を返す問題に対応
- dom:loaded カスタムイベントを発生する前に document.loaded = true をセット
- Element#store に key/value ペアを含むオブジェクトを渡せるように
- 1.6.1 RC2: if (arguments.length === 2) {
- 1.6.1 RC2: element.getStorage().update(key);
- 1.6.1 RC2: } else {
- 1.6.1 RC2: element.getStorage().set(key, value);
- 1.6.1 RC2: }
- Element#store が要素自身を返すように変更
- non-bubblingな(上に伝わっていかない)カスタムイベントを追加。 Element#fire の最後に追加された引数がこれを制御し、true をデフォルト値とする。 bubbling させたくない場合には false を指定すること。
- イベントシステムはグローバルなハッシュではなく、要素の storage API を利用するようになった
- 要素のメタ情報を安全にハッシュベースで格納するため、Element#store と Element#retrieve を追加。 メモリリークもなくなる。 ハッシュ領域を直接操作するため Element#getStorage も追加。 (mootools に感謝を)
- いくつかのバージョンの Safari で、Selector/$$ アクセスの際に case-insensitiveな(大文字小文字を区別しない)のに対応
- IEで、コメントと属性名が混じっているとき、Function#argumentNames が正しくない結果を返す問題を修正
- Selector.patterns は順序だった構成で表現されているべき
- 1.6.0.3: patterns: {
- 1.6.0.3: laterSibling: /^\s*~\s*/,
- 1.6.0.3: child: /^\s*>\s*/,
- 1.6.1 RC2: patterns: [
- 1.6.1 RC2: { name: 'laterSibling', re: /^\s*~\s*/ },
- 1.6.1 RC2: { name: 'child', re: /^\s*>\s*/ },
- Function メソッドでパフォーマンスを改善