リリースはありません
使っていた Web サービスが終わり記録を失ってしまった。ちょうど切羽詰っているときで終了のアナウンスを見逃していた。バックアップも取れていない。僕は激しく憤りを覚えるけど、みんなはもう慣れっこなのだろうか?さすがにみんなが困るサービスは、つまりアクティブなユーザーが多いサービスはなくならないけど、僕は変わり者なのか?ユーザーの少ないサービスに当たってしまう。
いいや、アクテイブなユーザーが居なくなった時点でそこにある記録は失われていいのだろうか?そんなことは無い。僕らはピラミッド建設労働者のトイレの落書きの発見に悦ぶような、そんな生き物だから。
解決は難しいけど誰かが上手い手を用意してくれるまで、とりあえずそこまで生きていればいい。
単純にサービスの生存率を少し上げる程度の効果しかないけど、サービスが生き残るためにクライアント側にできることは?という観点で考えました。
当初は軽量なライブラリで、アプリケーション作者は自分の書きたいように画面を書けばいい、と思っていた. ところが、PointingDeviceEventTree の辺りから考え方が変わってきてしまっている.
クロスブラウザな画面構築を目標にするなら、アプリケーションのコードは window や document といったブラウザオブジェクトには直接触るべきではなくて、system.js の用意する API から 画面( html ) をいじるべき. ほとんどのライブラリは DOM API レベルでのクロスブラウザしか行っていなくて Html+css レベルのクロスブラウザはプログラマー任せになっている。(jQuery の例では IE での opacity 時に zoom ハックをするなど一部にライブラリで行っているものもある)
また、これからの画面サイズや入力インターフェイスの多様化を考えると、今日正しくライブラリの作法に乗っ取って書いたマルチプラットフォームアプリケーションが 5 年後にも動いている保証は無い。
マルチプラットフォーム Web アプリケーションのためには、キーボード・マウス・タッチ といったイベントを抽象化する層が必要で、その上でアプリケーションは画面を描かずにロジックだけを記述し、描画はフレームワークがデバイス情報を収集して判断する。
というわけで、だんだんおせっかいなフレームワークになってきてしまっている、、、
アプリケーションやファイルドライバーの登録を契機にシステムの関数を呼べるようになる.アプリケーションやドライバーを APIユーザー と呼ぶ.他にシステム内にあって API を利用するスーパーユーザーがある. Event や Ajax, Timer などは システムの関数から利用することがお行儀がよい.これは、KeyEvent で current なアプリケーションに対してだけイベントを流すように最適化が行われたり、shoutdown したアプリケーションの未解除のイベントや UI コンポーネントが解放されるため.また非同期なコールバックがアプリケーションの終了後に呼ばれることを防ぐ.
Class を定義し システムの管理下に置く.参考 StudyOfJsClass
js には通常では備わっていない 継承、Abstract クラス、 プライベートなメソッド・値(プライベートクラスを定義して行う)などをそれっぽく行う.
全てのクラスと、全てのインスタンス( pool が有効の場合 )への参照が保持される.
setInterval 相当の関数呼び出し.タイマーを大量に使う場合、window.setInterval() を使うより最適化されている、はず.参考 http://sawat.jf.land.to/round_circles/
setTimeout を使った非同期で関数を呼び出す. apiuser を保持していて( apiuser は主にアプリケーションのこと )アプリケーションがシャットダウンした場合は自動で remove される. addEventListener などで関数を非同期で呼び出したいときに使用する.( ie でのローカルリソースへの $.ajax() ではその関数内で完了イベントが呼び出される挙動になる.) さらに処理のこぼれが防げる.( Opera での 通信・flash 連携などで.setTimeout で負荷が下がるから? )
File API:Directories and System とメソッドをあわせる.いずれ.
current な Application の管理.ブラウザのリサイズベントを current なアプリケーションに流す. マウス(等の)イベントや、ローカルからブラウザ画面への ファイルのドロップイベント、を受け付ける レイヤー を最前面に配置して、イベントの独自伝播を行う.
登録された アプリケーションクラス の prototype に AbstractApplication インスタンスが追加される. その アプリケーションクラスが new される.この時点で application.rootElement に div 要素が作られる.
rootElement が body に追加され init() が呼ばれる.
setTimeout のタイマーを挟んで、.open() が呼ばれる. open 内で onOpen() が呼ばれる.但し、
ホーム画面を表示するアプリケーションをシステムに登録する.ホーム画面への掲示物(タイル)を受け付ける.
静的な html タグのノードリストを記録して ページアプリケーションとして登録.静的 html の表示 ⇔ ホーム画面 の切り替えができるようにする.
DOMContentLoaded イベントをキャッチ.
ブラウザの表示エリアの変更を通知.
クリックイベントを正しく発行するためのヘルパーを持つ.
KeyEvent は document 及び テキスト入力フォーム部品 に対してしかまともに働かない( ie ) そこで document への キーイベントを current な application に対してだけ流すようにする.
イベント伝播ツリーを定義して、DOM 順に拘束されないイベント伝播を行う.ClientEventTree
link タグの追加による動的な stylesheet の追加.
current な Application にオーバーレイさせて application を起動する.
テキストinput や コンボボックスなどのフォーム部品を発行する.フォーカスやキー操作を管理する.
ファイルのエクスプローラ