Bitsmist
Docs» HTML

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": "<div></div>"
                }
            }
        }
    }
}

SkinPerkの設定の詳細については以下をご覧ください。

  • リファレンス - パーク - 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": "<div></div>"
                },
            }
        }
    }
}

ノード

自身のユニット内のノードの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": "<div></div>"
                },
            }
        }
    }
}

Shadow DOM

BitsmistJSでは、各ユニットに“open”、“closed”のいずれのShadow DOMも適用することができます。Shadow DOMを使用することで、各ユニットの独立性が上がります。Shadow DOMの適用は、SkinPerkによって行われます。

Shadow DOMはJavascriptの標準技術です。詳細については、以下をご覧ください。

  • シャドウ DOM の使用 - Mozilla Developer

デフォルトではShadow DOMは使用されません。Shadow DOMを使用する場合、設定に記述する必要があります。

_getSettings()
{
    return {
        "skin": {
            "options": {
                "shadowDOM": "open",
            },
        }
    }
}

“open”または“closed”を指定することができます。

Shadow DOMを使う場合、CSSの構造を綿密に設計する必要があります。CSSを取り扱うStylePerkの設定についても参照してください。

  • ユニットの解説 - CSS - 設定
Previous Next

© 2019-2023 Masaki Yasutake

Bitsmist

Table of Contents

Table of Contents

  • HTML
    • 概要
    • 設定
    • ロード
      • ファイル
      • 固定のHTML
      • ノード
    • 適用
    • 切り替え
    • Shadow DOM

紹介

  • 概要
  • インストール
  • サンプルユニットを作る

ユニットの解説

  • 概要
  • プロパティとメソッド
  • 設定
  • ロード
  • イベント
  • HTML
  • CSS
  • パークによる拡張

リファレンス - ユニット

  • Unit

リファレンス - パーク

  • Perk(ベースクラス)
  • BasicPerk
  • EventPerk
  • SettingPerk
  • SkinPerk
  • StatusPerk
  • StylePerk
  • UnitPerk

リファレンス - ストア

  • Store
  • ChainableStore

リファレンス - ユーティリティ

  • AjaxUtil
  • ClassUtil
  • URLUtil
  • Util