たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
malaさんの「2005年もパクられてこなかったもの私的まとめベスト3」に挙げられている「iRider」。ただのサムネイル表示型タブブラウザ?と思ってたんだけど、デモをよーく見てみると、これはタブブラウザというよりは、履歴のサムネイル&ツリー表示機能を持ったブラウザという感じのような挙動を示すようで。
良く出来たものはパクるべきです
という教え(?)に従って、パクってみることにした。
ツリー表示についてはTBEですでに実装済みだったので、とりあえず、タブにサムネイルを表示する所から取り掛かってみた。色々悩んだ末、サムネイルの位置などタブの外観はiRiderを丸パクりすることに(ぉぃ)。
そういえば、サムネイル式のタブを実現するものとしてはTab Sidebarがあるけど、今見たら、それぞれのタブ(のようなもの)に小さなナビゲーションバーが付いてて、また違った方向に進化してってるようですね。閑話休題。
「戻る」「進む」で「現在のタブを開いたタブ」「現在のタブから開いたタブ」に移動する挙動については、戻る・進む用の履歴が無いときにはタブの親子関係を走査する、という形で実現してみた。
ツリー表示といい、このあたりの機能の根幹となる「タブの親子関係の保持」は2年くらい前にはTBEに実装済みだったんで、今回の変更も、表面的な所をちょこっといじるだけで済んでしまった。当時の自分の先見性には感動するね。嘘です。単に浅い考えでオーバースペックの機能を実装してしまったのを今になってようやく有効利用できるようになってきただけです。
なでるインターフェースについては、タブのドラッグ&ドロップとの兼ね合いがあるので、どうしたものかと思案中。
デバッグよりも新機能追加の方がはかどってしまうために要らん機能ばかりが増えていく「Piro拡張化」がまた加速してますよ。
課題は山積み。
――×ボタンドラッグでまとめて閉じる、を実装した。クローズボックスの上でドラッグ開始で「閉じるタブ」の選択操作が始まり、他のタブのクローズボックス上を通過するとそのタブが「閉じるタブ」として選択される。もう一度通過すると選択が解除される。
フォーカス切り替えについては設定でON/OFFという風にするしかないかな?
TBE更新。
タブバーを縦置きした場合、タブの幅のピクセル指定をタブ自体ではなくタブバーの方に設定するようにした。これは、ツリーモードで階層が深くなって各タブに左マージンがつくとタブバーの幅が広がってしまう問題への対処のため。
……だったんだけど、ついでだから、隣にスプリッタを置いて動的にリサイズ可能なようにしてみた。む、これはこれでなんか面白いかもしれないな。
plus7さんの過去のメモを参考に、BXのようなエクスプローラ互換の自動開閉の実装やら何やら、さらに細かいところに手直しを加えて、TBE 2.0として公開した。
激しく非推奨とか自分で書いときながらなんで更新するのかって? そんなの僕のエゴに決まってるでしょう。
サブツリーの開閉のアニメーション表示に対応した。設定の競合は、ツリー表示時には利用できない設定をすべて無効化することにした。
1.14とか1.15とか、もういいかげんメジャーバージョン繰り上げれって感じだったけど、見た目に派手な変更が無かったからズルズルここまで来てしまってた。でも今回のは視覚的に超目立つ。これを機にバージョン番号を2.0に繰り上げますかね。
タブをツリー順に並べ替える処理の効率に改善の余地有りだけど、とりあえずまともに動くようにはなってきた。後最低限必要なのは、他の設定との競合の解決かな。将来的には、サブツリーの折りたたみにも対応できればいいんだけど……
TBEに元からあった縦置きのタブをそのまま使って実現してるので、右に置くことも当然できますよ。
んで、ツリーの開閉機能も付けてみた。 フォーカスが絡むとちょっとややこしいことになるけど。
ということに気がついてしまったので、タブのツリー表示実現に向けて久しぶりにゴリゴリ書いてます。
擬似ツリー表示の時は、タブの並べ替えのアルゴリズムをいじらなあかんとか、ユーザによるタブの並べ替えを制限する必要があるとか、今のままの実装では困るところがあったので、そこにも手を加えつつ。もうちょっとでお目見えできそうですよ。
はっきり言って内部的にはオーバースペックな感じだったタブのグループ化機能、無茶して実装しといて良かったなーと思った瞬間でした。
テストケースを見る限り、HTMLの属性としてイベントハンドラを定義しているケースについては対処可能のようだが、JavaScriptでイベントハンドラを追加している場合については対処不可能だ。
やっぱリ手詰まり。
――マニフェストファイルをいじって、セキュリティの制限を緩くするようにした。僕が把握してる範囲では、攻撃可能な穴はなさげだけれども、穴ってのは大抵、予想もしてないところから見つかるからなあ……まあその時にはその時だ。
調べていて気付いたけど、これは、子タブについての扱いが、コードを書いた時期によって変わってしまっていることが原因だった。ある時期には「タブの要素ノードの配列」、またある時期には「タブのID文字列の配列」、またあるときは「タブのID文字列の配列をパイプ("|")で連結したもの」と、もー、バラバラ。
JavaScriptは型チェックのない言語なので、こういうことがよく起こる。コーディング時に意識を高く保つ必要があるのが、JavaScriptの欠点といえば欠点ですな。
タブのロックやなんかの機能が全然働かなくなっていたことに今頃気付いて原因を調べていた。どうも、これも案の定Split Windowの影響らしい。
TBEでは、要素ノードにonclickとかoncommandとかのイベントハンドラがあった場合にはそれを一旦フックして、イベントハンドラの返り値を取得し、falseが帰ってきたときにはリンクを読み込む処理をキャンセルする、ということをやってるんだけど……どうもSplit Windowの変更が入ってからこっち、onclickその他のプロパティにアクセスしようとしただけでNS_ERROR_NOT_AVAILABLEのエラーが発生するようになってしまったようだ。これは痛い。返り値を取得できなくなってしまったことも痛いんだけど。
かといって、 xpcnativewrappers=noにしつつ完璧なセキュリティ対策を施せるだけの自信もないんだよなあ。
どうしたものか……
ていうか、もう、TBE捨ててイイっすか? 投げ出したくてたまらんのだけど。更新すればするほど糞糞言われるしさ(自分でも言ってるけど)。なんでこんな拷問みたいな事続けてるんだろ……
普通にドラドロするだけでもタブのドロップ位置がズレたりしてたのでついでに直した。今の今まで放置してた辺り、いかに自分が普段この機能を使っていないかが窺い知れるというものですね。