現代のWebで、今もっとも「迷走した」技術、HTTP Clock 。
HTTP Clockを支える技術 ACT.1 、HTTP Clockを支える技術 ACT.2 、HTTP Clockを支える技術 ACT.3 では、様々な方針で様々な時計をストリーミングしてきました。
私は完全にネタ切れだったのですが、@lemoncmd 氏より、 「RTLを使ったらどうか」 との、「素敵な助言」を賜りました。
どういったものなのでしょうか。
RTLとは? ¶
そもそも、RTL (Right-To-Left) とは何でしょうか。
現代日本人である我々は、普段、左から右へと文章を書いています。
しかし、そうでない言語もある訳ですね。
その様な言語では、(外来語と混ぜて書くなど) 文中で記述方向が入れ替わることもあるようです。
それを上手くやるために Unicode Bidirectional Algorithm があります。
しかしながら、それでも満足できないユースケースのために、例えば、右から左へと描画をする状態へ「強制的に」推移させる符号 (Right-To-Left Override) などがあるようです。
注釈1: 当然、その逆もあります。
注釈2: 昔、Windows向けマルウェアでは、見かけ上の拡張子をチョロまかすために、よく使われてましたね。.exe
や .scr
を強引に文中へ移動させ、.avi
や.jpg
などを後方に……。。
参考: 「EXEファイルをPDFに見せかける」、拡張子偽装のウイルスが猛威 | 日経クロステック(xTECH)
注釈3: 著者はWinny世代ではありません。
<textarea>
内でのRTLの挙動 ¶
ところで、これを <textarea>
内で突然使うとどうなるでしょうか。
RTLと有るように、後ろに来る文字が、左側に表示されるのです。
例えば、以下のようなHTMLは:
<textarea>‮ABCDE</textarea>
EDCBA
の様に表示されるわけですね。(‮
はHTML上でのRTL Overrideの表現です。)
では、E
に続いてFGHIJK...
と書き続けるとどうなるでしょうか。
新しいコンテンツが来ても、<textarea>
は自動スクロールの様な器用なことはしません。
よって、 KJIHGFEDC...
のようになる訳ですね。
既存コンテンツが右へ右へと流され、画面外へと追いやられていくのです。
あとから来た文字列が、「あたかも行頭に有るかのように見える」ではありませんか!
事実上の「表示の更新」ですね?
HTTP Clock - RTL Edition ¶
つまり、
‮(TSJ) 00:51:81 31-40-5202‮(TSJ) 10:51:81 31-40-5202....
このように書くと、過去の時刻を右へ右へと追いやりながら、左方向へとても長い行を形成することで、現在時刻を描画することができるのです!
(複数回の ‮
は冗長ですが、実装上の都合であるため、気にしないでください。)
ブラウザ互換性 ¶
ACT.2 で紹介した、SELECTタグを使った、SELECT Edition は最も †エレガント† でしたが、Safari では期待した描画結果を得られませんでした。
なんと、今回のRTL Editionは…
【朗報】Safari互換達成! ¶
なんと、今回の RTL Edition は Safari でも動くようです!
やったー!
【悲報】Firefox非互換! ¶
これは、HTTP Clock決定版と思ったのですが、Firefoxでは期待通り動きませんでした。
<textarea>
コンテキストに突入した際、描画が一時停止されてしまうようです。残念。
次回? ¶
あるのでしょうか。ご期待ください(?)。