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(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
    • 1.6.1 rc2: return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/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#grepRegExp メタ文字を含む文字列を扱えるよう修正
  • 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 メソッドでパフォーマンスを改善