大変ご無沙汰しております。なんか、なにも表示されないとCGIのバグ?とか思われかねないって気づいたので、とりあえずなんか書いとこかと。

 ただいまサイトのスクリプトをDHTMLからDOMへ大改造してます関係上、サイト側のデータを一切いじれない状態にあります。それに伴い、日記帳と掲示板がまたしても移動します。新しいURLは
 掲示板 : http://cts.creasus.net/transient/bbs/
 日記帳 : http://cts.creasus.net/transient/scn/dia/
 です。

 サーバーの移転と今回の大変更により、ようやくローカルとサーバーの同期が取れるようになるんで、今まで書きためてきた雑記とかパ奮とかを一斉アップデートするのです。涙すれ。吐きそうなほどに。

 予定としては今週中…にできるといいなぁ。


 あともう少しでアップデートできそう。やはりIEやNetscape7にはまだ及ばないようで、高度なDOMにOpera7が弱音を吐いていたりして、その辺を黙らせないことには。

 サイトのXHTML化とスクリプトのDOM化を採択したことにより、今までこつこつ作ってきたValid Edition(今作ってるリニューアル版)全部おじゃんになっちゃったので、このTransient Edition(現在の仮運営版)を長期運用に耐えられる仕様にするのが、今回のリニューアルの目的。(今のsiteCTSはJavaScriptの実験場として存在している)

 というか、この日記CGIもHTML4.01Strict対応にフルリニューアルしたので、下手にログを増やすと面倒くさいことになるんですけど。


 この仮運営版Transient Editionは、現在作成中のリニューアル版Valid Editionの簡易版である。そのはずなのだが、今回のリニューアルでTransient EditionのスクリプトがDOM化され、逆にValid Editionの方が旧型になってしまった。

 しかし、簡易版は簡易版。Transient Editionは各クラスに実装されているメソッドも限られてるし、なにより次期siteCTSの目玉クラス(?)である "Envs" が存在しない。("Envs" はサイト設定に関するクラスで、スタイルシート切り替え機能も搭載している)

 おかげで双方のスクリプトに互換性がなくなってしまい、この修正・移植作業には相当の苦労が必要と思われる。
 まぁValid Editionは、肝心のHTMLが全没になった(XHTML化されるから)ので、どうせ最初から作り直さないといけないのだけど。

 ていうかログ増やすと面倒くさいんだってば。


 うまくいかないんです。DOMは難しいんです。NetscapeとOperaのなんと我侭なことか。

 セキュリティ穴とか色々あるけど、IEのJScriptはやっぱり使いやすいんです。「ここをこうするとこうなる?」って想像がその通りに動くから、直感でやっても動いちゃう。楽しくなるくらいに「適当」。

 反面、NetscapeとかOperaは「なんでこれで動かないのー?」と思わされること多数。特にOperaは言うこときかなくて、スクリプトの大幅組みなおしを余儀なくされてしまったりして。

 document.styleSheets を最初に取得できないNetscapeのバグ。DOMには対応しておきながら undefined のOpera。最新ブラウザを謳っておきながら <col> 要素への対応が半端なNetscapeとOpera。<caption>要素が見当違いなところに表示されるNetscape。
 いいかげんにしてくれりょ。

 というわけで、まだもう少しかかりそうな気配。今月中にはー。

追記:2003.5.13
document.styleSheets<col> の問題はスクリプト調整で解決。<caption> の問題はスタイルシートの調整で解決。
Netscapeの場合、バグなのか仕様なのかわかりにくいのが怖い。(下手にバグだとか騒ぐと、「実はこれが仕様の正しい解釈」というオチが待っている)

ただいま作成中の新クラス、"Nazuna"。イベント関連の処理を一手に請け負わせようとしてるのだけど、やはり三者三様。ちょっと進んではすぐ行き詰まる。悩ましい。

 以下、プロトタイプの一部抜粋。

Nazuna.prototype = {
  srcElement : function (e) {
    return brws.NN ?
      e.target.nodeType == 1 ? e.target : e.target.parentNode :
      window.event.srcElement;
  },

  addEvents : function (eName, tags, method, reverse) {
    if (brws.NN) {
      eName = eName.substr(2);
      if (reverse)
        for (var i = 0, l = tags.length; i < l; i++)
          tags[i].addEventListener(eName, method, true);
      else
        for (var i = 0, l = tags.length; i < l; i++)
          tags[i].removeEventListener(eName, method, true);
    } else {
      if (reverse) method = null;
      for (var i = 0, l = tags.length; i < l; i++)
        tags[i][eName] = method;
    }
  },

  displaySwitch : function (e) {
    e = brws.NN ? e : window.event;
    sakura.display(new String(nazuna.className(e).match(/target\-[a-zA-Z0-9]+/)).substring("target-".length));
    e.cancelBubble = true;
  },

  functionExecute : function (e) {
    e = brws.NN ? e : window.event;
    eval(new String(nazuna.className(e).match(/function\-[a-zA-Z0-9]+/)).substring("function-".length))();
    e.cancelBubble = true;
  }
}

 Netscape の場合、ノードが必ずエレメントを示すとは限らず、要素をどうやって特定すりゃいいのか。nazuna.srcElement(event) とやった時、nodeTypeが1(テキストノード)ではなかったら parentNode を参照…でおおむねうまくいくものの、完全でない。むぅ。

 この辺、OperaはIEに合わせて作ってある(イベントオブジェクトは window 直下にある)ので作りやすいなぁ。いちいち引数でイベントを渡さんでいいから楽だし。

追記:2003.5.13
毎度のことだけど、このプロトタイプはすでに原型をとどめてない。

 スクリプトの調整はほぼ終了、あとはスタイルシートの煮詰めと追加記事の推敲だけ。
 しかし「今月中には終わらせる」という目標の土壇場になって、JavaScriptに関する記事は別にまとめよう、などという構想を立案。恒久的なURIを提供するためには一度出した記事は引っこめられないので、自主締め切りを破ってでも調整をするつもりである。
 …と、間に合わないかも〜という状況を匂わせつつ、再び地下へ潜伏。

 つか、JavaScript話を抜いたらパチョ奮闘記の存在意義が希薄になりすぎるような気も。すでに「メインコンテンツ」の役割は終えてるので、まぁそれも致し方あるまいか。(だってスキルアップに伴って奮闘することが少なくなってしまった以上、愉快なネタが出てこないんだもの)