AEM は、タッチデバイスとデスクトップデバイスの両方で動作するように設計されたオーサー環境向けに、レスポンシブデザインを採用したタッチ対応 UI を備えています。
タッチ対応 UI は AEM の標準 UI です。クラシック UI は AEM 6.4 で非推奨となりました。
タッチ対応 UI は以下で構成されます。
ほとんどすべての AEM 機能がタッチ操作対応 UI に移植されています。ただし、一部の限られたケースでは、機能がクラシック UI に戻ります。詳しくは、タッチ操作対応 UI 機能のステータスを参照してください。
タッチ操作対応 UI は、複数の製品間で一貫性のあるユーザーエクスペリエンスを提供するように設計されています。以下をベースとしています。
タッチ操作対応 UI の基本原則は次のとおりです。
タッチ対応 UI の構造の概要について詳しくは、AEM タッチ対応 UI の構造の記事を参照してください。
AEM が基礎として使用する Granite プラットフォームには、特に Java コンテンツリポジトリが含まれています。
Granite は、次のような各種コンポーネントを提供するアドビの公開 Web スタックです。
Granite は、アドビ内で公開開発プロジェクトとして進められています。コード、ディスカッションおよび問題に会社全体が関与しています。
ただし、Granite はオープンソースプロジェクトではありません。いくつかのオープンソースプロジェクト(特に Apache Sling、Felix、Jackrabbit および Lucene)を重要なベースとしていますが、アドビは公開部分と非公開部分を明確に区別しています。
Granite エンジニアリングプラットフォームには、基盤 UI フレームワークも備わっています。主な目的は次のとおりです。
これらは次の要件に準拠しています。
GraniteUI.pdf
ファイルを取得
Granite UI は次のようになります。
Granite UI でのクライアントとサーバーの通信は、オブジェクトではなく、ハイパーテキストでおこなわれるので、クライアントでビジネスロジックを理解する必要はありません。
HTML ボキャブラリの拡張が使用され、作成者はインタラクティブな Web アプリケーションを構築するという意向を表明できるようになります。この方法は、WAI-ARIA および microformats に似ています。
主に、クライアント側で実行される JS および CSS コードによって解釈されるインタラクションパターン(フォームの非同期送信など)のコレクションで構成されます。クライアント側の役割は、(サーバーによってハイパーメディアアフォーダンスとして指定された)マークアップを拡張してインタラクティブ性を持たせることです。
クライアント側は、どのサーバーテクノロジーとも無関係です。サーバーから適切なマークアップが提供されている限り、クライアント側は独自の役割を果たすことができます。
現在、JS および CSS コードは、Granite クライアント側ライブラリとして、次のカテゴリで提供されています。
granite.ui.foundation and granite.ui.foundation.admin
これらはコンテンツパッケージの一部として提供されています。
granite.ui.content
sling コンポーネントのコレクションによって形成され、作成者は Web アプリケーションを迅速に構成できるようになります。開発者がコンポーネントを開発し、作成者がそれらのコンポーネントを Web アプリケーションとしてアセンブルします。サーバー側の役割は、ハイパーメディアアフォーダンス(マークアップ)をクライアントに提供することです。
現在、コンポーネントは Granite リポジトリの次の場所にあります。
/libs/granite/ui/components/foundation
これはコンテンツパッケージの一部として提供されています。
granite.ui.content
次に Granite UI と ExtJS(クラシック UI に使用)の違いを示します。
ExtJS | Granite UI |
リモート手続き呼び出し |
状態遷移 |
データ転送オブジェクト | ハイパーメディア |
クライアントによるサーバーの内部認識あり | クライアントによるサーバーの内部認識なし |
「ファットクライアント」 | 「シンクライアント」 |
専用クライアントライブラリ | ユニバーサルクライアントライブラリ |
Granite UI 基盤コンポーネントは、UI を構築するために必要な基本の構築ブロックを提供します。次に例を示します。
基盤コンポーネントは以下の場所にあります。
/libs/granite/ui/components/foundation
このライブラリには、各 Coral 要素に対応する Granite UI コンポーネントが含まれています。コンポーネントはコンテンツに基づき、その設定はリポジトリに保持されます。これにより、HTML マークアップを手動で記述しなくても、Granite UI アプリケーションを構成することができます。
目的:
実装:
この基盤コンポーネントライブラリは他のライブラリで使用または拡張できます。
Granite UI を使用するように ExtJS コードをアップグレードするときは、以下のリストを参照すると、ExtJS xtype およびノードタイプと、それぞれに対応する Granite UI のリソースタイプを確認できます。
ExtJS xtype | Granite UI のリソースタイプ |
---|---|
button |
granite/ui/components/foundation/form/button |
checkbox |
granite/ui/components/foundation/form/checkbox |
componentstyles |
cq/gui/components/authoring/dialog/componentstyles |
cqinclude |
granite/ui/components/foundation/include |
datetime |
granite/ui/components/foundation/form/datepicker |
dialogfieldset |
granite/ui/components/foundation/form/fieldset |
hidden |
granite/ui/components/foundation/form/hidden |
html5smartfile, html5smartimage |
granite/ui/components/foundation/form/fileupload |
multifield |
granite/ui/components/foundation/form/multifield |
numberfield |
granite/ui/components/foundation/form/numberfield |
pathfield, paragraphreference |
granite/ui/components/foundation/form/pathbrowser |
selection |
granite/ui/components/foundation/form/select |
sizefield |
cq/gui/components/authoring/dialog/sizefield |
tags |
granite/ui/components/foundation/form/autocomplete``cq/gui/components/common/datasources/tags |
textarea |
granite/ui/components/foundation/form/textarea |
textfield |
granite/ui/components/foundation/form/textfield |
ノードタイプ | Granite UI のリソースタイプ |
---|---|
cq:WidgetCollection |
granite/ui/components/foundation/container |
cq:TabPanel |
granite/ui/components/foundation/container``granite/ui/components/foundation/layouts/tabs |
cq:panel |
granite/ui/components/foundation/container |
Granite UI 管理コンポーネントは、基盤コンポーネントをベースに構築され、管理アプリケーションによって実装可能な一般的な構築ブロックを提供します。次に例を示します。
目的:
実装:
CoralUI.pdf
ファイルを取得
Coral UI(CUI)は、アドビのタッチ対応 UI 用のビジュアルスタイルを実装したものです。タッチ対応 UI は、複数の製品間で一貫性のあるユーザーエクスペリエンスを提供するように設計されています。Coral UI は、オーサー環境で使用されるビジュアルスタイルを採用するために必要となるすべてのものを備えています。
Coral UI は、AEM のお客様が製品ライセンスの許容範囲内でアプリケーションや web インターフェイスの構築に利用できる UI ライブラリです。
Coral UI は次の場合にのみ使用できます。
以下の場合は、Coral UI は使用しないでください。
Coral UI は、web アプリケーションを開発するための構成要素のコレクションです。
最初からモジュール式として設計されており、各モジュールはそれぞれの主要な役割に基づいて個別のレイヤーを形成します。レイヤーは相互にサポートするように設計されていますが、必要に応じて単独で使用することもできます。これにより、あらゆる HTML 対応環境に Coral のユーザーエクスペリエンスを実装することが可能です。
Coral UI では、特定の開発モデルやプラットフォームを使用することは必須ではありません。Coral の主な目的は、統一されたクリーンな HTML5 マークアップを提供することにあり、このマークアップを実際に発行する方法は問いません。Coral は、クライアント側またはサーバー側でのレンダリング、テンプレート、JSP、PHP、さらには Adobe Flash RIA アプリケーションをはじめ、様々なものに使用されています。
HTML 要素により、すべての基本 UI 要素(ナビゲーションバー、ボタン、メニュー、パネルなど)のルックアンドフィールを共通化できます。
最も基本的なレベルの HTML 要素は、専用のクラス名を持つ HTML タグです。複数のタグを(特定の方法で)相互にネストし、より複雑な要素を構成することができます。
実際のルックアンドフィールは CSS で指定します。ルックアンドフィールを簡単にカスタマイズできるように(ブランド設定を行う場合など)、実際のスタイル値は、実行時に LESS プリプロセッサーによって展開される変数として宣言します。
目的:
実装:
次にマークアップの例を示します。
<button class="btn btn-large btn-primary" type="button">Large button</button>
<button class="btn btn-large" type="button">Large button</button>
このマークアップは次のように表示されます。
ルックアンドフィールは LESS で定義し、専用のクラス名によって要素に関連付けます(次の抜粋は短縮され、簡潔に示されています)。
.btn {
font-size: @baseFontSize;
line-height: @baseLineHeight;
.buttonBackground(@btnBackground,
@btnBackgroundHighlight,
@grayDark, 0 1px 1px rgba(255,255,255,.75));
実際の値は LESS 変数ファイルで定義します(次の抜粋は短縮され、簡潔に示されています)。
@btnBackgroundHighlight: darken(@white, 10%);
@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%);
@baseFontSize: 17px;
@baseFontFamily: @sansFontFamily;
HTML 要素の多くは、ポップアップメニューの表示/非表示など、何らかの動的動作を示す必要があります。要素プラグインがこの役割を担い、JavaScript を使用して DOM を操作することによってこのようなタスクを実行します。
プラグインは次のいずれかです。
DIV class=dialog
を検索することを想定しています。DIV
要素または LI
要素のリスト用のレイアウトを提供します。プラグインの動作は、次のいずれかの方法でパラメーターを使用してカスタマイズできます。
data-*
属性を使用します。開発者はどのプラグインにも最適なアプローチを選択できますが、経験則では以下のように使用します。
data-*
属性。例えば、列数を指定しますフォームの検証を実装する場合も同じ概念を使用します。要素を検証する場合、必要な入力フォームをカスタムの data-*
属性として指定する必要があります。この属性を検証プラグインのオプションとして使用します。
可能である場合または拡張する場合は、HTML5 固有のフォーム検証を使用する必要があります。
目的:
実装:
data-*
属性を使用した動作のカスタマイズ次にマークアップの例の抜粋を示します(data-* 属性として指定されたオプションに注意)。
<ul data-column-width="220" data-layout="card" class="cards">
<li class="item">
<div class="thumbnail">
<img href="/a.html" src="/a.thumb.319.319..png">
<div class="caption">
<h4>Toolbar</h4>
<p><small>toolbar</small><br></p>
</div>
</div>
</li>
<li class="item">
<div class="thumbnail">
<img href="/a.html" src="/a.thumb.319.319..png">
<div class="caption">
<h4>Toolbar</h4>
<p><small>toolbar</small><br></p>
</div>
</div>
</li>
次に jQuery プラグインの呼び出しを示します。
$(‘.cards’).cardlayout ();
これは、次のように表示されます。
cardLayout
プラグインでは、囲まれた UL
要素のレイアウトを決定する際、それぞれの高さを基準とし、さらに親の幅を考慮します。
ウィジェットでは、JavaScript プラグインを使用して 1 つまたは複数の基本要素を結合し、「上位の」UI 要素を形成します。これにより、単一要素の場合と比較して、より複雑な動作、さらにはより複雑なルックアンドフィールを実装できます。タグピッカーやパネルウィジェットがよい例です。
ウィジェットは、カスタムイベントの呼び出しとリスンの両役割を果たし、ページ上の他のウィジェットと連携できます。一部のウィジェットは、実際には Coral HTML 要素を使用するネイティブ jQuery ウィジェットです。
目的:
実装:
次にマークアップの例を示します。
<input type="text" name="tags" placeholder="Tags" class="tagManager"/>
次に jQuery プラグインの呼び出し(オプション指定あり)を示します。
$(".tagManager").tagsManager({
prefilled: ["Pisa", "Rome"] })
プラグインにより HTML マークアップが発行されます(このマークアップでは、他のプラグインを内部で使用する基本要素を使用しています)。
<span>Pisa</code>
<a title="Removing tag" tagidtoremove="0"
id="myRemover_0" class="myTagRemover" href="#">x</a></code>
<span id="myTag_1" class="myTag"><span>Rome</code>
<a title="Removing tag" tagidtoremove="1"
id="myRemover_1" class="myTagRemover" href="#">x</a></code>
<input type="text" data-original-title="" class="input-medium tagManager"
placeholder="Tags" name="tags" data-provide="typeahead" data-items="6"
autocomplete="off">
これは、次のように表示されます。
このライブラリは、次の特徴を持つ javascript ヘルパープラグインや関数のコレクションです。
これらには、XSS 処理およびイベントバスも含まれます。
HTML 要素プラグインおよびウィジェットはユーティリティライブラリが提供する機能に依存する場合がありますが、ユーティリティライブラリは要素自体またはウィジェット自体に対してハード依存を持つことはできません。
目的:
実装: