このセクションでは、WireCloud の新しいテーマを作成する方法について説明します。
このドキュメントは WireCloud 1.0 以降をベースにしています。以前のバージョンの WireCloud も同様の方法で動作しますが、 詳細は異なる場合があります。
基本テーマ¶
完全にカスタマイズされたテーマを必要としない場合は、別のテーマで使用される値 (色、デフォルトサイズなど) の一部を 変更して、新しいテーマを作成できます。つまり、元のテーマで使用されている SCSS 変数のセットを変更するだけです。
ただし、これを行うには、次の構造の新しいフォルダを事前に作成する必要があります :
mytheme
+-- __init__.py
+-- static
+-- css
+-- _variables.scss
__init__.py ファイルは、WireCloud で使用されるプラグイン・アーキテクチャによって必要とされます。既定の設定を使用する
場合は空のファイルにすることができますが、存在する必要があります。利用可能な設定変数の完全なリストと説明については、
"テーマ作成" のセクションを参照してください。
デフォルトでは、すべてのテーマが wirecloud.defaulttheme から拡張されます。別のテーマから拡張する必要がありますか?
例えば、wirecloud.fiwarelabtheme のテーマから拡張したい場合、次のコンテンツを __init__.py
ファイルに追加してください:
parent = "wirecloud.fiwarelabtheme"
_variables.scss ファイルは、テーマによって使用される値を変更できるようにするものです。使用可能な変数のリストに
ついては、後の "使用可能な SCSS 変数" のセクションで説明します。
たとえば、この _variables.scss サンプルファイルを使用して、プライマリ・ボタン、強調表示されたメニュー項目、
およびプレーン・ボタンが使用するプライマリ・カラーを変更できます。
$brand-primary: rgb(107, 21, 161);
/*
This color can also be defined using its hex code or its hsl definition:
$brand-primary: #6B15A1;
$brand-primary: hsl(277, 77%, 36%);
*/
$button-gradients: false;
@import 'defaults';
_variables.scss ファイルは、SCSS (Sassy CSS) 構文を使用して記述する必要があり、
テーマによって使用される変数の値を上書きするために使用されます。このファイルは、変数のデフォルト値をロードするために、
@import 'defaults' 行を使用して、_defaults.scss ファイルをインポートする必要があります。
テーマを使用¶
テーマを使用するには2つの方法があります :
-
他の WireCloud インスタンスと一緒に配布または共有したくない場合は、テーマフォルダを WireCloud インスタンス・フォルダ内にドロップするだけです。次に、
settings.pyファイルを編集してTHEME_ACTIVEsetting 設定を変更して、テーマを使用するための WireCloud インスタンスを設定できます。たとえば、
/opt/wirecloud_instanceフォルダに WireCloud インスタンスを作成した場合は、mythemeフォルダは、/opt/wirecloud_instance/mythemeに配置する必要があります 。テーマをデプロイしたら、カスタムテーマを使用する ために、settings.pyファイルにTHEME_ACTIVE = 'mytheme'を設定してください。 -
パッケージ化の目的で、python で使われている標準的なツールを使ってあなたのテーマをパッケージ化して配布することが できます。例えば、パッケージを構築するための setuptools と、 テーマを配布するための pypi を使用します。
テーマ・パッケージをシステム, virtual env にインストールすると、WireCloud インスタンスによって使用される仮想環境が 使用され、いつものように
THEME_ACTIVE設定を使用することができますこの場合、他の Python モジュールとの衝突を避けるために、テーマに適したモジュール名を提供する必要があることに 注意してください。
完全なテーマ構造と背景の詳細¶
WireCloud のテーマは、Django アプリケーションと Python モジュールです。これが __init__.py ファイルが必要な理由です。
テーマ・フォルダは複数のフォルダに分割されており、テーマごとに異なるリソース (テンプレート、画像、SCSS ファイルなど)
が含まれています。WireCloud テーマのフォルダ構造は、次のようになります :
mytheme
+-- __init__.py
+-- static
| | ...
| +-- css
| +-- fonts
| +-- images
+-- templates
| ...
+-- 400.html
+-- 401.html
+-- 403.html
+-- 404.html
+-- 500.html
+-- wirecloud
| ...
+-- workspace
+-- views
__init__.py: このファイルはテーマフォルダが python モジュールである必要があるため必須です。このファイルは、 テーマの設定を変更するためにも使用されます。-
static: テーマによって提供される静的ファイルを含みます。 これは Django の staticfiles app を使用して提供されます。 通常、このフォルダは次のサブフォルダで構成されています :css: テーマで使用される SCSS ファイルが含まれています。前述のように、WireCloud はスタイルシートに SCSS (Sassy CSS) 構文を使用します。WireCoud には Compass v0.12.1 も含まれているので、 必要に応じて使用することができますfonts: SCSS ファイルで使用されるフォントimages: SCSS ファイルまたは Django テンプレートから直接使用されるイメージ
-
templates: このフォルダには、テーマによって使用される Django テンプレートが含まれています。このフォルダを 使用すると、テーマは WireCloud で使用されるサードパーティの Django アプリ、例えば Django の管理アプリ によって提供されるテンプレートを上書きすることもできることを考慮してください 。このフォルダを使用して オーバーライドすることができ、他の一般的なテンプレートもあります。たとえば、404.html,500.html, ...-
wirecloud: このフォルダには、WireCloud によって直接使用されるテンプレートが含まれています。一般に、 これらのテンプレートは、WireCloud 内で使用される各コンポーネント/スニペットのスニペットです。たとえば、 ワークスペース領域に示されているように、ウィジェットの HTML を作成するためにwirecloud/workspace/widget.htmlテンプレートが使用されます主な例外は、WireCloud で使用されるマスター HTML ドキュメントのテンプレートを提供するような、
viewsフォルダ内に用意されているテンプレートです。
-
注: SCSS 構文は標準の CSS 構文と互換性があることを考慮してください。
_variables.scssファイルを除き、SCSS 機能を使用したくない場合、SCSS機能を使用する必要はありません。
WireCloud テーマを開発するときは、次の2点を考慮する必要があります :
-
任意のファイルを
staticフォルダに追加できますが、WireCloud はあらかじめ定義された SCSS ファイルのリストを 使用します。WireCloud で使用されていない SCSS ファイルを追加すると、デフォルトでは無視されます。WireCloud で使用される SCSS ファイルに SCSS ファイルを追加する場合は、マスター HTML ページの Django テンプレートを変更する必要があります -
Django テンプレートにも同様のことが適用されます : 使用されるテンプレートのリストは、WireCloudによって、WireCloud によって使用されるサードパーティ・アプリケーション、および有効な WireCloud プラグインによって定義されます
-
WireCloud で使用されるすべての SCSS とテンプレートファイルの完全バージョンを書く必要はありません。 対応するファイルが存在しない場合は、ファイルのデフォルト・バージョンが
wirecloud.defaultthemeから取得されて、 使用されます
使用される SCSS ファイルと django テンプレートのリストは、次のセクションで提供されています。
テーマ設定¶
-
parent(WireCloud 0.9.0 の新機能) : 拡張するテーマの名前。この設定に値を指定しないと、テーマは デフォルトでwirecloud.defaultthemeが拡張されます。新しいルートテーマの作成には、parent = Noneを使用します。 -
label(WireCloud 0.9.0 の新機能) : テーマの人間が読める名前です。デフォルトでは、Python モジュールの 最後のコンポーネントになります。
使用可能なテンプレート¶
wirecloud/catalogue/modals/upload.html: My Resources ビューで使用されるアップロード・コンポーネントの モーダル内に表示されるコンテンツwirecloud/workspace/missing_widget.html: 欠落しているウィジェット内に表示されるコンテンツwirecloud/workspace/widget.html: ウィジェットの iframes がダッシュボードに挿入されるボックスの HTML 構造wirecloud/modals/base.html: WireCloud に表示されるダイアログ/モーダルの HTML 構造wirecloud/modals/embed_code.html: 埋め込みコード・モーダルの内容wirecloud/modals/upgrade_downgrade_component.html: ワークスペース・ビューとワイヤーリング・ビューで使用される アップグレード/ダウングレードのコンポーネント・モーダルの内容wirecloud/wiring/behaviour_sidebar.html: ワイヤーリング・エディタ・ビューで使用されるビヘイビアのサイドバーの HTML 構造wirecloud/wiring/component_group.html: ワイヤーリング・エディタ・ビューで使用されるコンポーネントのサイドバー 内にコンポーネント・グループを表示するために使用される HTML 構造wirecloud/wiring/component_sidebar.html:ワイヤーリング・エディタ・ビューで使用されるコンポーネントのサイドバー の HTML 構造wirecloud/views/embedded.html: WireCloud の埋め込みバージョン用の HTML 構造
テンプレート : wirecloud/catalogue/modals/upload.html¶
このテンプレートは、新しいコンポーネントをアップロードするために、My Resources ビューで使用される アップロード・モーダルの初期コンテンツをレンダリングするために使用されます。
関連する SCSS ファイル :
catalogue/modals/upload.scss
利用可能なコンポーネント¶
uploadfilebutton: ファイルを選択するためのブラウザ・ダイアログを開くためのボタン
使用例:
{% load i18n %}{% load wirecloudtags %}
<s:styledgui xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements" xmlns:t="http://wirecloud.conwet.fi.upm.es/Template" xmlns="http://www.w3.org/1999/xhtml">
<div class="wc-upload-mac-message">
<div class="alert alert-info">
<img class="mac-package" src="{% theme_static "images/catalogue/mac_package.png" %}" />
<p>{% trans "Do you have a widget, operator or mashup stored in a wgt file? Then you can upload it to the catalogue by means of this dialog." %}</p>
</div>
<div class="wc-upload-mac-title">{% trans "Drag files here" %}</div>
<div class="wc-upload-mac-or">{% trans "- or -" %}</div>
<div class="wc-upload-mac-button"><t:uploadfilebutton/></div>
</div>
</s:styledgui>
テンプレート : wirecloud/workspace/missing_widget.html¶
このテンプレートを使用すると、不足しているウィジェット内に表示されるコンテンツを設定できます。このコンテンツは
iframe 要素内でレンダリングされるので、このテンプレートは HTML ドキュメントを提供する必要があります。
利用可能なコンテキスト:
これは、Django テンプレート・エンジンに提供されるコンテキスト変数のリストです :
style: デフォルトのスタイルを適用するのに必要なスタイルシートのファイルのリスト
使用例:
{% load i18n %}<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no" />
{% for file in style %}<link rel="stylesheet" type="text/css" href="{{ file }}" />
{% endfor %}
</head>
<body style="padding: 10px;">
<div class="alert alert-danger alert-block">
<h4>{% trans "Missing widget" %}</h4>
{% trans "This widget is currently not available. Probably you or an administrator uninstalled it." %}
{% blocktrans %}<h5>Suggestions:</h5>
<ul>
<li>Remove this widget from the dashboard</li>
<li>Reinstall the appropiated version of the widget</li>
<li>Install another version of the widget and use the <em>Upgrade/Downgrade</em> option</li>
</ul>{% endblocktrans %}
</div>
</body>
</html>
テンプレート : wirecloud/workspace/widget.html¶
以前の名称 :
wirecloud/ui/iwidget.html
関連する SCSS ファイル:
wirecloud/workspace/widget.scss
利用可能なコンポーネント:
title: ウィジェットのタイトルを持つspam要素を挿入しますerrorbutton: ウィジェットにエラーがある場合に有効になるボタン。このボタンは、ユーザがクリックすると ログ・マネージャのウィンドウを開きますminimizebutton: ウィジェットを最大化および最小化するために使用されるボタンmenubutton: プレファレンス設定メニューを開くためのボタンclosebutton: ワークスペースからウィジェットを削除するためのボタンiframe(必須) : ウィジェットのコンテンツを含む iframeleftresizehandle:div要素は、左下の四角からウィジェットのサイズを変更するために使用します。 この要素はwc-bottom-left-resize-handleクラスを使用しますbottomresizehandle: 下側からウィジェットのサイズを変更するためのdiv要素。この要素はwc-bottom-resize-handleクラスを使用しますrightresizehandle: 右下の正方形からウィジェットのサイズを変更するためのdiv要素。この要素はwc-bottom-right-resize-handleクラスを使用します
使用例:
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<div class="fade panel panel-default">
<div class="panel-heading"><h4 class="panel-title"><t:title/></h4><div class="wc-iwidget-infobuttons"><t:errorbutton/></div><div class="wc-iwidget-buttons"><t:minimizebutton/><t:menubutton/><t:closebutton/></div></div>
<div class="panel-body">
<t:iframe/>
</div>
<div class="panel-footer"><t:leftresizehandle/><t:bottomresizehandle/><t:rightresizehandle/></div>
</div>
</s:styledgui>
テンプレート : wirecloud/modals/base.html¶
以前の名称 :
wirecloud/ui/window_menu.html
関連する SCSS ファイル:
modals/base.scss: このテンプレートのカスタムスタイルのスタイルシート
利用可能なコンポーネント:
closebutton: モーダルを閉じるためのボタンtitle: モーダルの名前を持つspan要素body: モーダルの本体が接続される場所divfooter: メインボタンの追加に使用されるdiv
使用例:
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<div>
<div class="window_top"><t:closebutton/><t:title/></div>
<t:body class="window_content"/>
<t:footer class="window_bottom"/>
</div>
</s:styledgui>
テンプレート : wirecloud/modals/embed_code.html¶
以前の名称 :
wirecloud/ui/embed_code_dialog.html
関連する SCSS ファイル:
modals/embed_code.scss: このテンプレートのカスタム・スタイルのスタイルシート
利用可能なコンポーネント:
themeselect: ダッシュボードを埋め込むために提供されたコードで使用されるテーマを制御するためにユーザが 使用できるselect要素を提供しますcode: 埋め込みコードを持つtextarea要素を提供します
使用例:
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<div><b>{% trans "Theme" %}</b>: <t:themeselect/></div>
<t:code/>
</s:styledgui>
テンプレート : wirecloud/modals/upgrade_downgrade_component.html¶
以前の名称 :
wirecloud/ui/embed_code_dialog.html
関連する SCSS ファイル:
base/markdown.scss: チェンジログのスタイリングに使用されますmodals/upgrade_downgrade_component.scss: このテンプレートのカスタム・スタイルのスタイルシート
利用可能なコンポーネント:
currentversion: ウィジェット/オペレータの現在のバージョンをテキスト・ノードに提供しますversionselect: 使用可能なバージョンの選択肢と選択コンボを提供しますchangelog: 現在のバージョンと選択されたバージョンの間のチェンジログをdiv要素に提供します。 この要素の内容は、ユーザが選択したバージョンを変更するたびに変更されます
使用例:
{% load i18n %}
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<div class="wc-upgrade-component-info"><div><b>{% trans "Current version" %}</b>: <t:currentversion/></div><div><b>{% trans "New version" %}</b>: <t:versionselect/></div></div>
<h3>{% trans "Change Log" %}</h3>
<t:changelog/>
</s:styledgui>
テンプレート : wirecloud/wiring/behaviour_sidebar.html¶
関連する SCSS ファイル:
wiring/behviours.scss: ワイヤリングのビヘイビア・スタイルのスタイルシート
利用可能なコンポーネント:
enablebutton: 現在のワークスペースのビヘイビアエンジンを有効または無効にするためのトグルボタンを提供しますcreatebutton: 新しいビヘイビアを作成するためのボタンを提供しますorderbutton: ビヘイビアのオーダリング・モードを有効または無効にするためのトグルボタンを提供しますbehaviourlist:div要素に利用可能な振る舞いを提供します。このdiv要素は、ビヘイビア・エンジンが 現在無効になっている場合にいくつかのヒントを含む警告メッセージを表示するためにも使用されます
使用例:
{% load i18n %}
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<div class="panel panel-default se-vertical-layout we-panel-behaviours">
<div class="panel-heading se-vl-north-container">
<div class="panel-title">
<strong>{% trans "Behaviours" %}</strong>
<div class="panel-options"><t:enablebutton/></div>
</div>
<div class="btn-group pull-right"><t:createbutton/><t:orderbutton/></div>
</div>
<t:behaviourlist class="panel-body se-vl-center-container"/>
</div>
</s:styledgui>
テンプレート : wirecloud/wiring/component_group.html¶
関連するSCSSファイル:
wiring/components.scss: ワイヤーリング・エディタビューでコンポーネントを表示するために使用されるスタイルの スタイルシート
利用可能なコンポーネント:
createbutton: コンポーネントの新しいインスタンスを作成するためのボタンを提供しますdescription: コンポーネントの説明をdiv要素に提供しますimage: コンポーネントのサムネイルを持つimg要素を提供しますtitle: コンポーネントのタイトルをspan要素に提供しますvendor: コンポーネントのベンダー名をテキスト・ノードに提供しますversionselect: 使用可能なコンポーネントの異なるバージョンを切り替えるための選択コンポーネントを提供します
使用例:
{% load i18n %}
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<div class="we-component-group">
<div class="panel panel-default we-component-meta">
<div class="panel-heading">
<div class="panel-title"><t:title/></div>
</div>
<div class="panel-body">
<div class="se-thumbnail se-thumbnail-sm"><t:image/></div>
<div class="se-input-group se-input-group-sm"><t:versionselect/><t:createbutton/></div>
<h5><t:vendor/></h5>
<t:description/>
</div>
</div>
</div>
</s:styledgui>
テンプレート : wirecloud/wiring/component_sidebar.html¶
関連する SCSS ファイル:
wiring/components.scss: ワイヤーリング・エディタビューでコンポーネントを表示するために使用されるスタイルの スタイルシート
利用可能なコンポーネント:
searchinput: 使用可能なコンポーネントをフィルタリングするためにユーザが使用するinput要素を提供しますtypebuttons: 検索ウィジェットとオペレータを切り替えるための2つのボタンを提供しますlist: 利用可能なコンポーネントを表示するdiv要素を提供します
使用例:
{% load i18n %}
<s:styledgui
xmlns:s="http://wirecloud.conwet.fi.upm.es/StyledElements"
xmlns:t="http://wirecloud.conwet.fi.upm.es/Template"
xmlns="http://www.w3.org/1999/xhtml">
<s:verticallayout class="panel panel-default we-panel-components">
<s:northcontainer class="panel-heading">
<div class="panel-title">
<strong>{% trans "Components" %}</strong>
</div>
<t:searchinput/>
<div class="btn-group btn-group-justified"><t:typebuttons/></div>
</s:northcontainer>
<s:centercontainer class="panel-body">
<t:list/>
</s:centercontainer>
</s:verticallayout>
</s:styledgui>
テンプレート : wirecloud/views/embedded.html¶
使用例:
{% extends "wirecloud/views/base.html" %}{% load wirecloudtags %}
{% load i18n %}
{% block title %}{% trans "WireCloud Platform" %}{% endblock %}
{% block header %}<div id="wirecloud_header"></div>{% endblock %}
{% block core_scripts %}
{% wirecloud_bootstrap "embedded" %}
{% extra_javascripts "embedded" %}
{% endblock %}
テンプレート : wirecloud/views/footer.html¶
テーマのフッター・セクションに表示する HTML
使用例:
<footer>My custom footer. Copyright © 2017 My company.</footer>
使用可能な SCSS ファイル¶
_variables.scss: 他の SCSS ファイルで使用される変数の値を定義するファイルheader.scss: ヘッダーに使用するスタイルmodals/base.scss: WireCloud で使用されるすべてのモーダルで使用されるスタイルを含みますmodals/logs.scss: ログ・モーダルで使用されるスタイルを含みますmodals/upgrade_downgrade_component.scss: ワークスペース・ビューで使用されるアップグレード/ダウングレードの モーダルによって使用されるスタイルと、ウィジェットのバージョンを更新するためのワイヤーリング・エディタビューと、 オペレータのバージョンを更新するワイヤーリング・エディタによって含まれますworkspace/dragboard_cursor.scss: ワークスペース内でウィジェットを移動するときに表示されるカーソルのスタイルを 含みますworkspace/modals/share.scss: ワークスペースの共有プロパティを変更するためにモーダルに使用されるスタイルを含みますwiring/behaviours.scss:wiring/connection.scss:wiring/layout.scss:workspace/widget.scss: ワークスペース/ダッシュボード・ビュー内にウィジェットを表示するためのスタイルが 含まれていますmac_field.scss: マッシャブル・アプリケーションのコンポーネント入力フィールドのスタイルを含みます
デフォルトのテーマ : wirecloud.defaulttheme¶
使用イメージ¶
favicon.ico: favicon として使用するimage/x-iconフォーマットの画像。より良い結果を得るには、 マルチ解像度画像を提供することを忘れないでください。 このファイルは、テーマがメインテーマとして設定されている場合にのみ使用されますlogos/header.png: ヘッダーで使用されているimage/pngの中の画像。 このファイルは、テーマがメインテーマとして設定されている場合にのみ使用されます
使用可能な SCSS 変数¶
基本色 :
$brand-default: WireCloud が具体的なステータスを要素に関連付ける必要がない場合にデフォルトで使用される色$brand-primary: 主なアクションのベースとして使用される色$brand-success: 成功を示すために使用される色$brand-info: 情報要素に使用される色$brand-warning: 警告要素に使用される色とユーザに警告が必要な場合に警告する色$brand-danger: 何らかの危険または潜在的に否定的なことが起こる可能性があることをユーザに警告するために使用される色
その他の変数 :
button-gradients: グラデーションを使用するスタイリングボタンの場合はtrue、プレーン・カラーボタンの場合はfalse。デフォルトではtruehigh-resoulution-images: テーマがヘッダロゴなどの高解像度画像を使用する場合はtrue。その場合、テーマは2倍の 解像度を使用して画像ファイルを提供する必要があります。例えば、400 x 300 ピクセルの画像の場合は 800 x 600 です。 標準的な解像度の画像を使用する場合はfalse。デフォルトではtrue