======HTML====== =====概要===== 各ユニットはデフォルトでは1つのHTMLファイルを持ちます(BitsmistJSではスキンと呼びます)。各ユニットのHTMLファイルは、ロードしてユニットに適用(ノードに追加)される必要があります。複数のHTMLファイルを切り替えて表示したり、逆に全くHTMLを使用しないユニットを作成することもできます。これらの機能は、SkinPerkによって処理されます。さらにShadow DOMの適用も、SkinPerkによって行われます。 ユニットは初期化中に"basic.transform"スペルを使い、beforeTransform・doTransform・afterTransformイベントをトリガーします。SkinPerkはbeforeTransformでHTMLをロードするイベントハンドラをインストールし、doTransformでロードしたHTMLを適用するイベントハンドラをインストールします。 =====設定===== SkinPerkの設定は"skin"セクションに記述します。SkinPerkに対する設定は"skin.options"セクションに、各HTMLに関する設定は、"skin.skins"セクション配下にスキン名をキーに記述します。スキン名は後述の[[#切り替え|スキンの切り替え]]時に指定する名前となります。デフォルトのスキンに関する情報は"default"セクションに記述します。なお"default"セクションが存在しない場合は、デフォルトのファイルをロードします。 _getSettings() { return { "skin": { "options": { "skinRef": True, }, "skins": { "default": { "type": "URL", "rootNode": "/units/default.html" }, "skin2": { "type": "HTML", "rootNode": "
" } } } } }
SkinPerkの設定の詳細については以下をご覧ください。 * [[ja:bitsmist-js-core:reference:perk:skin-perk#設定|リファレンス - パーク - SkinPerk - 設定]] =====ロード===== SkinPerkはbeforeTransformイベントでHTMLをロードします。その際、ロードしたHTMLを元にTemplateノードを作成し、ユニットのインベントリのbasic.unitRootにセットします。この時点ではまだ、画面には表示されません。 HTMLのロード元としては、ファイル・ノード・固定のHTMLの3種類からロードすることができます。何も設定を記述しない場合、デフォルトのパスとファイル名を使ってHTMLファイルをロードします。 ====ファイル==== ===デフォルトのパスとファイル=== "system.skin.options.path"と"skin.options.path"を繋げたものが、デフォルトのパスとして使用されます。もし設定が存在しない場合はそれぞれ、"system.unit.options.path"と"unit.options.path"が代わりに使用されます。 また、タグ名に拡張子"html"をつけたファイル名を、デフォルトのファイル名として使用します。 ==ファイル名やパスを指定する== もし、ロードするパスやファイル名を変更したい場合は、設定に記述します。 _getSettings() { return { "skin": { "options": { "path": "my-skinpath", "fileName": "my-skinfile", }, } } } URLを使用したい場合は、skinRefオプションを使用します。 _getSettings() { return { "skin": { "options": { "skinRef": "https://example.com/my-skinpath/my-skinfile.html", }, } } } または"skins.default"セクションに記述します。 _getSettings() { return { "skin": { "skins": { "default": { "type": "URL", "URL": "https://example.com/my-skinpath/my-skinfile.html", }, } } } } ===HTMLが不要な場合=== もし、ユニットがHTMLファイルを全く持たない場合、設定にそう記述する必要があります。 _getSettings() { return { "skin": { "options": { "skinRef": false, }, } } } そうでないと、ユニットがデフォルトのHTMLファイルをロードしようとして404エラーが発生し、初期化が中断してしまいます。 ====固定のHTML==== 設定にHTMLを記述することで、そのHTMLを元にTemplateノードを作成し、それを表示します。Webpackなどを使用すれば、HTMLは外部ファイルに記述しておきながら、一つのファイルにまとめることも可能です。 _getSettings() { return { "skin": { "skins": { "default": { "type": "HTML", "HTML": "
" }, } } } }
====ノード==== 自身のユニット内のノードのinnerHTMLを元にTemplateノードを作成し、それを使用します。なお、ノードを指定するためにはそのノードが含まれるユニットのHTMLをあらかじめロードしておく必要があるため、最初はファイルか固定のHTMLでロードしておかなければなりません。そのため、切り替え用のHTMLを指定するために使用されます。 _getSettings() { return { "skin": { "skins": { "default": { "type": "node", "selctor": "template#grid" }, } } } } =====適用===== ロードしたHTMLは、doTransformイベントでユニットに適用されます。具体的には、ユニットのinnerHTMLが""(空文字)で初期化された後、Templateをクローンしたノードがユニットに追加されます。 =====切り替え===== "basic.transform"スペルを使い、複数のHTMLを状況に応じて、切り替えることができます。その際、初期化と同じようにHTMLのロードと適用が行われます。スペルの引数には切り替え先のスキン名を指定します。 this.cast("basic.transform", {"skinName": "skin2"}); 初期化時のデフォルトHTMLのロードと適用にも、"basic.transform"スペルが使用されています。 HTMLを切り替えて使用する場合、あらかじめ設定の"skin.skins"セクションに、切り替え先のHTMLの設定を記述しておく必要があります。 _getSettings() { return { "skin": { "skins": { "skin2": { "type": "HTML", "HTML": "
" }, } } } }
=====Shadow DOM===== BitsmistJSでは、各ユニットに"open"、"closed"のいずれのShadow DOMも適用することができます。Shadow DOMを使用することで、各ユニットの独立性が上がります。Shadow DOMの適用は、SkinPerkによって行われます。 Shadow DOMはJavascriptの標準技術です。詳細については、以下をご覧ください。 * [[https://developer.mozilla.org/ja/docs/Web/API/Web_components/Using_shadow_DOM|シャドウ DOM の使用 - Mozilla Developer]] デフォルトではShadow DOMは使用されません。Shadow DOMを使用する場合、設定に記述する必要があります。 _getSettings() { return { "skin": { "options": { "shadowDOM": "open", }, } } } "open"または"closed"を指定することができます。 Shadow DOMを使う場合、CSSの構造を綿密に設計する必要があります。CSSを取り扱うStylePerkの設定についても参照してください。 * [[ja:bitsmist-js-core:unit:css#設定|ユニットの解説 - CSS - 設定]]