FirefoxでMTのカテゴリ選択ができなくなった。

調べたらfirefoxのアップグレードで追加されたDOM APIの新しいプロパティとMTのjsで使っているプロパティ名が同じで名前がかぶってた。
Firefox 16 のサイト互換性に関わる修正のまとめ
itemIdというプロパティがそれ。
MT側では2つのjsファイルの複数箇所で使われてた。
一部を書き出すとこんな感じ。

mt_core_compact.jsの399行目

var itemId=ancestor.itemId;

List.jsの315行目

div.itemId = items[ i ].id;

プロパティ名って予約語とは違うし、
どんな名前にするかはプログラマが決めれたほうがいいと思う。
でもW3Cが草稿として書いてるならそっちが優先されるのは仕方ないなと思った。
ブラウザはその草稿を早めに実装するものだから。うーんという感じ。
itemIdってつい書いてしまいそうなのでMT以外にも影響がでそうな予感。

モジラのページには独自のプロパティを使うときは、
datasetプロパティを使ったほうがいいと書いてあるのでどんなものか見てみた。
要素のプロパティはdata属性を使って記述するようだ。
それを取得して要素の属性にアクセスする。
data属性の名前は以下の規則に沿うとのこと。

  • どんな場合でもxmlから始めてはいけない
  • セミコロンを含んではいけない
  • 大文字のAからZを含んではいけない

最初の項目の意味がよくわからないんだけどどういうことだろう。
data属性は以下のルールでキーに変換されるとのこと。

  • ハイフンは削除される
  • ハイフンのあとに続く文字は、ハイフンが削除される前に大文字に設定される

サンプルのコピペだけどこうなるらしい。

<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe
</div>

var el = document.querySelector('#user');

// el.id == 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''

el.dataset.dateOfBirth = '1960-10-03'; // set the DOB.

// 'someDataAttr' in el.dataset === false

el.dataset.someDataAttr = 'mydata';
// 'someDataAttr' in el.dataset === true

ところがdatasetプロパティはIEでは未実装。
そんでもってW3Cの草稿に書かれているということは、
Firefox以外のモダンブラウザでもそのうち実装される。
そうなれば今のところFirefox以外のブラウザでは動いてるコードが動かなくなるんだなー。
違うブラウザ使えば大丈夫、というのは問題の先送りってことか。
公式で配布されてるパッチを適応するのがよさそう。
Firefox 16 でカテゴリおよびフォルダの選択が保存できない。