sfanla です。
スタイルシートではどうにもならなそうだったので、
calendar3.rb のパッチをつくってみました。
対象環境
(1)HTML 4.0 Strict (tDiary標準)で、マージンの大きいテーマを
Windows IE6 で見た場合
(2)Mac IE で見た場合
パッチによる変化
(1)Windows IE6 でポップアップ位置のズレが少なくなる
(2)関数未定義のエラーが出なくなる
動作確認
* Windows : IE6, Firebird 0.7
* Mac : IE5.1, IE5.2
* Linux : Firebird 0.7, w3m 0.3
動作確認ページ
(a)現状 http://sfanla.com/diary/theme/lr/lr-old.html
(b)パッチ後 http://sfanla.com/diary/theme/lr/lr-new.html
(c)現状 http://sfanla.com/diary/theme/pink-border/pink-border-old.html
(d)パッチ後 http://sfanla.com/diary/theme/pink-border/pink-border-new.html
パッチについて
(1)Transitional と完全に同じ位置にはなりません。
ちょっとましになる程度です。
(2)空の関数定義をしただけです。
w3m のときも定義してしまいますが、実害は無いと思います。
問題点
* 動作確認した環境が少ないです。
* ソースが美しくない><
以上です (66v
--- calendar3.rb 2003-10-28 00:49:03.000000000 +0900
+++ calendar3_compatmode.rb 2004-01-24 22:28:36.000000000 +0900
@@ -239,2 +239,15 @@ if /w3m|MSIE.*Mac/ === ENV["HTTP_USER_AG
@calendar3_show_popup = false
+ add_header_proc do
+ <<JAVASCRIPT
+ <script type="text/javascript">
+ <!--
+ function popup(target,element,notitle) {
+ }
+
+ function popdown(element) {
+ }
+ // -->
+</script>
+JAVASCRIPT
+ end
end
@@ -254,2 +267,24 @@ if @calendar3_show_popup
+ if (document.compatMode){
+ if (_dom==2 && document.compatMode=="CSS1Compat") _dom = 2.5;
+ } // Win IE6
+
+ function getLeft(div){
+ result = 0;
+ while (1){
+ div = div.offsetParent;
+ result += div.offsetLeft;
+ if (div.tagName=="BODY") return result;
+ }
+ }
+
+ function getTop(div){
+ result = 0;
+ while (1){
+ div = div.offsetParent;
+ result += div.offsetTop;
+ if (div.tagName=="BODY") return result;
+ }
+ }
+
function moveDivTo(div,left,top){
@@ -260,3 +295,3 @@ if @calendar3_show_popup
}
- if(_dom==2 || _dom==1){
+ if(_dom==2.5 || _dom==2 || _dom==1){
div.style.pixelLeft=left;
@@ -277,3 +312,3 @@ if @calendar3_show_popup
}
- if(_dom==2){
+ if(_dom==2.5 || _dom==2){
div.style.pixelLeft=div.offsetLeft+left;
@@ -294,2 +329,3 @@ if @calendar3_show_popup
function getDivLeft(div){
+ if(_dom==2.5) return div.offsetLeft+getLeft(div);
if(_dom==4 || _dom==2) return div.offsetLeft;
@@ -301,2 +337,3 @@ if @calendar3_show_popup
function getDivTop(div){
+ if(_dom==2.5) return div.offsetTop+getTop(div);
if(_dom==4 || _dom==2) return div.offsetTop;
@@ -308,3 +345,3 @@ if @calendar3_show_popup
function getDivWidth (div){
- if(_dom==4 || _dom==2) return div.offsetWidth;
+ if(_dom==4 || _dom==2.5 || _dom==2) return div.offsetWidth;
if(_dom==1) return div.style.pixelWidth;
@@ -315,3 +352,3 @@ if @calendar3_show_popup
function getDivHeight(div){
- if(_dom==4 || _dom==2) return div.offsetHeight;
+ if(_dom==4 || _dom==2.5 || _dom==2) return div.offsetHeight;
if(_dom==1) return div.style.pixelHeight;
|