diff options
Diffstat (limited to 'files/ja/archive/mozilla/xul/introduction_to_xul/index.html')
| -rw-r--r-- | files/ja/archive/mozilla/xul/introduction_to_xul/index.html | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/files/ja/archive/mozilla/xul/introduction_to_xul/index.html b/files/ja/archive/mozilla/xul/introduction_to_xul/index.html new file mode 100644 index 0000000000..56c6b410f4 --- /dev/null +++ b/files/ja/archive/mozilla/xul/introduction_to_xul/index.html @@ -0,0 +1,261 @@ +--- +title: Introduction to XUL +slug: Archive/Mozilla/XUL/Introduction_to_XUL +tags: + - MDC Project + - NeedsTechnicalReview + - XUL + - 移行 +translation_of: Archive/Mozilla/XUL/Introduction_to_XUL +--- +<p><em>This article is a bit outdated and needs to be updated.</em></p> + +<h2 id=".E5.89.8D.E7.BD.AE.E3.81.8D" name=".E5.89.8D.E7.BD.AE.E3.81.8D">前置き</h2> + +<p>Mozillaはコンフィグレーション可能で、ダウンロード可能な chrome(クロム)をもっている。 つまり、メインウィンドウの組み立てやさらにコントローラの有無でさえもアプリケーションに ハードコーディングされているのではなく、別のUI記述から読み込んで来る。実際、 Mozillaのウィンドウ(とダイアログ)のほとんどはこの機構を用いて書かれている。 XUL(そのつづりから"ズール"と発音される.また"XMLベースのユーザインタフェース言語"の略である)は これらのUI記述を組み立てるための言語の我々の名前である。</p> + +<p>ウィンドウ クロムはブラウザの中でHTMLコンテンツを管理しているのと同じ レイアウトエンジンにより表示され、管理される。そこでは、UI記述はHTML 4と大変良く似ている. XULはXMLの1アプリケーションである。実際、XULはいくつかのエレメント型に特定の意味を定義した XML<em>そのものであり</em>、XUL記述の中にHTMLが点在していても構わないのである。</p> + +<h2 id=".E7.94.A8.E8.AA.9E" name=".E7.94.A8.E8.AA.9E">用語</h2> + +<p>"XPFE"はMozillaブラウザのクロスプラットフォームフロントエンドを表す 用語としてMozillaの組織では利用されている、なぜならXとCは,もしハンマーで叩いて長く硬くしたら よく似ているからである。その趣旨はクロスプラットフォームアプリケーションを作る目的で設計された ツールの集まりからブラウザやメールクライアントのようなクロスプラットフォームアプリケーションを構築することであり、 汎用のクロスプラットフォームアプリケーションフレームワークを実装することでは<em>ない</em>。 これは既に実行に移されており、大変大きな仕事である。我々はブラウザのようなネットワークアプリケーションを構築するのに 適したクロスプラットフォーム機能を提供するするつもりであり、クロスプラットフォーム機能はすでにMozillaのHTMLレイアウト エンジン,Geckoに実装済である。</p> + +<p>"クロスプラットフォームUI"という用語は幾分紛らわしい。UI設計者は複数のプラットフォームで動作するUI記述を作ることが できる。しかし、ダイアログのボタンのようなものの適切な配置に関して、さまざまなプラットフォームの異なる考えを考慮した 適切なUL記述をおこなうには若干のプラットフォームに依存した記述が必要になる。 XUL仕様単独では、ある程度クロスプラットフォームが可能というだけである。 UI設計者とビルドエンジニアは少なくともいくつかのプラットフォーム依存XUL文書を分けてメンテナンスする必要があるだろう。</p> + +<p>"XPツールキット"はXPFEと幾分類似している。けれども前者は後者に比べてより具体的であり、 従って完全に置き換えられるものではないがなぜ2つの用語が存在するのかについては誰も確かではない。</p> + +<p>"XUL"はすでに紹介した。これは Mozilla のウィンドウのほとんど,特にメインブラウザウィンドウを含む、の レイアウトを記述するのに利用するXMLの1アプリケーションである。</p> + +<h2 id=".E7.AF.84.E5.9B.B2" name=".E7.AF.84.E5.9B.B2">範囲</h2> + +<p>この文書は要求仕様を述べることは試みていない。我々は現時点での"要求仕様"文書をもっていない。 <a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../aom/AOM.html">XPツールキットアーキテクチャ</a>はこれらに関する理解を得るには良い場所である. この文書は, Mozilla フロントエンドアーキテクチャに関する簡単なイントロダクションを含んでおり,UIの構築に関する 説明に的をしぼっている.それは、いつものように不完全である.</p> + +<p>Mozilla アプリケーションはダイアログボタンやメールボックスフォルダのような"小さな"コンポネントから構成される。 これらをまとめてウィジェットと呼ぶ。ウィジェットにより描画とユーザとの対話は個々のウィジェットの制御下に置かれ、 それはウィジェットが生成された時に設定される。 ウィジェットの配置と共に,ウィジェット間のお互いの会話,また時にはそれらの設定が スクリプトによって指定されるUIレイアウトによって制御される。そのスクリプトの構造は この文書、あるいは他の関連する文書にて定義される。</p> + +<p>ウィジェットは主としてアプリケーションが自分自身に含んでいる断片であり、一般には ウィンドウの領域の長方形に対応する。ウィジェットは一般に動的にロードされるライブラリ に分けて集められている。あるウィジェットはウィンドウの一部(ツールバーとかツールバーを集めたもの) をもつことを想定しているかも知れない。あるいはウィンドウと一緒に動作すること、あるいはウィンドウなし で動作することを想定しているかも知れない(プラットフォームに依存したメニューバー)。 全くアプリケーションのUIの一部ではないのかもしれない。</p> + +<p>ウィジェットはコンパイル時に前もって定義された振舞をもつ。 ボタンはマウスに反応し、ツールバーはボタンを集めたコンテナとして動作する。 ウィジェットがそのアプリケーションにもたらす効果はあらかじめ定義されたアプリケーションの振舞と ウィジェット間のリンクの組合せとして定義される。このリンクは XULに含まれているJavaScriptによって, あるいはXULから構築された後,コンテンツモデルを走査し、イベントリスナを仲介するアプリケーションコードに よってなされている。一般に、実際のアプリケーションはこの2種類の組合せを利用している。</p> + +<p>アプリケーションは、例えば"ファイルを開く"コマンドを受けたとき何をするかについては 前もって知っている。"開く"ボタンは単なるボタンである。ボタンは一般にはリンケージのために 単純なJavaScriptを利用して、コマンドを処理するアプリケーションに送信する。</p> + +<p>我々は最初に明白なUIコンポネント、ツールバー、メニュー、ダイアログに焦点をあてたいと思う。 概念的に、XUL言語はこの(全ウィンドウの一番上にメニューバーをもつようなあるOS上で動くアプリケーション) ように指定することによって、いっしょに動作するコンポネントのパッケージを指定してテキストエディタで編集することができる。:</p> + +<pre class="eval">main window containing + menubar area at top across width of window containing + menubar (and its contents) + toolbar area below menubar across width of window containing + main toolbar (and its contents) + application-specific content area below toolbar area +</pre> + +<h2 id="XUL.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E6.A7.8B.E9.80.A0" name="XUL.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E6.A7.8B.E9.80.A0">XULファイルの構造</h2> + +<p>我々が選んだ言語は表示情報を<a class="external" href="http://www.w3.org/TR/REC-CSS2">CSS</a>で味付けした <a class="external" href="http://www.w3.org/XML/">XML</a>である。 XMLの特定のアプリケーションの詳細、 つまり特定のツールバーに関する文法については 特定のアプリケーションについて記述した別のドキュメントに委ねる 最新のリストについては<a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../index.html">XPツールキット インデックス</a>をチェックすること。</p> + +<p>XULはウィンドウのレイアウトを記述するための言語なので、 このドキュメントが対象とするトピックとXUL[windows.html windows]について記述した 別のドキュメントで重複する部分がある。XULのウィンドウに関する記述を書くという作業は、 文法がXMLである(HTML 4とは違わない)ということ、XULに特有のエレメントがあることを除いて 基本的にHTMLでコンテンツを書く作業と同じようなものである。 これらのエレメントは以下に述べるようにウィンドウの振舞と結びつけるウィジェットと特定のインフラである。</p> + +<p>XULドキュメントを書くことの細部のほとんどは、XMLドキュメントを書くこととほとんど同じである。 XMLドキュメントの記述については他の優れたXMLに関するドキュメントに譲ることにする。そのような ドキュメントは存在するに違いないと思うが我々はまだ見たことがない。 本ドキュメントではXULに特化した点に集中することとする。</p> + +<h3 id=".E5.8D.98.E8.AA.9E.E3.81.AE.E5.A4.A7.E5.B0.8F.E6.96.87.E5.AD.97.E8.AD.98.E5.88.A5.E3.81.A8.E5.90.8D.E5.89.8D.E7.A9.BA.E9.96.93.2C.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.BF.E3.82.A4.E3.83.97" name=".E5.8D.98.E8.AA.9E.E3.81.AE.E5.A4.A7.E5.B0.8F.E6.96.87.E5.AD.97.E8.AD.98.E5.88.A5.E3.81.A8.E5.90.8D.E5.89.8D.E7.A9.BA.E9.96.93.2C.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.BF.E3.82.A4.E3.83.97">単語の大小文字識別と名前空間,ファイルタイプ</h3> + +<p>XMLはもちろん大文字小文字を区別する。XULでも同じである。 我々の現在のコードはこの 特にHTMLネームスペースのタグと属性についてはこの制限について厳しくしない傾向にある。 タグと属性についてはルールとして、<a class="external" href="http://www.w3.org/TR/WD-html-in-xml/">XHTML ワーキングドラフト</a> の中で提案されているように必ず小文字で書くように今後変わっていくであろう。</p> + +<p>Mozillaでは XULファイルに特別の意味をもたせている。これはこのことによってその中からUI記述を見つけることを 期待している。この理由により,我々は.xulの拡張子をもつファイルに対応するMIMEタイプ"text/xul"を定義している。 (標準に準拠するために,おそらくこのmimeタイプを"text/x-xul"だかなにかに変更する必要が生じてくると思われる) この種のファイルは"text/xml"のファイルと同じパーザを用いて処理される(また、それゆえに"text/xml"タイプの ファイルがそうであるようにXMLの文法ルールに従うことになる).(*.xmlという名前の)XMLファイルからXULドキュメントを 読み込むことは可能である。その結果生じるUIはXMLコンテンツモデルを利用して生成されるであろう。XULコンテンツモデルは *xulファイルから生成される。XMLドキュメントは基本DOM Level1 Core APIをサポートする。 HTMLドキュメントがDOM Level 1 HTML APIをサポートするのと同じように、XULドキュメントは拡張セットをサポートする。 Mozilla のXULコンテンツモデルは ローカルのファイルとリモートのファイルのマージのような素晴らしい機能もサポートする。 詳細は<a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../xulrdf.htm">XULとRDFドキュメント</a>を参照のこと。 一般には、XULは*.xulファイルに格納したいと思うだろう。</p> + +<p>XULファイルはXULに特化した特別のエレメント:XULエレメントと同様に、XMLエレメントやHTMLエレメントも含むことができる。 XULの(もしHTMLエレメントが使われているならHTMLも)<a class="external" href="http://www.w3.org/TR/REC-xml-names/">ネームスペース</a>宣言が ファイル中に含まれていなければならない.ネームスペースは慎重に取り扱う必要がある.正しいネームスペースの使用によって ネームスペースが個々のアトリビュートにではなく,タグのためだけに利用されることを必要とする この規則に対するまれな例外がバグである。</p> + +<h3 id="XUL.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E5.BA.8F.E6.96.87" name="XUL.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E5.BA.8F.E6.96.87">XULファイルの序文</h3> + +<p>XULはXMLである。また、正しいXULファイルは標準のXMLバージョンとDOCTYPE文で始まる。</p> + +<p>XMLでは暗黙の表示セマンティクスは用意されていないので常にスタイルシートと関連づけられなければならない。 Mozillaは標準のスタイルシート"xul.css"をもっている。 常に、最初にこのxul.cssを読み込むようにしなければならないが、繰り返しの処理命令を利用したがるのと同じように たくさんのスタイルシートを読み込むことができる。 そして最後に、ドキュメント中で利用するネームスペースは全て宣言されている必要がある。 よって、XULファイルの以下のような始まりになるだろう</p> + +<pre class="eval"><?xml version="1.0"?> +<?xml-stylesheet href="<a class="external" rel="freelink">chrome://global/skin/xul.css</a>" type="text/css"?> +<!DOCTYPE window> +<window xmlns:html="<a class="external" href="http://www.w3.org/1999/xhtml" rel="freelink">http://www.w3.org/1999/xhtml</a>" + xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> +</pre> + +<p><br> + HTMLネームスペースはもちろん標準のものである。XULネームスペースは明らかに一時的なものであるが、 少なくとも発音の説明には役にたつ。 上記の例では暗黙のXULネームスペースを利用していることに注意するように. これは任意である.本ドキュメント中の他の例では折に触れて、ネームスペース利用の度にいちいち 明示することの問題点について論じたいと思う.</p> + +<p><code>chrome</code> プロトコルは クロム記述中に含まれているファイルの正確な位置が移動されても XULソースにはなんら影響がないようにしたMozillaのもう1つの拡張である。 したがってこれは遠回しである.いつか[packages.html パッケージ]にこの機構についての 完全な記述が載るであろうが、現時点ではいいドキュメントなのだが幾分時代遅れになったのが <a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../ConfigChromeSpec.html">設定可能なクロム</a>にある。</p> + +<h3 id=".E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.86.E3.82.A3.E3.83.B3.E3.82.B0" name=".E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.86.E3.82.A3.E3.83.B3.E3.82.B0">スクリプティング</h3> + +<p>XULインタフェースはそれがプログラムされるまでは接続されていないウィジェットを集めたものに過ぎない。 "プログラミング"は複数のウィジェットを結びつけて特別の機能を与えるJavaScriptのように簡単にもなり得るし、 なんでもできるC++アプリケーションコードのように複雑にもなり得る。 本稿ではアプリケーションプログラミングはその範疇を越えるものと考え、JavaScriptにしぼることにする。</p> + +<h4 id="JavaScript" name="JavaScript">JavaScript</h4> + +<p>XULにはJavaScriptを含んだHTMLコンテンツを含めることができる。JavaScriptの関数もHTMLと同じように 書き足すことができる.XULファイルには<code><head></code>セクションがないので スクリプトは他のコンテンツに混ざっていて,HTMLネームスペースの<code><script></code>タグで切り分けられる。</p> + +<pre class="eval"><html:script type="application/x-javascript"> + // dialog initialization code + function InitWindow() { + var checkbox = document.getElementByID("remember"); + if (checkbox) + checkbox.checked = true; + } +</html:script> +</pre> + +<p>JavaScriptはHTMLドキュメントの時と同じように<code>onClick</code>ハンドラと同種のものとして 参照が可能である.JavaScriptのバリューを受け入れるアトリビュートのリストのために <a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../index.html">index</a>で参照されている個々のウィジェットのドキュメントを参照してください。</p> + +<p>JavaScriptは最も安全に別のファイルに分けて以下のようにしてXULファイルに取り込むことができる</p> + +<pre class="eval"><html:script language="javascript" src="our.js"/> +</pre> + +<p><br> + あるいはXMLコンテンツのように見えるかもしれないJavaScriptがXMLパーザを塞ぐかも知れないのを防ぐために CDATAセクションのコンテンツとして追いやることもできる(例えば,<code><</code>キャラクタ)</p> + +<pre class="eval"><html:script type="application/x-javascript"> + <![CDATA[ + function lesser(a,b) { + return a < b ? a : b; + } + ]]> +</html:script> +</pre> + +<h4 id="JavaScript.E3.81.AE.E6.8B.A1.E5.BC.B5" name="JavaScript.E3.81.AE.E6.8B.A1.E5.BC.B5">JavaScriptの拡張</h4> + +<p>Mozillaでは、厳密にはブラウザの環境に含まれていない新しい機能をサポートするために JavaScriptにいくつかの拡張を行う必要が生じた。 これらは標準に準拠していないがもちろん今では変更の余地は残されている。 個々の拡張は拡張を必要とする機能に関する個別のドキュメントに記述されている。</p> + +<h4 id="DOM.E3.81.AE.E6.8B.A1.E5.BC.B5" name="DOM.E3.81.AE.E6.8B.A1.E5.BC.B5">DOMの拡張</h4> + +<p>XULはHTMLと同じものではないので、XULドキュメントがDOMレベル1コアAPIをサポートしていても XULドキュメントはDOMレベル1HTML APIをサポートしない。しかしながら、MozillaはHTMLを拡張した後合わせられた XULコンテンツモデルのために拡張DOM機能性をサポートする。 現時点ではこれらの追加されたDOMメソッドは、コードがこの情報を探すのに最も敵した場所だけれども利用可能である。 これらのインタフェースはディレクトリ<code>mozilla/rdf/content/public/idl</code>から見つけることができる</p> + +<h5 id="XULDocument" name="XULDocument">XULDocument</h5> + +<p><code>XULDocument</code> は <code>HTMLDocument</code>の拡張のときと同じ方法で <code>Document</code>を拡張したものである。</p> + +<pre class="eval">interface XULDocument : Document { + Element getElementById(in DOMString id); + NodeList getElementsByAttribute(in DOMString name, in DOMString value); +}; +</pre> + +<p><code>getElementById</code> はHTMLの<code>getElementById</code>と同じように動作する。</p> + +<p><code>getElementsByAttribute</code> は指定された名前の属性が与えられた値をもっている<code>Elements</code> のリストを返す。 "*" の<code>値</code>はその属性をもつ全てのエレメントを表すワイルドカードである。</p> + +<h5 id="XULElement" name="XULElement">XULElement</h5> + +<p><code>XULElement</code> は <code>Element</code>を拡張したものである。</p> + +<pre class="eval"><xul:window xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> + <broadcaster id="canGoBack"/> + <titledbutton src="resource:/res/toolbar/TB_Back.gif" + align="bottom" value="Back" onclick="BrowserBack()"> + <observes element="canGoBack" attribute="disabled"/> + </titledbutton> +</window> +</pre> + +<p><code>getElementsByAttribute</code> 関数は<code>XULDocument</code>に同じ名前の関数があるが、 このバージョンは与えられたエレメントの基準を満たしなおかつ与えられたエレメントの子孫(CSSのセレクタ用語)である エレメントのみを返すものである。</p> + +<p><code>XULElement</code>もまた、XULドキュメントローダによって自動的に実行される、ブロードキャスタ間を仲介するという機能, 従って通常のJavaScriptでは利用されない他のメソッドをサポートする。</p> + +<h3 id="XUL_.E3.82.A8.E3.83.AC.E3.83.A1.E3.83.B3.E3.83.88" name="XUL_.E3.82.A8.E3.83.AC.E3.83.A1.E3.83.B3.E3.83.88">XUL エレメント</h3> + +<p>上述したように、XULファイルは、ほとんどXMLの文法に従ったHTMLファイルである。 XULファイルはHTMLエレメントしか含んでいないかもしれないし、完全に機能本位のものであるかもしれない。 しかし、XULではいくつかのエレメント型を独自に定義しており、それらはウィンドウに機能性を追加するものである。</p> + +<h4 id=".E3.82.A6.E3.82.A3.E3.82.B8.E3.82.A7.E3.83.83.E3.83.88" name=".E3.82.A6.E3.82.A3.E3.82.B8.E3.82.A7.E3.83.83.E3.83.88">ウィジェット</h4> + +<p>ウィジェットは一般にボタン、テキストボックス、ツリーコントロールなど、フォームコントロールのようなオブジェクトである。 ウィンドウには他のHTMLコンテンツと同じように簡単に(<code>html</code>ネームスペースを使って) HTML形式のエレメントを含めることができる。(でも,そのHTMLエレメントを<code><form></code>タグでくくる必要はない) 実際、各ウィジェットではそれ自身を記述するするためのXML文法を独自に定義している.詳細については <a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../index.html">索引</a>で参照されているウィジェットのドキュメントを参照されたし。</p> + +<h4 id=".E4.BB.96.E3.81.AE.E3.82.A4.E3.83.B3.E3.83.95.E3.83.A9" name=".E4.BB.96.E3.81.AE.E3.82.A4.E3.83.B3.E3.83.95.E3.83.A9">他のインフラ</h4> + +<p>ウィジェットはちょうどHTMLのようにJavaScriptイベントハンドラをもっていることがあり、 それはJavaScriptとブロードキャスタノードを使ってお互いに結びつけられている。 ブロードキャスタノードはXUL記述の中で<code><broadcaster></code>エレメントで宣言されており、 ウィジェット間の状態変化のやりとりに利用される。1つ、あるいは2,3のウィジェットでそのうちの1つの属性の値が ブロードキャスタノードに結びつけるように組み合わせるようなことも可能である。この結びつけはXULではこのように定義される:</p> + +<pre class="eval"><xul:window xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> + <broadcaster id="canGoBack"/> + <titledbutton src="resource:/res/toolbar/TB_Back.gif" + align="bottom" value="Back" onclick="BrowserBack()"> + <observes element="canGoBack" attribute="disabled"/> + </titledbutton> +</window> +</pre> + +<p>しかし,ブロードキャスタをウィンドウに配置することはアプリケーションコード次第である。 もし必要であれば、はさむことが可能である。</p> + +<p>ブロードキャスタはいろんな状態変化をブロードキャストすることができ、 他のXULウィジェット中の属性の値に結びつけることができる。 より詳しいドキュメントについては[broadcasters.html ブロードキャスタとオブザーバ]を見ること。</p> + +<h2 id=".E3.82.A6.E3.82.A3.E3.83.B3.E3.83.89.E3.82.A6.E3.81.AE.E4.BE.8B" name=".E3.82.A6.E3.82.A3.E3.83.B3.E3.83.89.E3.82.A6.E3.81.AE.E4.BE.8B">ウィンドウの例</h2> + +<p>下記は完全なメニューバーとHTMLコンテンツエリアをもったウィンドウについての記述をした完全なXULドキュメントの例である。 メニューバーには<em>File</em>というメニューが1つあり、選択するとデバッグコンソールに"Hello World!"と書き出す メニューアイテムを1つもっている。 コンテンツエリアにはファイル contentframe.htmlの内容を表示する。このコードは本ドキュメントでは明確には触れていないような 実際のアプリケーションでのウィンドウを作る際に役にたついくつかの概念を紹介している。詳細はリンクに従うこと。</p> + +<pre class="eval"><?xml version="1.0"?> +<?xml-stylesheet href="<a class="external" rel="freelink">chrome://global/skin/xul.css</a>" type="text/css"?> +<!DOCTYPE window> +<window id="main-window" xmlns:html="<a class="external" href="http://www.w3.org/1999/xhtml" rel="freelink">http://www.w3.org/1999/xhtml</a>" + xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> + <menubar> + <menu name="File"> + <menuitem name="Hello World!" onclick="dump('Hello world!\n');"/> + </menu> + </menubar> + <html:iframe id="content-frame" src="contentframe.html" flex="100%"/> +</window> +</pre> + +<p>この例の最初からwindowタグまでは標準に準拠した[#preamble プリアンブル]である。</p> + +<p>この例のwindowタグにはidが付与してあることに注意。厳密言うと、この例では必要ないものである。 しかしながら実用上、XULのほとんどのノードはこのような限定子をもっており、これがあるとAOMの getElementByIdメソッドを利用しての検索が簡単になる。 限定子は他にもXUL中の個々のエレメントに対しHTMLエレメントと同じ#文法を使って同じルールが適用できるのでCSSにも役にたつ。</p> + +<pre class="eval">#main-window { + display: block; + width: 100%; + height: 100%; +} +</pre> + +<p>例えば、上記のスタイルルールはメインウィンドウに当てはまる。 ウィンドウがその中にコンテンツエリアを幅と高さをいっぱいいっぱいに取るように指定している。</p> + +<p>例の中の次のエレメントはメニューバーの宣言をしている。そのメニューバーには "File"というメニューが1つある。このメニューにはメニューアイテムが1つ あり、簡単なJavaScript <code>onclick</code>ハンドラがメニューアイテムに張り付けられている。 このハンドラはメニューがユーザに選択されたときに発火し、デバッグ用コンソールに "Hello world!" のテキストをダンプする。(詳細は[menus.html メニューバーとメニュー]を参照のこと)。</p> + +<p>最後にHTML <code>iframe</code>がある.frameは<code>html:</code>の接頭辞を伴うことに注意。 これはframeがHTMLオブジェクトであり,デフォルトのXULネームスペースの中で使われているからである。 grameには他にも<code>flex</code>という特別の属性がある.これはどれだけのframeがウィンドウ中の領域に 引き伸ばすことができるかを示している(詳細については[boxes.html ボックスシステム]を参照のこと)。</p> + +<h2 id=".E7.90.86.E6.83.B3.E7.9A.84.E3.81.AA.E5.B0.86.E6.9D.A5.E3.81.AE.E6.96.B9.E5.90.91.E6.80.A7" name=".E7.90.86.E6.83.B3.E7.9A.84.E3.81.AA.E5.B0.86.E6.9D.A5.E3.81.AE.E6.96.B9.E5.90.91.E6.80.A7">理想的な将来の方向性</h2> + +<p>理想的にはXUL UI記述のパッケージは以下のような1つのファイルとして出荷されるのが望ましい:</p> + +<pre class="eval"><?xml version="1.0"?> +<?xml-stylesheet href="xul.css" type="text/css"?> +<!DOCTYPE package> +<package xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> + <window id="main"> + ... + </window> + <window id="help"> + ... + </window> +</package> +</pre> + +<p>そしてウィンドウ(あるいは他のサービス)は最初にパッケージ全体をパージングして、次にその結果得られた内容からウィンドウ に関する情報を取り出してインスタンス化される、というのが望ましい。</p> + +<pre class="eval">Package *package = LoadPackage("<span class="nowiki">http://xxx/package.xul</span>"); +InstantiateWindow(package, GetNodeWithID("main"); +</pre> + +<p><br> + この素晴らしい仕組みは今はまだ動かない。というのはコードがXMLドキュメントをパージングした結果が ウィンドウであることを期待するからである。よって現在はXULファイルには少なくとも1つのウィンドウを含んでいなくてはならない。</p> + +<pre class="eval"><?xml version="1.0"?> +<?xml-stylesheet href="xul.css" type="text/css"?> +<!DOCTYPE window> +<window xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> + ... +</window> +</pre> + +<p>我々は将来、さらに多くの"パッケージ"を実装していきたいと思う。</p> + +<h2 id=".E5.9B.BD.E9.9A.9B.E5.8C.96" name=".E5.9B.BD.E9.9A.9B.E5.8C.96">国際化</h2> + +<p>実用上の理由により,UI記述についてのロケールに依存した属性はローカライズの対象となる 特定の部分だけのUI記述のサブセットを記述したローカライズ個別のファイルでもっとも楽しんで 開発された(そして、おそらく配布されるであろう)。それはローカライズされた文字列の個々のファイルである。</p> + +<p>国際化については<a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../../projects/intl/xul-styleguide.html">XULコーディングスタイルガイドライン</a> のドキュメントの中でもっと詳細に議論されている。手短に言って、Mozillaはそのメカニズムとして <a class="external" href="http://www.w3.org/TR/1998/REC-xml-19980210#sec-references">XMLエンティティ</a>を採用した。 エンティティはその言語の1機能であり、したがって本文書の扱う範疇を越えている。XULファイルはロケールに 応じて変化するコンテンツを代わりに利用することで簡単にローカライズが可能である。 ローカライズされたテキストは別の<a class="external" href="http://www.w3.org/TR/1998/REC-xml-19980210#sec-prolog-dtd">DTD</a> か、あるいはDTDの断片で定義されていなければならない。システム全体は個となったロケール独自のDTDによって設定 され、そのDTDは実行時にその時のロケールの設定にしたがって所定のXMLファイルによって選択される。 Mozillaはこの選択をローカライズされたXMLファイルがそのDTDを指定していれば <a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../../projects/intl/xul-l10n.html#l12ydependency">XULのローカライズに関して</a> で概説されているように <a class="external" href="http://www.mozilla.org/xpfe/xptoolkit/../ConfigChromeSpec.html">chrome URL</a>を用いて自動的に行う。</p> |
