テーマ

テーマを使用すると、Blockly の外観をカスタマイズできます。ブロックの色、カテゴリの色、特定のコンポーネントは、Themes クラスでカスタマイズできます。追加のコンポーネントをカスタマイズする場合は、テーマ名を挿入 div のクラスとして指定します。これにより、ユーザーはサポートされていないコンポーネントの外観を CSS で変更できます。テーマを作成する主な目的は、デベロッパーがよりアクセスしやすい Blockly エクスペリエンスを作成できるようにすることです。

テーマのプロパティ

テーマは、拡張するベーステーマ、ブロック、カテゴリ、コンポーネント、フォント用のスタイル オブジェクト、開始ブロックにハットを使用するかどうかなど、いくつかのプロパティを持つオブジェクトです。

ブロックのスタイル

ブロック スタイルは次の 4 つのフィールドで構成されています。

  • colourPrimary(必須)- ブロックの背景色。
  • colourSecondary(省略可)- ブロックがシャドウ ブロックの場合の背景色。
  • colourTertiary(省略可)- ブロックの枠線またはハイライトの色。
  • hat(省略可)- 値が cap に設定されている場合、ブロックに帽子を追加します。ハットの詳細を確認してください。

プライマリ カラー、セカンダリ カラー、ターシャリ カラーを指す矢印が付いたブロック

const listBlocks = {
   'colourPrimary': '#4a148c',
   'colourSecondary':'#AD7BE9',
   'colourTertiary':'#CDB6E9',
   'hat': 'cap'
}

テーマには、ブロックスタイル名とブロックスタイル オブジェクトのマッピングが含まれます。

const blockStyles = {
   'list_blocks': {
      'colourPrimary': '#4a148c',
      'colourSecondary':'#AD7BE9',
      'colourTertiary':'#CDB6E9'
   },
   'logic_blocks': {
      'colourPrimary': '#01579b',
      'colourSecondary':'#64C7FF',
      'colourTertiary':'#C5EAFF'
   }
}

カテゴリのスタイル

カテゴリ スタイルには、色のプロパティのみが含まれます。

  • 色(必須) - ツールボックスのカテゴリの色。通常、これらの色は、カテゴリ内の大多数のブロックの colourPrimary と同じ色にします。これにより、ユーザーは特定のカテゴリに属するブロックを簡単に確認できます。

カテゴリごとに色が異なるツールボックスのスクリーンショット

const mathCategory = {
   'colour':'290'
}

テーマには、カテゴリ名とカテゴリ スタイル オブジェクトのマッピングが含まれます。

const categoryStyles = {
   'list_category': {
      'colour': '#4a148c'
   },
   'logic_category': {
      'colour': '#01579b',
   }
}

コンポーネントのスタイル

テーマでは、以下のコンポーネントの色または値を設定できます。

  • workspaceBackgroundColour: ワークスペースの背景色
  • toolboxBackgroundColour: ツールボックスの背景色
  • toolboxForegroundColour: ツールボックスのカテゴリのテキストの色
  • flyoutBackgroundColour: フライアウトの背景色
  • flyoutForegroundColour: フライアウト ラベルのテキストの色
  • flyoutOpacity: フライアウトの不透明度
  • scrollbarColour: スクロールバーの色
  • scrollbarOpacity: スクロールバーの不透明度
  • insertionMarkerColour: 挿入マーカーの色(色名は使用できません)
  • insertionMarkerOpacity: 挿入マーカーの不透明度
  • markerColour: キーボード ナビゲーション モードに表示されるマーカーの色。
  • cursorColour: キーボード ナビゲーション モードで表示されるカーソルの色

他のほとんどのコンポーネントは、CSS でテーマ名を使用して変更できます。ただし、このリストにまだ含まれていないコンポーネントを変更したい場合や、CSS を使用して変更できないコンポーネントを変更したい場合は、詳細情報を添えて問題を報告してください。

const componentStyle = {
   'workspaceBackgroundColour': '#1e1e1e',
   'toolboxBackgroundColour': '#333'
}

フォント スタイル

フォント スタイルは、フォントの種類、太さ、サイズを保持するオブジェクトです。

const fontStyle = {
   'family': 'Georgia, serif',
   'weight': 'bold',
   'size': 12
}

スタートハット

テーマ オブジェクトで startHats: true を直接設定すると、前方または出力接続のないすべてのブロックに帽子が追加されます。帽子をつけるブロックをより細かく制御する場合は、代わりに ブロック スタイル プロパティを使用できます。

カスタムテーマ

Blockly アプリにテーマを追加するには、以下を行う必要があります。

  1. テーマを作成する
  2. スタイル名を追加する
  3. ワークスペースにテーマを設定する

テーマを作成する

テーマは、コンストラクタまたは defineTheme を使用して作成できます。defineTheme を使用すると、既存のテーマを簡単に拡張し、単一のオブジェクトですべての値を設定できます。テーマには名前があり、上記のブロックスタイル、カテゴリスタイルなどのプロパティを持つオブジェクトです。

テーマにはベーステーマを設定することもできます。ベーステーマには、カスタムテーマで指定されていない値のデフォルト値が設定されます。

const theme = Blockly.Theme.defineTheme('themeName', {
   'base': Blockly.Themes.Classic,
   'blockStyles': {
      'logic_blocks': {
         'colourPrimary': '#4a148c'
      },
      'math_blocks': {...}
   },
   'categoryStyles': {...},
   'componentStyles': {...},
   'fontStyle': {...},
   'startHats': true
});

defineTheme の使用例を次に示します。

スタイル名を追加する

テーマを作成したので、ブロックとカテゴリの定義にスタイルの名前を追加する必要があります。

カテゴリ

スタイル名を追加する方法は、ツールボックスの定義方法によって異なります。詳細については、ツールボックス ページをご覧ください。

Blocks

ブロックの定義方法によって、スタイル名の追加方法が決まります。ブロックの定義について詳しくは、カスタム ブロックのページをご覧ください。テーマの blockStyles プロパティで定義されたブロック スタイルのいずれかをブロックに割り当てます。

JSON

"style":"logic_blocks"

JavaScript

this.setStyle('logic_blocks');

テーマを設定する

また、使用するテーマを Blockly に指定する必要があります。同じブロック スタイルとカテゴリ名を使用する複数のテーマを定義すると、ブロック定義を自分で変更することなく、最適なテーマをユーザーが選択し、動的に変更できます。

初期のテーマ

初期テーマを設定するには、インジェクション呼び出しに options.theme を含めることをおすすめします。テーマは JSON または JavaScript で指定できます。

JSON

{
   theme: {
      "blockStyles" : {
         "list_blocks": {
            "colourPrimary": "#4a148c",
            "colourSecondary":"#AD7BE9",
            "colourTertiary":"#CDB6E9"
         }
      },
      "categoryStyles" : {
         "list_category": {
            "colour": "#4a148c"
         }
      },
      "componentStyles" : {
         "workspaceBackgroundColour": "#1e1e1e"
      }
   }
}

JavaScript

{
   theme: Blockly.Theme.defineTheme('themeName', {
      'blockStyles': blockStyles,
      'categoryStyles': categoryStyles,
      'componentStyles': componentStyles
   })
}

オプションの詳細については、構成ページをご覧ください。テーマが指定されていない場合は、デフォルトで従来のテーマが使用されます。

動的テーマ

テーマを動的に変更する場合(ユーザーがプルダウン メニューからテーマを選択できるようにする場合など)は、yourWorkspace.setTheme(theme) を呼び出します。

ブロック スタイルの作成スクリプト

Blockly は、色相または 16 進数値のマップを取り込んで、それらのセカンダリ カラーとターシャリ カラーを計算するスクリプトを提供します。スクリプトは scripts/themes フォルダにあります。

組み込みのテーマ

Blockly には、ユーザー補助向けのさまざまなテーマが用意されています。特に、特定の種類の色覚異常に対応しています。

また、