diff --git a/docs/ja/.nojekyll b/docs/ja/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/ja/CHANGELOG.md b/docs/ja/CHANGELOG.md new file mode 100644 index 000000000..faffe352c --- /dev/null +++ b/docs/ja/CHANGELOG.md @@ -0,0 +1,3 @@ +# 変更履歴 + +近日公開... diff --git a/docs/ja/README.md b/docs/ja/README.md new file mode 100644 index 000000000..95731a4b8 --- /dev/null +++ b/docs/ja/README.md @@ -0,0 +1,48 @@ +--- +Title: Alfresco Content Application +Github only: true +--- + +# Alfresco Content Application + + + +Alfresco Content Application は、[Alfresco Application Development Framework (ADF)](https://www.alfresco.com/abn/adf/docs) コンポーネントを使用して構築され、 +[Angular CLI](https://github.com/angular/angular-cli) で生成されたファイル管理アプリケーションです。 + +## ドキュメント + +ドキュメントは次のセクションに分かれています: + +- [アプリの機能](/features/): ユーザーインターフェイスとアプリの使用方法の詳細。 +- [入門](/getting-started/): 開発環境とアプリの構成。 +- [拡張](/extending/): 独自のコードでアプリの機能を拡張する方法。 +- [チュートリアル](/tutorials/): 開発技術の詳細な調査。 +- [ヘルプ](/help): さらなるヘルプとサポートの詳細が利用可能です。 + +## 互換性 + +| ACA バージョン | 構築バージョン | テスト済み環境 | +| ----------- | ---------- | --------- | +| ACA 1.8 | ADF 3.3.0 | ACS 6.1 | +| ACA 1.7 | ADF 3.0.0 | ACS 6.1 | +| ACA 1.6 | ADF 2.6.1 | ACS 6.1 | +| ACA 1.5 | ADF 2.6.0 | ACS 6.0 | +| ACA 1.4 | ADF 2.5.0 | ACS 6.0 | +| ACA 1.3 | ADF 2.4.0 | ACS 6.0 | +| ACA 1.2 | ADF 2.3.0 | ACS 5.2 | +| ACA 1.1 | ADF 2.2.0 | ACS 5.2 | +| ACA 1.0 | ADF 2.0.0 | ACS 5.2 | + +## 貢献する方法 + +バグを報告したり、コードを寄稿したり、ドキュメントを改善したいですか? 素晴らしい! +[貢献][contributing]に関するガイドラインを読み、[Jira][jira] または [GitHub][github] の問題の1つをチェックしてください。 + +### 貢献がレビューされるまでどれくらいかかりますか + +コードのレビューに必要な時間は異なります。小さな変更は数日以内にレビューされ、大きな変更には時間がかかる場合があります。 + +[contributing]: https://github.com/Alfresco/alfresco-content-app/blob/master/CONTRIBUTING.md +[github]: https://github.com/Alfresco/alfresco-content-app/issues +[jira]: https://issues.alfresco.com/jira/projects/ACA diff --git a/docs/ja/abn-tree.yml b/docs/ja/abn-tree.yml new file mode 100644 index 000000000..c05b84b58 --- /dev/null +++ b/docs/ja/abn-tree.yml @@ -0,0 +1,44 @@ +- features: + title: App features + children: + - user-interface-layout.md: User interface layout + - header.md: Header + - side-navigation.md: Side navigation + - document-list-layout.md: Document List Layout + - file-viewer.md: File Viewer + - info-drawer.md: Info Drawer + - version-manager.md: Version Manager + - search-results.md: Search results +- getting-started: + title: Getting started + children: + - prerequisites.md: Prerequisites + - building-from-source.md: Building from source + - internationalization.md: Internationalization + - cors.md: CORS + - configuration.md: Configuration + - navigation.md: Navigation + - docker.md: Docker +- extending: + title: extending + children: + - extensibility-features.md: Extensibility features + - extension-format.md: Extension format + - routes.md: Routes + - components.md: Components + - actions.md: Actions + - application-actions.md: Application actions + - rules.md: Rules + - application-features.md: Application features + - icons.md: Custom icons + - registration.md: Registration + - creating-custom-evaluators.md: Creating custom evaluators + - tutorials.md: Tutorials + - redistributable-libraries.md: Redistributable libraries +- tutorials: + title: Tutorials + children: + - introduction-to-extending.md: Introduction to extending ACA + - custom-route-with-parameters.md: Custom route with parameters + - dialog-actions.md: Dialog actions +- help.md: 'Get help' diff --git a/docs/ja/extending/README.md b/docs/ja/extending/README.md new file mode 100644 index 000000000..8ed4a8f6b --- /dev/null +++ b/docs/ja/extending/README.md @@ -0,0 +1,23 @@ +--- +Title: 拡張 +Github only: true +--- + +# 拡張 + +Alfresco Content Application の機能を拡張する方法を学びます。 + +## コンテンツ + +- [拡張機能](/extending/extensibility-features) +- [拡張フォーマット](/extending/extension-format) +- [ルート](/extending/routes) +- [コンポーネント](/extending/components) +- [アクション](/extending/actions) +- [アプリケーションアクション](/extending/application-actions) +- [ルール](/extending/rules) +- [アプリケーションの機能](/extending/application-features) +- [登録](/extending/registration) +- [カスタムエバリュエータの作成](/extending/creating-custom-evaluators) +- [チュートリアル](/extending/tutorials) +- [再配布可能なライブラリ](/extending/redistributable-libraries) diff --git a/docs/ja/extending/actions.md b/docs/ja/extending/actions.md new file mode 100644 index 000000000..b5e82c50b --- /dev/null +++ b/docs/ja/extending/actions.md @@ -0,0 +1,58 @@ +--- +Title: アクション +--- + +# アクション + +以下は、アクションを定義するために使用される JSON プロパティの詳細です。 + +| プロパティ名 | 説明 | +| -- | -- | +| **id** | 一意の識別子。 | +| **type** | アクションタイプ。詳細については、[アプリケーションアクション](/extending/application-actions) を参照してください。 | +| **payload** | アクションペイロード、値または式を含む文字列。 | + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "actions": [ + { + "id": "plugin1.actions.settings", + "type": "NAVIGATE_URL", + "payload": "/settings" + }, + { + "id": "plugin1.actions.info", + "type": "SNACKBAR_INFO", + "payload": "I'm a nice little popup raised by extension." + }, + { + "id": "plugin1.actions.node-name", + "type": "SNACKBAR_INFO", + "payload": "$('Action for ' + context.selection.first.entry.name)" + } + ] +} +``` + +## 値の式 + +軽量の式構文を使用して、アクションペイロードのカスタムパラメータを提供できます。 + +```text +$() +``` + +式は、値を評価する有効な JavaScript ブロックです。 + +例: + +```text +$('hello world') // 'hello world' +$('hello' + ', ' + 'world') // 'hello, world' +$(1 + 1) // 2 +$([1, 2, 1 + 2]) // [1, 2, 3] +``` diff --git a/docs/ja/extending/application-actions.md b/docs/ja/extending/application-actions.md new file mode 100644 index 000000000..c61024154 --- /dev/null +++ b/docs/ja/extending/application-actions.md @@ -0,0 +1,126 @@ +--- +Title: アプリケーションアクション +--- + +# アプリケーションアクション + +アプリは **NgRx** (Angular のリアクティブライブラリ、Redux にインスパイアされた) を使用して、 +アプリケーションアクションを実装します。 + +NgRx の詳細については、次のリソースを参照してください: + +- [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) + +ほとんどのアプリケーションの機能は、NgRx アクションおよび対応するエフェクトの形式で既に公開されています。 +次のように、単一の `Store` ディスパッチャーを介して任意のアクションを呼び出すことができます: + +```ts +export class MyComponent { + constructor(private store: Store) {} + + onClick() { + this.store.dispatch(new SearchByTermAction('*')); + } +} +``` + +上記のコードは、`Search by Term` 機能を呼び出す単純な 'click' ハンドラを示しています +ユーザーを **検索結果** ページに自動的にリダイレクトします。 + +カスタムアプリケーションサービス API からノードを表示する別の例: + +```ts +export class MyService { + constructor(private store: Store) {} + + viewFile(node: MinimalNodeEntity) { + this.store.dispatch(new ViewFileAction(node)); + } +} +``` + +## 拡張機能で使用する + +拡張機能 (ボタン、メニューなど) からすべてのアプリケーションアクションを呼び出すことができます。 + +**Tip:** ペイロードが提供されない場合、アクションの多くは現在選択されているノードを使用します。 +これにより、拡張ファイルからのアクションの宣言と呼び出しが簡単になります。 + +以下の例では、"NEW" メニュードロップダウンへの新しいエントリを作成し、 +`CREATE_FOLDER` アプリケーションアクションを呼び出す新しい`Create Folder (plugin1)` コマンドを提供します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "create": [ + { + "id": "plugin1.create.folder", + "type": "default", + "icon": "create_new_folder", + "title": "Create Folder (plugin1)", + "actions": { + "click": "CREATE_FOLDER" + } + } + ] + } +} +``` + +`CREATE_FOLDER` アクションは、対応する NgRx エフェクトをトリガーしてダイアログを表示し、 +必要に応じてドキュメントリストの再読み込みを実行します。 + +以下は、アクションへの参照としてプラグイン定義で使用できるパブリックアクションタイプのリストです: + +| バージョン | アクション名 | ペイロード | 説明 | +| ------- | ---------------------- | ------------------- | ----------------------------------------------------------------------------------------------- | +| 1.7.0 | SET_CURRENT_FOLDER | Node | 現在開いているフォルダについてコンポーネントに通知します。 | +| 1.7.0 | SET_CURRENT_URL | string | 現在のブラウザ URL についてコンポーネントに通知します。 | +| 1.7.0 | SET_USER_PROFILE | Person | 現在のユーザープロファイルを割り当てます。 | +| 1.7.0 | TOGGLE_INFO_DRAWER | n/a | 選択したノードの情報ドロワーを切り替えます。 | +| 1.7.0 | ADD_FAVORITE | MinimalNodeEntity[] | ノード (または選択したもの) をお気に入りに追加します。 | +| 1.7.0 | REMOVE_FAVORITE | MinimalNodeEntity[] | お気に入りからノード (または選択したもの) を削除します。 | +| 1.7.0 | DELETE_LIBRARY | string | ライブラリを ID で削除します。ペイロードが提供されない場合、選択したノードを使用します。 | +| 1.7.0 | CREATE_LIBRARY | n/a | "ライブラリの作成" ダイアログを呼び出します。 | +| 1.7.0 | SET_SELECTED_NODES | MinimalNodeEntity[] | 選択したノードについてコンポーネントに通知します。 | +| 1.7.0 | DELETE_NODES | MinimalNodeEntity[] | ノード (または選択したもの) を削除します。元に戻すアクションをサポートします。 | +| 1.7.0 | UNDO_DELETE_NODES | any[] | ノード (または選択したもの) の削除を取り消します。 | +| 1.7.0 | RESTORE_DELETED_NODES | MinimalNodeEntity[] | 削除されたノード (または選択したもの) を復元します。通常、Trashcan で使用されます。 | +| 1.7.0 | PURGE_DELETED_NODES | MinimalNodeEntity[] | ノード (または選択したもの) を完全に削除します。通常、Trashcan で使用されます。 | +| 1.7.0 | DOWNLOAD_NODES | MinimalNodeEntity[] | ノード (または選択したもの) をダウンロードします。フォルダまたは複数のアイテムの ZIP アーカイブを作成します。 | +| 1.7.0 | CREATE_FOLDER | string | 開いているフォルダ (またはペイロードの親フォルダ ID) の "フォルダーの作成" ダイアログを呼び出します。 | +| 1.7.0 | EDIT_FOLDER | MinimalNodeEntity | ノード (または選択したもの) の "フォルダの編集" ダイアログを呼び出します。 | +| 1.7.0 | SHARE_NODE | MinimalNodeEntity | ノード (または選択したもの) の "共有" ダイアログを呼び出します。 | +| 1.7.0 | UNSHARE_NODES | MinimalNodeEntity[] | 共有ノードからノード (または選択したもの) を削除します (コンテンツは削除しません)。 | +| 1.7.0 | COPY_NODES | MinimalNodeEntity[] | ノード (または選択したもの) の "コピー" ダイアログを呼び出します。 元に戻すアクションをサポートします。 | +| 1.7.0 | MOVE_NODES | MinimalNodeEntity[] | ノード (または選択したもの) の "移動" ダイアログを呼び出します。元に戻すアクションをサポートします。 | +| 1.7.0 | MANAGE_PERMISSIONS | MinimalNodeEntity | ノード (または選択したもの) の "アクセス許可の管理" ダイアログを呼び出します。 | +| 1.7.0 | MANAGE_VERSIONS | MinimalNodeEntity | ノード (または選択したもの) の "バージョンの管理" ダイアログを呼び出します。 | +| 1.7.0 | NAVIGATE_URL | string | アプリケーション内の特定のルート URL に移動します。 | +| 1.7.0 | NAVIGATE_ROUTE | any[] | 特定のルートに移動します (パラメータをサポート)。 | +| 1.7.0 | NAVIGATE_FOLDER | MinimalNodeEntity | ノードのプロパティに基づいてフォルダに移動します。 | +| 1.7.0 | NAVIGATE_PARENT_FOLDER | MinimalNodeEntity | ノードのプロパティに基づいて、含まれる親フォルダに移動します。 | +| 1.7.0 | NAVIGATE_LIBRARY | string | ライブラリに移動します。 | +| 1.7.0 | SEARCH_BY_TERM | string | 用語で簡単な検索を実行し、検索結果に移動します。 | +| 1.7.0 | SNACKBAR_INFO | string | 提供されたメッセージとともに情報スナックバーを表示します。 | +| 1.7.0 | SNACKBAR_WARNING | string | 提供されるメッセージとともに警告スナックバーを表示します。 | +| 1.7.0 | SNACKBAR_ERROR | string | 提供されたメッセージとともにエラースナックバーを表示します。 | +| 1.7.0 | UPLOAD_FILES | n/a | "ファイルのアップロード" ダイアログを呼び出して、現在開いているフォルダにファイルをアップロードします。 | +| 1.7.0 | UPLOAD_FOLDER | n/a | "フォルダのアップロード" ダイアログを呼び出し、選択したフォルダを現在開いているフォルダにアップロードします。 | +| 1.7.0 | UPLOAD_FILE_VERSION | n/a | "新しいファイルバージョン" ダイアログを呼び出します。 | +| 1.7.0 | VIEW_FILE | MinimalNodeEntity | ビューアでファイル (または選択したもの) をプレビューします。 | +| 1.7.0 | UNLOCK_WRITE | NodeEntry | ファイルを読み取り専用モードからロック解除します。 | +| 1.7.0 | PRINT_FILE | MinimalNodeEntity | ビューアで開いた (または選択した) ファイルを印刷します。 | +| 1.7.0 | FULLSCREEN_VIEWER | n/a | ビューアで開いたファイルを表示するために、フルスクリーンモードを開始します。 | +| 1.7.0 | LOGOUT | n/a | ログアウトして、ログイン画面にリダイレクトします。 | +| 1.7.0 | RELOAD_DOCUMENT_LIST | n/a | アクティブなドキュメントリストを再読み込みします。 | +| 1.7.0 | TOGGLE_SEARCH_FILTER | n/a | 検索結果のフィルターコンポーネントの表示を切り替えます。 | +| 1.7.0 | SHOW_SEARCH_FILTER | n/a | 検索結果にフィルターコンポーネントを表示します。 | +| 1.7.0 | HIDE_SEARCH_FILTER | n/a | 検索結果でフィルターコンポーネントを非表示にします | +| 1.8.0 | VIEW_NODE | string | ID によるノードの軽量プレビュー。拡張機能から呼び出すことができます。 | +| 1.8.0 | CLOSE_PREVIEW | n/a | ビューア (アイテムのプレビュー) を閉じます。 | +| 1.9.0 | RESET_SELECTION | n/a | アクティブなドキュメントリストの選択をリセットします | diff --git a/docs/ja/extending/application-features.md b/docs/ja/extending/application-features.md new file mode 100644 index 000000000..0c1228e20 --- /dev/null +++ b/docs/ja/extending/application-features.md @@ -0,0 +1,686 @@ +--- +Title: アプリケーションの機能 +--- + +# アプリケーションの機能 + +このセクションには、最終的な実装に応じて異なるアプリケーション固有の機能が含まれています。 + +ACA は、次の拡張ポイントのセットをサポートします: + +- 作成メニュー +- ナビゲーションバー +- ツールバー +- コンテキストメニュー +- ビューア +- サイドバー (情報ドロアー) +- コンテンツメタデータプリセット (`Properties` タブ用) + +すべてのカスタマイズは設定ファイルの `features` セクションに保存されます: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "create": [], + "navbar": [], + "toolbar": [], + "contextMenu": [], + "viewer": { + "toolbarActions:": [], + "openWith": [], + "content": [] + }, + "sidebar": [], + "content-metadata-presets": [] + } +} +``` + +他のアプリケーションまたは外部プラグインは、上記の構成の異なるサブセットを利用できます。 +また、構成スキーマに追加のエントリを追加できます。 + +## コンテンツアクション + +ツールバーボタンやメニューなど、コンテンツを操作する UI 要素のほとんどは、 +`ContentActionRef` インターフェイスの実装に基づいています: + +```ts +interface ContentActionRef { + id: string; + type: ContentActionType; + + title?: string; + description?: string; + order?: number; + icon?: string; + disabled?: boolean; + children?: Array; + component?: string; + actions?: { + click?: string; + [key: string]: string; + }; + rules?: { + enabled?: string; + visible?: string; + [key: string]: string; + }; +} +``` + +上記の構造を使用して、`app.extensions.json` ファイルでコンテンツアクションを定義できます。 + +## 作成メニュー + +"新規" メニューオプションの拡張エンドポイントを提供します。 + +以下の例のように、メニューに追加のエントリを追加できます: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "create": [ + { + "id": "plugin1.create.folder", + "icon": "create_new_folder", + "title": "Create Folder (plugin1)", + "actions": { + "click": "CREATE_FOLDER" + }, + "rules": { + "enabled": "app.navigation.folder.canCreate" + } + }, + { + "id": "plugin1.create.uploadFile", + "icon": "file_upload", + "title": "Upload Files (plugin1)", + "actions": { + "click": "UPLOAD_FILES" + }, + "rules": { + "enabled": "app.navigation.folder.canUpload" + } + } + ] + } +} +``` + +サポートされているプロパティの詳細については、[コンテンツアクション](/extending/application-features#content-actions) セクションを参照してください。 + +**Tip:** 外部拡張ファイル内から既存のエントリを更新または無効にすることもできます。カスタマイズするには、ターゲット要素の `id` を知る必要があります。 + +## ナビゲーションバー + +ナビゲーションバーは、グループ (`NavBarGroupRef`) に編成されたリンク要素 (`NavBarLinkRef`) で構成されます。 + +```ts +export interface NavBarGroupRef { + id: string; + items: Array; + + order?: number; + disabled?: boolean; +} + +export interface NavBarLinkRef { + id: string; + icon: string; + title: string; + route: string; + + url?: string; // evaluated at runtime based on route ref + description?: string; + order?: number; + disabled?: boolean; +} +``` + +拡張機能は、実行時に次のアクションを実行できます: + +- リンクを使用して新しいグループを登録する +- 既存のグループに新しいリンクを挿入します +- 既存のリンクのプロパティを更新する +- 既存のリンクまたはグループ全体を無効にします + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "navbar": [ + { + "id": "app.navbar.primary", + "items": [ + { + "id": "app.navbar.personalFiles", + "icon": "folder", + "title": "Personal Files", + "route": "personal-files" + }, + { + "id": "app.navbar.libraries", + "icon": "group_work", + "title": "Libraries", + "route": "libraries" + } + ] + }, + { + "id": "app.navbar.secondary", + "items": [ + { + "id": "app.navbar.shared", + "icon": "people", + "title": "Shared", + "route": "shared" + } + ] + } + ] + } +} +``` + +## サイドバー (情報ドロアー) + +サイドバー (情報ドロアー) コンポーネントに次のカスタマイズを提供できます: + +- カスタムコンポーネントを使用してタブを追加する +- メインアプリケーションまたは拡張機能のタブを無効にする +- 既存のタブのコンテンツまたはプロパティを置き換える + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "sidebar": [ + { + "id": "app.sidebar.properties", + "order": 100, + "title": "Properties", + "component": "app.components.tabs.metadata" + }, + { + "id": "app.sidebar.comments", + "order": 200, + "title": "Comments", + "component": "app.components.tabs.comments" + } + ] + } +} +``` + +上記の例は2つのタブをレンダリングします: + +- `app.components.tabs.metadata` コンポーネントを参照する `Properties` タブ +- `app.components.tabs.comments` コンポーネントを参照する `Comments` タブ + +対応するすべてのコンポーネントは、実行環境で使用するために登録する必要があります。 + +**Tip:** 実行時に再利用される独自のエントリを登録する方法の詳細については、 +[登録](/extending/registration) セクションを参照してください。 + +### タブプロパティ + +| プロパティ名 | 説明 | +| ------------- | ----------------------------------------------------------------- | +| **id** | 一意の識別子。 | +| **component** | ルートに使用するメインの[コンポーネント](/extending/components)。 | +| **title** | タブのタイトルまたはリソースのキー | +| icon | タブのアイコン | +| disabled | 無効状態を切り替えます。他のプラグインから割り当てることができます。 | +| order | 要素の順序。 | + +### タブコンポーネント + +タブのコンテンツに割り当てるすべてのコンポーネントは、実行時に次の追加プロパティを受け取ります: + +| プロパティ名 | タイプ | 説明 | +| ---- | ---------------------- | --------------------------- | +| node | MinimalNodeEntryEntity | 表示されるノードエントリ。 | + +## ツールバー + +ツールバーの拡張ポイントは、コンテンツアクション参照の配列で表されます。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "toolbar": [ + { + "id": "app.toolbar.preview", + "title": "View", + "icon": "open_in_browser", + "actions": { + "click": "VIEW_FILE" + }, + "rules": { + "visible": "app.toolbar.canViewFile" + } + }, + { + "id": "app.toolbar.download", + "title": "Download", + "icon": "get_app", + "actions": { + "click": "DOWNLOAD_NODES" + }, + "rules": { + "visible": "app.toolbar.canDownload" + } + } + ] + } +} +``` + +コンテンツアクションは、次のビューのツールバーに適用されます: + +- 個人用ファイル +- ライブラリ +- 共有ファイル +- 最近使用したファイル +- お気に入り +- ゴミ箱 +- 検索結果 +- ライブラリ検索結果 + +## コンテキストメニュー + +コンテキストメニューの拡張性は、ツールバーの拡張性に似ています。 +ルールによって裏付けられ、アプリケーションアクションに関連付けられたコンテンツアクションのリストを定義することができます。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "contextMenu": [ + { + "id": "app.context.menu.download", + "order": 100, + "title": "Download", + "icon": "get_app", + "actions": { + "click": "DOWNLOAD_NODES" + }, + "rules": { + "visible": "app.toolbar.canDownload" + } + } + ] + } +} +``` + +メモ: 使用可能なルールとエバリュエータを再利用できます。 + +上記の例では、コンテキストメニューアクション `Download` は、`rules` セクションで宣言された +`app.toolbar.canDownload` ルールを利用します: + +```json +{ + "rules": [ + { + "id": "app.toolbar.canDownload", + "type": "core.every", + "parameters": [ + { "type": "rule", "value": "app.selection.canDownload" }, + { "type": "rule", "value": "app.navigation.isNotTrashcan" } + ] + } + ] +} +``` + +## ビューア + +ACA の Viewer コンポーネントは、次の拡張ポイントをサポートします: + +- コンテンツビューア +- ツールバーアクション +- `その他` のツールバーアクション +- `開く` アクション +- ルール + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "viewer": { + "content": [], + "toolbarActions:": [], + "openWith": [] + } + } +} +``` + +### コンテンツビュー + +拡張機能に基づいて特定の種類のコンテンツをレンダリングするカスタムコンポーネントを提供できます。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "viewer": { + "content": [ + { + "id": "app.viewer.pdf", + "fileExtension": "pdf", + "component": "app.components.tabs.metadata" + }, + { + "id": "app.viewer.docx", + "fileExtension": "docx", + "component": "app.components.tabs.comments" + } + ] + } + } +} +``` + +上記の例では、`PDF` ビューを `metadata` タブに、 +`DOCX` ビューを `comments` タブに置き換えています。 + +すべてのカスタムコンポーネントは、実行時に次のプロパティを受け取ります: + +| プロパティ名 | タイプ | 説明 | +| --------- | ---------------------- | --------------------------- | +| node | MinimalNodeEntryEntity | 表示されるノードエントリ。 | +| url | string | ファイルコンテンツの URL。 | +| extension | string | ファイル名拡張子。 | + +#### ルール + +`disabled` 状態のルールを提供することもできます。 +これにより、外部要因に基づいてビューア拡張の条件付き可用性を提供できます。 + +```json +{ + "id": "app.viewer.pdf", + "fileExtension": "png", + "component": "app.components.tabs.metadata", + "rules": { + "disabled": "isViewerDisabled" + } +} +``` + +### ツールバーアクション + +ACA ビューアのデフォルトのツールバーアクションは、拡張機能を使用してカスタマイズし、置換、変更、または無効にすることができます。 +拡張機能の設定から新しいビューアツールバーアクションを追加することもできます: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "viewer": { + "toolbarActions": [ + { + "id": "app.viewer.versions", + "order": 500, + "title": "APP.ACTIONS.VERSIONS", + "icon": "history", + "actions": { + "click": "MANAGE_VERSIONS" + }, + "rules": { + "visible": "app.toolbar.versions" + } + } + ] + } + } +} +``` + +サブメニューを提供することもできます: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "viewer": { + "toolbarActions": [ + { + "id": "app.toolbar.more", + "type": "menu", + "order": 10000, + "icon": "more_vert", + "title": "APP.ACTIONS.MORE", + "children": [ + { + "id": "app.viewer.share", + "order": 300, + "title": "Share", + "icon": "share", + "actions": { + "click": "SHARE_NODE" + }, + "rules": { + "visible": "app.selection.file.canShare" + } + } + ] + } + ] + } + } +} +``` + +### 「開く」アクション + +ビューアのすべてのインスタンスでレンダリングするために`開く` アクションのリストを提供できます。 + +次の例では、単純な `Snackbar` アクション参照を作成し、 +`Snackbar` と呼ばれるカスタムの `開く` メニューエントリから呼び出します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "actions": [ + { + "id": "plugin1.actions.info", + "type": "SNACKBAR_INFO", + "payload": "I'm a nice little popup raised by extension." + } + ], + + "features": { + "viewer": { + "openWith": [ + { + "id": "plugin1.viewer.openWith.action1", + "type": "button", + "icon": "build", + "title": "Snackbar", + "actions": { + "click": "plugin1.actions.info" + } + } + ] + } + } +} +``` + +他のコンテンツアクションと同様に、カスタムプラグインは `開く` アクションを無効化、更新、または拡張できます。 + +### ルール + +`features.viewer.rules` オブジェクトを利用して、ビューアにグローバルルールを提供できます: + +```ts +export interface ViewerRules { + /** + * Checks if user can preview the node. + */ + canPreview?: string; +} +``` + +例えば: + +```json +{ + "features": { + "viewer": { + "rules": { + "canPreview": "customRule" + } + } + } +} +``` + +ルールは、ノードのプレビューが許可されている場合は `true`、そうでない場合は `false` を返す必要があります。 + +## コンテンツメタデータのプリセット + +コンテンツメタデータプリセットは、[Content Metadata Component](https://www.alfresco.com/abn/adf/docs/content-services/components/content-metadata-card.component/) が特定のノードのメタデータアスペクトのプロパティをレンダリングするために必要です。 +さまざまな側面とそのプロパティは `app.config.json` ファイルで設定されますが、拡張ファイルを介して実行時に設定することもできます。 + +`app.extensions.json` からこれらのプリセットを設定すると、デフォルトのアプリケーション設定が上書きされます。 +カスタムプラグインから設定すると、これらのプリセットを無効化、更新、または拡張できます。 +拡張機能のマージに関する詳細はこちらをご覧ください[here](/extending/extension-format#merging-properties)。 + +`content-metadata-presets` 要素は、`disabled` プロパティを設定することでオフにできます。 +これはネストされたアイテムにも適用でき、アスペクトレベルまで無効にできます。 + +**Tip:** 既存のエントリを変更または無効にするには、ターゲット要素の ID とその親 ID を知る必要があります。 + +拡張機能は、実行時に次のアクションを実行できます: + +- 新しいプリセット項目を追加します。 +- 任意のレベルで既存のプリセットに新しいアイテムを追加します。 +- アスペクトレベルまで特定のアイテムを無効にします。 +- ID に基づいて既存のアイテムを変更します。 + +プロパティに関しては、次のことができます: + +- 既存のアスペクトに新しいプロパティを追加する、または +- アスペクトのプロパティを再定義します。 + +このコードスニペットを確認して、外部プラグインから `exif:exif` アスペクトのプロパティを上書きする方法を確認してください: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "content-metadata-presets": [ + { + "id": "app.content.metadata.custom", + "custom": [ + { + "id": "app.content.metadata.customGroup", + "items": [ + { + "id": "app.content.metadata.exifAspect", + "disabled": true + }, + { + "id": "app.content.metadata.exifAspect2", + "aspect": "exif:exif", + "properties": [ + "exif:orientation", + "exif:manufacturer", + "exif:model", + "exif:software" + ] + } + ] + } + ] + } + ] + } +} +``` + +この外部プラグインは、`app.extensions.json` で既に定義されている初期の `exif:exif` アスペクトを無効にし、 `exif:exif` アスペクトの他のプロパティを定義します。 +`app.extension.json` の初期設定は次のとおりです: + +```json +... + "content-metadata-presets": [ + { + "id": "app.content.metadata.custom", + "custom": [ + { + "id": "app.content.metadata.customGroup", + "title": "APP.CONTENT_METADATA.EXIF_GROUP_TITLE", + "items": [ + { + "id": "app.content.metadata.exifAspect", + "aspect": "exif:exif", + "properties": [ + "exif:pixelXDimension", + "exif:pixelYDimension", + "exif:dateTimeOriginal", + "exif:exposureTime", + "exif:fNumber", + "exif:flash", + "exif:focalLength", + "exif:isoSpeedRatings", + "exif:orientation", + "exif:manufacturer", + "exif:model", + "exif:software" + ] + } + ] + } + ] + } + ] +... + +``` + +**Tip:** content-metadata プリセットを拡張できるようにするには、 `app.config.json` の設定を `app.extensions.json` ファイルにコピーし、その ID をすべてのアイテムに追加する必要があります。 +ID を使用すると、外部プラグインが現在の設定を拡張できます。 diff --git a/docs/ja/extending/components.md b/docs/ja/extending/components.md new file mode 100644 index 000000000..65ccae6d6 --- /dev/null +++ b/docs/ja/extending/components.md @@ -0,0 +1,28 @@ +--- +Title: コンポーネント +--- + +# コンポーネント + +任意の Angular コンポーネントを登録して、拡張を加えることができます。 + +コンポーネントは、カスタムを作成するために使用されます: + +- ルートとページ +- ツールバーボタン +- メニューアイテム + +| キー | タイプ | 説明 | +| --------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------- | +| app.layout.main | LayoutComponent | コンポーネントを投影するためのメニューバー、ナビゲーションサイドバー、メインコンテンツ領域を備えたメインアプリケーションレイアウト。 | +| app.toolbar.toggleInfoDrawer | ToggleInfoDrawerComponent | 選択のために情報ドロアーを切り替えるツールバーボタンコンポーネント。 | +| app.toolbar.toggleFavorite | ToggleFavoriteComponent | 選択したお気に入りの状態を切り替えるツールバーボタンコンポーネント。 | +| app.toolbar.toggleFavoriteLibrary | ToggleFavoriteLibraryComponent | 選択したお気に入りライブラリの状態を切り替えるツールバーボタンコンポーネント。 | +| app.toolbar.toggleJoinLibrary | ToggleJoinLibraryComponent | 選択したライブラリの参加/キャンセルのリクエストを切り替えるツールバーボタンコンポーネント。 | +| app.toolbar.viewNode | ViewNodeComponent | ファイルを表示するアクションコンポーネント。 | + +実行時に再利用される独自のエントリを登録する方法の詳細については、 +[登録](/extending/registration) セクションを参照してください。 + +カスタム拡張機能は、新しいコンポーネントを登録するだけでなく、 +実行時に既存のコンポーネントを既知の識別子で置き換えることもできます。 diff --git a/docs/ja/extending/creating-custom-evaluators.md b/docs/ja/extending/creating-custom-evaluators.md new file mode 100644 index 000000000..e97f83672 --- /dev/null +++ b/docs/ja/extending/creating-custom-evaluators.md @@ -0,0 +1,69 @@ +--- +Title: カスタムエバリュエータの作成 +--- + +# カスタムエバリュエータの作成 + +ルールエバリュエータは、`RuleContext` 参照とオプションの `RuleParameter` インスタンスのリストを受け取るプレーンな JavaScript (または TypeScript) 関数です。 + +アプリケーションは、評価関数に特別な +[RuleEvaluator](https://github.com/Alfresco/alfresco-ng2-components/blob/development/lib/extensions/src/lib/config/rule.extensions.ts) +タイプエイリアスを提供します: + +```ts +export type RuleEvaluator = (context: RuleContext, ...args: any[]) => boolean; +``` + +ユーザーが 1 つまたは複数のノードを選択したかどうかを確認する関数を作成します。 + +```ts +export function hasSelection( + context: RuleContext, + ...args: RuleParameter[] +): boolean { + return !context.selection.isEmpty; +} +``` + +`context` は、[RuleContext](https://github.com/Alfresco/alfresco-ng2-components/blob/development/lib/extensions/src/lib/config/rule.extensions.ts) 型の特別なインスタンスへの参照であり、 +各エバリュエータがランタイムエンティティにアクセスできるようにします。 + +```ts +export interface RuleContext { + selection: SelectionState; + navigation: NavigationState; + permissions: NodePermissions; + + getEvaluator(key: string): RuleEvaluator; +} +``` + +`SelectionState` インターフェイスはグローバルな選択状態に関する情報を公開します: + +```ts +export interface SelectionState { + count: number; + nodes: MinimalNodeEntity[]; + libraries: SiteEntry[]; + isEmpty: boolean; + first?: MinimalNodeEntity; + last?: MinimalNodeEntity; + folder?: MinimalNodeEntity; + file?: MinimalNodeEntity; + library?: SiteEntry; +} +``` + +次に、先ほど作成した関数を `ExtensionService` で登録し、一意の識別子を付けます: + +```ts +extensions.setEvaluators({ + 'plugin1.rules.hasSelection': hasSelection +}); +``` + +これで、`plugin1.rules.hasSelection` エバリュエータをインラインルールリファレンスとして使用したり、 +`core.every` のような複合ルールの一部として使用したりできます。 + +**Tip:** 実行時に再利用される独自のエントリを登録する方法の詳細については、 +[登録](/extending/registration) セクションを参照してください。 diff --git a/docs/ja/extending/extending.md b/docs/ja/extending/extending.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/ja/extending/extending.md @@ -0,0 +1 @@ + diff --git a/docs/ja/extending/extensibility-features.md b/docs/ja/extending/extensibility-features.md new file mode 100644 index 000000000..20f04cc4f --- /dev/null +++ b/docs/ja/extending/extensibility-features.md @@ -0,0 +1,35 @@ +--- +Title: 拡張機能 +--- + +# 拡張機能 + +アプリケーションの拡張は、`/src/assets/app.extensions.json`、 +およびメインエントリポイントの参照である任意の数の外部プラグインを介して実行されます。 + +アプリケーションには、外部ファイルを保存するように事前設定された +`/src/assets/plugins/` フォルダも付属しています。 + +次の領域を変更、切り替え、または拡張するプラグインを作成できます: + +- ナビゲーションサイドバーのリンクとグループ +- コンテキストメニュー +- サイドバー (情報ドロワー) +- ツールバーのエントリ + - ボタン + - メニューボタン + - セパレータ +- ビューアーのアクション + - "~で開く" エントリ + - ツールバーのエントリ + - ボタン + - "その他のアクション" ボタン +- コンテンツメタデータプリセット (`プロパティ`タブで使用) +- カスタムアイコン + +拡張もできます: + +- メインアプリケーションまたは他のプラグインの拡張ポイントを上書きまたは無効にする +- ルール、アクション、またはその他の視覚要素を変更する +- 空のページまたはレイアウトに基づいて新しいアプリケーションルートを登録する +- 新しいルールエバリュエーター、コンポーネント、ガードを登録する diff --git a/docs/ja/extending/extension-format.md b/docs/ja/extending/extension-format.md new file mode 100644 index 000000000..6a79754e6 --- /dev/null +++ b/docs/ja/extending/extension-format.md @@ -0,0 +1,310 @@ +--- +Title: 拡張フォーマット +--- + +# 拡張フォーマット + +フォーマットは、次のような構造の JSON ファイルで表されます: + +```json +{ + "$id": "unique.id", + "$name": "extension.name", + "$version": "1.0.0", + "$vendor": "author.name", + "$license": "license", + "$runtime": "1.5.0", + "$description": "some description", + + "routes": [], + "actions": [], + "rules": [], + "features": {} +} +``` + +## スキーマ + +JSON スキーマは、プロジェクトのルートフォルダ [extension.schema.json](../../extension.schema.json) にあります。 + +**Tip:** スキーマを使用すると、拡張ファイルを検証し、コード補完とドキュメントヒントを提供できます。 + +```json +{ + "$schema": "../../extension.schema.json", + "$name": "app", + "$version": "1.0.0" +} +``` + +## 複数のファイル + +複数の拡張ファイルを個別に配布できます。 +すべての追加ファイルは、`$references` プロパティを介してリンクされます。 +宣言の順序は、ロードの順序を定義します。 + +```json +{ + "$schema": "../../extension.schema.json", + "$name": "app", + "$version": "1.0.0", + "$references": ["plugin1.json", "plugin2.json"] +} +``` + +**注:** すべての拡張ファイルは、実行時にマージされます。 +これにより、プラグインはメインアプリケーションのコードを上書きしたり、他のプラグインを変更したりできます。 + +## 起動時の動作 + +最初に、ルートの `app.extensions.json` が特別な `Loader` サービスによってロードされます。 +ファイルには、アプリケーションが機能するために必要なすべての宣言を含めることができます。追加のプラグインファイルは完全にオプションです。 + +次に、`Loader` は `$references` メタデータを走査し、提供されている場合は追加のファイルをロードします。 +速度を上げるため、ファイルは並行してロードされますが、すべてがロードされると、宣言順に適用されます。 + +すべての外部ファイルが取得された後、`Loader` はそれらをソートし、メタデータプロパティを削除して、結果の JSON オブジェクトを互いの上にスタックします。 + +**Tip:** `$` 記号で始まる最上位のプロパティ名はメタデータと見なされ、マージプロセスには参加しません。 +これにより、たとえばプラグインは、`$name`、`$version`、`$description`、`$license` など、メンテナンスおよび視覚化のために追加情報を保持できます。 + +### プロパティのマージ + +JSON 構造およびネストのレベルに制限はありません。 +すべてのオブジェクトは、プロパティキーとオブジェクトID (配列用) に基づいて単一のセットにマージされます。 + +マージ前: Plugin 1 + +```json +{ + "$name": "plugin1", + "plugin1.key": "value", + "plugin1.text": "string" +} +``` + +マージ前: Plugin 2 + +```json +{ + "$name": "plugin2", + "plugin2.key": "value", + "plugin1.text": "custom string" +} +``` + +最終結果: + +```json +{ + "plugin1.key": "value", + "plugin1.text": "custom string", + "plugin2.key": "value" +} +``` + +その結果、2つの一意のプロパティ `plugin1.key` と `plugin2.key` があり、 +`Plugin 1` で最初に定義されたが `Plugin 2` で上書きされた `plugin1.text` もあります。 + +**Tip:** JSON マージは、アプリケーションまたは対応するプラグインライブラリを再構築せずに、ベースアプリケーションの設定を変更したり、 +他のプラグインの機能を切り替えたりすることができるため、非常に強力な概念です。 + +### オブジェクトのマージ + +複雑なオブジェクトはプロパティによってマージされます。このプロセスは再帰的であり、ネストレベルに制限はありません。 + +マージ前: Plugin 1 + +```json +{ + "$name": "plugin1", + "features": { + "title": "some title", + "page1": { + "title": "page 1" + } + } +} +``` + +マージ前: Plugin 2 + +```json +{ + "$name": "plugin2", + "features": { + "page1": { + "title": "custom title" + }, + "page2": { + "title": "page 2" + } + } +} +``` + +最終結果: + +```json +{ + "features": { + "title": "some title", + "page1": { + "title": "custom title" + }, + "page2": { + "title": "page 2" + } + } +} +``` + +一意のプロパティが1つのオブジェクトにマージされていることがわかります。 +ただし、最後の一意でないプロパティは以前の値を上書きします。 + +現在のデザインを使用して、プラグインからアプリケーションプロパティを削除することはできません。 +ローダーエンジンは、値の上書きのみをサポートします。ただし、多くのコンポーネントは、外部定義を使用して変更できる `disabled` プロパティをサポートしています: + +マージ前: Plugin 1 + +```json +{ + "$name": "plugin1", + "feature1": { + "disabled": false, + "text": "some-feature", + "icon": "some-icon" + } +} +``` + +マージ前: Plugin 2 + +```json +{ + "$name": "plugin2", + "feature1": { + "disabled": true + } +} +``` + +最終結果: + +```json +{ + "feature1": { + "disabled": true, + "text": "some-feature", + "icon": "some-icon" + } +} +``` + +詳細については、[コンテンツの無効化](/extending/extension-format#disabling-content) セクションをご覧ください。 + +### 配列のマージ + +拡張機能 `Loader` は、配列のマージを特別にサポートします。 +デフォルトでは、オブジェクトに `id` プロパティがない限り、2つのコレクションは単一の配列にマージされます。 + +**Tip:** 配列に同じ `id` プロパティを持つ2つのオブジェクトが含まれる場合、オブジェクトは追加されるのではなくマージされます。 + +マージ前: Plugin 1 + +```json +{ + "$name": "plugin1", + "features": [ + { "text": "common 1" }, + { + "id": "page1", + "text": "page 1" + } + ] +} +``` + +マージ前: Plugin 2 + +```json +{ + "$name": "plugin2", + "features": [ + { "text": "common 2" }, + { + "id": "page1", + "text": "custom page" + } + ] +} +``` + +最終結果: + +```json +{ + "features": [ + { "text": "common 1" }, + { "text": "common 2" }, + { + "id": "page1", + "text": "custom page" + } + ] +} +``` + +同じ `page1` 識別子を持つオブジェクトがマージされ、他の一意のエントリが結果の配列に追加されることに注意してください。 + +## コンテンツを無効にする + +ほとんどのスキーマ要素は、`disabled` プロパティを使用してオフにすることができます: + +```json +{ + "$schema": "../../extension.schema.json", + "$name": "app", + "$version": "1.0.0", + + "features": { + "create": [ + { + "id": "app.create.folder", + "disabled": true, + "order": 100, + "icon": "create_new_folder", + "title": "Create Folder" + } + ] + } +} +``` + +この機能は、外部プラグイン内から既存の機能を無効にする場合に便利です。 + +以下の例では、`plugin1` というプラグインは、アプリケーションによって公開される標準の `app.create.folder` メニューを、 +プラグインに付属するカスタムメニューに置き換えます。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "create": [ + { + "id": "app.create.folder", + "disabled": true, + ... + }, + { + "id": "plugin1.create.folder", + "title": "Create Folder", + ... + } + ] + } +} +``` diff --git a/docs/ja/extending/icons.md b/docs/ja/extending/icons.md new file mode 100644 index 000000000..1690ced8b --- /dev/null +++ b/docs/ja/extending/icons.md @@ -0,0 +1,46 @@ +--- +Title: カスタムアイコン +--- + +# カスタムアイコン + +カスタムの `.svg` アイコンを登録して、ツールバー、コンテキストメニューなどで使用できます。 + +アイコンは `features.icons` セクションで宣言されています。たとえば: + +```json +{ + "features": { + "icons": [ + { + "id": "adf:join_library", + "value": "./assets/images/join-library.svg" + }, + { + "id": "adf:move_file", + "value": "./assets/images/adf-move-file-24px.svg" + } + ] + } +} +``` + +`id` の値は、[Material Icon](https://material.angular.io/components/icon/api) コンポーネントの形式と同様に、 +`[namespace]:[name]` の形式に準拠する必要があります。 +アイコンファイルのパスは、デプロイされたアプリケーションルート (または `index.html` ファイル) に対して相対的でなければなりません。 + +その後、他の要素でアイコン ID を使用できます。たとえば: + +```json +{ + "id": "app.toolbar.move", + "order": 500, + "title": "APP.ACTIONS.MOVE", + "icon": "adf:move_file", + "actions": { + "click": "MOVE_NODES" + } +} +``` + +また、アイコンの値を上書きしたり、外部拡張機能からエントリを無効にしたりすることもできます。 diff --git a/docs/ja/extending/redistributable-libraries.md b/docs/ja/extending/redistributable-libraries.md new file mode 100644 index 000000000..e9c0b739d --- /dev/null +++ b/docs/ja/extending/redistributable-libraries.md @@ -0,0 +1,222 @@ +--- +Title: 再配布可能なライブラリ +--- + +# 再配布可能なライブラリ + +拡張ライブラリは、JSON 形式の標準の Angular ライブラリと定義ファイルに基づいています。 + +詳細については、次の記事をご覧ください: [Angular CLI 6のライブラリサポート](https://github.com/angular/angular-cli/wiki/stories-create-library#library-support-in-angular-cli-6) + +あわせて参照 + +- Angular Library Series - Angular CLI を使用したライブラリの作成 + - Part 1: https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5 + - Part 2: https://blog.angularindepth.com/creating-a-library-in-angular-6-part-2-6e2bc1e14121 + +## 拡張ライブラリの作成 + +最初に、ワークスペース内で新しいプロジェクトを生成します: + +```sh +ng generate library my-extension +``` + +`projects/my-extensions` フォルダに新しいプロジェクトを取得します。 +デフォルトでは、プロジェクトには少なくとも次のコンテンツが含まれています: + +- Example component `my-extension.component.ts` +- Example service `my-extension.service.ts` +- Angular Module example `my-extension.module.ts` + +次に、次のコマンドでプロジェクトをビルドします: + +```sh +ng build my-extension +``` + +Angular CLI は、プロジェクトの Typescript パスマッピングを自動的に構成するため、ライブラリをリンクするための追加手順は必要ありません。 + +### 動的コンポーネントを登録する + +`my-extension.module.ts` を更新し、実行時に動的に使用する予定のすべてのコンテンツをモジュールの `entryComponents` セクションに配置します。 + +```typescript +@NgModule({ + imports: [], + declarations: [MyExtensionComponent], + exports: [MyExtensionComponent], + entryComponents: [MyExtensionComponent] +}) +export class MyExtensionModule {} +``` + +ここで、`MyExtensionComponent` を拡張コンポーネントとして登録する必要があります。 +次の例のようにコードを更新します: + +```typescript +import { ExtensionService } from '@alfresco/adf-extensions'; + +@NgModule({...}) +export class MyExtensionModule { + constructor(extensions: ExtensionService) { + extensions.setComponents({ + 'my-extension.main.component': MyExtensionComponent, + }); + } +} +``` + +`MyExtensionComponent` を参照する場合、 +JSON 定義で `my-extension.main.component` 識別子を使用できるようになりました。 + +### プラグイン定義ファイル + +ライブラリプロジェクトのルートフォルダに次の内容の新しい `assets/my-extension.json` ファイルを作成します: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + "$description": "demo plugin", + + "routes": [ + { + "id": "my.extension.route", + "path": "ext/my/route", + "component": "my-extension.main.component" + } + ], + + "features": { + "navbar": [ + { + "id": "my.extension.nav", + "items": [ + { + "id": "my.extension.main", + "icon": "extension", + "title": "My Extension", + "route": "my.extension.route" + } + ] + } + ] + } +} +``` + +ルートの `package.json` ファイルを更新し、`scripts` セクションに次のエントリを追加します: + +```json +{ + "scripts": { + ..., + + "build:my-extension": + "ng build my-extension && cpr projects/my-extension/assets dist/my-extension/assets --deleteFirst" + } +} +``` + +このスクリプトを使用して、ライブラリを構築し、アセットをアウトプットフォルダにコピーできるようになりました。 + +**Tip:** ライブラリのインストール手順を `README.md` ファイルで提供することをお勧めします。 +プラグイン定義ファイルをメインアプリケーションの `assets/plugins` フォルダにコピーするビルドルールが開発者に必要であることを忘れないでください。 + +## NPM へのライブラリの公開 + +公開する前に、常にライブラリを再構築する必要があります: + +```sh +npm run build:my-extension +``` + +アウトプットフォルダに移動し、publish コマンドを実行します。 + +```sh +cd dist/my-extension +npm publish +``` + +注: 有効な [NPM](https://www.npmjs.com/) アカウントが必要です。 + +詳細については、[ライブラリの公開](https://github.com/angular/angular-cli/wiki/stories-create-library#publishing-your-library) の記事をご覧ください。 + +## 拡張ライブラリの使用 + +拡張ライブラリを NPM に公開していると仮定すると、標準コマンドを使用してインストールできます: + +```sh +npm install my-extension +``` + +これにより、ライブラリとそのすべての依存関係がインストールされます。 + +**注:** アプリケーションはすでに `dist` フォルダのローカルバージョンを使用するように設定されているため、元のワークスペースにライブラリをインストールする必要はありません。 + +### アセットをコピーする + +同じワークスペースで拡張ライブラリを開発およびテストする場合は、`angular.json` 設定ファイルを編集し、次のルールを追加します。 + +```json +{ + "glob": "**/*.json", + "input": "dist/my-extension/assets", + "output": "/assets/plugins" +} +``` + +NPM から拡張機能をインストールする場合は、次のルールを使用します: + +```json +{ + "glob": "**/*.json", + "input": "node_modules/my-extension/assets", + "output": "/assets/plugins" +} +``` + +### モジュールの登録 + +メインアプリケーションで、`src/app/extensions.module.ts` ファイルを編集し、次の例のようにモジュール宣言を追加します: + +```typescript +... +import { MyExtensionModule } from 'my-extension'; + +@NgModule({ + ... + imports: [ + ..., + MyExtensionModule + ] +}) +export class AppExtensionsModule {} +``` + +### プラグインの登録 + +最後に、`assets/app.extensions.json` ファイルを更新し、新しいプラグインへの参照を追加します: + +```json +{ + "$references": [ + ..., + "my-extension.json" + ] +} +``` + +## ライブラリのテスト + +アプリケーションを実行し、追加のナビゲーションサイドバーエントリがあることを確認します: + +```sh +npm start +``` + +`My Extension` リンクをクリックすると、メインコンテンツ領域にライブラリからの拡張機能コンポーネントが表示されます。 + +**Note:** アプリケーションの設定によっては、`admin` ユーザーが利用できる `Settings` ダイアログ (アプリケーションプロファイルボタンをクリックします) を介して外部プラグインを有効にする必要がある場合があります。 diff --git a/docs/ja/extending/registration.md b/docs/ja/extending/registration.md new file mode 100644 index 000000000..468362158 --- /dev/null +++ b/docs/ja/extending/registration.md @@ -0,0 +1,49 @@ +--- +Title: 登録 +--- + +# 登録 + +`ExtensionService` を使用して、カスタムコンポーネント、認証ガード、 +ルールエバリュエータなどを登録できます。 + +モジュールコンストラクタ内からカスタムコンテンツを登録することをお勧めします。 +その場合、すべてのプラグインはメインアプリケーションコンポーネントの準備ができた直後に利用可能になります。 + +メインアプリケーションモジュール `app.module.ts` を更新するか、 +独自のモジュールを作成し、次のスニペットを使用してカスタムコンテンツを登録します: + +```ts +import { ExtensionsModule, ExtensionService } from '@alfresco/adf-extensions'; + +@NgModule({ + imports: [ ExtensionsModule ] + declarations: [ MyComponent1, MyLayout ], + entryComponents: [ MyComponent1, MyLayout ] +}) +export class MyExtensionModule { + + constructor(extensions: ExtensionService) { + extensions.setComponents({ + 'plugin1.components.my': MyComponent1, + 'plugin1.layouts.my': MyLayout + }); + + extensions.setAuthGuards({ + 'plugin.auth': MyAuthGuard + }); + + extensions.setEvaluators({ + 'plugin1.rules.custom1': MyCustom1Evaluator, + 'plugin1.rules.custom2': MyCustom2Evaluator + }); + } + +} +``` + +**注:** Angular のルールによれば、実行時に動的に作成されるすべてのコンポーネントは、 +NgModule の `entryComponents` セクション内に登録する必要があります。 + +Registration API は、カスタムコンテンツのみに限定されません。 +モジュールの値を置き換えることにより、既存のエントリを置き換えることができます。 diff --git a/docs/ja/extending/routes.md b/docs/ja/extending/routes.md new file mode 100644 index 000000000..e0de05ad1 --- /dev/null +++ b/docs/ja/extending/routes.md @@ -0,0 +1,79 @@ +--- +Title: ルート +--- + +# ルート + +新しいルートを作成するには、`routes` セクションに対応するエントリを入力します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [ + { + "id": "plugin1.routes.bin", + "path": "ext/bin", + "layout": "app.layout.main", + "component": "your.component.id" + } + ] +} +``` + +## ルートのプロパティ + +| プロパティ名 | 説明 | +| ------------- | -------------------------------------------------------------------------------------- | +| **id** | 一意の識別子。 | +| **path** | ルートの実行パス。 | +| **component** | ルートに使用するメインの[コンポーネント](/extending/components)。 | +| layout | ルートに使用するレイアウト[コンポーネント](/extending/components)。 | +| auth | [認証ガード](/extending/routes#authentication-guards)のリスト。デフォルトは `[ "app.auth" ]` です。 | +| data | ルートとともに移すカスタムプロパティバッグ。 | + +レイアウトプロパティの `app.layout.main` の値を使用して、 +ヘッダー、ナビゲーションサイドバー、メインコンテンツ領域を備えたデフォルトのアプリケーションレイアウトを取得します。 +任意のコンポーネントを登録して、`app.layout.main` の値をバックアップできます。 + +**Tip:** デフォルトでは、カスタム値を指定しない場合は `app.layout.main` が使用されます。 +ルートコンポーネントにページ全体を表示させる場合は、`blank` を使用します。 + +次の例のように完全なルートスキーマを定義できます: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [ + { + "id": "plugin1.routes.bin", + "path": "ext/bin", + "component": "your.component.id", + "layout": "app.layout.main", + "auth": ["app.auth"], + "data": { + "title": "Custom Trashcan" + } + } + ] +} +``` + +すべてのアプリケーションルートには、少なくとも1つの認証ガードが必要です。 +デフォルトは `['app.auth']` の値です。 + +## 認証ガード + +以下は、起動時にメインアプリケーションが登録する認証ガードのリストです。 + +| キー | タイプ | 説明 | +| -------- | ------------ | ------------------------------------------------------------------------- | +| app.auth | AuthGuardEcm | ADF ガードは、ACS の認証を検証し、必要に応じてログインにリダイレクトします。 | + +カスタムエクステンション内からこれらのガードを参照するか、 +カスタム実装を [登録](/extending/registration) できます。 diff --git a/docs/ja/extending/rules.md b/docs/ja/extending/rules.md new file mode 100644 index 000000000..eb8118c41 --- /dev/null +++ b/docs/ja/extending/rules.md @@ -0,0 +1,231 @@ +--- +Title: ルール +--- + +# ルール + +ルールを使用すると、拡張コンポーネントの条件を評価できるため、たとえば特定のルールに基づいて要素を無効化または非表示にできます。 + +すべてのルールは、コンディションエバリュエータによって裏付けられています。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "rules": [ + { + "id": "app.trashcan", + "type": "app.navigation.isTrashcan" + } + ] +} +``` + +ルールはパラメータとして他のルールを受け入れることができます: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "rules": [ + { + "id": "app.toolbar.favorite.canAdd", + "type": "core.every", + "parameters": [ + { "type": "rule", "value": "app.selection.canAddFavorite" }, + { "type": "rule", "value": "app.navigation.isNotRecentFiles" }, + { "type": "rule", "value": "app.navigation.isNotSharedFiles" }, + { "type": "rule", "value": "app.navigation.isNotSearchResults" } + ] + } + ] +} +``` + +**Tip:** また、`!` プレフィックスを使用して、ルールを無効にすることもできます。 +`!app.navigation.isTrashcan` は `app.navigation.isTrashcan` の反対です。 + +追加のパラメータを提供したり、複数のルールを連結したりする必要がない場合は、 +ルールを宣言せずに、登録されたエバリュエータへのインライン参照を使用することもできます。 + +## コアエバリュエータ + +他のルールとエバリュエータを連鎖させることにより、新しいルールを作成できます。 + +| バージョン | キー | 説明 | +| ------- | ---------- | ----------------------------------------------------------------------------- | +| 1.7.0 | core.every | すべての連鎖ルールが `true` と評価される場合、`true` と評価されます。 | +| 1.7.0 | core.some | 連鎖ルールの少なくとも1つが `true` と評価された場合、`true` と評価されます。 | +| 1.7.0 | core.not | すべての連鎖ルールが `false` に評価される場合、`true` に評価されます。 | + +以下は、次の条件を組み合わせた複合ルール定義の例です: + +- ユーザーが単一のファイルを選択しました +- ユーザーは **ゴミ箱** ページを使用していません + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "rules": [ + { + "id": "app.toolbar.canViewFile", + "type": "core.every", + "parameters": [ + { + "type": "rule", + "value": "app.selection.file" + }, + { + "type": "rule", + "value": "core.not", + "parameters": [ + { + "type": "rule", + "value": "app.navigation.isTrashcan" + } + ] + } + ] + } + ] +} +``` + +これで、上記のルールに基づいたツールバーボタンアクションを宣言できます。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "features": { + "toolbar": [ + { + "id": "app.toolbar.preview", + "type": "button", + "title": "View File", + "icon": "open_in_browser", + "actions": { + "click": "VIEW_FILE" + }, + "rules": { + "visible": "app.toolbar.canViewFile" + } + } + ] + } +} +``` + +ボタンは、リンクされたルールが `true` と評価された場合にのみ表示されます。 + +## アプリケーションエバリュエータ + +| バージョン | キー | 説明 | +| ----- | ----------------------------------- | ------------------------------------------------------------------------ | +| 1.7.0 | app.selection.canDelete | ユーザーには、選択したノードを削除する権限があります。 | +| 1.7.0 | app.selection.canDownload | ユーザーは選択したノードをダウンロードできます。 | +| 1.7.0 | app.selection.notEmpty | 少なくとも1つのノードが選択されています。 | +| 1.7.0 | app.selection.canUnshare | ユーザーは、選択したノードを公開共有から削除できます。 | +| 1.7.0 | app.selection.canAddFavorite | ユーザーは、選択したノードをお気に入りに追加できます。 | +| 1.7.0 | app.selection.canRemoveFavorite | ユーザーは、選択したノードをお気に入りから削除できます。 | +| 1.7.0 | app.selection.first.canUpdate | ユーザーには、選択したノードを更新する権限があります。 | +| 1.7.0 | app.selection.file | 単一のファイルノードが選択されています。 | +| 1.7.0 | app.selection.file.canShare | ユーザーは選択したファイルを共有できます。 | +| 1.7.0 | app.selection.file.isShared | 共有ノードが選択されています。 | +| 1.7.0 | app.selection.file.isLocked | ファイルは編集のためにロックされています。 | +| 1.7.0 | app.selection.file.isLockOwner | ファイルはロックされており、現在のユーザーはロック所有者です。 | +| 1.7.0 | app.selection.file.canUploadVersion | ユーザーはファイルのバージョンを更新できます。 | +| 1.7.0 | app.selection.library | 単一のライブラリノードが選択されています。 | +| 1.7.0 | app.selection.isPrivateLibrary | プライベートライブラリノードが選択されています。 | +| 1.7.0 | app.selection.hasLibraryRole | 選択したライブラリノードにはロールプロパティがあります。 | +| 1.7.0 | app.selection.hasNoLibraryRole | 選択したライブラリノードにはロールプロパティがありません。 | +| 1.7.0 | app.selection.folder | 単一のフォルダノードが選択されます。 | +| 1.7.0 | app.selection.folder.canUpdate | ユーザーには、選択したフォルダを更新する権限があります。 | +| 1.7.0 | app.selection.file.canLock | ユーザーにはファイルをロックする権限があります。 | +| 1.7.0 | app.selection.file.canUnlock | ユーザーにはファイルのロックを解除する権限があります。 | +| 1.7.0 | repository.isQuickShareEnabled | クイック共有リポジトリオプションが有効かどうか。 | +| 1.8.0 | canCopyNode | ユーザーが選択したノードをコピーできるかどうかを確認します。 | +| 1.8.0 | canToggleJoinLibrary | ユーザーがライブラリで "参加" または "参加リクエストのキャンセル" を実行できるかどうかを確認します。 | +| 1.8.0 | canEditFolder | ユーザーが選択したフォルダを編集できるかどうかを確認します。 | +| 1.8.0 | isTrashcanItemSelected | ユーザーがゴミ箱アイテムを選択しているかどうかを確認します。 | +| 1.8.0 | canViewFile | ユーザーがファイルを表示できるかどうかを確認します。 | +| 1.8.0 | canLeaveLibrary | ユーザーが選択したライブラリを**離れる**ことができるかどうかを確認します。 | +| 1.8.0 | canToggleSharedLink | ユーザーが共有リンクモードを切り替えることができるかどうかを確認します。 | +| 1.8.0 | canShowInfoDrawer | ユーザーが選択したノードの**情報ドロアー**を表示できるかどうかを確認します。 | +| 1.8.0 | canManageFileVersions | ユーザーが選択したノードのファイルバージョンを管理できるかどうかを確認します。 | +| 1.8.0 | canManagePermissions | ユーザーが選択したノードの権限を管理できるかどうかを確認します。 | +| 1.8.0 | canToggleEditOffline | ユーザーが選択したノードの**オフライン編集**モードを切り替えることができるかどうかを確認します。 | +| 1.8.0 | user.isAdmin | ユーザーが管理者かどうかを確認します。 | + +## ナビゲーションエバリュエータ + +アプリケーションは、表示されるルートまたはページに基づいて特定のアクションを開発者が制限または有効化できるように、ナビゲーション関連のエバリュエータのセットを公開します。 + +否定されたエバリュエータは、開発を単純化するためだけに提供され、`core.every` と `core.not` を混合するなど、 +規則を否定するためだけに複雑な規則ツリーを持つことを回避します。 + +**Tip:** また、`!` プレフィックスを使用して、ルールを無効にすることもできます。 +`!app.navigation.isTrashcan` は `app.navigation.isTrashcan` の反対です。 + +| バージョン | キー | 説明 | +| ------- | --------------------------------- | ---------------------------------------------------------------- | +| 1.7.0 | app.navigation.folder.canCreate | ユーザーは、現在開いているフォルダにコンテンツを作成できます。 | +| 1.7.0 | app.navigation.folder.canUpload | ユーザーは、現在開いているフォルダにコンテンツをアップロードできます。 | +| 1.7.0 | app.navigation.isTrashcan | ユーザーは**ゴミ箱**ページを使用しています。 | +| 1.7.0 | app.navigation.isNotTrashcan | 現在のページは**ゴミ箱**ではありません。 | +| 1.7.0 | app.navigation.isLibraries | ユーザーは**ライブラリ**または**ライブラリ検索結果**ページを使用しています。 | +| 1.7.0 | app.navigation.isNotLibraries | 現在のページは**ライブラリ**ページではありません。 | +| 1.7.0 | app.navigation.isSharedFiles | ユーザーは**共有ファイル**ページを使用しています。 | +| 1.7.0 | app.navigation.isNotSharedFiles | 現在のページは**共有ファイル**ではありません。 | +| 1.7.0 | app.navigation.isFavorites | ユーザーは**お気に入り**ページを使用しています。 | +| 1.7.0 | app.navigation.isNotFavorites | 現在のページは**お気に入り**ではありません。 | +| 1.7.0 | app.navigation.isRecentFiles | ユーザーは**最近のファイル**ページを使用しています。 | +| 1.7.0 | app.navigation.isNotRecentFiles | 現在のページは**最近のファイル**ではありません。 | +| 1.7.0 | app.navigation.isSearchResults | ユーザーは**検索結果**ページを使用しています。 | +| 1.7.0 | app.navigation.isNotSearchResults | 現在のページは**検索結果**ではありません。 | +| 1.7.0 | app.navigation.isSharedPreview | 現在のページはプレビュー**共有ファイル**です。 | +| 1.7.0 | app.navigation.isFavoritesPreview | 現在のページはプレビュー**お気に入り**です。 | +| 1.7.0 | app.navigation.isSharedFileViewer | 現在のページは共有ファイルのプレビューページです。 | +| 1.7.0 | app.navigation.isPreview | 現在のページは**プレビュー**です。 | +| 1.7.0 | app.navigation.isPersonalFiles | 現在のページは**個人用ファイル**です。 | +| 1.7.0 | app.navigation.isLibraryFiles | 現在のページは**ライブラリファイル**です。 | + +**Tip:** 実行時に再利用される独自のエントリを登録する方法の詳細については、 +[登録](/extending/registration) セクションを参照してください。 + +### 例 + +以下の例のルールは、すべての条件が満たされた場合に `true` と評価されます: + +- ユーザーがノードを選択しました +- ユーザーは**ゴミ箱**ページを使用していません +- ユーザーは**ライブラリ**ページ (**マイライブラリ**、**お気に入りライブラリ**、**ライブラリ検索結果**ページ) を使用していません + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "rules": [ + { + "id": "app.toolbar.canCopyNode", + "type": "core.every", + "parameters": [ + { "type": "rule", "value": "app.selection.notEmpty" }, + { "type": "rule", "value": "app.navigation.isNotTrashcan" }, + { "type": "rule", "value": "app.navigation.isNotLibraries" } + ] + } + ] +} +``` diff --git a/docs/ja/extending/tutorials.md b/docs/ja/extending/tutorials.md new file mode 100644 index 000000000..7719d7de2 --- /dev/null +++ b/docs/ja/extending/tutorials.md @@ -0,0 +1,279 @@ +--- +Title: チュートリアル +--- + +# チュートリアル + +以下は、一般的なタスクをカバーする短いチュートリアルです。 + +## パラメータ付きのカスタムルート + +このチュートリアルでは、次の機能を実装します: + +- **Trashcan** コンポーネントを更新して、ルートパラメータを受信および記録します。 +- メインレイアウトを使用して **Trashcan** コンポーネントに遷移する新しいルートを作成します。 +- 新しいルートへのリダイレクトを許可するアクションリファレンスを作成します。 +- **New** メニューにアクションを呼び出すボタンを作成します。 + +`src/app/components/trashcan/trashcan.component.ts` を更新し、次のコードを `ngOnInit` 本体に追加します: + +```typescript +import { ActivatedRoute, Params } from '@angular/router'; + +@Component({...}) +export class TrashcanComponent { + + constructor( + // ... + private route: ActivatedRoute + ) {} + + ngOnInit() { + // ... + + this.route.params.subscribe(({ nodeId }: Params) => { + console.log('node: ', nodeId); + }); + } + +} +``` + +上記のコードは、現在のルートパラメータをブラウザコンソールに記録し、 +インテグレーションが期待どおりに機能することを証明しています。 + +次に、以下の例のように新しいルート定義を追加します: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [ + { + "id": "custom.routes.trashcan", + "path": "ext/trashcan/:nodeId", + "component": "your.component.id", + "layout": "app.layout.main", + "auth": ["app.auth"] + } + ] +} +``` + +上記のテンプレートは、`ext/trashcan/` ルートを指し、`nodeId` パラメータを受け入れる ID `custom.routes.trashcan` を持つ新しいルート参照を作成します。 + +また、デフォルトのアプリケーションレイアウト (`app.layout.main`) と +認証ガード (`app.auth`) を使用します。 + +次に、`NAVIGATE_ROUTE` アプリケーションアクションのアクション参照を作成し、ルートパラメータを渡します。 +パスには `/ext/trashcan`、`nodeId` の値には `10` を渡します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [...], + + "actions": [ + { + "id": "custom.actions.trashcan", + "type": "NAVIGATE_ROUTE", + "payload": "$(['/ext/trashcan', '10'])" + } + ] +} +``` + +最後に、`NEW` ボタンの新しいメニュー項目を宣言し、上記で作成した `custom.actions.trashcan` アクションを使用します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [...], + "actions": [...], + + "features": { + "create": [ + { + "id": "custom.create.trashcan", + "type": "default", + "icon": "build", + "title": "Custom trashcan route", + "actions": { + "click": "custom.actions.trashcan" + } + } + ] + } +} +``` + +これで、アプリケーションを実行すると、"NEW" ドロップダウンに "Custom Trashcan Route" という新しいメニュー項目が表示されます。 +このアイテムをクリックすると、**Trashcan** コンポーネントを含む `/ext/trashcan/10` ルートに移動します。 + +ブラウザコンソールの出力を確認し、次の出力があることを確認します: + +```text +node: 10 +``` + +カスタムアクションを呼び出し、追加のアプリケーションルートにリダイレクトする +新しいメニューボタンが正常に作成されました。 + +## ダイアログアクション + +このチュートリアルでは、カスタムマテリアルダイアログを呼び出すアクションを作成します。 + +ダイアログコンポーネントの詳細については、こちらをご覧ください: [ダイアログの概要](https://material.angular.io/components/dialog/overview) + +### ダイアログを作成する + +```sh +ng g component dialogs/my-extension-dialog --module=app +``` + +Angular ルールに従って、コンポーネントはモジュールの `entryComponents` セクション内にも登録する必要があります。 + +以下の例に従って `src/app/app.module.ts` ファイルを更新します: + +```ts +@NgModule({ + imports: [...], + declarations: [ + ..., + MyExtensionDialogComponent + ], + entryComponents: [ + ..., + MyExtensionDialogComponent + ] +}) +``` + +`my-extension-dialog.component.ts` を更新します: + +```ts +import { Component } from '@angular/core'; +import { MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'aca-my-extension-dialog', + templateUrl: './my-extension-dialog.component.html', + styleUrls: ['./my-extension-dialog.component.scss'] +}) +export class MyExtensionDialogComponent { + constructor(public dialogRef: MatDialogRef) {} +} +``` + +`my-extension-dialog.component.html` を更新します: + +```html +

Delete all

+Are you sure? + + + + + +``` + +### アクションを作成する + +次のコードを `src/app/store/actions/app.actions.ts` に追加します: + +```ts +export const SHOW_MY_DIALOG = 'SHOW_MY_DIALOG'; + +export class ShowMydDialogAction implements Action { + readonly type = SHOW_MY_DIALOG; +} +``` + +あわせて参照: + +- [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) + +### エフェクトを作成する + +`src/app/store/effects/app.effects.ts` を更新します: + +```ts +import { ShowMydDialogAction, SHOW_MY_DIALOG } from '../actions/app.actions'; + +@Injectable() +export class AppEffects { + constructor(...) {} + + @Effect({ dispatch: false }) + showMyDialog$ = this.actions$.pipe( + ofType(SHOW_MY_DIALOG), + map(() => {}) + ); + + // ... +} +``` + +あわせて参照: + +- [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) + +ダイアログを表示するための更新 + +```ts +import { MatDialog } from '@angular/material/dialog'; +import { MyExtensionDialogComponent } from '../../dialogs/my-extension-dialog/my-extension-dialog.component'; + +@Injectable() +export class AppEffects { + constructor( + ..., + private dialog: MatDialog + ) {} + + @Effect({ dispatch: false }) + showMyDialog$ = this.actions$.pipe( + ofType(SHOW_MY_DIALOG), + map(() => { + this.dialog.open(MyExtensionDialogComponent) + }) + ); + + ... + +} +``` + +### ツールバーアクションを登録する + +`src/assets/app.extensions.json` ファイルを更新し、`features.toolbar` セクションに新しいエントリを挿入します: + +```json +{ + ..., + + "features": { + "toolbar": [ + { + "id": "my.custom.toolbar.button", + "order": 10, + "title": "Custom action", + "icon": "extension", + "actions": { + "click": "SHOW_MY_DIALOG" + } + } + ] + } +} +``` + +これで、アプリケーションを実行すると、クリックするたびにダイアログを呼び出す追加のボタンが表示されます。 diff --git a/docs/ja/favicon-96x96.png b/docs/ja/favicon-96x96.png new file mode 100644 index 000000000..d342b10ee Binary files /dev/null and b/docs/ja/favicon-96x96.png differ diff --git a/docs/ja/features/README.md b/docs/ja/features/README.md new file mode 100644 index 000000000..f6cf83e15 --- /dev/null +++ b/docs/ja/features/README.md @@ -0,0 +1,26 @@ +--- +Title: アプリの機能 +Github only: true +--- + +# アプリの機能 + +このアプリケーションのコンセプトは、Alfresco Content Services リポジトリ内のファイルに簡単にアクセスできるシンプルなユーザーインターフェイスです。 + +多くの場合、コンテンツ管理システムは、ほとんどのユーザーが必要とするより多くの機能をすぐに使用できます。 +これらのユーザーに提供する機能が多すぎると、ユーザーの効率的な作業が妨げられるため、 +最終的にはコンテンツストレージやコラボレーションソリューションの急増や組織のコンプライアンスの問題を引き起こす +無許可のファイル管理ソリューションを使用することになります。 + +このアプリケーションは、コンテンツ管理の複雑さを簡素化し、Alfresco Application Development Framework を使用して開発者に包括的な拡張機能を提供し、特定のユーザーケース向けのカスタムソリューションを簡単かつ迅速に作成します。 + +## コンテンツ + +- [ユーザーインターフェイスのレイアウト](/features/user-interface-layout) +- [ヘッダー](/features/header) +- [サイドナビゲーション](/features/side-navigation) +- [ドキュメントリストのレイアウト](/features/document-list-layout) +- [ファイルビューア](/features/file-viewer) +- [情報ドロワー](/features/info-drawer) +- [バージョンマネージャ](/features/version-manager) +- [検索結果](/features/search-results) diff --git a/docs/ja/features/document-list-layout.md b/docs/ja/features/document-list-layout.md new file mode 100644 index 000000000..b7db4e261 --- /dev/null +++ b/docs/ja/features/document-list-layout.md @@ -0,0 +1,101 @@ +--- +Title: ドキュメントリストのレイアウト +--- + +# ドキュメントリストのレイアウト + +アプリケーションのメイン領域は、いくつかの個別の ADF コンポーネントで構成されています: + +1. [パンくず](https://www.alfresco.com/abn/adf/docs/content-services/components/breadcrumb.component/) +2. [ツールバー](https://www.alfresco.com/abn/adf/docs/core/components/toolbar.component/) +3. [ドキュメントリスト](https://www.alfresco.com/abn/adf/docs/content-services/components/document-list.component/) +4. [ページネーション](https://www.alfresco.com/abn/adf/docs/core/components/pagination.component/) + +![](../images/doclist.png) + +アプリケーションには 7 つの異なるドキュメントリストビューがあります。これらのビューは、各ビューの共通点と、ロードされるコンテンツに応じて微妙な違いを共有します。これについては以下で説明します。 + +## 個人用ファイル + +個人用ファイルは、リポジトリ内のログインしているユーザーのホームエリア (`/User Homes//`) からすべてのコンテンツを取得します。 +ユーザーがホームフォルダを持たない ‘admin’ の場合、リポジトリルートフォルダが表示されます。 + +個人用ファイルは、Nodes API を使用する +[Files](../../src/app/components/files) コンポーネントです。 + +## ファイルライブラリ + +ファイルライブラリは、ユーザーが所属するすべてのサイトを取得します。 +これには、パブリック、モデレート、プライベートのサイトの種類が含まれます。 +ファイルライブラリは、[Sites API](https://api-explorer.alfresco.com/api-explorer/#/sites) を使用する [Libraries](../../src/app/components/libraries) コンポーネントです。 + +ユーザーがサイトの1つを開くと、サイトのドキュメントライブラリのコンテンツが表示されます。 +[Nodes API](https://api-explorer.alfresco.com/api-explorer/#/nodes) を使用して、 +サイト (`/Sites//Document Library/`) の [Files](../../src/app/components/files) コンポーネントのファイルとフォルダを表示するために使用されます。 + +## 共有ファイル + +共有ファイルビューは、コンテンツリポジトリの QuickShare 機能を使用して共有されたすべてのファイルを集約します。 +[Shared Files](../../src/app/components/shared-files) コンポーネントは、 +[shared-links API](https://api-explorer.alfresco.com/api-explorer/#/shared-links) を使用し、 +コンテンツリポジトリ内のファイルの場所と共有リンクの作成者を表示する追加の列を含みます。 + +## 最近使用したファイル + +最近使用したファイルビューには、現在のユーザーが過去30日間に作成または変更したすべてのファイルが表示されます。 +[Recent Files](../../src/app/components/recent-files) コンポーネントは、 +Search API を使用して、ユーザーが行った変更について SOLR を照会し、 +コンテンツリポジトリ内のファイルの場所を表示する追加の列を含みます。 + +## お気に入り + +お気に入りビューには、現在のユーザーがお気に入りとしてマークしたコンテンツリポジトリのすべてのファイルとフォルダが表示されます。 +[Favorites](../../src/app/components/favorites) コンポーネントは、 +[favorites](https://api-explorer.alfresco.com/api-explorer/#/favorites) を使用して +ユーザーのすべてのお気に入りノードを取得し、 +コンテンツリポジトリ内のファイルの場所を表示する追加の列を含めます。 + +## ゴミ箱 + +ゴミ箱ビューには、ユーザーが削除したすべてのアイテムが表示され、管理者にはすべてのユーザーが削除したアイテムが表示されます。 +このビューで使用できるアクションは、復元と完全削除です。 +[Trashcan](../../src/app/components/trashcan) コンポーネントは +[trashcan](https://api-explorer.alfresco.com/api-explorer/#/trashcan) を使用して、 +削除されたアイテムを取得し、ユーザーが要求したアクションを実行します。 +削除される前にコンテンツリポジトリ内のアイテムの場所を表示する追加の列が含まれます。 + +## 検索結果 + +検索結果ビューには、検索クエリで見つかったアイテムが表示されます。カスタムレイアウトテンプレートがあり、ユーザーは結果を簡単に参照し、アイテムに対してアクションを実行できます。 +[Search Component](../../src/app/components/search) コンポーネントの詳細については、この [検索結果](/features/search-results) セクションも確認してください。 + +別のカスタムテンプレートレイアウトは、ライブラリを検索するときに結果を表示するため、ユーザーはまだメンバーではないライブラリを検索、参加、およびお気に入りに追加できます。 + +## アクションとアクションツールバー + +すべてのビューには、Alfresco Application Development Framework の +[toolbar](https://www.alfresco.com/abn/adf/docs/core/components/toolbar.component/) コンポーネントが組み込まれています。 + +アイテムが選択されるか、右クリックが実行されると、アクションがツールバーに表示されます。ゴミ箱ビューとは別に、現在のユーザーが必要な権限を持っている場合、すべてのユーザーには次のアクションを表示されます。 +ユーザーが権限を持たない場合、アクションは自動的に非表示になります。 + +| アクション | ファイル | フォルダ | +| -- | -- | -- | +| Microsoft Office で編集する | Word、Powerpoint、Excel ファイルを Microsoft Office アプリケーションで直接開きます。Alfresco Office Services が必要です | 使用できません | +| オフラインで編集 | ファイルをダウンロードし、オフライン編集のためにリポジトリにロックします | 使用できません | +| 新しいバージョンのアップロード | 選択したファイルの新しいバージョンをアップロードします | 使用できません | +| 共有 | 共有可能なファイルへのリンクを作成してコピーします。リンクにはファイルへのアクセス許可を付与せずにアクセスでき、ユーザーがアプリケーションにログインする必要はありません。共有リンクは日付に基づいて自動的に期限切れになる場合があります。最小有効期限は作成日から1日で、Content Services リポジトリによって制御されます。 | 使用できません | +| ダウンロード | 単一のファイルをユーザーのコンピューターにダウンロードします。複数のファイルが選択されている場合、それらは ZIP に圧縮されてからダウンロードされます。 | フォルダーは自動的に ZIP に圧縮され、ユーザーのコンピューターにダウンロードされます。 | +| 参照 | [Preview component](../../src/app/components/preview) を使用して、選択したファイルを開きます。ファイルをブラウザでネイティブに表示できない場合、PDFレンディションがリポジトリから取得されます。 | 使用できません | +| 編集 | 使用できません | フォルダ名と説明はダイアログで編集できます。 | +| お気に入りに登録 | ファイルとフォルダのお気に入りマークのオンとオフを切り替えます。複数のアイテムが選択されていて、1つ以上がお気に入りではない場合、マークはオンに切り替わります。 | +| コピー | [Content node selector component](https://www.alfresco.com/abn/adf/docs/content-services/components/content-node-selector.component/)を使用して、ファイルとフォルダをコンテンツリポジトリの別の場所にコピーできます。コピーアクションが完了するとユーザーに通知され、アクションを元に戻すことができます (作成されたコピーが完全に削除されます)。 | +| 移動 | [Content node selector component](https://www.alfresco.com/abn/adf/docs/content-services/components/content-node-selector.component/) を使用して、ファイルとフォルダをコンテンツリポジトリ内の別の場所に移動できます。移動アクションが完了すると、ユーザーに通知され、アクションを元に戻すことができます (アイテムを元の場所に戻されます)。 | +| 削除 | ファイルとフォルダは、コンテンツリポジトリの配置されている場所から削除できます。削除アクションが完了すると、ユーザーに通知され、アクションを取り消すことができます (これにより、ごみ箱からアイテムが復元されます)。 | +| バージョンの管理 | バージョンマネージャダイアログを使用して、ファイルのバージョンを表示、アップロード、復元、ダウンロード、および削除できます。各アクションが完了すると、変更に応じてバージョンのリストが更新されます。 | 使用できません | +| 権限 | ファイルのアクセス許可は、さまざまな方法で必要に応じて調整できます。親フォルダからの継承を無効にし、ユーザーまたはグループの役割を変更し、ユーザー/グループにアクセスを許可します。 | 利用できません | + +ツールバーで利用可能なアクションに加えて、ユーザーは次のことができます。 +* シングルクリックでファイルを表示し、フォルダを開きます +* アイテムをクリックして選択します +* ファイルをダブルクリックして表示し、フォルダをダブルクリックして開きます diff --git a/docs/ja/features/file-viewer.md b/docs/ja/features/file-viewer.md new file mode 100644 index 000000000..4cdffb4bb --- /dev/null +++ b/docs/ja/features/file-viewer.md @@ -0,0 +1,61 @@ +--- +Title: ファイルビューア +--- + +# ファイルビューア + +ファイルビューアは、ADF の [ViewerComponent](https://www.alfresco.com/abn/adf/core/viewer.component/) を使用して作成されています。 + +ビューアには4つの主要な領域があります: + +![ファイルビューア](../images/File-Viewer.png) + +1. [ヘッダーとツールバー](#header-and-toolbar) +2. [コンテンツ](#content) +3. [サムネイルサイドペイン](#thumbnails-side-pane) +4. [ビューアコントロール](#viewer-controls) + +## ヘッダーとツールバー + +ビューアの[ヘッダーとツールバー]セクションには、現在表示されているファイルに関連する多くの機能が含まれています: + +- 'X' で閉じると、ユーザーはファイルを含むフォルダに戻ります。 +- 中央に名前とファイルの種類のアイコンが表示されます。 +- ユーザーがビューアから移動せずにフォルダ内の他のファイルに移動できるように、ファイル名の両側に「次へ」ボタンと「前へ」ボタンが表示されます。 +- 最後に、右側のアクションツールバーを使用すると、ユーザーはバージョンのダウンロード、お気に入り、移動、コピー、削除、管理、情報パネルの表示ができます。 + +## コンテンツ + +ファイルビューアは、4つの独立したビューで構成されており、それぞれ4つのタイプのコンテンツに基づいてコンテンツを表示し、さまざまな [file/mime](https://www.alfresco.com/abn/adf/core/viewer.component/#supported-file-formats) タイプをカバーします: + +- ドキュメントビュー: PDF ファイルは、他のドキュメントタイプ (DOCX など) のアプリケーションファイルビューアに表示され、PDF レンディションが自動的に取得されます +- 画像ビュー: JPEG、PNG、GIF、BMP、および SVG 画像は、アプリケーションのファイルビューアにネイティブに表示されます +- メディアビュー: MP4、MP3、WAV、OGG、および WEBM ファイルは、アプリケーションのファイルビューアでネイティブに再生されます。デフォルトでは、ファイルビューアはコンテンツをスムーズに再生できるように、一度に 50 MB のコンテンツをダウンロードします +- テキストビュー: TXT、XML、JS、HTML、JSON、および TS ファイルは、アプリケーションのファイルビューアにテキストとしてネイティブに表示されます + +## サムネイルサイドペイン + +ドキュメントビューにはサムネイルビューがあり、ビューアアクションツールバーのボタンでアクティブにできます。サムネイルをクリックすると、ユーザーは選択したページに直接移動し、ユーザーがドキュメントをスクロールすると、現在のページがペインで強調表示されます。 + +## ビューアコントロール + +コンテンツの下部にあるビューアコントロールを使用すると、ユーザーはさまざまな方法でコンテンツを操作できます。利用可能なアクションは、表示されているコンテンツのタイプによって異なります。 + +- ドキュメントビュー: + - Activate/Deactivate thumbnails pane + - Previous/Next page + - Jump to page number + - Zoom in/out + - Fit to page + - Print +- 画像ビュー: + - Zoom in/out + - Rotate left/right (does not alter content in the repository) + - Reset image + - Print +- メディアビュー: + - Play/pause + - Timeline position + - Toggle audio + - Audio volume + - Full screen diff --git a/docs/ja/features/header.md b/docs/ja/features/header.md new file mode 100644 index 000000000..133694136 --- /dev/null +++ b/docs/ja/features/header.md @@ -0,0 +1,39 @@ +--- +Title: Header +--- + +# ヘッダー + +アプリケーションの [ヘッダー](../../src/app/components/header) には3つの主要な要素があります。 + +1. [ロゴと色](#logo-and-color) +2. [検索](#search) +3. [現在のユーザ](#current-user) + +![Header](../images/header.png) + +## ロゴと色 + +ロゴとアプリの基調色 - ロゴと色は、プロジェクトのルートフォルダーにある +[app.config.json](../../src/app.config.json) ファイルを更新することで構成できます。 +ロゴと色の変更方法の詳細については、[アプリケーション構成](/getting-started/configuration) のドキュメントを参照してください。 + +## 検索 + +アプリケーションの [検索](../../src/app/components/search) - [ADF Search Component](https://www.alfresco.com/abn/adf/docs/content-services/components/search.component/)を使用します。 +このアプリは、ユーザーが Search API の結果から直接ファイルやフォルダーを開くことができる +'live' 検索機能を提供します。 + +![検索入力](../images/search.png) + +テキスト入力エリアに `Enter` と入力すると、高度なフィルタリングとファセット検索を備えた +[検索結果](/features/search-results) ページが表示されます。 + +## 現在のユーザ + +[現在のユーザ](../../src/app/components/current-user) - +ユーザーの名前と、ログアウトできるメニューを表示します。 +オプションで [app.config.json](../../src/app.config.json) を更新することにより、 +言語切り替えメニューを表示できます。 + +![現在のユーザ](../images/current-user.png) diff --git a/docs/ja/features/info-drawer.md b/docs/ja/features/info-drawer.md new file mode 100644 index 000000000..347ed29f2 --- /dev/null +++ b/docs/ja/features/info-drawer.md @@ -0,0 +1,23 @@ +--- +Title: 情報ドロワー +--- + +# 情報ドロワー + +情報ドロワーの右側のサイドバーパネルにノード情報が表示されます。 + +[Info Drawer Component](https://www.alfresco.com/abn/adf/core/info-drawer.component/) を使用して作成されます。この情報は、フォルダノードとファイルノードの両方で使用できます。 + +現在、プロパティとバージョンの2つのタブを使用できます。 + +## プロパティタブ + +プロパティタブには、[Content Metadata Card Component](https://www.alfresco.com/abn/adf/core/content-metadata-card.component/) を使用して、ノードのメタデータ情報が表示されます。 + +![](../images/content-metadata.png) + +詳細については、[Content Metadata Component](https://www.alfresco.com/abn/adf/core/content-metadata.component/) も確認してください。 + +## コメントタブ + +コメントタブには、[Comments Component](https://www.alfresco.com/abn/adf/core/comments.component/) を使用して、リポジトリで選択したノードに対して行われたすべてのコメントが表示されます。ユーザーは、すぐに表示される新しいコメントを投稿できます。 diff --git a/docs/ja/features/search-results.md b/docs/ja/features/search-results.md new file mode 100644 index 000000000..ac0470bcb --- /dev/null +++ b/docs/ja/features/search-results.md @@ -0,0 +1,54 @@ +--- +Title: 検索結果 +--- + +# 検索結果 + +検索入力コンポーネントにクエリを入力すると、アプリケーションはページに検索結果を返します。検索結果ページからファイルを開いて、選択したアイテムに使用可能な権限に応じてさまざまなアクションを実行できます。 + +![検索結果](../images/aca-search-results.png) + +このページは、次の ADF コンポーネントで構成されています: + +- [Search Filter](https://www.alfresco.com/abn/adf/docs/content-services/components/search-filter.component/) +- [Search Chip List](https://www.alfresco.com/abn/adf/docs/content-services/components/search-chip-list.component/) +- [Search Sorting Picker](https://www.alfresco.com/abn/adf/docs/content-services/components/search-sorting-picker.component/) +- [Document List](https://www.alfresco.com/abn/adf/docs/content-services/components/document-list.component/) with custom layout template +- [Info Drawer](/features/info-drawer) with Metadata and [Version Management](#version-manager) +- [Toolbar with basic actions](/features/document-list-layout#actions-and-the-actions-toolbar) 例えば `Preview`, `Download`, `Favorite`, `Copy`, など + +また、コピーおよび移動操作用の情報ドロワー、ツールバー、およびノードセレクターダイアログもあります。 + +## Alfresco 全文検索 + +次の表は、**検索入力**コンポーネントを使用する場合のコンテンツアプリケーションでの +[Alfresco 全文検索](http://docs.alfresco.com/6.1/concepts/rm-searchsyntax-intro.html) (FTS) 構文の +現在のサポートについて説明しています。 + +| 機能 | フル | 部分的 | N/A | 詳細 | +| ---------------------------------------------------------------- | ---- | ------- | --- | ---------------------------------------------------------------------------------- | +| Search for a single term | 1.6 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-single.html) | +| Search for a phrase | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-phrase.html) | +| Search for an exact term | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-exact.html) | +| Search for term expansion | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-term.html) | +| Search for conjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-conjunct.html) | +| Search for disjunctions | 1.7 | | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-disjunct.html) | +| Search for negation | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-negate.html) | +| Search for optional, mandatory, and excluded elements of a query | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-optional.html) | +| Search in fields | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fields.html) | +| Search for wildcards | | 1.7 | | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-wildcards.html) | +| Search for ranges | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ranges.html) | +| Search for fuzzy matching | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-fuzzy.html) | +| Search for proximity | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-proximity.html) | +| Search for boosts | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-boosts.html) | +| Search for grouping | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-grouping.html) | +| Search for spans and positions | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-spans.html) | +| Escaping characters | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-escaping.html) | +| Mixed FTS ID behavior | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-ftsid.html) | +| Search for operator precedence | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-precedence.html) | +| Search query templates | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-querytemplates.html) | +| Search query literals | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-literals.html) | +| Search using date math | | | X | [Docs](https://docs.alfresco.com/6.0/concepts/rm-searchsyntax-datemaths.html) | + +> **部分的**なサポートとは、この機能が基本的なシナリオをサポートすることを意味し、 +> まだ完全にはテストされておらず動作しない可能性があるエッジケースがあります。 diff --git a/docs/ja/features/side-navigation.md b/docs/ja/features/side-navigation.md new file mode 100644 index 000000000..60c946e86 --- /dev/null +++ b/docs/ja/features/side-navigation.md @@ -0,0 +1,30 @@ +--- +Title: サイドナビゲーション +--- + +# サイドナビゲーション + +アプリケーションの[サイドナビゲーション](../../src/app/components/sidenav) には、ボタンメニューとナビゲーションリンクの2つの機能があります。 + +![サイドナビゲーション](../images/side-nav.png) + +## New ボタン + +New ボタンには、3つのアクションを提供するメニューが表示されます: + +- Create a new folder - 新しいフォルダを作成するダイアログを提供します。フォルダ名は必須であり、説明はオプションです。 +- Upload a file - OS のファイルブラウザを呼び出し、ユーザーが選択したファイルをコンテンツリポジトリの現在の場所にアップロードできるようにします。 +- Upload a folder - OS のフォルダブラウザを起動し、ユーザーがコンテンツリポジトリの現在の場所にアップロードするフォルダーを選択できるようにします。 + +アップロードが開始されると、[upload component](https://www.alfresco.com/abn/adf/docs/content-services/components/file-uploading-dialog.component/) が表示され、開始したアップロードの進行状況がユーザーに表示されます。 +アップロードダイアログは画面上に保持され、最小化できます。 +ユーザーはアップロードの進行中もアプリケーションの使用を継続でき、アップロードをキャンセルして進行中のアップロードを停止したり、 +既に完了したアップロードを完全に削除したりできます。 + +![アップローダー](../images/uploader.png) + +## ナビゲーション + +ナビゲーションリンクは [app.config.json](../../src/app.config.json) を使用して構成できます。 +デフォルト設定では2つのセクションが作成されます。 +サイドナビゲーションの構成の詳細については、[ナビゲーション](/getting-started/navigation) を参照してください。 diff --git a/docs/ja/features/user-interface-layout.md b/docs/ja/features/user-interface-layout.md new file mode 100644 index 000000000..048b0d858 --- /dev/null +++ b/docs/ja/features/user-interface-layout.md @@ -0,0 +1,13 @@ +--- +Title: ユーザーインターフェイス - レイアウト +--- + +# ユーザーインターフェイス - レイアウト + +[Layout component](../../src/app/components/layout) によって制御されるアプリケーションの3つの主要な領域があります: + +1. [アプリケーションヘッダー](/features/header) +2. [サイドナビゲーション](/features/side-navigation) +3. [ドキュメントリスト](/features/document-list-layout) + +![機能](../images/features-01.png) diff --git a/docs/ja/features/version-manager.md b/docs/ja/features/version-manager.md new file mode 100644 index 000000000..b6fd78d85 --- /dev/null +++ b/docs/ja/features/version-manager.md @@ -0,0 +1,43 @@ +--- +Title: バージョンマネージャ +--- + +# バージョンマネージャ + +ファイルのバージョンは、[Version Manager Component](https://www.alfresco.com/abn/adf/content-services/version-manager.component/) を使用して表示および管理できます。 + +ユーザーがバージョンマネージャにアクセスする方法は2つあります: + +1) [その他のアクション] メニューの [バージョンの管理] オプションから ([アクションとアクションツールバー](/features/document-list-layout#actions-and-the-actions-toolbar)を確認します): + +![バージョンマネージャメニュー](../images/version-manager-action.png) +![バージョンマネージャダイアログ](../images/version-manager-dialog.png) + +2) [情報ドロアー](/features/info-drawer) から (詳細右パネル): + +![Version Manager Inline](../images/version-manager-tab.png) + +## 新しいバージョンをアップロード + +このボタンを使用して、選択したファイルの新しいバージョンを追加できます。ユーザーは、現在のバージョンと同じ名前または MIME タイプを持たないファイルを使用して新しいファイルバージョンをアップロードできます。ユーザーはバージョンのタイプ (マイナーまたはメジャー) を選択し、サポートコメントを入力できます。 + +[UploadVersionButtonComponent](https://www.alfresco.com/abn/adf/content-services/upload-version-button.component/) も確認してください。 + +## アクションメニュー + +バージョンリストの各項目には、復元、ダウンロード、削除の2つのアクションがあります。これらは、ユーザーがその特定のアクションを実行する権限を持っている場合に表示されます。 「ダウンロード」と「削除」は app.config から無効にすることもできます。 + +app.config.json ファイルで、これらは ACA バージョンマネージャーの現在の設定です: + +```json +{ + "adf-version-manager": { + "allowComments": true, + "allowDownload": true + } +} +``` + +バージョンコメントをバージョンリストに表示しない場合は、allowComments を false に設定します。 + +ファイルのバージョンをクリックして削除すると、確認ダイアログが表示されます。詳細については、[Confirm Dialog Component](https://github.com/Alfresco/alfresco-ng2-components/blob/development/lib/content-services/dialogs/confirm.dialog.ts) をご覧ください。 diff --git a/docs/ja/getting-started/README.md b/docs/ja/getting-started/README.md new file mode 100644 index 000000000..5c2441117 --- /dev/null +++ b/docs/ja/getting-started/README.md @@ -0,0 +1,19 @@ +--- +Title: 入門 +Github only: true +--- + +# 入門 + +Alfresco Content Application で開発を開始する方法を学びます。 + +## コンテンツ + +- [前提条件](/getting-started/prerequisites) +- [ソースからビルド](/getting-started/building-from-source) +- [国際化 (i18n)](/getting-started/internationalization) +- [CORS](/getting-started/cors) +- [シングルサインオン](/getting-started/sso) +- [設定](/getting-started/configuration) +- [ナビゲーション](/getting-started/navigation) +- [Docker](/getting-started/docker) diff --git a/docs/ja/getting-started/building-from-source.md b/docs/ja/getting-started/building-from-source.md new file mode 100644 index 000000000..55dd0bbbe --- /dev/null +++ b/docs/ja/getting-started/building-from-source.md @@ -0,0 +1,41 @@ +--- +Title: ソースからビルド +--- + +# ソースからビルド + +Content App は [Angular CLI](https://cli.angular.io) をベースとしており、CLI でサポートされているすべてのコマンド、ジェネレーター、およびブループリントを使用できます。 + +## ビルドの前提条件 + +- [Node.js](https://nodejs.org/ja/) LTS +- (オプション) [Angular CLI](https://cli.angular.io/) 7.3.4 以降 + +> Angular CLI ライブラリはすでにセットアップの一部です。 +> CLI コマンドを個別に使用する場合にのみ、グローバル (推奨) ツールとしてインストールすることをお勧めします。 + +## クローンと実行 + +次のコマンドを使用してプロジェクトのクローンを作成し、依存関係をインストールして実行します。 + +```sh +git clone https://github.com/Alfresco/alfresco-content-app.git +cd alfresco-content-app +npm install +npm start +``` + +アプリケーションはデフォルトでポート `4200` で実行され、プロジェクトがコンパイルされるとデフォルトのブラウザで自動的に開きます。 + +## プロキシ設定 + +Content App は、ローカル開発サーバのプロキシ設定を提供します。これにより、CORS とネイティブ認証ダイアログを使用して特定のシナリオに対処できます。 + +プロジェクトのルートディレクトリにある `proxy.conf.js` ファイルの中に設定があります。 + +**注:** プロキシ設定は `npm start` スクリプトでアプリケーションを実行するたびに自動的に適用されます。 +設定を変更するたびにアプリケーションを再起動する必要があります。 + +## 単体テストの実行 + +[Karma](https://karma-runner.github.io) を介して単体テストを実行するには、`npm test` を実行します。 diff --git a/docs/ja/getting-started/configuration.md b/docs/ja/getting-started/configuration.md new file mode 100644 index 000000000..96511c00c --- /dev/null +++ b/docs/ja/getting-started/configuration.md @@ -0,0 +1,152 @@ +--- +Title: 設定 +--- + +# 設定 + +Alfresco Content Application は、Content Application と ADF コンポーネントの動作をカスタマイズするために使用できるグローバル設定ファイル `app.config.json` のサポートを提供します。 + +## サーバの設定 + +Content Application が起動したら、Alfresco Content Services サーバの場所と、ファイル共有 URL を確認する必要があります。 + +### Content Services アドレス + +"ecmHost" プロパティを使用すると、動的または静的形式を使用してサーバのアドレスを設定できます。 + +#### 動的アドレス + +以下の例は、開発環境で最も一般的な動的形式を示しています: + +```json +{ + "ecmHost": "http://{hostname}{:port}", + ... +} +``` + +上記の構成では、ACS と Alfresco Content Application を同じサーバとポートで実行していることを前提としており、 +同じ統合構成ファイルを持つ異なるサーバに展開できます。 + +たとえば、ルートアプリケーションとして Alfresco Content Application をホストしている `localhost:4200` のプロキシサーバと、 +ACS リポジトリの `localhost:4200/alfresco` のプロキシサーバです。 + +実行時に、アプリケーションは自動的に "{hostname}" の値を元のホスト名に置き換えます。 +オプションで、ローカルマシンの "4200" など、元のポートの値が存在する場合はポート 80 の値をスキップしてそれを使用することもできます。 + +#### 静的アドレス + +または、必要に応じて、ACS サーバの静的アドレスを提供できます: + +```json +{ + "ecmHost": "http://localhost:4200", + ... +} +``` + +### 共有ファイルのアドレス + +"baseShareUrl" プロパティは、ユーザーが共有ファイルにアクセスするアドレスを作成する方法をアプリケーションに指示します。 + +```json +{ + "baseShareUrl": "{protocol}//{hostname}{:port}/#/preview/s" +} +``` + +## アプリケーションの設定 + +アプリケーションのデフォルトの動作を置き換えるために変更できる多くの設定があります。 + +### アプリケーション名 + +次のブロックでは、アプリケーションの名前を変更できます。 + +```json +{ + ..., + "application": { + "name": "Alfresco Example Content Application" + } +} +``` + +`application.name` キーの値は、実行時に `[ページタイトル] - [アプリケーション名]` の形式ですべてのブラウザタブタイトルに追加されます。 +例: "個人ファイル - Alfresco サンプルコンテンツアプリケーション" + +### アプリケーションロゴ + +Alfresco コンテンツアプリケーションの左上隅に表示されるデフォルトのロゴは変更できます: + +1. カスタムロゴ画像ファイルを[アプリ名]/src/assets/images フォルダに配置します。表示された画像は自動的にサイズ変更され、極端な幅/高さの画像は寸法を保持できない場合があります。 + +2. app.config.json ファイルで、application.logo の値にカスタムロゴ画像の名前を含むように設定します: "logo": "/assets/images/[カスタムロゴ画像ファイル名].[拡張子]" + +```json +{ + ..., + "application": { + "logo": "/assets/images/alfresco-logo-white.svg" + } +} +``` + +### ヘッダーの背景色 + +"headerColor" キーの色コードを指定することにより、ヘッダーの背景色を変更できます: + +```json +{ + ..., + "headerColor": "#2196F3" +} +``` + +### 制限されたコンテンツ + +"files.excluded" パスでルールのリストを設定または拡張することにより、ユーザーが特定のタイプのファイルおよびフォルダーをアップロードすることを制限できます。 + +デフォルトでは、アプリケーションには以下のルールがあらかじめ定義されています: + +```json +{ + ..., + "files": { + "excluded": [ + ".DS_Store", + "desktop.ini", + "thumbs.db", + ".git" + ] + }, + ... +} +``` + +**Tip:** サポートされているルールの詳細については、ADF [Upload Service](https://www.alfresco.com/abn/adf/docs/core/services/upload.service/) のドキュメントをご覧ください。 + +### ページネーション設定 + +アプリケーション内のすべてのドキュメントリストに適用されるページネーションのデフォルト設定を変更できます。 + +```json +{ + ..., + "pagination": { + "supportedPageSizes": [ + 25, + 50, + 100 + ] + }, + ... +} +``` + +## カスタム設定 + +アプリケーション設定ファイルに情報を保存し、ADF が提供する `AppConfigService` サービスを使用して実行時にアクセスできます。 + +**Tip:** 利用可能なアプリケーション構成機能および API の詳細については、 +ADF の [App Config Service](https://www.alfresco.com/abn/adf/docs/core/services/app-config.service/) のドキュメントを参照してください。 diff --git a/docs/ja/getting-started/cors.md b/docs/ja/getting-started/cors.md new file mode 100644 index 000000000..5337d51da --- /dev/null +++ b/docs/ja/getting-started/cors.md @@ -0,0 +1,29 @@ +--- +Title: CORS +--- + +# CORS + +Alfresco Content Application には、開発における CORS 関連の問題に対処するための Angular CLI のプロキシ設定が付属しています。 + +また、Docker イメージには、アプリケーションをローカルで開発およびデバッグするときに CORS に必要な Nginx 設定が含まれています。 + +## Chrome の回避策 + +Chrome ブラウザでは、CORS を切り替えることができる次のプラグインを使用できます: +[Allow-Control-Allow-Origin](https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi) + +## Firefox の回避策 + +Firefox ブラウザの場合、次のプラグインを使用できます: [CORS Everywhere](https://addons.mozilla.org/en-Gb/firefox/addon/cors-everywhere/) + +## Safari の回避策 + +Safari で開発またはテストしている場合は、"Develop" メニューを使用して CORS モードを切り替えることができます。 +CORS 設定を変更するたびに、ページをリロードする必要があることに注意してください。 + +![](../images/safari-develop-menu.png) + +## あわせて参照 + +- [CORS の使用](https://www.html5rocks.com/en/tutorials/cors/) diff --git a/docs/ja/getting-started/docker.md b/docs/ja/getting-started/docker.md new file mode 100644 index 000000000..f64f0f958 --- /dev/null +++ b/docs/ja/getting-started/docker.md @@ -0,0 +1,32 @@ +--- +Title: Docker +--- + +# Docker + +ACA には ACS 6.0 Community 版が事前構成されています。 + +アプリケーションは2つのモードで実行されます: + +- Development (最新のソースコードを実行し、アプリケーションのビルドが必要) +- Preview (最新の公開されたコンテナー、マスターブランチで実行) + +## Development モード + +ACS イメージと共に、Docker イメージにパッケージ化されたアプリケーションのローカルインスタンスを実行します: + +```sh +npm run build +npm run start:docker +``` + +コンテナ内から提供される場合、ACA は `4000` ポートで実行されます。 + +次のコマンドを使用して、すべてのコンテナを停止します: + +```sh +npm run stop:docker +``` + +アプリケーションを開発し、デフォルトのポート (4200) で実行することもできます。 +これは、同じ docker コンテナを自動的に使用します。 diff --git a/docs/ja/getting-started/internationalization.md b/docs/ja/getting-started/internationalization.md new file mode 100644 index 000000000..df646b7d1 --- /dev/null +++ b/docs/ja/getting-started/internationalization.md @@ -0,0 +1,141 @@ +--- +Title: 国際化 +--- + +# 国際化 (i18n) + +コンテンツアプリケーションは、次の言語のサポートを提供します: + +- ドイツ語 (`de`) +- 英語 (`en`) +- スペイン語 (`es`) +- フランス語 (`fr`) +- イタリア語 (`it`) +- 日本語 (`ja`) +- ノルウェー語 (`nb`) +- オランダ語 (`nl`) +- ブラジルポルトガル語 (`pt-BR`) +- ロシア語 (`ru`) +- 簡体字中国語 (`zh-CN`) +- アラビア語 (`ar`) +- チェコ語 (`cs`) +- デンマーク語 (`da`) +- フィンランド語 (`fi`) +- ポーランド語 (`pl`) +- スウェーデン語 (`sv`) + +デフォルトの言語は英語ですが、現在のブラウザの言語は、アプリケーションの起動時に自動的にデフォルトの言語として使用されます。 + +## ユーザ定義言語 + +ユーザが設定に保存されるカスタム言語を設定できるようにすることができます。 +メインアプリケーションメニューには、すでに [ADF 言語メニュー](https://www.alfresco.com/abn/adf/docs/core/components/language-menu.component/) コンポーネントが統合され、サポートされる項目が事前に入力されています。 + +デフォルトの言語セットを変更するには、`app.config.json` ファイルを編集し、アイテムを追加または削除します: + +```json +{ + ..., + "languages": [ + { + "key": "de", + "label": "ドイツ語" + }, + { + "key": "en", + "label": "英語" + }, + { + "key": "es", + "label": "スペイン語" + }, + ... + ] +} +``` + +ファイルは次の場所にあります: `/src/app.config.json` + +## カスタム言語 + +カスタム言語を追加するには、新しい "JSON" ファイルを "/src/assets/i18n" フォルダに追加します。 +たとえば、"ドイツ語" の "de.json" など、ターゲット言語の名前を指定します。 + +デフォルトの "en.json" ファイルに基づいてリソース文字列を翻訳します。 +新しく作成したファイルにコンテンツをコピーし、英語の値を翻訳されたテキストに置き換えることができます。 + +```json +{ + "APP": { + "SIGN_IN": "Anmelden", + "SIGN_OUT": "Abmelden", + "NEW_MENU": { + "LABEL": "Neu", + "MENU_ITEMS": { + "CREATE_FOLDER": "Ordner erstellen", + "UPLOAD_FILE": "Datei hochladen", + "UPLOAD_FOLDER": "Ordner hochladen" + }, + ... + } + }, + ... +} +``` + +Content Application は、プロジェクトのビルド時にファイルを自動的にバンドルします。 +ブラウザの言語設定を変更してページを再読み込みすることにより、ロケールをテストできます。 + +オプションで、`app.config.json` ファイルを更新することにより、新しく追加された言語で [ADF 言語メニューコンポーネント](https://www.alfresco.com/abn/adf/docs/core/components/language-menu.component/) を拡張できます。 + +## ADF の翻訳のカスタマイズ + +Content Application のカスタム言語ファイルを作成することに加えて、 +ADF リソースの翻訳を提供することもできます。 + +`/src/assets/i18n/.json` ファイルは、ADF 言語ファイルの1つの構造を反映します: + +- ADF Core ([en.json](https://github.com/Alfresco/alfresco-ng2-components/blob/master/lib/core/i18n/en.json)) +- ADF Content Services ([en.json](https://github.com/Alfresco/alfresco-ng2-components/blob/master/lib/content-services/i18n/en.json)) +- ADF Process Services ([en.json](https://github.com/Alfresco/alfresco-ng2-components/blob/master/lib/process-services/i18n/en.json)) +- ADF Insights ([en.json](https://github.com/Alfresco/alfresco-ng2-components/blob/master/lib/insights/i18n/en.json)) + +実行時には、アプリケーションレベルの文字列が最も優先されます。 +つまり、必要に応じて ADF リソース文字列の値を置き換えることができます。 + +たとえば、ADF に同梱されている "Create Folder" ダイアログのタイトルを変更してみましょう。 +`/src/assets/i18n/en.json` ファイルを変更し、次の例のように "CORE" セクションを追加します: + +```json +{ + "APP": { + ... + }, + "CORE": { + "FOLDER_DIALOG": { + "CREATE_FOLDER_TITLE": "Custom title" + } + } +} +``` + +ここで、アプリケーションを実行して "New > Create Folder" メニューをクリックすると、 +ダイアログのタイトルは次のようになります: + +![](../images/aca-i18n-01.png) + +## 言語ピッカー + +`app.config.json` ファイルで内部言語ピッカーを有効にできます: + +```json +{ + ..., + + "languagePicker": true, + + ... +} +``` + +![](../images/aca-i18n-02.png) diff --git a/docs/ja/getting-started/navigation.md b/docs/ja/getting-started/navigation.md new file mode 100644 index 000000000..15b76631f --- /dev/null +++ b/docs/ja/getting-started/navigation.md @@ -0,0 +1,213 @@ +--- +Title: ナビゲーション +--- + +# ナビゲーション + + Alfresco Content Application は、次のナビゲーションリンクを提供します: + +- 個人用ファイル +- ファイルライブラリ +- 共有 +- 最近使用したファイル +- お気に入り +- ゴミ箱 + +サイドナビゲーションは、`app.config.json` を編集してリンクの外観をカスタマイズするサポートを提供します。 + +## カスタマイズ + +ナビゲーション設定は、スキーマのような配列とオブジェクトをサポートします。オブジェクトを定義すると、ナビゲーションがリンクの異なるグループ間の視覚的な区切り文字をレンダリングするのに役立ちます。 + +```json +{ + "navigation": { + "main": [ + ... + ], + "secondary": [ + ... + ] + } +} +``` + +![](../images/navigation-01.png) + +```json +{ + "navigation": [ + { ... }, + { ... }, + ... + ] +} +``` + +![](../images/navigation-02.png) + +### アイコンとテキストをカスタマイズする + +`icon` - サポートされる値は、[Material Design](https://material.io/icons) アイコンライブラリの任意のものです。定義されていない場合、リンクはラベルの値のみをレンダリングします。 + +`title` - 指定された値でネイティブブラウザのツールチップをレンダリングするようにリンクに指示します。文字列または国際化定義の参照が可能です。定義されていない場合、リンクにはツールチップが表示されません。 + +`label` - リンクの視覚的な名前を表します。文字列または国際化定義の参照が可能です。 + +**注意:** ` "route": { "url": "/..." } ` の値を変更すると、これらはアプリケーションルーティングシステムにマッピングされるため、ナビゲーションに影響します。 + +### カスタムテキスト (i18n) + +ナビゲーションリンクの `title` と `label` を変更するには、`/src/assets/i18n/en.json` にある `BROWSE` エントリの下の値を編集します + +```json +"APP" : { + ... + "BROWSE": { + "PERSONAL": { + "TITLE": "Personal Files", + "SIDENAV_LINK": { + "LABEL": "Personal Files", + "TOOLTIP": "View your Personal Files" + } + }, + ... + } +} +``` + +国際化の詳細については、[国際化 (i18n)](/getting-started/internationalization) セクションを参照してください。 + +## ユーザー定義のナビゲーション + +アプリケーションにカスタムナビゲーションリンクを追加するには、最初にコンポーネントを作成する必要があります。 + +`src/app/components/custom-page/custom-page.component.ts` + +```js +import { Component } from '@angular/core'; + +@Component({ +template: ` +

{{ title }}

+ ` +}) +export class CustomPage { + title = 'My Custom Page' +} +``` + +コンポーネントを ```app.module.ts``` に登録します + +```javascript + + ... + import { CustomPage } from './components/custom-page/custom-page.component'; + + @NgModule({ + ... + declarations: [ + ..., + CustomPage + ], + ... +}) + +``` + +`app.config.json` で、カスタムページを指すリンクエントリを定義します + +```json +{ + ..., + "navigation": [ + "main": [ ... ], + "secondary": [ ... ], + "custom": [ + { + "icon": "work", + "label": "Link", + "title": "My custom link", + "route": { + "url": "/custom-route" + } + } + ] + ] +} + +``` + +これは ngrx ストアアクションを使用して宣言することもできます: + +```json +{ + ..., + "navigation": [ + "main": [ ... ], + "secondary": [ ... ], + "custom": [ + { + "icon": "work", + "label": "Link", + "title": "My custom link", + "click": { + "action": "NAVIGATE_ROUTE", + "payload": "custom-route" + } + } + ] + ] +} + +``` + +`app.routes.ts` の `/custom-route` を `LayoutComponent` 定義の子としてマッピングします。 + +```js + + import { CustomPage } from './components/custom-page/custom-page.component.ts'; + + ... + { + path: '', + component: LayoutComponent, + children: [ + ..., + { + path: 'custom-route', + component: CustomPage + } + ] + } + ..., + +``` + +![](../images/navigation-03.png) + +### カスタムコンポーネントのレンダリング + +ナビゲーション定義は、動的にレンダリングされるカスタムコンポーネントもサポートします。このスキーマは次のとおりです: + +```json +"navbar": [ + { + "id": "app.navbar.primary", + "items": [ + ... + + { + "id": "custom-component", + "component": "custom-menu-item" + } + + ... + ] + } +] +``` + +コンポーネントは app モジュールの下で entryComponents として宣言する必要があることに注意してください。 + +カスタムページのコンテンツの詳細については、[ドキュメントリストのレイアウト](/features/document-list-layout) セクションを参照してください。 diff --git a/docs/ja/getting-started/prerequisites.md b/docs/ja/getting-started/prerequisites.md new file mode 100644 index 000000000..5f101a95b --- /dev/null +++ b/docs/ja/getting-started/prerequisites.md @@ -0,0 +1,16 @@ +--- +Title: 前提条件 +--- + +# 前提条件 + +このアプリケーションは、Alfresco からの最新リリースを使用します: + +- [Alfresco ADF (3.3.0)](https://community.alfresco.com/community/application-development-framework/pages/get-started) +- [Alfresco Content Services (6.1)](https://www.alfresco.com/platform/content-services-ecm) + もしくは [Alfresco Community Edition (6.1 - General Availability 201901)](https://www.alfresco.com/products/community/download) + +**注:** ソースコードからローカルにビルドするには、[Node.js](https://nodejs.org/ja/) (LTS) もインストールする必要があります。 + +アプリケーションは最新の [REST API](https://docs.alfresco.com/5.2/pra/1/topics/pra-welcome.html) を使用して開発されているため、 +Alfresco Content プラットフォームの最新バージョンが必要です。 diff --git a/docs/ja/getting-started/sso.md b/docs/ja/getting-started/sso.md new file mode 100644 index 000000000..9f4ace3c7 --- /dev/null +++ b/docs/ja/getting-started/sso.md @@ -0,0 +1,59 @@ +--- +Title: シングルサインオン +--- + +# シングルサインオン + +Basic 認証に加えて、Content Application を以下で使用できます: + +- [Keycloak](https://www.keycloak.org/) +- [Identity Service](https://docs.alfresco.com/identity1.0/concepts/identity-overview.html) +- Kerberos + +アプリケーションには、シングルサインオン (別名 SSO) セットアップの適切なデフォルトが含まれています。 +設定は `app.config.json` ファイルの中にあり、次のようになります: + +```json +{ + "providers": "ECM", + "authType": "BASIC", + "oauth2": { + "host": "http://localhost:4200/auth/realms/alfresco", + "clientId": "alfresco", + "scope": "openid", + "secret": "", + "implicitFlow": true, + "silentLogin": true, + "redirectSilentIframeUri": "./assets/silent-refresh.html", + "redirectUri": "/", + "redirectUriLogout": "/logout" + } +} +``` + +Basic 認証から SSO モードに切り替えるには、`authType` プロパティ値を `OAUTH` に変更します。 +また、デフォルトの設定では、事前に設定された `alfresco` クライアントがあることを前提としています。 + +http://localhost:4200/#/settings ページで認証モードを試すことができます: + +![認証設定](../images/aca-sso-settings.png) + +## Kerberos + +追加の Kerberos 機能のサポートを有効にするには、 +`app.config.json` ファイルで `withCredentials` フラグを有効にしてください: + +```json +{ + "auth": { + "withCredentials": true + } +} +``` + +`withCredentials` フラグを有効にすると、ログインプロセスは完全に Kerberos によって処理されるため、 +アプリケーションはユーザーをログイン画面にリダイレクトしません。 + +## あわせて参照 + +ADF Login コンポーネントと設定オプションの詳細については、[Login](https://www.alfresco.com/abn/adf/docs/core/components/login.component/#single-sign-on-sso) のドキュメントを参照してください。 diff --git a/docs/ja/help.md b/docs/ja/help.md new file mode 100644 index 000000000..cff833b7d --- /dev/null +++ b/docs/ja/help.md @@ -0,0 +1,59 @@ +--- +Title: 助けを求める +--- + +# 助けを得る場所 + +Alfresco Application Development Framework を使用してアプリケーションを構築する際に役立つさまざまな方法については、以下を参照してください。 + +## Alfresco Community + +Alfresco コミュニティにアクセスして、Alfresco 開発者からのブログ投稿など、 +アプリケーションの構築を開始するための情報を見つけるのに役立つリソースを探してください: +https://community.alfresco.com/community/application-development-framework + +## Alfresco 開発者サポート + +開発者サポートは、リモートサブスクリプションベースのサポートチームです。 +開発に焦点を当てたシニアサポートエンジニアが +インストールのお手伝いをします。 +このサポートは、開発チームとカスタマイズされたコードの継続的なサポートを必要とする顧客とパートナーに最適です。 + +詳細については、Alfresco Web サイトの開発者サポートサービスセクションをご覧ください: +https://www.alfresco.com/alfresco-developer-support-services + +## Alfresco University + +Alfresco University でのトレーニングは、チームが Alfresco の実装を成功させるための適切なスキルを習得するための最良の方法です。 +この貴重なトレーニングを利用する最も費用対効果の高い方法は、Alfresco University Passport を使用することです。 + +詳細については、Alfresco Web サイトの Alfresco University セクションをご覧ください: +https://www.alfresco.com/alfresco-university + +## よくある質問 + +### 問題 (バグ、機能強化、機能) を記録するにはどうすればよいですか? + +[Jira][jira] の問題を記録します。 +明確な説明、再現手順、必要に応じてスクリーンショットを含めてください。 +すべての問題が確認されます。 +バグが再現性がある場合は分類され、ユースケースが汎用的なニーズを満たしている場合は、既存の優先度に対して拡張/機能の提案が考慮されます。 + +### このアプリケーションが Alfresco Share に取って代わりますか? + +このサンプルアプリケーションは、Alfresco Application Development Framework を使用してコンテンツアプリケーションを構築する方法を示すために設計されています。 +Alfresco Share に代わるものではありません。 + +### プロジェクトに貢献するにはどうすればよいですか? + +バグを報告したり、コードを寄稿したり、ドキュメントを改善したいですか? 優秀な! +[貢献][contributing]のガイドラインをご覧ください +[Jira][jira] または [GitHub][github] で問題の1つを確認します + +### このプロジェクトはどのくらいの頻度で更新されますか? + +このプロジェクトは、Alfresco ADF の進化に合わせて進化を続け、Alfresco とコミュニティ開発者がその進歩に貢献しています。 + +[contributing]: https://github.com/Alfresco/alfresco-content-app/blob/master/CONTRIBUTING.md +[github]: https://github.com/Alfresco/alfresco-content-app/issues +[jira]: https://issues.alfresco.com/jira/projects/ACA diff --git a/docs/ja/images/Browserstack-logo.svg b/docs/ja/images/Browserstack-logo.svg new file mode 100644 index 000000000..195f64d2f --- /dev/null +++ b/docs/ja/images/Browserstack-logo.svg @@ -0,0 +1,90 @@ + + + + +Browserstack-logo-white + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/ja/images/File-Viewer.png b/docs/ja/images/File-Viewer.png new file mode 100644 index 000000000..33602c402 Binary files /dev/null and b/docs/ja/images/File-Viewer.png differ diff --git a/docs/ja/images/aca-i18n-01.png b/docs/ja/images/aca-i18n-01.png new file mode 100644 index 000000000..856989c0c Binary files /dev/null and b/docs/ja/images/aca-i18n-01.png differ diff --git a/docs/ja/images/aca-i18n-02.png b/docs/ja/images/aca-i18n-02.png new file mode 100644 index 000000000..26f56617e Binary files /dev/null and b/docs/ja/images/aca-i18n-02.png differ diff --git a/docs/ja/images/aca-search-results.png b/docs/ja/images/aca-search-results.png new file mode 100644 index 000000000..0a0e02603 Binary files /dev/null and b/docs/ja/images/aca-search-results.png differ diff --git a/docs/ja/images/aca-sso-settings.png b/docs/ja/images/aca-sso-settings.png new file mode 100644 index 000000000..7fa3f3e54 Binary files /dev/null and b/docs/ja/images/aca-sso-settings.png differ diff --git a/docs/ja/images/content-metadata.png b/docs/ja/images/content-metadata.png new file mode 100644 index 000000000..74ebfe110 Binary files /dev/null and b/docs/ja/images/content-metadata.png differ diff --git a/docs/ja/images/current-user.png b/docs/ja/images/current-user.png new file mode 100644 index 000000000..bc5eaf46a Binary files /dev/null and b/docs/ja/images/current-user.png differ diff --git a/docs/ja/images/doclist.png b/docs/ja/images/doclist.png new file mode 100644 index 000000000..8463dff7c Binary files /dev/null and b/docs/ja/images/doclist.png differ diff --git a/docs/ja/images/features-01.png b/docs/ja/images/features-01.png new file mode 100755 index 000000000..daa6098bd Binary files /dev/null and b/docs/ja/images/features-01.png differ diff --git a/docs/ja/images/header.png b/docs/ja/images/header.png new file mode 100644 index 000000000..5e8848515 Binary files /dev/null and b/docs/ja/images/header.png differ diff --git a/docs/ja/images/navigation-01.png b/docs/ja/images/navigation-01.png new file mode 100644 index 000000000..51fff3866 Binary files /dev/null and b/docs/ja/images/navigation-01.png differ diff --git a/docs/ja/images/navigation-02.png b/docs/ja/images/navigation-02.png new file mode 100644 index 000000000..3069943e0 Binary files /dev/null and b/docs/ja/images/navigation-02.png differ diff --git a/docs/ja/images/navigation-03.png b/docs/ja/images/navigation-03.png new file mode 100644 index 000000000..95d7216cc Binary files /dev/null and b/docs/ja/images/navigation-03.png differ diff --git a/docs/ja/images/safari-develop-menu.png b/docs/ja/images/safari-develop-menu.png new file mode 100644 index 000000000..af2b58d9a Binary files /dev/null and b/docs/ja/images/safari-develop-menu.png differ diff --git a/docs/ja/images/search.png b/docs/ja/images/search.png new file mode 100644 index 000000000..625b70415 Binary files /dev/null and b/docs/ja/images/search.png differ diff --git a/docs/ja/images/side-nav.png b/docs/ja/images/side-nav.png new file mode 100644 index 000000000..09777e85f Binary files /dev/null and b/docs/ja/images/side-nav.png differ diff --git a/docs/ja/images/uploader.png b/docs/ja/images/uploader.png new file mode 100644 index 000000000..25ef610f2 Binary files /dev/null and b/docs/ja/images/uploader.png differ diff --git a/docs/ja/images/version-manager-action.png b/docs/ja/images/version-manager-action.png new file mode 100644 index 000000000..d6ecac70a Binary files /dev/null and b/docs/ja/images/version-manager-action.png differ diff --git a/docs/ja/images/version-manager-dialog.png b/docs/ja/images/version-manager-dialog.png new file mode 100644 index 000000000..9a2f4c5fb Binary files /dev/null and b/docs/ja/images/version-manager-dialog.png differ diff --git a/docs/ja/images/version-manager-tab.png b/docs/ja/images/version-manager-tab.png new file mode 100644 index 000000000..adbeda4c4 Binary files /dev/null and b/docs/ja/images/version-manager-tab.png differ diff --git a/docs/ja/index.html b/docs/ja/index.html new file mode 100644 index 000000000..1f6d1a6f1 --- /dev/null +++ b/docs/ja/index.html @@ -0,0 +1,58 @@ + + + + + + + Alfresco Content App + + + + + +
+ + + + + diff --git a/docs/ja/toc.md b/docs/ja/toc.md new file mode 100644 index 000000000..eeeceddff --- /dev/null +++ b/docs/ja/toc.md @@ -0,0 +1,39 @@ +- [ホーム](/) + - [ドキュメント](/#documentation) + - [貢献する方法](/#how-to-contribute) +- [アプリの機能](/features/) + - [ユーザーインターフェイスのレイアウト](/features/user-interface-layout) + - [ヘッダー](/features/header) + - [サイドナビゲーション](/features/side-navigation) + - [ドキュメントリストのレイアウト](/features/document-list-layout) + - [ファイルビューア](/features/file-viewer) + - [情報ドロワー](/features/info-drawer) + - [バージョンマネージャ](/features/version-manager) + - [検索結果](/features/search-results) +- [入門](/getting-started/) + - [前提条件](/getting-started/prerequisites) + - [ソースからビルド](/getting-started/building-from-source) + - [国際化 (i18n)](/getting-started/internationalization) + - [CORS](/getting-started/cors) + - [設定](/getting-started/configuration) + - [ナビゲーション](/getting-started/navigation) + - [Docker](/getting-started/docker) +- [拡張](/extending/) + - [拡張機能](/extending/extensibility-features) + - [拡張フォーマット](/extending/extension-format) + - [ルート](/extending/routes) + - [コンポーネント](/extending/components) + - [アクション](/extending/actions) + - [アプリケーションアクション](/extending/application-actions) + - [ルール](/extending/rules) + - [アプリケーション機能](/extending/application-features) + - [カスタムアイコン](/extending/icons) + - [レジストレーション](/extending/registration) + - [カスタムエバリュエーターの作成](/extending/creating-custom-evaluators) + - [チュートリアル](/extending/tutorials) + - [再配布可能なライブラリ](/extending/redistributable-libraries) +- [チュートリアル](/tutorials/) + - [ACAの拡張の概要](/tutorials/introduction-to-extending) + - [パラメータ付きのカスタムルート](/tutorials/custom-route-with-parameters) + - [ダイアログアクション](/tutorials/dialog-actions) +- [助けを求める](/help) diff --git a/docs/ja/tutorials/README.md b/docs/ja/tutorials/README.md new file mode 100644 index 000000000..883fc013c --- /dev/null +++ b/docs/ja/tutorials/README.md @@ -0,0 +1,14 @@ +--- +Title: チュートリアル +Github only: true +--- + +# チュートリアル + +Alfresco Content Application を使用した開発の詳細を学習しましょう。 + +## コンテンツ + +- [ACA の拡張の概要](/tutorials/introduction-to-extending) +- [パラメータ付きのカスタムルート](/tutorials/custom-route-with-parameters) +- [ダイアログアクション](/tutorials/dialog-actions) \ No newline at end of file diff --git a/docs/ja/tutorials/custom-route-with-parameters.md b/docs/ja/tutorials/custom-route-with-parameters.md new file mode 100644 index 000000000..60ef8375f --- /dev/null +++ b/docs/ja/tutorials/custom-route-with-parameters.md @@ -0,0 +1,124 @@ +--- +Title: パラメータ付きのカスタムルート +--- + +# パラメータ付きのカスタムルート + +このチュートリアルでは、次の機能を実装します: + +- **Trashcan** コンポーネントを更新して、ルートパラメータを受信および記録します。 +- メインレイアウトを使用して **Trashcan** コンポーネントに遷移する新しいルートを作成します。 +- 新しいルートへのリダイレクトを許可するアクションリファレンスを作成します。 +- **New** メニューにアクションを呼び出すボタンを作成します。 + +`src/app/components/trashcan/trashcan.component.ts` を更新し、次のコードを `ngOnInit` 本体に追加します: + +```typescript +import { ActivatedRoute, Params } from '@angular/router'; + +@Component({...}) +export class TrashcanComponent { + + constructor( + // ... + private route: ActivatedRoute + ) {} + + ngOnInit() { + // ... + + this.route.params.subscribe(({ nodeId }: Params) => { + console.log('node: ', nodeId); + }); + } + +} +``` + +上記のコードは、現在のルートパラメータをブラウザコンソールに記録し、 +インテグレーションが期待どおりに機能することを証明しています。 + +次に、以下の例のように新しいルート定義を追加します: + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [ + { + "id": "custom.routes.trashcan", + "path": "ext/trashcan/:nodeId", + "component": "your.component.id", + "layout": "app.layout.main", + "auth": ["app.auth"] + } + ] +} +``` + +上記のテンプレートは、`ext/trashcan/` ルートを指し、`nodeId` パラメータを受け入れる ID `custom.routes.trashcan` を持つ新しいルート参照を作成します。 + +また、デフォルトのアプリケーションレイアウト (`app.layout.main`) と +認証ガード (`app.auth`) を使用します。 + +次に、`NAVIGATE_ROUTE` アプリケーションアクションのアクション参照を作成し、ルートパラメータを渡します。 +パスには `/ext/trashcan`、`nodeId` の値には `10` を渡します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [...], + + "actions": [ + { + "id": "custom.actions.trashcan", + "type": "NAVIGATE_ROUTE", + "payload": "$(['/ext/trashcan', '10'])" + } + ] +} +``` + +最後に、`NEW` ボタンの新しいメニュー項目を宣言し、上記で作成した `custom.actions.trashcan` アクションを使用します。 + +```json +{ + "$schema": "../../../extension.schema.json", + "$version": "1.0.0", + "$name": "plugin1", + + "routes": [...], + "actions": [...], + + "features": { + "create": [ + { + "id": "custom.create.trashcan", + "type": "default", + "icon": "build", + "title": "Custom trashcan route", + "actions": { + "click": "custom.actions.trashcan" + } + } + ] + } +} +``` + +これで、アプリケーションを実行すると、"NEW" ドロップダウンに "Custom Trashcan Route" という新しいメニュー項目が表示されます。 +このアイテムをクリックすると、**Trashcan** コンポーネントを含む `/ext/trashcan/10` ルートに移動します。 + +ブラウザコンソールの出力を確認し、次の出力があることを確認します: + +```text +node: 10 +``` + +カスタムアクションを呼び出し、追加のアプリケーションルートにリダイレクトする +新しいメニューボタンが正常に作成されました。 diff --git a/docs/ja/tutorials/dialog-actions.md b/docs/ja/tutorials/dialog-actions.md new file mode 100644 index 000000000..b8b79e079 --- /dev/null +++ b/docs/ja/tutorials/dialog-actions.md @@ -0,0 +1,154 @@ +--- +Title: ダイアログアクション +--- + +# ダイアログアクション + +このチュートリアルでは、カスタムマテリアルダイアログを呼び出すアクションを作成します。 + +ダイアログコンポーネントの詳細については、こちらをご覧ください: [ダイアログの概要](https://material.angular.io/components/dialog/overview) + +### ダイアログを作成する + +```sh +ng g component dialogs/my-extension-dialog --module=app +``` + +Angular ルールに従って、コンポーネントはモジュールの `entryComponents` セクション内にも登録する必要があります。 + +以下の例に従って `src/app/app.module.ts` ファイルを更新します: + +```ts +@NgModule({ + imports: [...], + declarations: [ + ..., + MyExtensionDialogComponent + ], + entryComponents: [ + ..., + MyExtensionDialogComponent + ] +}) +``` + +`my-extension-dialog.component.ts` を更新します: + +```ts +import { Component } from '@angular/core'; +import { MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'aca-my-extension-dialog', + templateUrl: './my-extension-dialog.component.html', + styleUrls: ['./my-extension-dialog.component.scss'] +}) +export class MyExtensionDialogComponent { + constructor(public dialogRef: MatDialogRef) {} +} +``` + +`my-extension-dialog.component.html` を更新します: + +```html +

Delete all

+Are you sure? + + + + + +``` + +### アクションを作成する + +次のコードを `src/app/store/actions/app.actions.ts` に追加します: + +```ts +export const SHOW_MY_DIALOG = 'SHOW_MY_DIALOG'; + +export class ShowMydDialogAction implements Action { + readonly type = SHOW_MY_DIALOG; +} +``` + +あわせて参照: + +- [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) + +### エフェクトを作成する + +`src/app/store/effects/app.effects.ts` を更新します: + +```ts +import { ShowMydDialogAction, SHOW_MY_DIALOG } from '../actions/app.actions'; + +@Injectable() +export class AppEffects { + constructor(...) {} + + @Effect({ dispatch: false }) + showMyDialog$ = this.actions$.pipe( + ofType(SHOW_MY_DIALOG), + map(() => {}) + ); + + // ... +} +``` + +あわせて参照: + +- [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) + +ダイアログを表示するための更新 + +```ts +import { MatDialog } from '@angular/material/dialog'; +import { MyExtensionDialogComponent } from '../../dialogs/my-extension-dialog/my-extension-dialog.component'; + +@Injectable() +export class AppEffects { + constructor( + ..., + private dialog: MatDialog + ) {} + + @Effect({ dispatch: false }) + showMyDialog$ = this.actions$.pipe( + ofType(SHOW_MY_DIALOG), + map(() => { + this.dialog.open(MyExtensionDialogComponent) + }) + ); + + ... + +} +``` + +### ツールバーアクションを登録する + +`src/assets/app.extensions.json` ファイルを更新し、`features.toolbar` セクションに新しいエントリを挿入します: + +```json +{ + ..., + + "features": { + "toolbar": [ + { + "id": "my.custom.toolbar.button", + "order": 10, + "title": "Custom action", + "icon": "extension", + "actions": { + "click": "SHOW_MY_DIALOG" + } + } + ] + } +} +``` + +これで、アプリケーションを実行すると、クリックするたびにダイアログを呼び出す追加のボタンが表示されます。 diff --git a/docs/ja/tutorials/introduction-to-extending.md b/docs/ja/tutorials/introduction-to-extending.md new file mode 100644 index 000000000..8b1f86316 --- /dev/null +++ b/docs/ja/tutorials/introduction-to-extending.md @@ -0,0 +1,7 @@ +--- +Title: ACA の拡張の概要 +--- + +# Alfresco Content Application の拡張の概要 + +将来のチュートリアルのためのプレースホルダー。