diff --git a/docs/README.md b/docs/README.md
index 8259aa123a..ad9ca8352d 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -215,7 +215,7 @@ for more information about installing and using the source code.
| [JWT helper service](core/services/jwt-helper.service.md) | Decodes a JSON Web Token (JWT) to a JavaScript object. | [Source](../lib/core/services/jwt-helper.service.ts) |
| [Log Service](core/services/log.service.md) | Provides log functionality. | [Source](../lib/core/services/log.service.ts) |
| [Login Dialog service](core/services/login-dialog.service.md) | Manages login dialogs. | [Source](../lib/core/services/login-dialog.service.ts) |
-| [Node Service](core/services/node.service.md) | Gets Alfresco Repository node metadata and creates nodes with metadata. | [Source](../lib/core/form/services/node.service.ts) |
+| [Node Service](core/services/node.service.md) | *Deprecated.* Use the Nodes Api service instead. | [Source](../lib/core/form/services/node.service.ts) |
| [Nodes Api service](core/services/nodes-api.service.md) | Accesses and manipulates ACS document nodes using their node IDs. | [Source](../lib/core/services/nodes-api.service.ts) |
| [Notification Service](core/services/notification.service.md) | Shows a notification message with optional feedback. | [Source](../lib/core/notifications/services/notification.service.ts) |
| [Page Title service](core/services/page-title.service.md) | Sets the page title. | [Source](../lib/core/services/page-title.service.ts) |
diff --git a/docs/content-services/components/content-metadata-card.component.md b/docs/content-services/components/content-metadata-card.component.md
index b896f7c99c..cc136d8617 100644
--- a/docs/content-services/components/content-metadata-card.component.md
+++ b/docs/content-services/components/content-metadata-card.component.md
@@ -18,14 +18,13 @@ Displays and edits metadata related to a node.
- [Properties](#properties)
- [Details](#details)
- [Application config presets](#application-config-presets)
- - [Indifferent config](#indifferent-config)
- - [Aspect oriented config](#aspect-oriented-config)
- [Layout oriented config](#layout-oriented-config)
- [Displaying all properties](#displaying-all-properties)
- [Making aspects and properties read only](#making-aspects-and-properties-read-only)
- [What happens when there is a whitelisted aspect in the config but the given node doesn't relate to that aspect](#what-happens-when-there-is-a-whitelisted-aspect-in-the-config-but-the-given-node-doesnt-relate-to-that-aspect)
- [Multi value card properties](#multi-value-card-properties)
- [Use chips for multi value properties](#use-chips-for-multi-value-properties)
+- [Copy to Clipboard on click](#copy-to-clipboard-on-click)
## Basic Usage
@@ -402,15 +401,15 @@ For easier interaction with metadata properties you can enable the Copy to Clipb
Once you have enabled this feature you will be able to double click on your metadata properties and they will get copied to your clipboard for you to use.
- ```json
+```json
"content-metadata": {
- "presets": {
- "default": {
- "includeAll": true,
- "exclude": "exif:exif",
- "exif:exif": [ "exif:pixelXDimension", "exif:pixelYDimension"]
- }
- },
- "copy-to-clipboard-action": true
+ "presets": {
+ "default": {
+ "includeAll": true,
+ "exclude": "exif:exif",
+ "exif:exif": [ "exif:pixelXDimension", "exif:pixelYDimension"]
+ }
+ },
+ "copy-to-clipboard-action": true
}
```
diff --git a/docs/content-services/components/content-node-selector-panel.component.md b/docs/content-services/components/content-node-selector-panel.component.md
index 32c1d64e52..cdfcfc587c 100644
--- a/docs/content-services/components/content-node-selector-panel.component.md
+++ b/docs/content-services/components/content-node-selector-panel.component.md
@@ -41,7 +41,7 @@ Opens a [Content Node Selector](content-node-selector.component.md) in its own
| excludeSiteContent | `string[]` | | Custom list of site content componentIds. Used to filter out the corresponding items from the displayed nodes |
| rowFilter | [`RowFilter`](../../../lib/content-services/src/lib/document-list/data/row-filter.model.ts) | | Custom row filter function. See the [Row Filter Model](row-filter.model.md) page for more information. |
| showDropdownSiteList | `boolean` | | Toggle sites list dropdown rendering |
-| showFilesInResult | `boolean` | | Shows the files and folders in the search result |
+| showFilesInResult | `void` | | Shows the files and folders in the search result |
| showSearch | `boolean` | | Toggle search input rendering |
### Events
diff --git a/docs/content-services/services/custom-resources.service.md b/docs/content-services/services/custom-resources.service.md
index c51818df66..9fd4fd39ab 100644
--- a/docs/content-services/services/custom-resources.service.md
+++ b/docs/content-services/services/custom-resources.service.md
@@ -41,34 +41,34 @@ Manages Document List information that is specific to a user.
Is the folder ID a "-my", "-root-", or "-shared-" alias?
- _folderId:_ `string` - Folder ID name to check
- **Returns** `boolean` - True if the ID is one of the supported sources, false otherwise
-- **loadFavorites**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`, where? string): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>`
+- **loadFavorites**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`, where?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>`
Gets favorite files for the current user.
- _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) - Specifies how to paginate the results
- _includeFields:_ `string[]` - List of data field names to include in the results
- - _where:_ (Optional) `string` - A string to restrict the returned objects by using a predicate
+ - _where:_ `string` - (Optional) A string to restrict the returned objects by using a predicate
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>` - List of favorite files
-- **loadFolderByNodeId**(nodeId: `string`, pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`, where?: string): `any`
+- **loadFolderByNodeId**(nodeId: `string`, pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`, where?: `string`): `any`
Gets a folder's contents.
- _nodeId:_ `string` - ID of the target folder node
- _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) - Specifies how to paginate the results
- _includeFields:_ `string[]` - List of data field names to include in the results
- - _where:_ (Optional) `string` - A string to restrict the returned objects by using a predicate
+ - _where:_ `string` - (Optional) Filters the [`Node`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/Node.md) list using the _where_ condition of the REST API (for example, isFolder=true). See the REST API documentation for more information.
- **Returns** `any` - List of items contained in the folder
-- **loadMemberSites**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), where?: string): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberPaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SiteMemberPaging.md)`>`
+- **loadMemberSites**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), where?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberPaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SiteMemberPaging.md)`>`
Gets sites that the current user is a member of.
- _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) - Specifies how to paginate the results
- - _where:_ (Optional) `string` - A string to restrict the returned objects by using a predicate
+ - _where:_ `string` - (Optional) A string to restrict the returned objects by using a predicate
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SiteMemberPaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SiteMemberPaging.md)`>` - List of sites
-- **loadSharedLinks**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`, where?: string): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SharedLinkPaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SharedLinkPaging.md)`>`
+- **loadSharedLinks**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`, where?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SharedLinkPaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SharedLinkPaging.md)`>`
Gets shared links for the current user.
- _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) - Specifies how to paginate the results
- _includeFields:_ `string[]` - List of data field names to include in the results
- - _where:_ (Optional)`string` - A string to restrict the returned objects by using a predicate
+ - _where:_ `string` - (Optional) A string to restrict the returned objects by using a predicate
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SharedLinkPaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SharedLinkPaging.md)`>` - List of shared links
-- **loadSites**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), where?: string): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>`
+- **loadSites**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), where?: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>`
Gets all sites in the repository.
- _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) - Specifies how to paginate the results
- - _where:_ (Optional)`string` - A string to restrict the returned objects by using a predicate
+ - _where:_ `string` - (Optional) A string to restrict the returned objects by using a predicate
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>` - List of sites
- **loadTrashcan**(pagination: [`PaginationModel`](../../../lib/core/models/pagination.model.ts), includeFields: `string[]` = `[]`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`DeletedNodesPaging`](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/DeletedNodesPaging.md)`>`
Gets all items currently in the trash.
diff --git a/docs/content-services/services/document-actions.service.md b/docs/content-services/services/document-actions.service.md
index 693ecd1808..62d3966c40 100644
--- a/docs/content-services/services/document-actions.service.md
+++ b/docs/content-services/services/document-actions.service.md
@@ -95,7 +95,7 @@ export class MyView {
```
You will probably want to set up all your custom actions at the application root level or
-with a custom application service.
+with a custom [application service](../../../lib/testing/src/lib/core/actions/APS/applications.service.ts).
## See also
diff --git a/docs/content-services/services/folder-actions.service.md b/docs/content-services/services/folder-actions.service.md
index a81e476523..53d099c579 100644
--- a/docs/content-services/services/folder-actions.service.md
+++ b/docs/content-services/services/folder-actions.service.md
@@ -95,7 +95,7 @@ export class MyView {
```
You will probably want to set up all your custom actions at the application root level or
-with a custom application service.
+with a custom [application service](../../../lib/testing/src/lib/core/actions/APS/applications.service.ts).
## See also
diff --git a/docs/core/components/card-view.component.md b/docs/core/components/card-view.component.md
index 5e22eb01e4..62cef71fc2 100644
--- a/docs/core/components/card-view.component.md
+++ b/docs/core/components/card-view.component.md
@@ -108,14 +108,14 @@ Defining properties from Typescript:
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
-| displayClearAction | `boolean` | true | Toggles whether or not to display clear action. |
| copyToClipboardAction | `boolean` | true | Toggles whether or not to enable copy to clipboard action. |
-| useChipsForMultiValueProperty | `boolean` | true | Toggles whether or not to enable chips for multivalued properties. |
-| multiValueSeparator | `string` | ',' | String separator between multi-value property items. |
+| displayClearAction | `boolean` | true | Toggles whether or not to display clear action. |
| displayEmpty | `boolean` | true | Toggles whether or not to show empty items in non-editable mode. |
| displayNoneOption | `boolean` | true | Toggles whether or not to display none option. |
| editable | `boolean` | | Toggles whether or not the items can be edited. |
+| multiValueSeparator | `string` | DEFAULT_SEPARATOR | String separator between multi-value property items. |
| properties | [`CardViewItem`](../../../lib/core/card-view/interfaces/card-view-item.interface.ts)`[]` | | (**required**) Items to show in the card view. |
+| useChipsForMultiValueProperty | `boolean` | true | Toggles whether or not to enable chips for multivalued properties. |
## Details
diff --git a/docs/core/components/icon.component.md b/docs/core/components/icon.component.md
index 7566c9aa74..fe40103bc5 100644
--- a/docs/core/components/icon.component.md
+++ b/docs/core/components/icon.component.md
@@ -28,7 +28,7 @@ Provides a universal way of rendering registered and named icons.
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
-| color | `ThemePalette` | | Theme color palette for the component. |
+| color | [`ThemePalette`](https://github.com/angular/components/blob/master/src/material/core/common-behaviors/color.ts) | | Theme color palette for the component. |
| value | `string` | | Icon value, which can be either a ligature name or a custom icon in the format `[namespace]:[name]`. |
## Details
diff --git a/docs/core/components/toolbar.component.md b/docs/core/components/toolbar.component.md
index 5324689a17..741fa577d7 100644
--- a/docs/core/components/toolbar.component.md
+++ b/docs/core/components/toolbar.component.md
@@ -74,7 +74,7 @@ pushed to the right by a spacer:
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
-| color | `string` | | Toolbar color. Can be changed to empty value (default), `primary`, `accent` or `warn`. |
+| color | [`ThemePalette`](https://github.com/angular/components/blob/master/src/material/core/common-behaviors/color.ts) | | Toolbar color. Can be changed to empty value (default), `primary`, `accent` or `warn`. |
| title | `string` | "" | Toolbar title. |
## Details
diff --git a/docs/core/components/user-info.component.md b/docs/core/components/user-info.component.md
index 3e7668170e..4732b194a1 100644
--- a/docs/core/components/user-info.component.md
+++ b/docs/core/components/user-info.component.md
@@ -23,8 +23,8 @@ Shows user information.
| ---- | ---- | ------------- | ----------- |
| bpmBackgroundImage | `string` | | Custom path for the background banner image for APS users. |
| ecmBackgroundImage | `string` | | Custom path for the background banner image for ACS users. |
-| menuPositionX | `string` | "after" | Custom choice for opening the menu at the bottom. Can be `before` or `after`. |
-| menuPositionY | `string` | "below" | Custom choice for opening the menu at the bottom. Can be `above` or `below`. |
+| menuPositionX | [`MenuPositionX`](https://github.com/angular/components/blob/master/src/material/menu/menu-positions.ts) | "after" | Custom choice for opening the menu at the bottom. Can be `before` or `after`. |
+| menuPositionY | [`MenuPositionY`](https://github.com/angular/components/blob/master/src/material/menu/menu-positions.ts) | "below" | Custom choice for opening the menu at the bottom. Can be `above` or `below`. |
| namePosition | `string` | "right" | When the username is shown, this defines its position relative to the user info button. Can be `right` or `left`. |
| showName | `boolean` | true | Shows/hides the username next to the user info button. |
@@ -33,4 +33,4 @@ Shows user information.
The component shows a round icon for the user and will show extra information about
the user when clicked.
If user is logged in with both ACS and APS, the ACS image will be shown.
-In case of SSO authentication, the information related to the user like firstname, lastname will be fetched using the Keycloak Api
+In case of SSO authentication, the information related to the user like firstname, lastname will be fetched using the Keycloak [`Api`](../../../lib/testing/src/lib/core/structure/api.ts)
diff --git a/docs/core/services/authentication.service.md b/docs/core/services/authentication.service.md
index d19845bff3..bc1db58126 100644
--- a/docs/core/services/authentication.service.md
+++ b/docs/core/services/authentication.service.md
@@ -66,6 +66,11 @@ Provides authentication to ACS and APS.
- **isLoggedIn**(): `boolean`
Checks if the user logged in.
- **Returns** `boolean` - True if logged in, false otherwise
+- **isLoggedInWith**(provider: `string`): `boolean`
+
+ - _provider:_ `string` -
+ - **Returns** `boolean` -
+
- **isOauth**(): `boolean`
Does the provider support OAuth?
- **Returns** `boolean` - True if supported, false otherwise
diff --git a/docs/core/services/upload.service.md b/docs/core/services/upload.service.md
index f31ac97276..e44a7acec1 100644
--- a/docs/core/services/upload.service.md
+++ b/docs/core/services/upload.service.md
@@ -18,7 +18,7 @@ Provides access to various APIs related to file upload features.
- _files:_ [`FileModel`](../../../lib/core/models/file.model.ts)`[]` - One or more separate parameters or an array of files to queue
- **Returns** [`FileModel`](../../../lib/core/models/file.model.ts)`[]` - Array of files that were not blocked from upload by the ignore list
- **cancelUpload**(files: [`FileModel`](../../../lib/core/models/file.model.ts)`[]`)
- Cancels uploading of files.
+ Cancels uploading of files. If the file is smaller than 1 MB the file will be uploaded and then the node deleted to prevent having files that were aborted but still uploaded.
- _files:_ [`FileModel`](../../../lib/core/models/file.model.ts)`[]` - One or more separate parameters or an array of files specifying uploads to cancel
- **clearQueue**()
Clears the upload queue
diff --git a/docs/process-services-cloud/components/form-cloud.component.md b/docs/process-services-cloud/components/form-cloud.component.md
index 79bbd525e0..4dd752877b 100644
--- a/docs/process-services-cloud/components/form-cloud.component.md
+++ b/docs/process-services-cloud/components/form-cloud.component.md
@@ -103,7 +103,7 @@ The template defined inside `empty-form` will be shown when no form definition i
| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when any error occurs. |
| executeOutcome | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormOutcomeEvent`](../../../lib/core/form/components/widgets/core/form-outcome-event.model.ts)`>` | Emitted when any outcome is executed. Default behaviour can be prevented via `event.preventDefault()`. |
| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. |
-| formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when form content is clicked. |
+| formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ContentLinkModel`](../../../lib/core/form/components/widgets/core/content-link.model.ts)`>` | Emitted when form content is clicked. |
| formDataRefreshed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when form values are refreshed due to a data property change. |
| formError | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormFieldModel`](../../core/models/form-field.model.md)`[]>` | Emitted when the supplied form values have a validation error. |
| formLoaded | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts)`>` | Emitted when the form is loaded or reloaded. |
diff --git a/docs/process-services-cloud/components/group-cloud.component.md b/docs/process-services-cloud/components/group-cloud.component.md
index 5a41b93a5b..d0e468eb36 100644
--- a/docs/process-services-cloud/components/group-cloud.component.md
+++ b/docs/process-services-cloud/components/group-cloud.component.md
@@ -38,7 +38,8 @@ Searches Groups.
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| appName | `string` | | Name of the application. If specified this shows the groups who have access to the app. |
-| mode | `string` | | Group selection mode (single/multiple). |
+| groupChipsCtrl | `FormControl` | | FormControl to list of group |
+| mode | [`ComponentSelectionMode`](../../../lib/process-services-cloud/src/lib/types.ts) | "single" | Group selection mode (single/multiple). |
| preSelectGroups | [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`[]` | \[] | Array of groups to be pre-selected. This pre-selects all groups in multi selection mode and only the first group of the array in single selection mode. |
| readOnly | `boolean` | false | Show the info in readonly mode |
| roles | `string[]` | \[] | Role names of the groups to be listed. |
diff --git a/docs/process-services-cloud/components/people-cloud.component.md b/docs/process-services-cloud/components/people-cloud.component.md
index 6443ab6dc7..4186040cb7 100644
--- a/docs/process-services-cloud/components/people-cloud.component.md
+++ b/docs/process-services-cloud/components/people-cloud.component.md
@@ -25,13 +25,14 @@ Allows one or more users to be selected (with auto-suggestion) based on the inpu
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| appName | `string` | | Name of the application. If specified, this shows the users who have access to the app. |
-| mode | `string` | | User selection mode (single/multiple). |
+| mode | [`ComponentSelectionMode`](../../../lib/process-services-cloud/src/lib/types.ts) | "single" | User selection mode (single/multiple). |
| preSelectUsers | [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]` | \[] | Array of users to be pre-selected. All users in the array are pre-selected in multi selection mode, but only the first user is pre-selected in single selection mode. Mandatory properties are: id, email, username |
| readOnly | `boolean` | false | Show the info in readonly mode |
| roles | `string[]` | | Role names of the users to be listed. |
| searchUserCtrl | `FormControl` | | FormControl to search the user |
| title | `string` | | Placeholder translation key |
-| validate | `Boolean` | false | This flag enables the validation on the preSelectUsers passed as input. In case the flag is true the components call the [identity service](../../../lib/testing/src/lib/core/actions/identity/identity.service.ts) to verify the validity of the information passed as input. Otherwise, no check will be done. |
+| userChipsCtrl | `FormControl` | | FormControl to list of users |
+| validate | `boolean` | false | This flag enables the validation on the preSelectUsers passed as input. In case the flag is true the components call the [identity service](../../../lib/testing/src/lib/core/actions/identity/identity.service.ts) to verify the validity of the information passed as input. Otherwise, no check will be done. |
### Events
diff --git a/docs/process-services-cloud/components/start-process-cloud.component.md b/docs/process-services-cloud/components/start-process-cloud.component.md
index 23e3ea98ed..c5709d0237 100644
--- a/docs/process-services-cloud/components/start-process-cloud.component.md
+++ b/docs/process-services-cloud/components/start-process-cloud.component.md
@@ -51,8 +51,8 @@ Starts a process.
| cancel | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>` | Emitted when the starting process is cancelled |
| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>` | Emitted when an error occurs. |
| formContentClicked | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ContentLinkModel`](../../../lib/core/form/components/widgets/core/content-link.model.ts)`>` | Emitted when form content is clicked. |
+| processDefinitionSelection | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessDefinitionCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-definition-cloud.model.ts)`>` | Emitted when process definition selection changes. |
| success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>` | Emitted when the process is successfully started. |
-| processDefinitionSelection | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessDefinitionCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-definition-cloud.model.ts)`>` | Emitted when process definition selection changes. |
## Details
diff --git a/docs/process-services-cloud/services/local-preference-cloud.service.md b/docs/process-services-cloud/services/local-preference-cloud.service.md
index 51c3085695..8db91da97c 100644
--- a/docs/process-services-cloud/services/local-preference-cloud.service.md
+++ b/docs/process-services-cloud/services/local-preference-cloud.service.md
@@ -15,7 +15,7 @@ Manages Local Storage preferences.
- **createPreference**(\_: `string`, key: `string`, newPreference: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Creates local preference.
- - _\_:_ `string` -
+ - _\_:_ `string` - Name of the target app
- _key:_ `string` - Key of the target preference
- _newPreference:_ `any` - Details of new local preference
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of created local preferences
@@ -26,13 +26,13 @@ Manages Local Storage preferences.
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of preferences without deleted preference
- **getPreferenceByKey**(\_: `string`, key: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets local preference.
- - _\_:_ `string` -
+ - _\_:_ `string` - Name of the target app
- _key:_ `string` - Key of the target preference
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of local preference
- **getPreferences**(\_: `string`, key: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets local preferences
- - _\_:_ `string` -
- - _key:_ `string` - (Optional)
+ - _\_:_ `string` - Name of the target app
+ - _key:_ `string` - Key of the target preference
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - List of local preferences
- **prepareLocalPreferenceResponse**(key: `string`): `any`
@@ -41,7 +41,7 @@ Manages Local Storage preferences.
- **updatePreference**(\_: `string`, key: `string`, updatedPreference: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Updates local preference.
- - _\_:_ `string` -
+ - _\_:_ `string` - Name of the target app
- _key:_ `string` - Key of the target preference
- _updatedPreference:_ `any` - Details of updated preference
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Observable of updated local preferences
diff --git a/docs/process-services-cloud/services/start-process-cloud.service.md b/docs/process-services-cloud/services/start-process-cloud.service.md
index 769ae317e4..624f682c5b 100644
--- a/docs/process-services-cloud/services/start-process-cloud.service.md
+++ b/docs/process-services-cloud/services/start-process-cloud.service.md
@@ -24,7 +24,7 @@ Gets process definitions and starts processes.
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessDefinitionCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-definition-cloud.model.ts)`[]>` - Array of process definitions
- **startProcess**(appName: `string`, payload: [`ProcessPayloadCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-payload-cloud.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>`
Starts a process based on a process definition, name, form values or variables.
- - _appName:_ `string` - name of the Application
+ - _appName:_ `string` - name of the [Application](../../../lib/testing/src/lib/core/structure/application.ts)
- _payload:_ [`ProcessPayloadCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-payload-cloud.model.ts) - Details of the process (definition key, name, variables, etc)
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessInstanceCloud`](../../../lib/process-services-cloud/src/lib/process/start-process/models/process-instance-cloud.model.ts)`>` - Details of the process instance just started
diff --git a/docs/process-services/components/start-process.component.md b/docs/process-services/components/start-process.component.md
index e533e3c51b..b789091c71 100644
--- a/docs/process-services/components/start-process.component.md
+++ b/docs/process-services/components/start-process.component.md
@@ -39,11 +39,11 @@ Starts a process.
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| appId | `number` | | (optional) Limit the list of processes that can be started to those contained in the specified app. |
-| title | `string` | "" | (optional) Define the header of the component. |
| name | `string` | "" | (optional) Name to assign to the current process. |
| processDefinitionName | `string` | | (optional) Definition name of the process to start. |
| processFilterSelector | `boolean` | true | (optional) Parameter to enable selection of process when filtering. |
| showSelectProcessDropdown | `boolean` | true | Hide or show the process selection dropdown. |
+| title | `string` | | (optional) Define the header of the component. |
| values | [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) | | Parameter to pass form field values in the start form if one is associated. |
| variables | [`ProcessInstanceVariable`](../../../lib/process-services/src/lib/process-list/models/process-instance-variable.model.ts)`[]` | | Variables in the input to the process [`RestVariable`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/RestVariable.md). |
@@ -53,8 +53,8 @@ Starts a process.
| ---- | ---- | ----------- |
| cancel | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` | Emitted when the process is canceled. |
| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` | Emitted when an error occurs. |
+| processDefinitionSelection | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessDefinitionRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessDefinitionRepresentation.md)`>` | Emitted when process definition selection changes. |
| start | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessInstance`](../../../lib/process-services/src/lib/process-list/models/process-instance.model.ts)`>` | Emitted when the process starts. |
-| processDefinitionSelection | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessDefinitionRepresentation`](../../../lib/process-services/src/lib/process-list/models/process-definition.model.ts)`>` | Emitted when process definition selection changes. |
## Details
diff --git a/docs/roadmap.md b/docs/roadmap.md
index afdc9da4d5..f2730de06a 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -8,19 +8,19 @@ Below is a list of the high level feature themes planned for the forthcoming ver
Last updated 26 Feb 2019:
-- Continue with the Activiti features.
-- Accessibility (508 compliance and automatic tests).
-- Search highlighting.
-- Better metadata viewer (whitelisting by default).
-- Support for languages that are written right-to-left (such as Arabic).
-- Continue with Governance features into ADF.
-- Better experience in plugin/extensions.
-- Application dashboards.
-- Permission driven menus.
-- Experimental features:
- - Artificial Intelligence plugins/components.
- - Web components for ADF to be framework agnostic.
- - Rapid Application Development.
+- Continue with the Activiti features.
+- Accessibility (508 compliance and automatic tests).
+- Search highlighting.
+- Better metadata viewer (whitelisting by default).
+- Support for languages that are written right-to-left (such as Arabic).
+- Continue with Governance features into ADF.
+- Better experience in plugin/extensions.
+- [`Application`](../lib/testing/src/lib/core/structure/application.ts) dashboards.
+- Permission driven menus.
+- Experimental features:
+ - Artificial Intelligence plugins/components.
+ - Web components for ADF to be framework agnostic.
+ - Rapid [`Application`](../lib/testing/src/lib/core/structure/application.ts) Development.
**Disclaimer**: The list above may change in the future and it does not
represent an official promise about features to be implemented. The purpose of this public roadmap is to share infomation openly with our ecosystem of customers, partners and enthusiasts.
diff --git a/docs/tutorials/README.md b/docs/tutorials/README.md
index 0ee2e97b7b..ca0b85a3f0 100644
--- a/docs/tutorials/README.md
+++ b/docs/tutorials/README.md
@@ -6,14 +6,14 @@ Github only: true
# Tutorials
| Name | Level | Abstract |
-| ---- | ----- | -------- |
+| --- | --- | --- |
| [**Creating your first ADF application**](creating-your-first-adf-application.md) | Basic | This tutorial shows you how to set up your development environment and create an ADF application. |
| [**Creating your ADF application using Yeoman**](creating-the-app-using-yeoman.md) | Basic | In this tutorial you are going to see how to create an ADF application from scratch, using the [Yeoman scaffolding tool](http://yeoman.io/). |
| [**Creating your Alfresco JavaScript application**](creating-javascript-app-using-alfresco-js-api.md) | Basic | In this tutorial you will learn how to create an application in JavaScript from scratch to interact with Alfresco. |
| [**Adding a new component**](new-component.md) | Basic | In this tutorial, you will learn how to create a component using [Angular CLI](https://cli.angular.io/) within an existing application. |
| [**Adding a new view**](new-view.md) | Beginner | In this tutorial you will learn how to create a new view in your application and how to access it using a defined endpoint. |
| [**Using ADF Components**](using-components.md) | Basic | In this tutorial you will learn how to extend, use and configure ADF Components. |
-| [**Basic theming**](basic-theming.md) | Beginner | In this tutorial you will see how to theme an ADF app by modifying the CSS. |
+| [**Basic theming**](basic-theming.md) | Beginner | In this tutorial you will see how to theme an ADF app by modifying the CSS. |
| [**Customizing the Login component**](customising-login.md) | Intermediate | In this tutorial you will learn how to customize the [Login component](../core/components/login.component.md) following the technical documentation. |
| [**Working with a Data Table**](working-with-data-table.md) | Intermediate | In this tutorial you will learn how to populate a DataTable component. |
| [**Working with the Nodes API Service**](working-with-nodes-api-service.md) | Intermediate | In this tutorial you will learn how to use the [`NodesApiService`](../core/services/nodes-api.service.md). |
diff --git a/docs/versionIndex.md b/docs/versionIndex.md
index 136133883c..76b15881de 100644
--- a/docs/versionIndex.md
+++ b/docs/versionIndex.md
@@ -35,7 +35,7 @@ backend services have been tested with each released version of ADF.
-No new components has been added in this release
+- [Cancel process directive](process-services-cloud/directives/cancel-process.directive.md)
diff --git a/lib/content-services/src/lib/document-list/services/custom-resources.service.ts b/lib/content-services/src/lib/document-list/services/custom-resources.service.ts
index 95028836d6..4e57074e88 100644
--- a/lib/content-services/src/lib/document-list/services/custom-resources.service.ts
+++ b/lib/content-services/src/lib/document-list/services/custom-resources.service.ts
@@ -332,6 +332,7 @@ export class CustomResourcesService {
* @param nodeId ID of the target folder node
* @param pagination Specifies how to paginate the results
* @param includeFields List of data field names to include in the results
+ * @param where Filters the Node list using the *where* condition of the REST API (for example, isFolder=true). See the REST API documentation for more information.
* @returns List of items contained in the folder
*/
loadFolderByNodeId(nodeId: string, pagination: PaginationModel, includeFields: string[] = [], where?: string): any {
diff --git a/lib/process-services-cloud/src/lib/services/local-preference-cloud.service.ts b/lib/process-services-cloud/src/lib/services/local-preference-cloud.service.ts
index 592bb203ce..0627349f07 100644
--- a/lib/process-services-cloud/src/lib/services/local-preference-cloud.service.ts
+++ b/lib/process-services-cloud/src/lib/services/local-preference-cloud.service.ts
@@ -27,7 +27,8 @@ export class LocalPreferenceCloudService implements PreferenceCloudServiceInterf
/**
* Gets local preferences
- * @param appName Name of the target app
+ * @param _ Name of the target app
+ * @param key Key of the target preference
* @returns List of local preferences
*/
getPreferences(_: string, key: string): Observable {
@@ -45,7 +46,7 @@ export class LocalPreferenceCloudService implements PreferenceCloudServiceInterf
/**
* Gets local preference.
- * @param appName Name of the target app
+ * @param _ Name of the target app
* @param key Key of the target preference
* @returns Observable of local preference
*/
@@ -55,9 +56,9 @@ export class LocalPreferenceCloudService implements PreferenceCloudServiceInterf
/**
* Creates local preference.
- * @param appName Name of the target app
+ * @param _ Name of the target app
* @param key Key of the target preference
- * @newPreference Details of new local preference
+ * @param newPreference Details of new local preference
* @returns Observable of created local preferences
*/
createPreference(_: string, key: string, newPreference: any): Observable {
@@ -69,7 +70,7 @@ export class LocalPreferenceCloudService implements PreferenceCloudServiceInterf
/**
* Updates local preference.
- * @param appName Name of the target app
+ * @param _ Name of the target app
* @param key Key of the target preference
* @param updatedPreference Details of updated preference
* @returns Observable of updated local preferences
@@ -83,7 +84,6 @@ export class LocalPreferenceCloudService implements PreferenceCloudServiceInterf
/**
* Deletes local preference by given preference key.
- * @param appName Name of the target app
* @param key Key of the target preference
* @param preferences Details of updated preferences
* @returns Observable of preferences without deleted preference
diff --git a/lib/process-services/src/lib/process-list/components/start-process.component.ts b/lib/process-services/src/lib/process-list/components/start-process.component.ts
index 449dcd1cae..e4821b46b5 100644
--- a/lib/process-services/src/lib/process-list/components/start-process.component.ts
+++ b/lib/process-services/src/lib/process-list/components/start-process.component.ts
@@ -49,6 +49,7 @@ export class StartProcessInstanceComponent implements OnChanges, OnInit, OnDestr
@Input()
appId: number;
+ /** (optional) Define the header of the component. */
@Input()
title: string;
diff --git a/package-lock.json b/package-lock.json
index 8759b98abc..5f9a8da12f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4658,6 +4658,15 @@
"sha.js": "^2.4.8"
}
},
+ "cross-fetch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz",
+ "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=",
+ "requires": {
+ "node-fetch": "2.1.2",
+ "whatwg-fetch": "2.0.4"
+ }
+ },
"cross-spawn": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
@@ -7880,6 +7889,14 @@
"iterall": "^1.2.2"
}
},
+ "graphql-request": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz",
+ "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==",
+ "requires": {
+ "cross-fetch": "2.2.2"
+ }
+ },
"graphviz": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.8.tgz",
@@ -11748,6 +11765,11 @@
"resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
"integrity": "sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc="
},
+ "node-fetch": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
+ "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
+ },
"node-fetch-npm": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
@@ -20379,6 +20401,11 @@
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
"dev": true
},
+ "whatwg-fetch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
+ "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
+ },
"when": {
"version": "3.7.8",
"resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
diff --git a/package.json b/package.json
index 1f5d3088b7..cf03994b24 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
"markdownlint": "markdownlint ./docs",
"docbuild": "node node_modules/typedoc/bin/typedoc --tsconfig lib/tsconfig.doc.json && node tools/doc/buildYamlSourceInfo.js docs/docs.json && node ./tools/doc/docProcessor.js",
"license-checker": "license-checker --production --failOn 'GPL' > licenses.txt",
+ "review-checker": "node ./tools/doc/reviewChecker.js",
"01": "echo -------------------------------------------- Build Lib -----------------------------------------------",
"01s": "",
"unit-test": "concurrently \"ng test content-services --watch=false\" \"ng test process-services --watch=false\" \"ng test core --watch=false\" \"ng test extensions --watch=false\" \"ng test insights --watch=false\" \"ng test process-services-cloud --watch=false\" ",
@@ -152,6 +153,7 @@
"ejs": "^2.6.1",
"fs-extra": "^4.0.2",
"graphql": "^14.1.1",
+ "graphql-request": "^1.8.2",
"husky": "^1.2.0",
"jasmine-ajax": "3.2.0",
"jasmine-core": "~2.8.0",
diff --git a/tools/doc/ReviewCheckerGuide.md b/tools/doc/ReviewCheckerGuide.md
index ba890ece76..5daabd4d0a 100644
--- a/tools/doc/ReviewCheckerGuide.md
+++ b/tools/doc/ReviewCheckerGuide.md
@@ -24,4 +24,10 @@ changes in functionality (and therefore don't need documenting).
The script sends comma-separated text to the command line. You can copy/paste
this into a spreadsheet or redirect the output to a text file with a ".csv"
-suffix.
\ No newline at end of file
+suffix.
+
+To use this tool you need before to set graphAuthToken variable with you github access token:
+
+export graphAuthToken=GITHUB_TOKEN
+
+npm run review-checker
diff --git a/tools/doc/docProcessor.js b/tools/doc/docProcessor.js
index 55fcc902bb..1106e59082 100644
--- a/tools/doc/docProcessor.js
+++ b/tools/doc/docProcessor.js
@@ -8,6 +8,7 @@ var jsyaml = require("js-yaml");
var remark = require("remark");
var frontMatter = require("remark-frontmatter");
var mdCompact = require("mdast-util-compact");
+var minimatch = require("Minimatch");
var si = require("./sourceInfoClasses");
@@ -20,13 +21,28 @@ var defaultFolder = path.resolve("docs");
var sourceInfoFolder = path.resolve("docs", "sourceinfo");
+function filterFiles(filePath) {
+ let isAllowed = true;
+
+ this.excludedFileList = aggData['config'].exclude;
+
+ if (this.excludedFileList) {
+ isAllowed = this.excludedFileList.filter((pattern) => {
+ return minimatch(filePath, pattern.toString(), {
+ nocase: true
+ });
+ }).length === 0;
+ }
+
+ return isAllowed;
+}
+
+
function updatePhase(mdCache, aggData) {
- var errorMessages;
toolList.forEach(toolName => {
- errorMessages = [];
console.log(`Tool: ${toolName}`);
- toolModules[toolName].processDocs(mdCache, aggData, errorMessages);
+ toolModules[toolName].processDocs(mdCache, aggData);
});
var filenames = Object.keys(mdCache);
@@ -51,27 +67,20 @@ function updatePhase(mdCache, aggData) {
console.log(`Modified: ${pathname}`);
}
- fs.writeFileSync(filenames[i], remark().use(frontMatter, {type: 'yaml', fence: '---'}).data("settings", {paddedTable: false, gfm: false}).stringify(tree));
+ fs.writeFileSync(filenames[i], remark().use(frontMatter, {
+ type: 'yaml',
+ fence: '---'
+ }).data("settings", {paddedTable: false, gfm: false}).stringify(tree));
}
}
}
-
-function deepCopy(obj) {
- // Despite how it looks, this technique is apparently quite efficient
- // because the JSON routines are implemented in C code and faster
- // than the equivalent JavaScript loops ;-)
- return JSON.parse(JSON.stringify(obj));
-}
-
-
function minimiseTree(tree) {
let minPropsTree = JSON.parse(JSON.stringify(tree, (key, value) => key === "position" ? undefined : value));
mdCompact(minPropsTree);
return minPropsTree;
}
-
function loadToolModules() {
var mods = {};
var toolsFolderPath = path.resolve(__dirname, toolsFolderName);
@@ -103,7 +112,7 @@ function getAllDocFilePaths(docFolder, files) {
var itemPath = path.resolve(docFolder, items[i]);
var itemInfo = fs.statSync(itemPath);
- if (itemInfo.isFile()){
+ if (itemInfo.isFile()) {
files.push(itemPath);
} else if (itemInfo.isDirectory()) {
getAllDocFilePaths(itemPath, files);
@@ -145,16 +154,13 @@ function initClassInfo(aggData) {
});
}
-
-
-
program
-.usage("[options] ")
-.option("-p, --profile [profileName]", "Select named config profile", "default")
-.option("-j, --json", "Output JSON data for Markdown syntax tree")
-.option("-v, --verbose", "Log doc files as they are processed")
-.option("-t, --timing", "Output time taken for run")
-.parse(process.argv);
+ .usage("[options] ")
+ .option("-p, --profile [profileName]", "Select named config profile", "default")
+ .option("-j, --json", "Output JSON data for Markdown syntax tree")
+ .option("-v, --verbose", "Log doc files as they are processed")
+ .option("-t, --timing", "Output time taken for run")
+ .parse(process.argv);
var startTime;
@@ -179,7 +185,7 @@ aggData['config'] = config;
var toolList;
-if (config.profiles[program.profile]){
+if (config.profiles[program.profile]) {
toolList = config.profiles[program.profile];
var toolListText = toolList.join(", ");
console.log(`Using '${program.profile}' profile: ${toolListText}`);
@@ -194,16 +200,15 @@ if (sourceInfo.isDirectory()) {
getAllDocFilePaths(sourcePath, files);
aggData['rootFolder'] = path.dirname(sourcePath);
} else if (sourceInfo.isFile()) {
- files = [ sourcePath ];
+ files = [sourcePath];
}
files = files.filter(filename =>
(filename !== undefined) &&
(path.extname(filename) === ".md") &&
- (filename !== "README.md")
+ (filename !== "README.md") && filterFiles(filename)
);
-
var mdCache = initMdCache(files);
console.log("Loading source data...");
diff --git a/tools/doc/doctool.config.json b/tools/doc/doctool.config.json
index 51e365e500..5a47ac02e0 100644
--- a/tools/doc/doctool.config.json
+++ b/tools/doc/doctool.config.json
@@ -90,7 +90,10 @@
"UserInfo": "https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/UserInfo.md",
"UserProcessInstanceFilterRepresentation": "https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/UserProcessInstanceFilterRepresentation.md",
"UserRepresentation": "https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/UserRepresentation.md",
- "VersionsApi": "https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/versions.api.ts"
+ "VersionsApi": "https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/versions.api.ts",
+ "MenuPositionX": "https://github.com/angular/components/blob/master/src/material/menu/menu-positions.ts",
+ "MenuPositionY": "https://github.com/angular/components/blob/master/src/material/menu/menu-positions.ts",
+ "ThemePalette": "https://github.com/angular/components/blob/master/src/material/core/common-behaviors/color.ts"
},
"linkOverrides": [
"activiti", "auth", "authentication", "comment", "company", "core", "download",
@@ -199,6 +202,12 @@
"app-details-cloud",
"dynamic-tab"
],
+ "exclude": [
+ "**/vulnerability/**",
+ "**/release-notes/**",
+ "**/tutorials/**",
+ "**/user-guide/**"
+ ],
"fileCheckerFilter": [
"README",
"compatibility",
@@ -208,4 +217,4 @@
"user-guide",
"versionIndex"
]
-}
\ No newline at end of file
+}
diff --git a/tools/doc/reviewChecker.js b/tools/doc/reviewChecker.js
index f7e081cb05..7cb5f54dab 100644
--- a/tools/doc/reviewChecker.js
+++ b/tools/doc/reviewChecker.js
@@ -24,6 +24,7 @@ var docsFolderPath = path.resolve('docs');
var libFolders = ['core', 'content-services', 'extensions', 'insights', 'process-services', 'process-services-cloud'];
libsearch(srcData, path.resolve(libFolder));
var authToken = process.env.graphAuthToken;
+
var client = new graphql_request_1.GraphQLClient('https://api.github.com/graphql', {
headers: {
Authorization: 'Bearer ' + authToken
@@ -33,21 +34,25 @@ var query = "query commitHistory($path: String) {\n repository(name: \"alfresco
var docFiles = getDocFilePaths(docsFolderPath);
var docNames = rxjs_1.of(docFiles);
console.log("'Name','Review date','Commits since review','Score'");
-docNames.subscribe(function (x) {
- var key = path.basename(x, '.md');
- if (!srcData[key]) {
- return;
- }
- var vars = {
- 'path': 'lib/' + srcData[key].path
- };
- client.request(query, vars).then(function (data) {
- var nodes = data['repository'].ref.target.history.nodes;
- var lastReviewDate = getDocReviewDate(x); // (key + ".md");
- var numUsefulCommits = extractCommitInfo(nodes, lastReviewDate, stoplist);
- var dateString = lastReviewDate.format('YYYY-MM-DD');
- var score = priorityScore(lastReviewDate, numUsefulCommits).toPrecision(3);
- console.log("'" + key + "','" + dateString + "','" + numUsefulCommits + "','" + score + "'");
+docNames.subscribe(function (docs) {
+ docs.forEach(function (x) {
+ var key = path.basename(x, '.md');
+ if (!srcData[key]) {
+ return;
+ }
+ var vars = {
+ 'path': 'lib/' + srcData[key].path
+ };
+ client.request(query, vars).then(function (data) {
+ var nodes = data['repository'].ref.target.history.nodes;
+ var lastReviewDate = getDocReviewDate(x); // (key + ".md");
+ var numUsefulCommits = extractCommitInfo(nodes, lastReviewDate, stoplist);
+ if (numUsefulCommits > 0) {
+ var dateString = lastReviewDate.format('YYYY-MM-DD');
+ var score = priorityScore(lastReviewDate, numUsefulCommits).toPrecision(3);
+ console.log("'" + key + "','" + dateString + "','" + numUsefulCommits + "','" + score + "'");
+ }
+ });
});
});
function priorityScore(reviewDate, numCommits) {
diff --git a/tools/doc/reviewChecker.ts b/tools/doc/reviewChecker.ts
index 53294f221e..2a28c7d568 100644
--- a/tools/doc/reviewChecker.ts
+++ b/tools/doc/reviewChecker.ts
@@ -29,16 +29,16 @@ const stoplist = new Stoplist(stoplistFilePath);
const docsFolderPath = path.resolve('docs');
-const libFolders = ['core', 'content-services', 'extensions', 'insights', 'process-services', 'process-services-cloud'];
+const libFolders = ['core', 'content-services', 'extensions', 'insights', 'process-services', 'process-services-cloud'];
libsearch(srcData, path.resolve(libFolder));
const authToken = process.env.graphAuthToken;
const client = new GraphQLClient('https://api.github.com/graphql', {
- headers: {
- Authorization: 'Bearer ' + authToken
- }
+ headers: {
+ Authorization: 'Bearer ' + authToken
+ }
});
const query = `query commitHistory($path: String) {
@@ -64,99 +64,104 @@ const docNames = of(docFiles);
console.log("'Name','Review date','Commits since review','Score'");
-docNames.subscribe(x => {
- const key = path.basename(x, '.md');
+docNames.subscribe(docs => {
- if (!srcData[key]) {
- return;
- }
+ docs.forEach(x => {
+ const key = path.basename(x, '.md');
- const vars = {
- 'path': 'lib/' + srcData[key].path
- };
+ if (!srcData[key]) {
+ return;
+ }
- client.request(query, vars).then(data => {
- const nodes = data['repository'].ref.target.history.nodes;
+ const vars = {
+ 'path': 'lib/' + srcData[key].path
+ };
- const lastReviewDate = getDocReviewDate(x); // (key + ".md");
+ client.request(query, vars).then(data => {
+ const nodes = data['repository'].ref.target.history.nodes;
- const numUsefulCommits = extractCommitInfo(nodes, lastReviewDate, stoplist);
- const dateString = lastReviewDate.format('YYYY-MM-DD');
- const score = priorityScore(lastReviewDate, numUsefulCommits).toPrecision(3);
+ const lastReviewDate = getDocReviewDate(x); // (key + ".md");
- console.log(`'${key}','${dateString}','${numUsefulCommits}','${score}'`);
- });
+ const numUsefulCommits = extractCommitInfo(nodes, lastReviewDate, stoplist);
+ if (numUsefulCommits > 0) {
+ const dateString = lastReviewDate.format('YYYY-MM-DD');
+ const score = priorityScore(lastReviewDate, numUsefulCommits).toPrecision(3);
+
+ console.log(`'${key}','${dateString}','${numUsefulCommits}','${score}'`);
+ }
+ });
+ });
});
function priorityScore(reviewDate, numCommits) {
- const daysSinceReview = moment().diff(reviewDate, 'days');
- const commitScore = 2 + numCommits * commitWeight;
- return Math.pow(commitScore, daysSinceReview / scoreTimeBase);
+ const daysSinceReview = moment().diff(reviewDate, 'days');
+ const commitScore = 2 + numCommits * commitWeight;
+ return Math.pow(commitScore, daysSinceReview / scoreTimeBase);
}
function getDocReviewDate(docFileName) {
- const mdFilePath = path.resolve(docsFolderPath, docFileName);
+ const mdFilePath = path.resolve(docsFolderPath, docFileName);
- const mdText = fs.readFileSync(mdFilePath);
- const tree = remark().use(frontMatter, ['yaml']).parse(mdText);
+ const mdText = fs.readFileSync(mdFilePath);
+ const tree = remark().use(frontMatter, ['yaml']).parse(mdText);
- let lastReviewDate = moment(adf20StartDate);
+ let lastReviewDate = moment(adf20StartDate);
- if (tree.children[0].type === 'yaml') {
- const metadata = yaml.load(tree.children[0].value);
+ if (tree.children[0].type === 'yaml') {
+ const metadata = yaml.load(tree.children[0].value);
- if (metadata['Last reviewed']) {
- lastReviewDate = moment(metadata['Last reviewed']);
+ if (metadata['Last reviewed']) {
+ lastReviewDate = moment(metadata['Last reviewed']);
+ }
}
- }
- return lastReviewDate;
+ return lastReviewDate;
}
function extractCommitInfo(commitNodes, cutOffDate, stoplist) {
- let numUsefulCommits = 0;
+ let numUsefulCommits = 0;
- commitNodes.forEach(element => {
- if (!stoplist.isRejected(element.message)) {
- // const abbr = element.message.substr(0, 15);
+ commitNodes.forEach(element => {
+ if (!stoplist.isRejected(element.message)) {
+ // const abbr = element.message.substr(0, 15);
- const commitDate = moment(element.pushedDate);
+ const commitDate = moment(element.pushedDate);
- if (commitDate.isAfter(cutOffDate)) {
- numUsefulCommits++;
- }
- }
- });
+ if (commitDate.isAfter(cutOffDate)) {
+ numUsefulCommits++;
+ }
+ }
+ });
- return numUsefulCommits;
+ return numUsefulCommits;
}
function getDocFilePaths(folderPath) {
- const result = [];
+ const result = [];
- libFolders.forEach(element => {
- const libPath = path.resolve(folderPath, element);
- addItemsRecursively(libPath, result);
- });
-
- return result;
-
- function addItemsRecursively(elementPath: string, resultList: string[]) {
- const items = fs.readdirSync(elementPath);
-
- items.forEach(item => {
- const fullItemPath = path.resolve(elementPath, item);
- const itemInfo = fs.statSync(fullItemPath);
-
- if (itemInfo.isDirectory()) {
- addItemsRecursively(fullItemPath, resultList);
- } else if (
- (path.extname(fullItemPath) === '.md') &&
- (item !== 'README.md') &&
- (item.match(angFilePattern))
- ) {
- resultList.push(fullItemPath);
- }
+ libFolders.forEach(element => {
+ const libPath = path.resolve(folderPath, element);
+ addItemsRecursively(libPath, result);
});
- }
+
+ return result;
+
+ function addItemsRecursively(elementPath: string, resultList: string[]) {
+ const items = fs.readdirSync(elementPath);
+
+ items.forEach(item => {
+ const fullItemPath = path.resolve(elementPath, item);
+ const itemInfo = fs.statSync(fullItemPath);
+
+ if (itemInfo.isDirectory()) {
+ addItemsRecursively(fullItemPath, resultList);
+ } else if (
+ (path.extname(fullItemPath) === '.md') &&
+ (item !== 'README.md') &&
+ (item.match(angFilePattern))
+ ) {
+ resultList.push(fullItemPath);
+ }
+ });
+ }
}
diff --git a/tools/doc/sourceInfoClasses.js b/tools/doc/sourceInfoClasses.js
index c9ea10933c..3d50b81348 100644
--- a/tools/doc/sourceInfoClasses.js
+++ b/tools/doc/sourceInfoClasses.js
@@ -16,7 +16,7 @@ var PropInfo = /** @class */ (function () {
this.defaultValue = tempDefaultVal ? tempDefaultVal.toString() : '';
this.defaultValue = this.defaultValue.replace(/\|/, '\\|');
this.type = sourceData.syntax['return'].type || '';
- this.type = this.type.toString().replace(/\|/, '\\|');
+ this.type = this.type.toString().replace(/\|/, '\\|').replace('unknown', '');
if (sourceData.tags) {
var depTag = sourceData.tags.find(function (tag) { return tag.name === 'deprecated'; });
if (depTag) {
diff --git a/tools/doc/sourceInfoClasses.ts b/tools/doc/sourceInfoClasses.ts
index c2dbb9d43f..189c7c4e47 100644
--- a/tools/doc/sourceInfoClasses.ts
+++ b/tools/doc/sourceInfoClasses.ts
@@ -27,7 +27,7 @@ export class PropInfo {
this.defaultValue = tempDefaultVal ? tempDefaultVal.toString() : '';
this.defaultValue = this.defaultValue.replace(/\|/, '\\|');
this.type = sourceData.syntax['return'].type || '';
- this.type = this.type.toString().replace(/\|/, '\\|');
+ this.type = this.type.toString().replace(/\|/, '\\|').replace('unknown', '');
if (sourceData.tags) {
const depTag = sourceData.tags.find(tag => tag.name === 'deprecated');
diff --git a/tools/doc/tools/fileChecker.js b/tools/doc/tools/fileChecker.js
index 14427f5631..d3b97ba1b3 100644
--- a/tools/doc/tools/fileChecker.js
+++ b/tools/doc/tools/fileChecker.js
@@ -11,7 +11,7 @@ var imageFolderPath = path.resolve('docs', 'docassets', 'images');
// and filenames is enough to trap errors like missing out the 'images'
// folder in the path. Keeping it low avoids crazy suggestions.
var maxImagePathLevDistance = 7;
-function processDocs(mdCache, aggData, errorMessages) {
+function processDocs(mdCache, aggData) {
var pathnames = Object.keys(mdCache);
var classlessDocs = [];
var linkRefs = {};
diff --git a/tools/doc/tools/fileChecker.ts b/tools/doc/tools/fileChecker.ts
index b991fbc90e..b3f6e88fba 100644
--- a/tools/doc/tools/fileChecker.ts
+++ b/tools/doc/tools/fileChecker.ts
@@ -13,7 +13,7 @@ const imageFolderPath = path.resolve('docs', 'docassets', 'images');
// folder in the path. Keeping it low avoids crazy suggestions.
const maxImagePathLevDistance = 7;
-export function processDocs(mdCache, aggData, errorMessages) {
+export function processDocs(mdCache, aggData) {
const pathnames = Object.keys(mdCache);
const classlessDocs = [];
diff --git a/tools/doc/tools/linkFixer.js b/tools/doc/tools/linkFixer.js
index 0aba7f1de0..868e7b9bb4 100644
--- a/tools/doc/tools/linkFixer.js
+++ b/tools/doc/tools/linkFixer.js
@@ -5,7 +5,7 @@ var path = require("path");
var fs = require("fs");
var unist_util_select_1 = require("unist-util-select");
var suffixesNotToCheck = /\.ts/;
-function processDocs(mdCache, aggData, errorMessages) {
+function processDocs(mdCache, aggData) {
var pathnames = Object.keys(mdCache);
var linkSet = new LinkSet(pathnames);
var imageFolderPath = path.resolve(aggData['rootFolder'], 'docs', 'docassets', 'images');
diff --git a/tools/doc/tools/linkFixer.ts b/tools/doc/tools/linkFixer.ts
index 5720d571a7..51ba7df396 100644
--- a/tools/doc/tools/linkFixer.ts
+++ b/tools/doc/tools/linkFixer.ts
@@ -7,7 +7,7 @@ import { MDAST } from 'mdast';
const suffixesNotToCheck = /\.ts/;
-export function processDocs(mdCache, aggData, errorMessages) {
+export function processDocs(mdCache, aggData) {
const pathnames = Object.keys(mdCache);
const linkSet = new LinkSet(pathnames);
diff --git a/tools/doc/tools/tsInfo.js b/tools/doc/tools/tsInfo.js
index ef6d636580..a3bc7e2a6c 100644
--- a/tools/doc/tools/tsInfo.js
+++ b/tools/doc/tools/tsInfo.js
@@ -10,7 +10,7 @@ var mdNav_1 = require("../mdNav");
var ngHelpers_1 = require("../ngHelpers");
var templateFolder = path.resolve('tools', 'doc', 'templates');
var nameExceptions;
-function processDocs(mdCache, aggData, _errorMessages) {
+function processDocs(mdCache, aggData) {
nameExceptions = aggData.config.typeNameExceptions;
var pathnames = Object.keys(mdCache);
var internalErrors;
diff --git a/tools/doc/tools/tsInfo.ts b/tools/doc/tools/tsInfo.ts
index acf1eeb2fe..9a154d303d 100644
--- a/tools/doc/tools/tsInfo.ts
+++ b/tools/doc/tools/tsInfo.ts
@@ -13,7 +13,7 @@ const templateFolder = path.resolve('tools', 'doc', 'templates');
let nameExceptions;
-export function processDocs(mdCache, aggData, _errorMessages) {
+export function processDocs(mdCache, aggData) {
nameExceptions = aggData.config.typeNameExceptions;
const pathnames = Object.keys(mdCache);
@@ -51,6 +51,9 @@ function updateFile(tree, pathname, aggData, errorMessages) {
// Copy docs back from the .md file when the JSDocs are empty.
const inputMD = getPropDocsFromMD(tree, 'Properties', 3);
const outputMD = getPropDocsFromMD(tree, 'Events', 2);
+
+
+
updatePropDocsFromMD(compData, inputMD, outputMD, errorMessages);
if (classType === 'service') {
diff --git a/tools/doc/tools/versionIndex.js b/tools/doc/tools/versionIndex.js
index bc1837be9c..d838a7231b 100644
--- a/tools/doc/tools/versionIndex.js
+++ b/tools/doc/tools/versionIndex.js
@@ -26,7 +26,7 @@ var initialVersion = "v2.0.0";
var templateFolder = path.resolve("tools", "doc", "templates");
-function processDocs(mdCache, aggData, errorMessages) {
+function processDocs(mdCache, aggData) {
initPhase(aggData);
readPhase(mdCache, aggData);
aggPhase(aggData);
diff --git a/tools/doc/tsconfig.json b/tools/doc/tsconfig.json
index 46fa3fc123..6d84eb23c3 100644
--- a/tools/doc/tsconfig.json
+++ b/tools/doc/tsconfig.json
@@ -18,7 +18,7 @@
"tools/sourceLinker.ts",
"tools/tsInfo.ts",
"tools/tutorialIndex.ts",
- "tools/typeLinker.ts"
- // "reviewChecker.ts"
+ "tools/typeLinker.ts",
+ "reviewChecker.ts"
]
}