仕事で javascript のカレンダーを触る機会があった。
その際ちょっと面白い発見があったので日記に書く。
symfony では、実用に足るデザインの javascript カレンダーが簡単に実装できるが
そのカレンダーの動きが、IE 8 では若干おかしいからなおしてくれと言われた。
この 「若干おかしい動き」 とは、カレンダー表示される位置がおかしいというもので
日付入力エリア (input text タグ) よりもずっと上の方に表示されてしまう。
このページの 「日付入力エリア」 は、ファーストビューには存在せず
縦のスクロールバーを下にスライドさせないと見えない位置にあった。
つまり、カレンダーを表示する際には
ブラウザから 「縦のスクロールバーがどれだけスクロールされているのか」 を取得し
それを考慮した位置を決定する必要がある。
この、「スクロールバーがどれだけスライドされているのか」 という情報について
IE 6, 7 では
・縦 document.body.scrollTop
・横 document.body.scrollLeft
で取得できていたようだが
IE 8 では
・縦 document.documentElement.scrollTop
・横 document.documentElement.scrollLeft
で取得するように変わっている・・・
これが原因だった。
世の中にはブラウザがいっぱいあって、ブラウザごとに挙動が結構違ったりする。
今回の 「若干おかしい」 原因も、やはり ブラウザ 側にあった。
というよりも、symfony が初期のころのもので古く
IE 8 がまだ無かった?頃のものだったため仕方ないかもしれない。
最新のものでは直っているかもしれない。
ここまでは前置き。
上記の件で
/ [ PHPライブラリディレクトリ ] /data/symfony/web/sf/calendar/calendar.js
を調査修正したわけだが
ここにある関数を発見したw
continuation_for_the_fucking_khtml_browser
いやいや fucking てwww
訳すと、「くそったれ khtml ブラウザのための処理の継続」 といった感じでしょうか。
無意識に 「fuck」 という単語を検索してしまう俺の目の grep 機能もどうかと思うが
国は違えど、みんなブラウザに悩まされてるんだなあw と思い、ちょっと面白かった!
ちなみに、khtml_browser っていうのは
・KDE プロジェクトにより開発されている HTMLレンダリングエンジン である。
・KDE のウェブブラウザである Konqueror のために開発された。
・KPart フレームワークのもとで開発され、C++ で実装されている。
・KHTML はソフトウェアの構成要素として単独利用することが可能。
・Safari ではこれに手を加えた WebKit が使用されている。
・KHTML を搭載するブラウザはあまり知られておらず
多くのウェブサイトは KHTML のサポートを行わないか
もしくは Konqueror にてサイトが正確に動作するのにも関わらずサポートしていない。
こんな感じらしい (全て wikipedia から抜粋)。
つか 「Konqueror」 ってどうなんすかw
(意味:征服者)
正式な綴りは K ではなく C で、「Conqueror」 だけど
どうせ、KDE プロジェクトの頭文字 K をとって、こうなったんでしょう。
FF11のミシック両手斧が 「コンカラー」 という事で、これまた敏感に反応してしまった。
一粒の修正で二度おいしかった。
おわり。
その際ちょっと面白い発見があったので日記に書く。
symfony では、実用に足るデザインの javascript カレンダーが簡単に実装できるが
そのカレンダーの動きが、IE 8 では若干おかしいからなおしてくれと言われた。
この 「若干おかしい動き」 とは、カレンダー表示される位置がおかしいというもので
日付入力エリア (input text タグ) よりもずっと上の方に表示されてしまう。
このページの 「日付入力エリア」 は、ファーストビューには存在せず
縦のスクロールバーを下にスライドさせないと見えない位置にあった。
つまり、カレンダーを表示する際には
ブラウザから 「縦のスクロールバーがどれだけスクロールされているのか」 を取得し
それを考慮した位置を決定する必要がある。
この、「スクロールバーがどれだけスライドされているのか」 という情報について
IE 6, 7 では
・縦 document.body.scrollTop
・横 document.body.scrollLeft
で取得できていたようだが
IE 8 では
・縦 document.documentElement.scrollTop
・横 document.documentElement.scrollLeft
で取得するように変わっている・・・
これが原因だった。
世の中にはブラウザがいっぱいあって、ブラウザごとに挙動が結構違ったりする。
今回の 「若干おかしい」 原因も、やはり ブラウザ 側にあった。
というよりも、symfony が初期のころのもので古く
IE 8 がまだ無かった?頃のものだったため仕方ないかもしれない。
最新のものでは直っているかもしれない。
ここまでは前置き。
上記の件で
/ [ PHPライブラリディレクトリ ] /data/symfony/web/sf/calendar/calendar.js
を調査修正したわけだが
ここにある関数を発見したw
continuation_for_the_fucking_khtml_browser
いやいや fucking てwww
訳すと、「くそったれ khtml ブラウザのための処理の継続」 といった感じでしょうか。
無意識に 「fuck」 という単語を検索してしまう俺の目の grep 機能もどうかと思うが
国は違えど、みんなブラウザに悩まされてるんだなあw と思い、ちょっと面白かった!
ちなみに、khtml_browser っていうのは
・KDE プロジェクトにより開発されている HTMLレンダリングエンジン である。
・KDE のウェブブラウザである Konqueror のために開発された。
・KPart フレームワークのもとで開発され、C++ で実装されている。
・KHTML はソフトウェアの構成要素として単独利用することが可能。
・Safari ではこれに手を加えた WebKit が使用されている。
・KHTML を搭載するブラウザはあまり知られておらず
多くのウェブサイトは KHTML のサポートを行わないか
もしくは Konqueror にてサイトが正確に動作するのにも関わらずサポートしていない。
こんな感じらしい (全て wikipedia から抜粋)。
つか 「Konqueror」 ってどうなんすかw
(意味:征服者)
正式な綴りは K ではなく C で、「Conqueror」 だけど
どうせ、KDE プロジェクトの頭文字 K をとって、こうなったんでしょう。
FF11のミシック両手斧が 「コンカラー」 という事で、これまた敏感に反応してしまった。
一粒の修正で二度おいしかった。
おわり。