2009年7月28日火曜日

Firefoxのアドオンとか弄る時に必要なメモ Link Gopher改造編 ① XULファイルの弄り方

以前「Firefox3.5にアップグレードしたら、Link Gopherが使えなくなっちゃったのでinstall.rdfを弄って強引にインストールしちゃったぞ」という話をしたが、この前Link Gopherがアップデートされて1.2→1.3.2となり、改造なしでもFirefox3.5にインストールできるようになった。
 しかし1.3.2となったことからいくつかの仕様変更で使い勝手が少々悪くなった。今回はこれを改善する改造の記録である
 ※事前知識について
 今回の話の中で必要な過去に書いたエントリは次の2つ。
Firefoxのアドオンとか弄る時に必要なメモ(xpiパッケージの開き方&戻し方)
Firefox3.5に備えて非対応アドオンを緊急避難的に使えるようにする方法(Firefoxのアドオンとか弄る時に必要なメモ install.rdfでできること)

●バージョンアップして面倒になったの部分。  今回の仕様変更は配布ページによると以下のようになっている

Since version 1.2: * Add feature to filter links.  全リンクの中から文字列でリンクを抽出(filter)する機能を追加
* Reduce the space used in the status bar from "Extract Links" to just "Links."  ステータスバーにおける表記を「Extract Links」から「Links」に変更してスペースを削減
* Remove left clicking action. (You must now right click on "Links" to bring up the context menu.)  左クリックによる起動を削除(「Links」を右クリックして、コンテキストメニューを開かなければならない)
* Add documentation (accessible by right clicking on "Links" and choosing "About Link Gopher").  Link Gopherのドキュメントへのリンクの追加(「Links」右クリックの「About Link Gopher」を選択すればアクセスできる)
* Switch variables from global to local to stop polluting the JavaScript global namespace.  JavaScriptのグローバルな名前空間を汚さないように、グローバルからローカルに変数(名)を切り替えた。
 (訳:えふすく)
問題は3番目。今までクリック一発で起動していたものが無駄に2つ必要になってしまうし、抽出機能もこの後自分で改造していたので必要ない。
 ということで今回の改造のテーマは、1.2のインターフェイスのまま1.3の全リンク抽出を起こすこと、ということで

●ワンタッチに戻すまで

 まずは今回の改造対象、ユーザインターフェースを弄るので当然XULファイルのlink-gopher.xulということになる
 下はLinkGopher1.3.2を展開したときのフォルダツリーだが、1.2も1.3.2も変わっていない。
\解凍したフォルダ
│  install.rdf(アドオン固有の情報を記したメタデータファイル。インストール時に参照される)
│  license.txt(ライセンス記述用のテキストファイル。ここではGPLv3の全文が入ってた)
│  chrome.manifest(アドオンの本体とインストーラを結びつけるためのパス変換ファイル)
└─\chrome(アドオンの本体)
 └─\content(アドオン本体の中でアドオンの機能を司る部分)
   extract-links.js(Javascriptファイル。アドオンの処理を司る)
   link-gopher.xul(xulファイル。ユーザインターフェイスを司る)
相変わらずシンプルで改造するにも解説するにも助かる内容だったりする。
 開くファイルが変わるだけで、XULファイルもテキストエディタで開くことができる。オススメのエディタについては前回を参照のこと。
 さて、ソースは以下のようになっている(機能とは関係ないライセンス部分を除く)
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="link-gopher-overlay">
 <script type="application/x-javascript" src="extract-links.js"/>
 <statusbar id="status-bar">
 <statusbarpanel id="link-gopher-panel" label="Links" context="statusbar-menu" />(ステータスバー内のパネル「Links」)
 <popup id="statusbar-menu" position="before_end">(「Links」を右クリックした場合のポップアップ)
 <menuitem id="about-link-gopher" label="About Link Gopher" oncommand="linkgopher_callbackAbout();"/> (Link Gopherのドキュメントサイトへのリンクに飛ぶ)
 <menuitem id="extract-links-by-filter" label="Extract Links by Filter" oncommand="linkgopher_callbackExtractLinksByFilter();"/>(Filetrしたリンク一覧を生成)
 <menuitem id="extract-all-links" label="Extract All Links" oncommand="linkgopher_callbackExtractAllLinks();"/>(リンク一覧を生成【1.2までの既存の機能】)
 </popup>
 </statusbar> </overlay>
たった11行。中身もシンプル。
実際の画像
 実際の画面とその中でlabelとoncommandに注意しながら対応する項目とJavaScriptに渡す命令を組み合わせを探すと、
 label="Links"
 oncommand="linkgopher_callbackExtractAllLinks();"
 ということがわかる。
 よって改造としては、
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="link-gopher-overlay">
 <script type="application/x-javascript" src="extract-links.js"/>
 <statusbar id="status-bar">
 
 <statusbarpanel id="link-gopher-panel" label="Links" onclick="linkgopher_callbackExtractAllLinks();"/>

 【oncommandではなくonclickなのはなぜか動かないから】
 </statusbar> </overlay>
としてLink Gopherを再パッケージすることで、再び1クリックでLink Gopherを起動できるようになる。
 context属性と「左クリック廃止」
 XULではcontext属性で指名したidのpopupを呼び出すことができるが、左クリックはできない。
 これはcontext属性が「コンテキストメニューの表示」すなわち「この環境では右クリック」に対応しているかららしい。
 逆にonclick属性はクリックすれば右でも左でも関係なく発動するが、クリックできないアクセス(要するにマウス以外)には対応できないらしい。
 クロスプラットフォームを目指すXULとしてはそういうものはできるだけ排してoncommand属性が望ましいらしい。
 
 何が言いたいのかと言うと、Link Gopher1.3.2で「左クリックが廃止」されたのは、コンテキストメニューを出したいがために、ステータスバー側にcontextを設定してしまったからのようで。
ということで、残りはいよいよ機能を司るJavaScriptファイル。これを完成させるとちょっといろいろ楽になる。

このエントリーをはてなブックマークに追加

0 件のコメント:

アクセス解析