Compare commits

..
Author SHA1 Message Date
Eugenio Romano 5ce06d80cb remove wrong use of get in translation service 2019-07-11 19:50:03 +01:00
Cilibiu Bogdan ccdcba8778 [ADF-4424] Pdf Viewer - password dialog does not close when pressing Escape (#4622)
* return to previous page on close

* update e2e

* [ADF-4424] Improve PreviousRouteService to use it in pdfViewer

* change previous Url logic

* remove navigation logic

* remove test

* Update pdfViewer.component.spec.ts

* back button logic for viewer outlet

* unit tests

* remove fdescribe

* remove unused service

* e2e

* return to location

* remove click filter step

* remove unnecessary test steps

* remove un existen export

* unify preview between PS and CS in demo shell

* fix dispalyname property
2019-07-11 17:33:15 +01:00
Silviu Popa 72b3a75a85 [ADF-4710] - adapt visibility condition to the new schema (#4884)
* [ADF-4710] - adapt new visibility condition schema

* [ADF-4710] - fix unit tests

* [ADF-4710] - support visibility for APS1 and APS2
2019-07-11 17:07:26 +01:00
Geeta Mandakini Ayyalasomayajula ffd4413335 restore content directive e2e tests (#4915)
* e2e tests for restore content directive

* e2e tests for restore content directive

* e2e tests for restore content directive

* changed the method for restore icon to check for display rather than enabled.

* test enhancements

* removed empty folder test as irrelevant.

* added test for restore of Site or Library

* test enhancements

* test enhancements
2019-07-11 16:33:02 +01:00
Denys Vuika 4185bf8083 [ADF-4737] local fonts and favicon fix (#4921)
* offline fonts

* fix missing favicon
2019-07-11 16:26:38 +01:00
Eugenio Romano 10587dd842 Refactor e2e PS-Cloud and add sleep before query (#4919)
* add sleep before query process service and refactor resources process name

* fix spell problem and increase size build check core
2019-07-11 16:25:26 +01:00
Eugenio Romano 79a95ecd5d use instant pipe translate in demo shell error message 2019-07-11 16:24:18 +01:00
Eugenio Romano 0c2f9aefbd Update package.json 2019-07-11 12:20:37 +01:00
Eugenio Romano 7a70e88ae3 Clean pdf viewer unit (#4916)
* fix unit test pdf viewer

* add more clean unit test core

* add more clean unit test core

* Delete license-info-3.3.0.md
2019-07-10 20:03:05 +01:00
Eugenio Romano 3d336bf9bd Update layout-container.component.scss 2019-07-10 20:01:18 +01:00
Eugenio Romano d3021a1cc8 Update layout-container.component.scss 2019-07-10 19:36:50 +01:00
Maurizio Vitale d1a48a015d Fix typo on docker -f command (#4918) 2019-07-10 18:44:23 +01:00
Maurizio Vitale 05baabb8f5 Add basic readme to run the docker publish with or without login (#4917)
add the tag to the docker image
publish the docker image
clean the docker image
2019-07-10 18:07:22 +01:00
Maurizio Vitale a6e18e6c1b [ADF-4733] Create an adf-cli dispatcher to run the docker-publish (#4914)
* Create an adf-cli dispatcher to run the docker-publish

* not needed

* fix typo comma

* Create the adf-cli dist folder that contains
-bin
-script
-package.json

Build the dist folder during the ADF CI/CI pipeline
2019-07-10 15:06:35 +01:00
Geeta Mandakini Ayyalasomayajula fadcc19eba e2e tests for favourite directive (#4912)
* in progress - favourite directive e2e tests

* in progress - favourite directive e2e tests

* favourite directive e2e tests

* update testcase name

* updated test case names

* remove unnecessary line spaces

* refactored favourites to favorites
2019-07-10 09:56:28 +01:00
Suzana Dirla bbe22fd2a7 [ADF-4732] ellipsis fix (#4913)
allow folder names from breadcrumb to shrink when path is too long to fit the screen
2019-07-10 09:49:13 +01:00
Geeta Mandakini Ayyalasomayajula 65dc1a5c31 Test cases for Edit Folder Directive (#4910)
* added tests for Edit Folder Directive

* added tests for Copy and Move actions on no permission folder.

* moved the checkDisabled function to BrowserActions to make it reusable.

* updated method name
2019-07-09 15:30:37 +01:00
davidcanonieto c151d4535c [ADF-4682] Fix displayed date in date time and date widget (#4911) 2019-07-09 15:29:38 +01:00
dhrn cdc39759ca [ADF-4716] Dynamic Table not working properly (regression) (#4896)
* [ADF-4716] Dynamic Table not working properly (regression)
[ADF-4722] Wrong date is displayed when updating row of dynamic table
* removing dynamic table date added

* * fix e2e
2019-07-09 11:40:27 +01:00
Marouan Bentaleb 080eef891b Changes required to adf-testing (#4904) 2019-07-09 11:38:48 +01:00
Eugenio Romano d9a251a0c8 Clean unit test in login component and site (#4908)
* sanatize login style

* remove unusefull test in site api
2019-07-08 16:54:34 +01:00
mcchrys abc376ff33 [ADF-4711] User Preferences in Task Filter (#4891)
* [ADF-4711] User Preferences in Task Filter
2019-07-08 16:29:47 +01:00
Maurizio Vitale 3af702f58e Read the versions.json from the relative path (#4909) 2019-07-08 16:27:42 +01:00
Silviu Popa bd24105036 [ADF-4720] FormFieldModel fix error when has no variables (#4892)
* [ADF-4720] - prevent FormFieldModel crash

* [ADF-4720] - add unit test
2019-07-08 11:07:08 +01:00
Geeta Mandakini Ayyalasomayajula cae73e3c02 [C310199][C310142]- empty form , required data and invalid form data validations (#4900)
* C310199, C310142, empty form validations, Form validations with required field and invalid data.Added a new form to candidatebaseapp, 'FormToTestValidations'

* using BrowserActions
2019-07-08 11:03:22 +01:00
Geeta Mandakini Ayyalasomayajula 939277366f Dev gmandakini automate actionmenu for rows (#4905)
* removing hte test as iti s duplicated. The same tests exist under e2e/content-services/document-list/document-list-actions.e2e.ts

* C260127 - Move - Destination picker search, test for content highlighted

* C260128 - Move same name file test added

* test name updated

* C260134 - Move Folder with subfolder and file within it, test added

* formatting

* C260135 - Move same name folder - test added

* C260131 - Copy - Destination picker search, search text highlighted in the results in the Copy dialog.

* C260129, C260136 - Tests for Copy same name file and same name folder added

* added tests for Copy and Move actions on no permission folder.

* added tests for Copy and Move actions on no permission folder.
2019-07-08 10:26:03 +01:00
Eugenio Romano cf761ba0b2 Cleaning test IMG viewer component (#4906)
* promote use setupTestbed

* fix sanatize transform img

* fix sanatize transform img
2019-07-08 10:21:48 +01:00
Suzana Dirla a4fc53a742 [ADF-4708] fileSize header is now left aligned with bottom cells (#4902) 2019-07-05 14:52:39 +01:00
siva kumar b88888b5e4 [ADF-4614] User preferences in process filters (#4889)
* * Created UserPreferenceCloudService.

* * Refactored processfiltercloud service.
* Refactored user-preferncecloud service.
* Added unit tests to the services.

* * Updated unit tests
* FIxed Synx problem.

* * Fixed edit-filter error.

* * Fixed failing edit-process-filter unit test.

* * Added comments in processfilter/prefernces services.

* * Fixed memory leak* Added a spinner in the edit-process-filter component

* * Fixed comments.

* * Removed unnecessary filter property
2019-07-05 11:52:36 +01:00
Geeta Mandakini Ayyalasomayajula 10673ef6f6 [C297472] Should be able to see selected tasks (#4899)
* update

* automated => C297472 see selected rows list and task names when multiselect and testing mode toggle are on.

* automated => C297472 see selected rows list and task names when multiselect and testing mode toggle are on.

* Delete package-lock.json

* updates
2019-07-05 11:47:35 +01:00
Marouan Bentaleb 5ed570b36f Changes required to adf-testing (#4901) 2019-07-05 11:46:46 +01:00
Marouan Bentaleb a580b6eb15 Changes required to adf-testing (#4898) 2019-07-04 13:21:51 +01:00
Eugenio Romano 085e1a9dfa clean unit tests core part 2 (#4897)
* promote use setupTestbed

* fix context menu unit test

* fix sidebar warning unit test

* fix spy people widget

* fix ISO warning date time widget

* fix sidebar spy 404 url

* minor karma fix import pdf.js map

* restore md

* revert extension change
2019-07-03 22:42:00 +01:00
Denys Vuika c9b7722bd0 fix css class name typo (#4895)
* fix css class name typo

* fix more typos
2019-07-03 12:08:12 +01:00
Suzana Dirla a13196a836 [ADF-4715][ADF-4717] fix process-filter-results random failing tests (#4888)
* [ADF-4715] a process never has CREATED status

* [ADF-4717] clean up in afterAll

* check mediumDate format

* check mediumDate format

* show more log data

* Revert "show more log data"

This reverts commit a19c629
2019-07-03 09:48:14 +01:00
davidcanonieto e03799e038 [ADF-4721] Fix Material Datetime Picker date format (#4893) 2019-07-02 22:05:11 +01:00
Geeta Mandakini Ayyalasomayajula 4d0c98d753 [ADF-4697] attach content to processcloudtaskform using upload widget (#4882)
* automated upload local and content file from task from upload widget.

* automated upload local and content file from task from upload widget.

* reverting the git ignore change

* updated the app with the new process definition using the form with upload widgets

* Save error screenshot

* creating the processes through api call rather than through ui. and added -log to watch the travis build on process-cloud

* creating the processes through api call rather than through ui. and added -log to watch the travis build on process-cloud

* removed the wait till clickable, as not relevant here.

* Update process-services-cloud-e2e.sh
2019-07-02 22:00:14 +01:00
Eugenio Romano 0d6140be77 clean unit test (#4890)
* promote use setupTestbed

* fix comment using right spy and remove deprecated moment method usage

* restore md icon file

* remove error translation log

* restore extension test
2019-07-02 16:00:58 +01:00
Suzana Dirla 87b80235a7 [ADF-4701] Upgrade angular libs (#4877)
* [ADF-4701] Upgrade angular material to 7.3.7 version

* [ADF-4701] upgrade angular libs

* [ADF-4701] upgrade angular libs

* [ADF-4530] temporary disable test

- will be fixed in a separate PR for https://issues.alfresco.com/jira/browse/ADF-4704
- the 'expected behavior' of the ADF-4530 corresponding bug is that should display 'all the available Process Definitions defined in the app'

* e2e test does not need bpm user

* e2e FIX waitUntilElementIsClickable

* Revert "e2e test does not need bpm user"

This reverts commit 9a5c4d4 - Travis seems to need initial code

* e2e fix button selector

- caused TimeoutError: Element is not Clickable

* e2e scroll into view fix

* e2e fixes scroll into view & selectors

* e2e fixed close action menu

- close menu with all disabled items fix - opened related issue https://issues.alfresco.com/jira/browse/ADF-4712
- checkContextActionIsVisible should check only visibility - all items might be disabled, so un-clickable
- close menu changed bcs. overlay backdrop caused TimeoutError: Element is not Clickable

* e2e disabled button is not supposed to be clickable

- fixed TimeoutError: Element is not Clickable

* e2e update messages

* e2e check invisibilityOf item

* e2e extra filter

* e2e wait waitTillContentLoaded

- created related issue https://issues.alfresco.com/jira/browse/ADF-4715

* [ADF-4715] a process never has CREATED status

* [ADF-4717] wait for filtered content to be loaded

- initiator filter must have 'username' value
2019-07-02 12:07:15 +01:00
Eugenio Romano 028916e386 Fix user info unit test (#4887)
* fix unit test user info component

* fix unit test user info component

* replace download call with spy

* fix karma conf
2019-07-01 11:35:27 +01:00
Silviu Popa 43f08441cd [ADF-4705] - Automate forms checkbox widget (#4881)
* [ADF-4705] - Automate forms checkox widget

* Move methods to a demo-shell page

* Adding 3 new tests
2019-07-01 11:33:34 +01:00
Eugenio Romano 4dccc2a49a fix login unit test to nit emit error in the network (#4885)
* fix login unit test to nit emit error in the network

* fix lint
2019-06-29 10:34:13 +01:00
Geeta Mandakini Ayyalasomayajula 2a2dfbcc42 automated C311280 should pick up default date format from the app configuration (#4883) 2019-06-28 14:44:15 +01:00
cristinaj 5c5bb7f9b7 [ADF-4576]Add new tests for application cloud component (#4873)
* Add a new test

* Revert file

* Fix lint errors

* Add a wait

* fix roles constant uppercase

* fix lint
2019-06-26 19:47:09 +01:00
davidcanonieto 069e4297ea [ADF-4499] Form definition selector should only display standAlone co… (#4880)
* [ADF-4499] Form definition selector should only display standAlone compatible forms

* Improve service method

* fix typo
2019-06-26 13:07:51 +01:00
Eugenio Romano 24714b8a87 codeowners 2019-06-26 10:28:05 +01:00
Eugenio Romano d401018519 codeowners 2019-06-26 10:02:17 +01:00
Denys Vuika f99b943bcb [ADF-4594] e2e configuration to disable animations (#4760)
* e2e environment

* configuration fixes

* update dist configuration

* use e2e configuration on travis
2019-06-26 09:50:50 +01:00
davidcanonieto 5c07d5b3e6 [ADF-4457] StorageService should be independent of AppConfigService (#4712)
* [ADF-4457] StorageService should be independent of AppConfigService

* [ADF-4457] Fix e2e tests

* [ADF-4457] Fix e2e tests

* [ADF-4457] Improve storage service workflow

* Fix linting

* Fix unit tests

* Fix e2e test

* Add missing class to constructor

* Fix e2e test

* Rebase branch

* Improve unit test

* fix test
2019-06-25 16:21:13 +01:00
Eugenio Romano 90c403ae9e [ADF-4707] add properties in node selector search (#4878)
* add properties in node selector search

* fix test
2019-06-25 15:37:24 +01:00
Geeta Mandakini Ayyalasomayajula d531a022d0 [ADF-4026] - automate process filter results check (#4874)
* process-filter-results test automated

* updated the test case numbers

* fix test

* fix test

* added wait for the datatable to load

* fixes

* created another process instance in simpleApp by anotherUser, to test the negative scenario's in filtering.

* created another process instance in simpleApp by anotherUser, to test the negative scenario's in filtering.

* delete both the users created.
2019-06-25 14:44:30 +01:00
Eugenio Romano 72eab9e84d fix script 2019-06-25 13:00:05 +01:00
Marouan Bentaleb 31d98fc368 [ADF-4515] Removing duplicated test and moving other test to the right spec (#4872) 2019-06-24 17:43:33 +01:00
Suzana Dirla 317ae3db68 [ADF-4696] Display name on metadata card (#4870)
* [ADF-4696] Display names on content metadata

* [ADF-4696] unit test
2019-06-24 17:39:06 +01:00
Geeta Mandakini Ayyalasomayajula be234f227f [ADF-4448] Automate Start and Save a task with a form. (#4876)
* automated Start and save a task with a form.

* crc's

* test title updated

* test title updated

* start process with start event form automated

* moved the expect statements to the tests.

* fix circular dependency

* deleting the standalonetask in afterAll

* split the tests for better readability

* split the tests for better readability
2019-06-24 17:36:02 +01:00
Geeta Mandakini Ayyalasomayajula 938286671d test enabled (#4871) 2019-06-20 14:25:46 +01:00
davidcanonieto 685404432a Add typeahead unit test for start process cloud component (#4869) 2019-06-20 14:06:01 +01:00
Marouan Bentaleb 82d6ebd763 [ADF-4593] Fixing skipped tests in Start Task Cloud (#4868) 2019-06-20 12:33:46 +01:00
Eugenio Romano f861b94de4 [Staging-branch] 3.4.0 (#4839)
* next 3.4.0

* next 3.4.0

* [ADF-4426] Move CSS overrides from ACA to ADF - 2nd round (#4837)

* [ADF-4426] align toolbar icon color with design

* [ADF-4426] clean-up style - it is never applied

* [ADF-4426] display title for name location cell - useful for long names

* [ADF-4426] move content-node-selector cell fix from ACA

- fixes https://github.com/Alfresco/alfresco-ng2-components/issues/4686

* [ADF-4426] move content-node-selector cell fix from ACA

- fixes https://github.com/Alfresco/alfresco-ng2-components/issues/4686

* [ADF-4426] move image width fix from ACA

* [ADF-4426] allow more customization of data-table borders

* [ADF-4426] move fix from ACA

[ACA-2363] fixes issue with text being visible underneath the info drawer

* [ADF-4426] get adf-datatable-link style from ACA

* [ADF-4426] allow set of DL selected row icon color

* [ADF-4426] allow more document list customization

- code moved from ACA
- more css variables
- removed non used and duplicated outline styles
- some code clean-up...

* [ADF-4635] The Status drop-down is looking different for Processes than for Tasks (#4822)
2019-06-20 12:32:41 +01:00
Eugenio Romano f063d94316 fix test 2019-06-19 13:16:50 +01:00
Eugenio Romano bb322bb5ed fix form variables 2019-06-19 12:23:31 +01:00
Eugenio Romano c5739ff435 updated translation files 3.3.0 2019-06-19 11:01:50 +01:00
siva kumar 45af7ca88d * Added content-services as peer dependency into process-cloud-services (#4863) 2019-06-19 10:26:56 +01:00
Eugenio Romano 09c62d5046 Release 3.3.0 2019-06-18 21:35:58 +01:00
siva kumar 957a76b1b5 [ADF-4519] Attach an ACS content to a form (#4842)
* * Process-storage

* * Used jsapiServcie

* Be able to upload a file on the content with the createNode api

* Refactor

* [ADF-4519] Attach an ACS content to a form.

* * Created attachfile-cloud-widget component

* * Created a component to attach an acs content to a form.

* * Added unit tests

* * Removed unused methods* FIxed tslint errors.

* * Reverted demo shell changes.

* * Removed unnecessary methods

* * Fixed at able to remove attached file

* * After rebase.

* * Removed tempFile and currentFile properties.* Refactored attach-file-cloud-widget.

* Update upload-cloud.widget.html

* fix

* Fixed readonly form
2019-06-18 18:54:33 +01:00
m-hulbert 3d4ea197ee [ADF-4656] Release note for 3.3.0 (#4861) 2019-06-18 18:53:33 +01:00
Eugenio Romano fac04a9707 add logs 2019-06-18 18:35:20 +01:00
Eugenio Romano f934aa306b restore install 2019-06-18 16:26:34 +01:00
davidcanonieto 25446b5ba3 [ADF-4680] Add documentation for dateValues in app.config.json (#4859)
* [ADF-4680] Add documentation for dateValues in app.config.json

* Improve English

* Create new localization file

* Update localized-date.pipe.md

* Update card-view-datetimeitem.model.ts

* Update localized-date.pipe.md
2019-06-18 15:17:48 +01:00
Francesco Corti e64eee90af [ADF-4656] Release note for ADF 3.3 in draft. (#4857)
* [ADF-4658] Release note for ADF 3.3.

* License info update.

* Version index issue.

* release note
2019-06-18 10:01:52 +01:00
Eugenio Romano d6c3373298 fix names config e2e cloud 2019-06-17 21:17:47 +01:00
Alexa Fabian 725cf22956 'Testing' Moved Upload Actions to shared testing package (#4616)
* 'Testing' Moved Upload Actions to shared testing package

* Updated Upload Actionswith suggested changes

* Failing tests updated

* Resolving merge conflicts

* updating latest merge conflicts

* resolved merge conflicts

* update to fix previous issues with this.

* testing changes

* fix for failed travis test

* updates to fix failing travis test

* fixes file path error

* latest fix for failing travis test

* latest fix for failing travis test

* Fixing undefined rootPath

* fixes timing issues in content-services travis test

* resolves requested changes
2019-06-17 15:07:25 +01:00
davidcanonieto 5f1caca5da [ADF-4677] Make time ago use Angular Date formats (#4856) 2019-06-17 14:16:48 +01:00
Eugenio Romano 73b871a233 fix deploy pr script 2019-06-17 14:15:55 +01:00
Eugenio Romano f8fcb6395d update script correct directory 2019-06-17 11:53:53 +01:00
Eugenio Romano 5589120ed7 [ADF-4657] Upgrade Guide (#4855)
* fix documentation missing params

* fix index

* fix aftere release

* fix aftere review

* upgrade guide from 3.2.0 to 3.3.0

* upgrade guide from 3.2.0 to 3.3.0
2019-06-17 11:46:28 +01:00
Eugenio Romano 64a5a98dc6 [ADF-4658] Compatibility matrix 3.3.0 (#4854)
* fix documentation missing params

* fix index

* fix aftere release

* fix aftere review

* compatibility matric 3.3.0
2019-06-17 10:22:43 +01:00
Maurizio Vitale f84db2216b Add the default validation array (#4852) 2019-06-14 18:07:21 +01:00
davidcanonieto 334ebd1256 [ADF-4338] Add locale to CardViewDateItemModel and improve logic of LocalizedDat… (#4845)
* Add locale to CardViewDateItemModel and improve logic of LocalizedDatePipe

* Fix e2e tests

* Fix e2e tests

* Fix C305010 test
2019-06-14 17:26:08 +01:00
Eugenio Romano e03290d26c Review doc 3.3.0 (#4851)
* fix documentation missing params

* fix index

* fix aftere release

* fix aftere review
2019-06-14 17:06:52 +01:00
arditdomi 33089a452f Change incorrect e2e test id (#4853) 2019-06-14 17:06:05 +01:00
Eugenio Romano f47cebc0a4 [ADF-4665] [ADF] - Application is refreshed when you have two instances of application opened (#4849)
* refactoring getValueFromToken and fix user token refresh

* refactoring getValueFromToken and fix user token refresh

* refactoring getValueFromToken and fix user token refres

* fix unit test
2019-06-14 16:02:12 +01:00
Eugenio Romano 4733bc7d3b add Vulnerability info 2019-06-14 15:57:53 +01:00
Eugenio Romano c0d1f74d57 license info 3.3.0 2019-06-14 15:43:54 +01:00
Eugenio Romano bd568008f8 fix pagination RTL 2019-06-14 14:39:36 +01:00
Eugenio Romano e578e5dc14 minor fix style demo shell process file list 2019-06-14 13:30:05 +01:00
Eugenio Romano b1e7a594b8 fix flaky test 2019-06-14 13:19:26 +01:00
arditdomi 5f8976004e About component, Add missing Content Services URL label (#4850) 2019-06-14 11:43:52 +01:00
Eugenio Romano c34205d863 Update package.json 2019-06-14 10:09:28 +01:00
Cilibiu Bogdan 4603cef19e [ADF-4667] Document list - sorting icon RTL fix (#4848)
* sorting icon RTL fix

* single quotes over double quotes

* overspecify position
2019-06-14 10:04:59 +01:00
Maurizio Vitale 819ed9ae6a Fix start process form (#4847) 2019-06-13 18:21:33 +01:00
davidcanonieto c44c2eae77 Fix Start Process Cloud Layout (#4846) 2019-06-13 16:41:37 +01:00
Maurizio Vitale 88c04ad7b8 Fix issue (#4844) 2019-06-13 13:50:27 +01:00
Eugenio Romano d43274f891 remove unused general dependency 2019-06-13 13:46:18 +01:00
Eugenio Romano 6d2f2030fe fix license script old licenses array 2019-06-13 11:24:40 +01:00
Geeta Mandakini Ayyalasomayajula ab3bb9002f [ADF-4288] -Sort Process Custom filters (#4826)
* Update data-table-component.page.ts

* new pr

* fix error - sortOrder.toLowerCase is not a function

* new pr

* new process definition added

* taking the development branch changes
2019-06-13 11:04:46 +01:00
432 changed files with 23555 additions and 5717 deletions
+39
View File
@@ -0,0 +1,39 @@
# This is a comment.
# Each line is a file pattern followed by one or more owners.
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence,
# these users will be requested for
# review when someone opens a pull request.
* @eromano @popovicsandras @DenysVuika
# Order is important; the last matching pattern takes the most
# precedence. When someone opens a pull request that only
# modifies JS files, only @js-owner and not the global
# owner(s) will be requested for a review.
e2e/* @eromano @cristinaj @gmandakini @marouanbentaleb
# You can also use email addresses if you prefer. They'll be
# used to look up users just like we do for commit author
# emails.
#*.go docs@example.com
docs/* @m-hulbert @eromano
# In this example, @doctocat owns any files in the build/logs
# directory at the root of the repository and any of its
# subdirectories.
#/build/logs/ @doctocat
# The `docs/*` pattern will match files like
# `docs/getting-started.md` but not further nested files like
# `docs/build-app/troubleshooting.md`.
#docs/* docs@example.com
# In this example, @octocat owns any file in an apps directory
# anywhere in your repository.
#apps/ @octocat
# In this example, @doctocat owns any file in the `/docs`
# directory in the root of your repository.
#/docs/ @doctocat
+2 -2
View File
@@ -6,7 +6,7 @@ dist: trusty
sudo: required
node_js:
# Use the explicit NodeJS LTS version 8.9.4 to avoid any automatic upgrade of the version.
- '8.9.4'
- '10.16.0'
install:
echo "no install"
@@ -61,7 +61,7 @@ jobs:
- stage: Update children projects dependency #Update children projects dependency
name: Update Related Project
if: tag =~ .*beta.*
script: ./scripts/update-project.sh
script: ./scripts/travis/update/update-children.sh
- stage: e2e Test
name: core
script: ./scripts/travis/e2e/core-e2e.sh
+1 -1
View File
@@ -14,7 +14,7 @@
<a href='https://github.com/Alfresco/alfresco-ng2-components/blob/master/LICENSE'>
<img src='https://img.shields.io/hexpm/l/plug.svg' alt='license' />
</a>
</p>
</p
## Introduction
+40 -4
View File
@@ -23,7 +23,7 @@
},
"assets": [
"demo-shell/src/assets",
"demo-shell/src/favicon.ico",
"demo-shell/src/favicon-96x96.png",
"demo-shell/src/app.config.json",
"demo-shell/src/versions.json",
{
@@ -78,6 +78,8 @@
}
],
"styles": [
"demo-shell/src/assets/fonts/material-icons/material-icons.css",
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style.scss"
],
@@ -106,6 +108,14 @@
"with": "demo-shell/src/environments/environment.prod.ts"
}
]
},
"e2e": {
"fileReplacements": [
{
"replace": "demo-shell/src/environments/environment.ts",
"with": "demo-shell/src/environments/environment.e2e.ts"
}
]
}
}
},
@@ -113,11 +123,17 @@
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "dist:build",
"port": 3000
"host": "0.0.0.0",
"port": 3000,
"proxyConfig": "demo-shell/proxy.conf.js",
"disableHostCheck": true
},
"configurations": {
"production": {
"browserTarget": "dist:build:production"
},
"e2e": {
"browserTarget": "dist:build:e2e"
}
}
},
@@ -141,12 +157,14 @@
"node_modules/moment/min/moment.min.js"
],
"styles": [
"demo-shell/src/assets/fonts/material-icons/material-icons.css",
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style.scss"
],
"assets": [
"demo-shell/src/assets",
"demo-shell/src/favicon.ico",
"demo-shell/src/favicon-96x96.png",
"demo-shell/src/app.config.json",
"demo-shell/src/versions.json",
{
@@ -324,6 +342,8 @@
}
],
"styles": [
"demo-shell/src/assets/fonts/material-icons/material-icons.css",
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss"
],
@@ -352,6 +372,14 @@
"with": "demo-shell/src/environments/environment.prod.ts"
}
]
},
"e2e": {
"fileReplacements": [
{
"replace": "demo-shell/src/environments/environment.ts",
"with": "demo-shell/src/environments/environment.e2e.ts"
}
]
}
}
},
@@ -359,11 +387,17 @@
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "dev:build",
"port": 3000
"host": "0.0.0.0",
"port": 3000,
"proxyConfig": "demo-shell/proxy.conf.js",
"disableHostCheck": true
},
"configurations": {
"production": {
"browserTarget": "dev:build:production"
},
"e2e": {
"browserTarget": "dev:build:e2e"
}
}
},
@@ -387,6 +421,8 @@
"node_modules/moment/min/moment.min.js"
],
"styles": [
"demo-shell/src/assets/fonts/material-icons/material-icons.css",
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss"
],
+3 -1
View File
@@ -126,7 +126,9 @@
"uncheck",
"subfolders",
"ECMBPM",
"processwithvariables"
"processwithvariables",
"dropdownrestprocess",
"devops"
],
"dictionaries": [
"html",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Alfresco-ADF-Angular-Demo",
"description": "Demo shell for Alfresco Angular components",
"version": "3.2.1",
"version": "3.3.0",
"author": "Alfresco Software, Ltd.",
"repository": {
"type": "git",
+4 -2
View File
@@ -1,6 +1,8 @@
var PROXY_HOST_ADF = process.env.PROXY_HOST_ADF;
module.exports = {
"/alfresco": {
"target": "http://localhost:8080",
"target": (PROXY_HOST_ADF || "http://localhost:8080"),
"secure": false,
"pathRewrite": {
"^/alfresco/alfresco": ""
@@ -15,7 +17,7 @@ module.exports = {
}
},
"/activiti-app": {
"target": "http://localhost:8080",
"target": (PROXY_HOST_ADF || "http://localhost:8080"),
"secure": false,
"pathRewrite": {
"^/activiti-app/activiti-app": ""
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Person/gruppecloud",
"PEOPLE_CLOUD": "Personcloudkomponent",
"GROUPS_CLOUD": "Gruppecloudkomponent",
"CONFIRM-DIALOG": "Bekræftelsesdialogboks"
"CONFIRM-DIALOG": "Bekræftelsesdialogboks",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+9 -9
View File
@@ -64,7 +64,7 @@
"TASK_LIST": "Uppgiftslista",
"PROCESS_LIST": "Processlista",
"PROCESS_CLOUD": "Activiti Cloud",
"CARD_VIEW": "CardView",
"CARD_VIEW": "Kortvy",
"PROCESS_SERVICES": "Process Services",
"LOGIN": "Inloggning",
"CUSTOM_SOURCES": "Anpassade källor",
@@ -75,7 +75,7 @@
"FORM": "Formulär",
"FORM_LIST": "Formulärlista",
"FORM_LOADING": "Formulär läses in",
"UPLOADER": "Uppladdare",
"UPLOADER": "Uppladdad av",
"WEBSCRIPT": "Webbskript",
"TAG": "Tagg",
"TRASHCAN": "Papperskorg",
@@ -95,7 +95,7 @@
"PEOPLE_GROUPS_CLOUD": "Personer/grupp moln",
"PEOPLE_CLOUD": "Personer moln-komponent",
"GROUPS_CLOUD": "Grupper moln-komponent",
"CONFIRM-DIALOG": "Bekräftelsedialog",
"CONFIRM-DIALOG": "Dialogruta för bekräftelse",
"COMMUNITY": "Community"
},
"TRASHCAN": {
@@ -110,7 +110,7 @@
}
},
"DOCUMENT_LIST": {
"MULTISELECT_CHECKBOXES": "Flera val (med kryssrutor)",
"MULTISELECT_CHECKBOXES": "Fleraval (med kryssrutor)",
"THUMBNAILS": "Aktivera miniatyrbilder",
"ALLOW_DROP_FILES": "Aktivera släpp filer i en mapp",
"MULTIPLE_FILE_UPLOAD": "Uppladdning av flera filer",
@@ -178,8 +178,8 @@
"ADD_ROW": "Lägg till rad",
"REPLACE_ROWS": "Ersätt rader",
"REPLACE_COLUMNS": "Ersätt kolumner",
"LOAD_NODE": "Ladda upp nod",
"MULTISELECT": "Flera val",
"LOAD_NODE": "Läs in nod",
"MULTISELECT": "Fleraval",
"MULTISELECT_DESCRIPTION": "Använd Cmd (Mac) eller Ctrl (Windows) för att växla val av flera objekt"
},
"ANALYTICS_REPORT": {
@@ -209,7 +209,7 @@
"FORM_DATA_MESSAGE": "Ange värden för att fylla formuläret",
"TYPEAHEAD_PLACEHOLDER": "Typeahead",
"RADIO_PLACEHOLDER": "Radioknapp",
"SELECT_PLACEHOLDER": "DropDown"
"SELECT_PLACEHOLDER": "Dropdown"
},
"LOGIN": {
"CONTENT_SERVICES": "Content Services",
@@ -225,8 +225,8 @@
"FACET_FIELDS": {
"TYPE": "1:Typ",
"SIZE": "2:Storlek",
"CREATOR": "3:Skapat av",
"MODIFIER": "4:Ändrat av",
"CREATOR": "3:Skapad av",
"MODIFIER": "4:Ändrad av",
"CREATED": "5:Skapad den"
},
"FACET_QUERIES": {
+3 -3
View File
@@ -439,9 +439,9 @@
]
},
"dateValues":{
"defaultDateFormat": "medium",
"defaultDateTimeFormat": "DD/MM/YYYY HH:mm",
"defaultLocale": "en-US"
"defaultDateFormat": "mediumDate",
"defaultDateTimeFormat": "MMM d, y, H:mm",
"defaultLocale": "en"
},
"files": {
"excluded": [
-15
View File
@@ -15,18 +15,3 @@ router-outlet[name='overlay'] + * {
[dir='rtl'] .mat-icon {
transform: scale(-1, 1);
}
@media (max-width: 425px) {
adf-content-node-selector {
.adf-content-node-selector-content-list {
.adf-datatable-cell {
display: none;
}
.adf-datatable-cell:first-child,
.adf-datatable-cell:nth-child(2) {
display: table-cell;
}
}
}
}
+3 -2
View File
@@ -21,7 +21,7 @@ import { FormsModule } from '@angular/forms';
import { FlexLayoutModule } from '@angular/flex-layout';
import { ChartsModule } from 'ng2-charts';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { AppConfigService, TRANSLATION_PROVIDER, DebugAppConfigService, CoreModule, CoreAutomationService } from '@alfresco/adf-core';
import { ExtensionsModule } from '@alfresco/adf-extensions';
@@ -90,6 +90,7 @@ import { CommunityStartTaskCloudDemoComponent } from './components/cloud/communi
import { CommunityProcessDetailsCloudDemoComponent } from './components/cloud/community/community-process-details-cloud.component';
import { CommunityProcessesCloudDemoComponent } from './components/cloud/community/community-processes-cloud.component';
import { CommunityTaskDetailsCloudDemoComponent } from './components/cloud/community/community-task-details-cloud.component';
import { environment } from '../environments/environment';
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
@@ -129,7 +130,7 @@ registerLocaleData(localeSv);
@NgModule({
imports: [
BrowserModule,
BrowserAnimationsModule,
environment.e2e ? NoopAnimationsModule : BrowserAnimationsModule,
ReactiveFormsModule,
routing,
FormsModule,
+1 -1
View File
@@ -93,7 +93,7 @@ export const appRoutes: Routes = [
children: [
{
path: '',
loadChildren: 'app/components/blob-preview/blob-preview.module#BlobPreviewModule'
loadChildren: 'app/components/file-view/file-view.module#FileViewModule'
}
]
},
@@ -1,5 +1,5 @@
<adf-sidenav-layout [sidenavMin]="70" [sidenavMax]="220" [stepOver]="780" [hideSidenav]="hideSidenav"
[expandedSidenav]="expandedSidenav" (expanded)="setState($event)" [position]="position">
[expandedSidenav]="expandedSidenav" (expanded)="setState($event)" [position]="position" data-automation-id="sidenav-layout">
<adf-sidenav-layout-header>
<ng-template let-toggleMenu="toggleMenu">
@@ -1,7 +1,7 @@
<div class="main-content">
<mat-tab-group>
<mat-tab label="Form">
<mat-tab label="Form" class="form-cloud-render">
<div class="adf-form-container">
<adf-cloud-form
[showRefreshButton]="false"
@@ -17,7 +17,7 @@
translate}}</p>
</div>
</mat-tab>
<mat-tab label="Editor">
<mat-tab label="Editor" class="form-cloud-editor">
<ngx-monaco-editor
id="adf-form-config-editor"
class="adf-form-config-editor"
@@ -1,49 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { CoreModule, InfoDrawerModule } from '@alfresco/adf-core';
import { ContentDirectiveModule, ContentMetadataModule, VersionManagerModule } from '@alfresco/adf-content-services';
import { BlobPreviewComponent } from './blob-preview.component';
const routes: Routes = [
{
path: '',
component: BlobPreviewComponent
}
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(routes),
CoreModule.forChild(),
InfoDrawerModule,
ContentDirectiveModule,
ContentMetadataModule,
VersionManagerModule
],
declarations: [
BlobPreviewComponent
],
exports: [
BlobPreviewComponent
]
})
export class BlobPreviewModule {}
@@ -1,5 +0,0 @@
<adf-viewer
[showViewer]="true"
[blobFile]="content"
[displayName]="name">
</adf-viewer>
@@ -72,7 +72,7 @@ export class CardViewComponent implements OnInit {
value: new Date(1983, 11, 24, 10, 0, 30),
key: 'date',
default: new Date(1983, 11, 24, 10, 0, 30),
format: 'DD.MM.YYYY',
format: 'shortDate',
editable: this.isEditable
}),
new CardViewDatetimeItemModel({
@@ -80,7 +80,7 @@ export class CardViewComponent implements OnInit {
value: new Date(1983, 11, 24, 10, 0, 0),
key: 'datetime',
default: new Date(1983, 11, 24, 10, 0, 0),
format: 'DD.MM.YYYY',
format: 'short',
editable: this.isEditable
}),
new CardViewBoolItemModel({
@@ -62,13 +62,13 @@ export class CloudFiltersDemoComponent implements OnInit {
}
onTaskFilterSelected(filter) {
this.cloudLayoutService.setCurrentTaskFilterParam({id: filter.id});
this.cloudLayoutService.setCurrentTaskFilterParam({id: filter && filter.id ? filter.id : ''});
const currentFilter = Object.assign({}, filter);
this.router.navigate([`/cloud/${this.appName}/tasks/`], { queryParams: currentFilter });
}
onProcessFilterSelected(filter) {
this.cloudLayoutService.setCurrentProcessFilterParam({id: filter.id});
this.cloudLayoutService.setCurrentProcessFilterParam({id: filter && filter.id ? filter.id : ''});
const currentFilter = Object.assign({}, filter);
this.router.navigate([`/cloud/${this.appName}/processes/`], { queryParams: currentFilter });
}
@@ -5,7 +5,7 @@
display: flex;
}
&-task-tiitle {
&-task-title {
margin-left:15px;
}
@@ -5,7 +5,7 @@
display: flex;
}
&-task-tiitle {
&-task-title {
margin-left:15px;
}
@@ -1,4 +1,4 @@
<ng-container *ngIf="nodeId">
<ng-container *ngIf="nodeId || content">
<ng-template let-node="node" #sidebarRightTemplate>
<adf-info-drawer [title]="'APP.INFO_DRAWER.TITLE' | translate">
@@ -284,14 +284,16 @@
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showrightsidebar" (click)="toggleShowRightSidebar()" color="primary">
Toggle Right Sidebar
<button mat-raised-button id="adf-switch-showrightsidebar" (click)="toggleShowRightSidebar()"
color="primary">
Toggle Right Sidebar
</button>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showleftsidebar" (click)="hideLeftSidebar()" color="primary">
Hide Left Sidebar
<button mat-raised-button id="adf-switch-showleftsidebar" (click)="hideLeftSidebar()"
color="primary">
Hide Left Sidebar
</button>
</p>
@@ -314,6 +316,7 @@
</ng-template>
<adf-viewer
[blobFile]="content"
[nodeId]="nodeId"
[showRightSidebar]="showRightSidebar"
[showLeftSidebar]="showLeftSidebar"
@@ -325,6 +328,7 @@
[allowRightSidebar]="allowRightSidebar"
[allowLeftSidebar]="allowLeftSidebar"
[urlFile]="urlFile"
(showViewerChange)="onViewerVisibilityChanged($event)"
[sidebarLeftTemplate]="sidebarLeftTemplate"
[sidebarRightTemplate]="sidebarRightTemplate">
@@ -16,9 +16,10 @@
*/
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ActivatedRoute, Router, PRIMARY_OUTLET } from '@angular/router';
import { ContentService, AllowableOperationsEnum, PermissionsEnum, NodesApiService } from '@alfresco/adf-core';
import { MatSnackBar } from '@angular/material';
import { PreviewService } from '../../services/preview.service';
@Component({
selector: 'app-file-view',
@@ -57,12 +58,15 @@ export class FileViewComponent implements OnInit {
showTabWithIconAndLabel = false;
desiredAspect: string = null;
showAspect: string = null;
content: Blob;
name: string;
constructor(private router: Router,
private route: ActivatedRoute,
private snackBar: MatSnackBar,
private nodeApiService: NodesApiService,
private contentServices: ContentService) {
private contentServices: ContentService,
private preview: PreviewService) {
}
ngOnInit() {
@@ -81,10 +85,18 @@ export class FileViewComponent implements OnInit {
},
() => this.router.navigate(['/files', id])
);
} else if (this.preview.content) {
this.content = this.preview.content;
this.displayName = this.preview.name;
}
});
}
onViewerVisibilityChanged() {
const primaryUrl = this.router.parseUrl(this.router.url).root.children[PRIMARY_OUTLET].toString();
this.router.navigateByUrl(primaryUrl);
}
onUploadError(errorMessage: string) {
this.snackBar.open(errorMessage, '', { duration: 4000 });
}
@@ -94,7 +94,9 @@
(click)="createLibrary()">
<mat-icon>library_add</mat-icon>
</button>
<button mat-icon-button
<button
data-automation-id="edit-folder"
mat-icon-button
[disabled]="!canEditFolder(documentList.selection)"
title="{{ 'DOCUMENT_LIST.TOOLBAR.EDIT_FOLDER' | translate }}"
(error)="openSnackMessage($event)"
@@ -119,7 +121,9 @@
matTooltip="{{ 'DOCUMENT_LIST.TOOLBAR.DELETE' | translate }}">
<mat-icon>delete</mat-icon>
</button>
<button mat-icon-button
<button
data-automation-id="favorite"
mat-icon-button
[disabled]="!documentList.selection.length"
#favorite="adfFavorite"
[adf-node-favorite]="documentList.selection"
@@ -383,21 +383,21 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
switch (errorStatusCode) {
case 403:
translatedErrorMessage = this.translateService.get('OPERATION.ERROR.PERMISSION');
translatedErrorMessage = this.translateService.instant('OPERATION.ERROR.PERMISSION');
break;
case 409:
translatedErrorMessage = this.translateService.get('OPERATION.ERROR.CONFLICT');
translatedErrorMessage = this.translateService.instant('OPERATION.ERROR.CONFLICT');
break;
default:
translatedErrorMessage = this.translateService.get('OPERATION.ERROR.UNKNOWN');
translatedErrorMessage = this.translateService.instant('OPERATION.ERROR.UNKNOWN');
}
this.openSnackMessage(translatedErrorMessage.value);
this.openSnackMessage(translatedErrorMessage);
}
onContentActionSuccess(message) {
const translatedMessage: any = this.translateService.get(message);
this.openSnackMessage(translatedMessage.value);
const translatedMessage: any = this.translateService.instant(message);
this.openSnackMessage(translatedMessage);
this.documentList.reload();
}
@@ -424,8 +424,8 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
width: '630px'
});
} else {
const translatedErrorMessage: any = this.translateService.get('OPERATION.ERROR.PERMISSION');
this.openSnackMessage(translatedErrorMessage.value);
const translatedErrorMessage: any = this.translateService.instant('OPERATION.ERROR.PERMISSION');
this.openSnackMessage(translatedErrorMessage);
}
}
@@ -442,8 +442,8 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
width: '630px'
});
} else {
const translatedErrorMessage: any = this.translateService.get('OPERATION.ERROR.PERMISSION');
this.openSnackMessage(translatedErrorMessage.value);
const translatedErrorMessage: any = this.translateService.instant('OPERATION.ERROR.PERMISSION');
this.openSnackMessage(translatedErrorMessage);
}
}
@@ -1,5 +1,5 @@
<div id="attachment-process-list" *ngIf="processInstanceId">
<div class="adf-no-form-container">
<div>
<adf-upload-drag-area
[rootFolderId]="processInstanceId"
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
The recommended way to use the Material Icons font is by linking to the web font hosted on Google Fonts:
```html
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
```
Read more in our full usage guide:
http://google.github.io/material-design-icons/#icon-font-for-the-web
+932
View File
@@ -0,0 +1,932 @@
3d_rotation e84d
ac_unit eb3b
access_alarm e190
access_alarms e191
access_time e192
accessibility e84e
accessible e914
account_balance e84f
account_balance_wallet e850
account_box e851
account_circle e853
adb e60e
add e145
add_a_photo e439
add_alarm e193
add_alert e003
add_box e146
add_circle e147
add_circle_outline e148
add_location e567
add_shopping_cart e854
add_to_photos e39d
add_to_queue e05c
adjust e39e
airline_seat_flat e630
airline_seat_flat_angled e631
airline_seat_individual_suite e632
airline_seat_legroom_extra e633
airline_seat_legroom_normal e634
airline_seat_legroom_reduced e635
airline_seat_recline_extra e636
airline_seat_recline_normal e637
airplanemode_active e195
airplanemode_inactive e194
airplay e055
airport_shuttle eb3c
alarm e855
alarm_add e856
alarm_off e857
alarm_on e858
album e019
all_inclusive eb3d
all_out e90b
android e859
announcement e85a
apps e5c3
archive e149
arrow_back e5c4
arrow_downward e5db
arrow_drop_down e5c5
arrow_drop_down_circle e5c6
arrow_drop_up e5c7
arrow_forward e5c8
arrow_upward e5d8
art_track e060
aspect_ratio e85b
assessment e85c
assignment e85d
assignment_ind e85e
assignment_late e85f
assignment_return e860
assignment_returned e861
assignment_turned_in e862
assistant e39f
assistant_photo e3a0
attach_file e226
attach_money e227
attachment e2bc
audiotrack e3a1
autorenew e863
av_timer e01b
backspace e14a
backup e864
battery_alert e19c
battery_charging_full e1a3
battery_full e1a4
battery_std e1a5
battery_unknown e1a6
beach_access eb3e
beenhere e52d
block e14b
bluetooth e1a7
bluetooth_audio e60f
bluetooth_connected e1a8
bluetooth_disabled e1a9
bluetooth_searching e1aa
blur_circular e3a2
blur_linear e3a3
blur_off e3a4
blur_on e3a5
book e865
bookmark e866
bookmark_border e867
border_all e228
border_bottom e229
border_clear e22a
border_color e22b
border_horizontal e22c
border_inner e22d
border_left e22e
border_outer e22f
border_right e230
border_style e231
border_top e232
border_vertical e233
branding_watermark e06b
brightness_1 e3a6
brightness_2 e3a7
brightness_3 e3a8
brightness_4 e3a9
brightness_5 e3aa
brightness_6 e3ab
brightness_7 e3ac
brightness_auto e1ab
brightness_high e1ac
brightness_low e1ad
brightness_medium e1ae
broken_image e3ad
brush e3ae
bubble_chart e6dd
bug_report e868
build e869
burst_mode e43c
business e0af
business_center eb3f
cached e86a
cake e7e9
call e0b0
call_end e0b1
call_made e0b2
call_merge e0b3
call_missed e0b4
call_missed_outgoing e0e4
call_received e0b5
call_split e0b6
call_to_action e06c
camera e3af
camera_alt e3b0
camera_enhance e8fc
camera_front e3b1
camera_rear e3b2
camera_roll e3b3
cancel e5c9
card_giftcard e8f6
card_membership e8f7
card_travel e8f8
casino eb40
cast e307
cast_connected e308
center_focus_strong e3b4
center_focus_weak e3b5
change_history e86b
chat e0b7
chat_bubble e0ca
chat_bubble_outline e0cb
check e5ca
check_box e834
check_box_outline_blank e835
check_circle e86c
chevron_left e5cb
chevron_right e5cc
child_care eb41
child_friendly eb42
chrome_reader_mode e86d
class e86e
clear e14c
clear_all e0b8
close e5cd
closed_caption e01c
cloud e2bd
cloud_circle e2be
cloud_done e2bf
cloud_download e2c0
cloud_off e2c1
cloud_queue e2c2
cloud_upload e2c3
code e86f
collections e3b6
collections_bookmark e431
color_lens e3b7
colorize e3b8
comment e0b9
compare e3b9
compare_arrows e915
computer e30a
confirmation_number e638
contact_mail e0d0
contact_phone e0cf
contacts e0ba
content_copy e14d
content_cut e14e
content_paste e14f
control_point e3ba
control_point_duplicate e3bb
copyright e90c
create e150
create_new_folder e2cc
credit_card e870
crop e3be
crop_16_9 e3bc
crop_3_2 e3bd
crop_5_4 e3bf
crop_7_5 e3c0
crop_din e3c1
crop_free e3c2
crop_landscape e3c3
crop_original e3c4
crop_portrait e3c5
crop_rotate e437
crop_square e3c6
dashboard e871
data_usage e1af
date_range e916
dehaze e3c7
delete e872
delete_forever e92b
delete_sweep e16c
description e873
desktop_mac e30b
desktop_windows e30c
details e3c8
developer_board e30d
developer_mode e1b0
device_hub e335
devices e1b1
devices_other e337
dialer_sip e0bb
dialpad e0bc
directions e52e
directions_bike e52f
directions_boat e532
directions_bus e530
directions_car e531
directions_railway e534
directions_run e566
directions_subway e533
directions_transit e535
directions_walk e536
disc_full e610
dns e875
do_not_disturb e612
do_not_disturb_alt e611
do_not_disturb_off e643
do_not_disturb_on e644
dock e30e
domain e7ee
done e876
done_all e877
donut_large e917
donut_small e918
drafts e151
drag_handle e25d
drive_eta e613
dvr e1b2
edit e3c9
edit_location e568
eject e8fb
email e0be
enhanced_encryption e63f
equalizer e01d
error e000
error_outline e001
euro_symbol e926
ev_station e56d
event e878
event_available e614
event_busy e615
event_note e616
event_seat e903
exit_to_app e879
expand_less e5ce
expand_more e5cf
explicit e01e
explore e87a
exposure e3ca
exposure_neg_1 e3cb
exposure_neg_2 e3cc
exposure_plus_1 e3cd
exposure_plus_2 e3ce
exposure_zero e3cf
extension e87b
face e87c
fast_forward e01f
fast_rewind e020
favorite e87d
favorite_border e87e
featured_play_list e06d
featured_video e06e
feedback e87f
fiber_dvr e05d
fiber_manual_record e061
fiber_new e05e
fiber_pin e06a
fiber_smart_record e062
file_download e2c4
file_upload e2c6
filter e3d3
filter_1 e3d0
filter_2 e3d1
filter_3 e3d2
filter_4 e3d4
filter_5 e3d5
filter_6 e3d6
filter_7 e3d7
filter_8 e3d8
filter_9 e3d9
filter_9_plus e3da
filter_b_and_w e3db
filter_center_focus e3dc
filter_drama e3dd
filter_frames e3de
filter_hdr e3df
filter_list e152
filter_none e3e0
filter_tilt_shift e3e2
filter_vintage e3e3
find_in_page e880
find_replace e881
fingerprint e90d
first_page e5dc
fitness_center eb43
flag e153
flare e3e4
flash_auto e3e5
flash_off e3e6
flash_on e3e7
flight e539
flight_land e904
flight_takeoff e905
flip e3e8
flip_to_back e882
flip_to_front e883
folder e2c7
folder_open e2c8
folder_shared e2c9
folder_special e617
font_download e167
format_align_center e234
format_align_justify e235
format_align_left e236
format_align_right e237
format_bold e238
format_clear e239
format_color_fill e23a
format_color_reset e23b
format_color_text e23c
format_indent_decrease e23d
format_indent_increase e23e
format_italic e23f
format_line_spacing e240
format_list_bulleted e241
format_list_numbered e242
format_paint e243
format_quote e244
format_shapes e25e
format_size e245
format_strikethrough e246
format_textdirection_l_to_r e247
format_textdirection_r_to_l e248
format_underlined e249
forum e0bf
forward e154
forward_10 e056
forward_30 e057
forward_5 e058
free_breakfast eb44
fullscreen e5d0
fullscreen_exit e5d1
functions e24a
g_translate e927
gamepad e30f
games e021
gavel e90e
gesture e155
get_app e884
gif e908
golf_course eb45
gps_fixed e1b3
gps_not_fixed e1b4
gps_off e1b5
grade e885
gradient e3e9
grain e3ea
graphic_eq e1b8
grid_off e3eb
grid_on e3ec
group e7ef
group_add e7f0
group_work e886
hd e052
hdr_off e3ed
hdr_on e3ee
hdr_strong e3f1
hdr_weak e3f2
headset e310
headset_mic e311
healing e3f3
hearing e023
help e887
help_outline e8fd
high_quality e024
highlight e25f
highlight_off e888
history e889
home e88a
hot_tub eb46
hotel e53a
hourglass_empty e88b
hourglass_full e88c
http e902
https e88d
image e3f4
image_aspect_ratio e3f5
import_contacts e0e0
import_export e0c3
important_devices e912
inbox e156
indeterminate_check_box e909
info e88e
info_outline e88f
input e890
insert_chart e24b
insert_comment e24c
insert_drive_file e24d
insert_emoticon e24e
insert_invitation e24f
insert_link e250
insert_photo e251
invert_colors e891
invert_colors_off e0c4
iso e3f6
keyboard e312
keyboard_arrow_down e313
keyboard_arrow_left e314
keyboard_arrow_right e315
keyboard_arrow_up e316
keyboard_backspace e317
keyboard_capslock e318
keyboard_hide e31a
keyboard_return e31b
keyboard_tab e31c
keyboard_voice e31d
kitchen eb47
label e892
label_outline e893
landscape e3f7
language e894
laptop e31e
laptop_chromebook e31f
laptop_mac e320
laptop_windows e321
last_page e5dd
launch e895
layers e53b
layers_clear e53c
leak_add e3f8
leak_remove e3f9
lens e3fa
library_add e02e
library_books e02f
library_music e030
lightbulb_outline e90f
line_style e919
line_weight e91a
linear_scale e260
link e157
linked_camera e438
list e896
live_help e0c6
live_tv e639
local_activity e53f
local_airport e53d
local_atm e53e
local_bar e540
local_cafe e541
local_car_wash e542
local_convenience_store e543
local_dining e556
local_drink e544
local_florist e545
local_gas_station e546
local_grocery_store e547
local_hospital e548
local_hotel e549
local_laundry_service e54a
local_library e54b
local_mall e54c
local_movies e54d
local_offer e54e
local_parking e54f
local_pharmacy e550
local_phone e551
local_pizza e552
local_play e553
local_post_office e554
local_printshop e555
local_see e557
local_shipping e558
local_taxi e559
location_city e7f1
location_disabled e1b6
location_off e0c7
location_on e0c8
location_searching e1b7
lock e897
lock_open e898
lock_outline e899
looks e3fc
looks_3 e3fb
looks_4 e3fd
looks_5 e3fe
looks_6 e3ff
looks_one e400
looks_two e401
loop e028
loupe e402
low_priority e16d
loyalty e89a
mail e158
mail_outline e0e1
map e55b
markunread e159
markunread_mailbox e89b
memory e322
menu e5d2
merge_type e252
message e0c9
mic e029
mic_none e02a
mic_off e02b
mms e618
mode_comment e253
mode_edit e254
monetization_on e263
money_off e25c
monochrome_photos e403
mood e7f2
mood_bad e7f3
more e619
more_horiz e5d3
more_vert e5d4
motorcycle e91b
mouse e323
move_to_inbox e168
movie e02c
movie_creation e404
movie_filter e43a
multiline_chart e6df
music_note e405
music_video e063
my_location e55c
nature e406
nature_people e407
navigate_before e408
navigate_next e409
navigation e55d
near_me e569
network_cell e1b9
network_check e640
network_locked e61a
network_wifi e1ba
new_releases e031
next_week e16a
nfc e1bb
no_encryption e641
no_sim e0cc
not_interested e033
note e06f
note_add e89c
notifications e7f4
notifications_active e7f7
notifications_none e7f5
notifications_off e7f6
notifications_paused e7f8
offline_pin e90a
ondemand_video e63a
opacity e91c
open_in_browser e89d
open_in_new e89e
open_with e89f
pages e7f9
pageview e8a0
palette e40a
pan_tool e925
panorama e40b
panorama_fish_eye e40c
panorama_horizontal e40d
panorama_vertical e40e
panorama_wide_angle e40f
party_mode e7fa
pause e034
pause_circle_filled e035
pause_circle_outline e036
payment e8a1
people e7fb
people_outline e7fc
perm_camera_mic e8a2
perm_contact_calendar e8a3
perm_data_setting e8a4
perm_device_information e8a5
perm_identity e8a6
perm_media e8a7
perm_phone_msg e8a8
perm_scan_wifi e8a9
person e7fd
person_add e7fe
person_outline e7ff
person_pin e55a
person_pin_circle e56a
personal_video e63b
pets e91d
phone e0cd
phone_android e324
phone_bluetooth_speaker e61b
phone_forwarded e61c
phone_in_talk e61d
phone_iphone e325
phone_locked e61e
phone_missed e61f
phone_paused e620
phonelink e326
phonelink_erase e0db
phonelink_lock e0dc
phonelink_off e327
phonelink_ring e0dd
phonelink_setup e0de
photo e410
photo_album e411
photo_camera e412
photo_filter e43b
photo_library e413
photo_size_select_actual e432
photo_size_select_large e433
photo_size_select_small e434
picture_as_pdf e415
picture_in_picture e8aa
picture_in_picture_alt e911
pie_chart e6c4
pie_chart_outlined e6c5
pin_drop e55e
place e55f
play_arrow e037
play_circle_filled e038
play_circle_outline e039
play_for_work e906
playlist_add e03b
playlist_add_check e065
playlist_play e05f
plus_one e800
poll e801
polymer e8ab
pool eb48
portable_wifi_off e0ce
portrait e416
power e63c
power_input e336
power_settings_new e8ac
pregnant_woman e91e
present_to_all e0df
print e8ad
priority_high e645
public e80b
publish e255
query_builder e8ae
question_answer e8af
queue e03c
queue_music e03d
queue_play_next e066
radio e03e
radio_button_checked e837
radio_button_unchecked e836
rate_review e560
receipt e8b0
recent_actors e03f
record_voice_over e91f
redeem e8b1
redo e15a
refresh e5d5
remove e15b
remove_circle e15c
remove_circle_outline e15d
remove_from_queue e067
remove_red_eye e417
remove_shopping_cart e928
reorder e8fe
repeat e040
repeat_one e041
replay e042
replay_10 e059
replay_30 e05a
replay_5 e05b
reply e15e
reply_all e15f
report e160
report_problem e8b2
restaurant e56c
restaurant_menu e561
restore e8b3
restore_page e929
ring_volume e0d1
room e8b4
room_service eb49
rotate_90_degrees_ccw e418
rotate_left e419
rotate_right e41a
rounded_corner e920
router e328
rowing e921
rss_feed e0e5
rv_hookup e642
satellite e562
save e161
scanner e329
schedule e8b5
school e80c
screen_lock_landscape e1be
screen_lock_portrait e1bf
screen_lock_rotation e1c0
screen_rotation e1c1
screen_share e0e2
sd_card e623
sd_storage e1c2
search e8b6
security e32a
select_all e162
send e163
sentiment_dissatisfied e811
sentiment_neutral e812
sentiment_satisfied e813
sentiment_very_dissatisfied e814
sentiment_very_satisfied e815
settings e8b8
settings_applications e8b9
settings_backup_restore e8ba
settings_bluetooth e8bb
settings_brightness e8bd
settings_cell e8bc
settings_ethernet e8be
settings_input_antenna e8bf
settings_input_component e8c0
settings_input_composite e8c1
settings_input_hdmi e8c2
settings_input_svideo e8c3
settings_overscan e8c4
settings_phone e8c5
settings_power e8c6
settings_remote e8c7
settings_system_daydream e1c3
settings_voice e8c8
share e80d
shop e8c9
shop_two e8ca
shopping_basket e8cb
shopping_cart e8cc
short_text e261
show_chart e6e1
shuffle e043
signal_cellular_4_bar e1c8
signal_cellular_connected_no_internet_4_bar e1cd
signal_cellular_no_sim e1ce
signal_cellular_null e1cf
signal_cellular_off e1d0
signal_wifi_4_bar e1d8
signal_wifi_4_bar_lock e1d9
signal_wifi_off e1da
sim_card e32b
sim_card_alert e624
skip_next e044
skip_previous e045
slideshow e41b
slow_motion_video e068
smartphone e32c
smoke_free eb4a
smoking_rooms eb4b
sms e625
sms_failed e626
snooze e046
sort e164
sort_by_alpha e053
spa eb4c
space_bar e256
speaker e32d
speaker_group e32e
speaker_notes e8cd
speaker_notes_off e92a
speaker_phone e0d2
spellcheck e8ce
star e838
star_border e83a
star_half e839
stars e8d0
stay_current_landscape e0d3
stay_current_portrait e0d4
stay_primary_landscape e0d5
stay_primary_portrait e0d6
stop e047
stop_screen_share e0e3
storage e1db
store e8d1
store_mall_directory e563
straighten e41c
streetview e56e
strikethrough_s e257
style e41d
subdirectory_arrow_left e5d9
subdirectory_arrow_right e5da
subject e8d2
subscriptions e064
subtitles e048
subway e56f
supervisor_account e8d3
surround_sound e049
swap_calls e0d7
swap_horiz e8d4
swap_vert e8d5
swap_vertical_circle e8d6
switch_camera e41e
switch_video e41f
sync e627
sync_disabled e628
sync_problem e629
system_update e62a
system_update_alt e8d7
tab e8d8
tab_unselected e8d9
tablet e32f
tablet_android e330
tablet_mac e331
tag_faces e420
tap_and_play e62b
terrain e564
text_fields e262
text_format e165
textsms e0d8
texture e421
theaters e8da
thumb_down e8db
thumb_up e8dc
thumbs_up_down e8dd
time_to_leave e62c
timelapse e422
timeline e922
timer e425
timer_10 e423
timer_3 e424
timer_off e426
title e264
toc e8de
today e8df
toll e8e0
tonality e427
touch_app e913
toys e332
track_changes e8e1
traffic e565
train e570
tram e571
transfer_within_a_station e572
transform e428
translate e8e2
trending_down e8e3
trending_flat e8e4
trending_up e8e5
tune e429
turned_in e8e6
turned_in_not e8e7
tv e333
unarchive e169
undo e166
unfold_less e5d6
unfold_more e5d7
update e923
usb e1e0
verified_user e8e8
vertical_align_bottom e258
vertical_align_center e259
vertical_align_top e25a
vibration e62d
video_call e070
video_label e071
video_library e04a
videocam e04b
videocam_off e04c
videogame_asset e338
view_agenda e8e9
view_array e8ea
view_carousel e8eb
view_column e8ec
view_comfy e42a
view_compact e42b
view_day e8ed
view_headline e8ee
view_list e8ef
view_module e8f0
view_quilt e8f1
view_stream e8f2
view_week e8f3
vignette e435
visibility e8f4
visibility_off e8f5
voice_chat e62e
voicemail e0d9
volume_down e04d
volume_mute e04e
volume_off e04f
volume_up e050
vpn_key e0da
vpn_lock e62f
wallpaper e1bc
warning e002
watch e334
watch_later e924
wb_auto e42c
wb_cloudy e42d
wb_incandescent e42e
wb_iridescent e436
wb_sunny e430
wc e63d
web e051
web_asset e069
weekend e16b
whatshot e80e
widgets e1bd
wifi e63e
wifi_lock e1e1
wifi_tethering e1e2
work e8f9
wrap_text e25b
youtube_searched_for e8fa
zoom_in e8ff
zoom_out e900
zoom_out_map e56b
@@ -0,0 +1,36 @@
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: url(MaterialIcons-Regular.eot); /* For IE6-8 */
src: local('Material Icons'),
local('MaterialIcons-Regular'),
url(MaterialIcons-Regular.woff2) format('woff2'),
url(MaterialIcons-Regular.woff) format('woff'),
url(MaterialIcons-Regular.ttf) format('truetype');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+93
View File
@@ -0,0 +1,93 @@
Copyright (c) 2016 The Muli Project Authors (contact@sansoxygen.com)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+63
View File
@@ -0,0 +1,63 @@
/* vietnamese */
@font-face {
font-family: 'Muli';
font-style: normal;
font-weight: 400;
src: local('Muli Regular'),
local('Muli-Regular'),
url(Muli-Regular.ttf) format('truetype');
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Muli';
font-style: normal;
font-weight: 400;
src: local('Muli Regular'),
local('Muli-Regular'),
url(Muli-Regular.ttf) format('truetype');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Muli';
font-style: normal;
font-weight: 400;
src: local('Muli Regular'),
local('Muli-Regular'),
url(Muli-Regular.ttf) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
}
/* vietnamese */
@font-face {
font-family: 'Muli';
font-style: normal;
font-weight: 100;
src: local('Muli Light'),
local('Muli-Light'),
url(Muli-Light.ttf) format('truetype');
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Muli';
font-style: normal;
font-weight: 100;
src: local('Muli Light'),
local('Muli-Light'),
url(Muli-Light.ttf) format('truetype');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Muli';
font-style: normal;
font-weight: 100;
src: local('Muli Light'),
local('Muli-Light'),
url(Muli-Light.ttf) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
}
@@ -15,18 +15,7 @@
* limitations under the License.
*/
import { ContextMenuService } from './context-menu.service';
describe('ContextMenuService', () => {
let service;
beforeEach(() => {
service = new ContextMenuService();
});
it('should setup default show subject', () => {
expect(service.show).toBeDefined();
});
});
export const environment = {
production: false,
e2e: true
};
@@ -16,5 +16,6 @@
*/
export const environment = {
production: true
production: true,
e2e: false
};
+2 -1
View File
@@ -21,5 +21,6 @@
// The list of which env maps to which file can be found in `.angular-cli.json`.
export const environment = {
production: false
production: false,
e2e: false
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

-2
View File
@@ -7,8 +7,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="favicon-96x96.png" sizes="96x96">
<link href="https://fonts.googleapis.com/css?family=Muli" rel="stylesheet" media="none" onload="if(media!='all')media='all'">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" media="none" onload="if(media!='all')media='all'">
<style>
body, html {
BIN
View File
Binary file not shown.
+9 -5
View File
@@ -34,11 +34,13 @@ A few other pages of information are also available:
version of ADF.
- The [Roadmap](roadmap.md)
contains a preview of features we hope to release in future versions of ADF.
- The [License info](license-info/license-info-v3.0.0.md) section lists the third-party
- The [License info](license-info/README.md) section lists the third-party libraries used by ADF along with links to their Open Source licenses.
- The [Vulnerability](vulnerability/README.md) section lists the third-party
libraries known vulnerability.
libraries used by ADF along with links to their Open Source licenses.
- The [Breaking changes](breaking-changes/breaking-change-2.6.0-3.0.0.md) section lists
all breaking changes between major versions, such as removal of deprecated items.
- The [Upgrade guide](upgrade-guide/upgrade26-30.md) explains how to upgrade your project from an earlier version of ADF to the current version.
- The [Upgrade guide](upgrade-guide/README.md) explains how to upgrade your project from an earlier version of ADF to the current version.
## Contents
@@ -57,6 +59,7 @@ A few other pages of information are also available:
- [Angular Material Design](user-guide/angular-material-design.md)
- [Form Extensibility and Customisation](user-guide/extensibility.md)
- [Internationalization in ADF](user-guide/internationalization.md)
- [Localization in ADF](user-guide/localization.md)
- [Theming](user-guide/theming.md)
- [Transclusion](user-guide/transclusion.md)
- [Typography](user-guide/typography.md)
@@ -159,8 +162,9 @@ for more information about installing and using the source code.
| [File Size pipe](core/pipes/file-size.pipe.md) | Converts a number of bytes to the equivalent in KB, MB, etc. | [Source](../lib/core/pipes/file-size.pipe.ts) |
| [Format Space pipe](core/pipes/format-space.pipe.md) | Replaces all the white space in a string with a supplied character. | [Source](../lib/core/pipes/format-space.pipe.ts) |
| [Full name pipe](core/pipes/full-name.pipe.md) | Joins the first and last name properties from a UserProcessModel object into a single string. | [Source](../lib/core/pipes/full-name.pipe.ts) |
| [Localized Date pipe](core/pipes/localized-date.pipe.md) | Converts a date to a given format and locale. | [Source](../lib/core/pipes/localized-date.pipe.ts) |
| [Mime Type Icon pipe](core/pipes/mime-type-icon.pipe.md) | Retrieves an icon to represent a MIME type. | [Source](../lib/core/pipes/mime-type-icon.pipe.ts) |
| [](core/pipes/multi-value.pipe.md) | Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is ', ', however, you can set your own separator in the params of the pipe. | [Source](../lib/core/pipes/multi-value.pipe.ts) |
| [Multi Value Pipe](core/pipes/multi-value.pipe.md) | Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is the comma , however, you can set your own separator in the params of the pipe. | [Source](../lib/core/pipes/multi-value.pipe.ts) |
| [Node Name Tooltip pipe](core/pipes/node-name-tooltip.pipe.md) | Formats the tooltip for a Node. | [Source](../lib/core/pipes/node-name-tooltip.pipe.ts) |
| [Text Highlight pipe](core/pipes/text-highlight.pipe.md) | Adds highlighting to words or sections of text that match a search string. | [Source](../lib/core/pipes/text-highlight.pipe.ts) |
| [Time Ago pipe](core/pipes/time-ago.pipe.md) | Converts a recent past date into a number of days ago. | [Source](../lib/core/pipes/time-ago.pipe.ts) |
@@ -253,7 +257,7 @@ for more information about installing and using the source code.
| [File Uploading Dialog Component](content-services/components/file-uploading-dialog.component.md) | Shows a dialog listing all the files uploaded with the Upload Button or Drag Area components. | [Source](../lib/content-services/upload/components/file-uploading-dialog.component.ts) |
| [Like component](content-services/components/like.component.md) | Allows a user to add "likes" to an item. | [Source](../lib/content-services/social/like.component.ts) |
| [Permission List Component](content-services/components/permission-list.component.md) | Shows node permissions as a table. | [Source](../lib/content-services/permission-manager/components/permission-list/permission-list.component.ts) |
| [Rating component](content-services/components/rating.component.md) | Allows a user to add ratings to an item. | [Source](../lib/content-services/social/rating.component.ts) |
| [Rating component](content-services/components/rating.component.md) | Allows a user to add and remove rating to an item. | [Source](../lib/content-services/social/rating.component.ts) |
| [Search check list component](content-services/components/search-check-list.component.md) | Implements a checklist widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-check-list/search-check-list.component.ts) |
| [Search Chip List Component](content-services/components/search-chip-list.component.md) | Displays search criteria as a set of "chips". | [Source](../lib/content-services/search/components/search-chip-list/search-chip-list.component.ts) |
| [Search control component](content-services/components/search-control.component.md) | Displays a input text that shows find-as-you-type suggestions. | [Source](../lib/content-services/search/components/search-control.component.ts) |
@@ -412,7 +416,7 @@ for more information about installing and using the source code.
| [Edit Task Filter Cloud component](process-services-cloud/components/edit-task-filter-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Edits task filter details. | [Source](../lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts) |
| [Form cloud custom outcomes component](process-services-cloud/components/form-cloud-custom-outcome.component.md) | Supplies custom outcome buttons to be included in Form cloud component. | [Source](../lib/process-services-cloud/src/lib/form/components/form-cloud-custom-outcomes.component.ts) |
| [Form cloud component](process-services-cloud/components/form-cloud.component.md) | Shows a form from Process Services. | [Source](../lib/process-services-cloud/src/lib/form/components/form-cloud.component.ts) |
| [Form definition selector Cloud componet](process-services-cloud/components/form-definition-selector-cloud.component.md) | Allows one form to be selected. | [Source](../lib/process-services-cloud/src/lib/form/components/form-definition-selector-cloud.component.ts) |
| [Form Definition Selector Cloud](process-services-cloud/components/form-definition-selector-cloud.component.md) | Allows one form to be selected. | [Source](../lib/process-services-cloud/src/lib/form/components/form-definition-selector-cloud.component.ts) |
| [Group Cloud component](process-services-cloud/components/group-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Searches Groups. | [Source](../lib/process-services-cloud/src/lib/group/components/group-cloud.component.ts) |
| [People Cloud Component](process-services-cloud/components/people-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Allows one or more users to be selected (with auto-suggestion) based on the input parameters. | [Source](../lib/process-services-cloud/src/lib/task/start-task/components/people-cloud/people-cloud.component.ts) |
| [Process Filters Cloud Component](process-services-cloud/components/process-filters-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Lists all available process filters and allows to select a filter. | [Source](../lib/process-services-cloud/src/lib/process/process-filters/components/process-filters-cloud.component.ts) |
+1
View File
@@ -61,4 +61,5 @@
- compatibility.md: 'Version compatibility'
- release-notes: 'Release notes'
- upgrade-guide: 'Upgrade Guide'
- vulnerability: 'Vulnerability'
- license-info: 'License info'
+1
View File
@@ -21,6 +21,7 @@ You can find further information about released versions of ADF in the
| ADF version | Content Services | Process Services |
| --- | --- | --- |
| [3.3.0](versionIndex.md#v330) | **Full test:** v6.1.0 <br/> **Smoke test:** v5.2.4 | **Full test:** v7.1.0 M2 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
| [3.2.0](versionIndex.md#v320) - [3.2.1](versionIndex.md#v321) | **Full test:** v6.1.0 <br/> **Smoke test:** v5.2.4 | **Full test:** v7.1.0 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
| [3.1.0](versionIndex.md#v310) | **Full test:** v6.1.0 RC7 <br/> **Smoke test:** v5.2.4 | **Full test:** v2.0.0 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
| [3.0.0](versionIndex.md#v300) | **Full test:** v6.1.0 RC7 <br/> **Smoke test:** v5.2.4 | **Full test:** v2.0.0 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
@@ -8,6 +8,7 @@ Last reviewed: 2019-01-14
# [Rating component](../../../lib/content-services/social/rating.component.ts "Defined in rating.component.ts")
Allows a user to add and remove rating to an item.
It displays the average rating and the number of ratings. If the user has not rated the item the average rating stars color is grey.
![Rating component screenshot](../../docassets/images/social3.png)
@@ -39,7 +40,7 @@ If the average is decimal number it will be rounded.
| Name | Type | Description |
| ---- | ---- | ----------- |
| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<Object>` | Average rating is emitted when the "vote" gets changed. |
| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<Object>` | Emitted when the "vote" gets changed. |
## See also
-83
View File
@@ -1,83 +0,0 @@
---
Title: Icon Component
Added: v3.0.0
Status: Active
Last reviewed: 2019-02-08
---
# [Icon Component](../../../lib/core/icon/icon.component.ts "Defined in icon.component.ts")
Provides a universal way of rendering registered and named icons.
## Basic usage
```html
<!-- Font ligature -->
<adf-icon value="alert"></adf-icon>
<!-- ADF Thumbnail Service -->
<adf-icon value="image/png"></adf-icon>
<!-- Custom icon from MatIconRegistry -->
<adf-icon value="my-company:my-icon"></adf-icon>
```
## Class members
### Properties
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| color | `ThemePalette` | | 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
You can register custom SVG files as named icons in the format `[namespace]:[name]`.
The example below shows how to register a new icon named `adf:move_file`
that points to an external file within the `assets` folder:
```ts
import { Component, OnInit } from '@angular/core';
import { MatIconRegistry } from '@angular/material';
import { DomSanitizer } from '@angular/platform-browser';
@Component({...})
export class AppComponent implements OnInit {
constructor(
private matIconRegistry: MatIconRegistry,
private sanitizer: DomSanitizer
) {}
ngOnInit() {
this.matIconRegistry.addSvgIconInNamespace(
'adf',
'move_file',
this.sanitizer.bypassSecurityTrustResourceUrl(
'./assets/images/adf-move-file-24px.svg'
)
);
}
}
```
In the HTML, you can now use the icon as shown below:
```html
<adf-icon value="adf:move_file"></adf-icon>
```
### Thumbnail Service
You can also reference the icons registered with the [Thumbnail Service](../services/thumbnail.service.md)
using the `adf:` namespace.
```html
<adf-icon value="adf:image/gif"></adf-icon>
```
## See also
- [Thumbnail service](../services/thumbnail.service.md)
+2 -1
View File
@@ -28,8 +28,9 @@ Displays the Start [`Form`](../../../lib/process-services/task-list/models/form.
| ---- | ---- | ------------- | ----------- |
| data | [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) | | Custom form values map to be used with the rendered form. |
| disableCompleteButton | `boolean` | false | If true then the `Complete` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but will be disabled. |
| disableStartProcessButton | `boolean` | false | If true then the `Start Process` outcome button is shown but it will be disabled. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | \[] | Contains a list of form field validator instances. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | | Contains a list of form field validator instances. |
| form | [`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. |
| formId | `number` | | The id of the form definition to load and display with custom values. |
| formName | `string` | | Name of the form definition to load and display with custom values. |
+44 -2
View File
@@ -1,6 +1,12 @@
---
Title: Localized Date pipe
Added: v3.3.0
Status: Active
---
# [Localized Date pipe](../../../lib/core/pipes/localized-date.pipe.ts "Defined in localized-date.pipe.ts")
Converts a date to an given format and locale.
Converts a date to a given format and locale.
## Basic Usage
@@ -25,4 +31,40 @@ Converts a date to an given format and locale.
The pipe takes a date and formats it and localizes it so the date is displayed in the proper format for the region. It uses the [Angular Date Pipe](https://angular.io/api/common/DatePipe#custom-format-options) so all the pre-defined and custom formats can be used.
When localizing a date, you will need to add the specific locale file for your region in order to use it. Read more about internationalization [here](https://angular.io/guide/i18n#i18n-pipes).
To localize the dates in your application, you will need to add the specific locale file for your region in order to use it. Read more about internationalization [here](https://angular.io/guide/i18n#i18n-pipes).
For example, if you want add the japanese date localization in your ADF app you can add in your ```app.module.ts```:
```typescript
import { AppConfigService, TRANSLATION_PROVIDER, DebugAppConfigService, CoreModule, CoreAutomationService } from '@alfresco/adf-core';
.....
.....
import { registerLocaleData } from '@angular/common';
import localeJa from '@angular/common/locales/ja';
registerLocaleData(localeJa);
```
### Default values
You can overwrite the default values of this pipe by adding these properties to your ```app.config.json```:
```json
"dateValues": {
"defaultDateFormat": "mediumDate",
"defaultDateTimeFormat": "MMM d, y, H:mm",
"defaultLocale": "en-US"
}
```
| Name | Type | Description |
| ---- | ---- | ----------- |
| defaultDateFormat | string | The format to apply to date values |
| defaultDateTimeFormat | string | The format to apply to date-time values |
| defaultLocale | string | The locale id to apply |
This configuration overwrites the values in the localized date pipe as well as other components to have more consistency across your app. However, you can still overwrite these values any time by using the pipe in your code.
+7 -1
View File
@@ -1,6 +1,12 @@
---
Title: Multi Value Pipe
Added: v3.2.0
Status: Active
---
# [Multi Value Pipe](../../../lib/core/pipes/multi-value.pipe.ts "Defined in multi-value.pipe.ts")
Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is `', '`, however, you can set your own separator in the params of the pipe.
Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is the comma ```, ``` however, you can set your own separator in the params of the pipe.
## Basic Usage
+7
View File
@@ -17,6 +17,13 @@ Decodes a JSON Web Token (JWT) to a JavaScript object.
Decodes a JSON web token into a JS object.
- _token:_ `any` - Token in encoded form
- **Returns** `Object` - Decoded token data object
- **getValueFromLocalAccessToken**(key: `string`)<br/>
Gets a named value from the user access token.
- _key:_ `string` - Key name of the field to retrieve
- **getValueFromToken**(accessToken: `string`, key: `string`)<br/>
Gets a named value from the user access token.
- _accessToken:_ `string` -
- _key:_ `string` -
## Details
@@ -18,21 +18,15 @@ Finds shared links to Content Services items.
- _nodeId:_ `string` - ID of the node to link to
- _options:_ `any` - Options supported by JS-API
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SharedLinkEntry`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SharedLinkEntry.md)`>` - The shared link just created
- **deleteSharedLink**(sharedId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SharedLinkEntry`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SharedLinkEntry.md)`>`<br/>
- **deleteSharedLink**(sharedId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any|Error>`<br/>
Deletes a shared link.
- _sharedId:_ `string` - ID of the link to delete
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SharedLinkEntry`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/SharedLinkEntry.md)`>` - Null response notifying when the operation is complete
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<any|Error>` - Null response notifying when the operation is complete
- **getSharedLinks**(options: `any` = `{}`): [`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)`>`<br/>
Gets shared links available to the current user.
- _options:_ `any` - Options supported by JS-API
- **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 shared links
### Events
| Name | Type | Description |
| --- | --- | --- |
| error | `Subject<{ statusCode: number, message: string }>` | Gets emitted upon errors. |
## Details
Content Services allows users to generate URLs that can be shared with
+1
View File
@@ -7,6 +7,7 @@ Github only: true
The pages linked below contain the licenses for all third party dependencies of ADF.
- [ADF v3.3](license-info-v3.3.0.md)
- [ADF v3.2](license-info-v3.2.0.md)
- [ADF v3.1](license-info-v3.1.0.md)
- [ADF v3.0](license-info-v3.0.0.md)
+480
View File
@@ -0,0 +1,480 @@
---
Title: License info, Alfresco Angular components 3.3.0
---
# License information for Alfresco Angular components 3.3.0
This page lists all third party libraries that ADF 3.3.0 depends on.
## Libraries
| Name | Version | License |
| --- | --- | --- |
| [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.3.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.3.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.3.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-insights](https://github.com/Alfresco/alfresco-ng2-components) | 3.3.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-process-services-cloud](https://github.com/Alfresco/alfresco-ng2-components) | 3.3.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-process-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-testing](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/js-api](https://github.com/Alfresco/alfresco-js-api) | 3.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@angular/animations](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/cdk](https://github.com/angular/material2) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/common](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/compiler](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/core](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/flex-layout](https://github.com/angular/flex-layout) | 7.0.0-beta.23 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/forms](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/http](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/material-moment-adapter](https://github.com/angular/material2) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/material](https://github.com/angular/material2) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/platform-browser](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/router](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@mat-datetimepicker/core](https://github.com/kuhnroyal/mat-datetimepicker) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@mat-datetimepicker/moment](https://github.com/kuhnroyal/mat-datetimepicker) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@ngx-translate/core](https://github.com/ngx-translate/core) | 11.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/ast](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/floating-point-hex-parser](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/helper-api-error](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/helper-buffer](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/helper-code-frame](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/helper-fsm](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [@webassemblyjs/helper-module-context](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/helper-wasm-bytecode](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/helper-wasm-section](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/ieee754](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/leb128](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/utf8](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/wasm-edit](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/wasm-gen](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/wasm-opt](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/wasm-parser](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/wast-parser](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@webassemblyjs/wast-printer](https://github.com/xtuc/webassemblyjs) | 1.7.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@xtuc/ieee754](https://github.com/feross/ieee754) | 1.2.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [@xtuc/long](https://github.com/dcodeIO/long.js) | 4.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [abbrev](https://github.com/isaacs/abbrev-js) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [acorn-dynamic-import](https://github.com/kesne/acorn-dynamic-import) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [acorn](https://github.com/acornjs/acorn) | 6.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [adf-monaco-extension](https://github.com/eromano/aca-monaco-extension) | 0.0.8 | UNKNOWN |
| [adf-tslint-rules](https://github.com/Alfresco/alfresco-ng2-components) | 0.0.6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [ajv-errors](https://github.com/epoberezkin/ajv-errors) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) | 3.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ajv](https://github.com/epoberezkin/ajv) | 6.10.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [alfresco-components](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [ansi-regex](https://github.com/chalk/ansi-regex) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-styles](https://github.com/chalk/ansi-styles) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ansi-styles](https://github.com/chalk/ansi-styles) | 3.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [anymatch](https://github.com/micromatch/anymatch) | 2.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [app-root-path](https://github.com/inxilpro/node-app-root-path) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [app-root-path](https://github.com/inxilpro/node-app-root-path) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [aproba](https://github.com/iarna/aproba) | 1.2.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [are-we-there-yet](https://github.com/iarna/are-we-there-yet) | 1.1.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [argparse](https://github.com/nodeca/argparse) | 1.0.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [aria-query](https://github.com/A11yance/aria-query) | 3.0.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [arr-diff](https://github.com/jonschlinkert/arr-diff) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [arr-flatten](https://github.com/jonschlinkert/arr-flatten) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [arr-union](https://github.com/jonschlinkert/arr-union) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [array-unique](https://github.com/jonschlinkert/array-unique) | 0.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [asn1.js](https://github.com/indutny/asn1.js) | 4.10.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [assert](https://github.com/browserify/commonjs-assert) | 1.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [assign-symbols](https://github.com/jonschlinkert/assign-symbols) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ast-types-flow](https://github.com/kyldvs/ast-types-flow) | 0.0.7 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [async-each](https://github.com/paulmillr/async-each) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [asynckit](https://github.com/alexindigo/asynckit) | 0.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [atob](git://git.coolaj86.com/coolaj86/atob.js) | 2.1.2 | ([MIT](http://www.opensource.org/licenses/MIT) OR [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)) |
| [axobject-query](https://github.com/A11yance/axobject-query) | 2.0.2 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [babel-code-frame](https://github.com/babel/babel/tree/master/packages/babel-code-frame) | 6.26.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [balanced-match](https://github.com/juliangruber/balanced-match) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [base64-js](https://github.com/beatgammit/base64-js) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [base](https://github.com/node-base/base) | 0.11.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [big.js](https://github.com/MikeMcl/big.js) | 5.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [binary-extensions](https://github.com/sindresorhus/binary-extensions) | 1.13.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [bluebird](https://github.com/petkaantonov/bluebird) | 3.5.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [bn.js](https://github.com/indutny/bn.js) | 4.11.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [brace-expansion](https://github.com/juliangruber/brace-expansion) | 1.1.11 | [MIT](http://www.opensource.org/licenses/MIT) |
| [braces](https://github.com/micromatch/braces) | 2.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [brorand](https://github.com/indutny/brorand) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [browserify-aes](https://github.com/crypto-browserify/browserify-aes) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [browserify-cipher](https://github.com/crypto-browserify/browserify-cipher) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [browserify-des](https://github.com/crypto-browserify/browserify-des) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [browserify-rsa](https://github.com/crypto-browserify/browserify-rsa) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [browserify-sign](https://github.com/crypto-browserify/browserify-sign) | 4.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [browserify-zlib](https://github.com/devongovett/browserify-zlib) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [buffer-from](https://github.com/LinusU/buffer-from) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [buffer-xor](https://github.com/crypto-browserify/buffer-xor) | 1.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [buffer](https://github.com/feross/buffer) | 4.9.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [builtin-modules](https://github.com/sindresorhus/builtin-modules) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [builtin-status-codes](https://github.com/bendrucker/builtin-status-codes) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cacache](https://github.com/zkat/cacache) | 11.3.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [cache-base](https://github.com/jonschlinkert/cache-base) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chalk](https://github.com/chalk/chalk) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chalk](https://github.com/chalk/chalk) | 2.4.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chart.js](https://github.com/chartjs/Chart.js) | 2.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chart.js](https://github.com/chartjs/Chart.js) | 2.8.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chartjs-color-string](https://github.com/chartjs/chartjs-color-string) | 0.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chartjs-color](https://github.com/chartjs/chartjs-color) | 2.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chokidar](https://github.com/paulmillr/chokidar) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [chownr](https://github.com/isaacs/chownr) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [chrome-trace-event](github.com:samccone/chrome-trace-event) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cipher-base](https://github.com/crypto-browserify/cipher-base) | 1.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [class-utils](https://github.com/jonschlinkert/class-utils) | 0.3.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [classlist.js](https://github.com/eligrey/classList.js) | 1.1.20150312 | Public Domain |
| [code-point-at](https://github.com/sindresorhus/code-point-at) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [codelyzer](https://github.com/mgechev/codelyzer) | 5.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [collection-visit](https://github.com/jonschlinkert/collection-visit) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-convert](https://github.com/harthur/color-convert) | 0.5.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-convert](https://github.com/Qix-/color-convert) | 1.9.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-name](https://github.com/dfcreative/color-name) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [color-name](https://github.com/colorjs/color-name) | 1.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [combined-stream](https://github.com/felixge/node-combined-stream) | 1.0.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [commander](https://github.com/tj/commander.js) | 2.19.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [commondir](https://github.com/substack/node-commondir) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [component-emitter](https://github.com/component/emitter) | 1.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [concat-map](https://github.com/substack/node-concat-map) | 0.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [concat-stream](https://github.com/maxogden/concat-stream) | 1.6.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [console-browserify](https://github.com/Raynos/console-browserify) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [console-control-strings](https://github.com/iarna/console-control-strings) | 1.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [constants-browserify](https://github.com/juliangruber/constants-browserify) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cookiejar](https://github.com/bmeck/node-cookiejar) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [copy-concurrently](https://github.com/npm/copy-concurrently) | 1.0.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [copy-descriptor](https://github.com/jonschlinkert/copy-descriptor) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [core-js](https://github.com/zloirock/core-js) | 2.6.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [core-util-is](https://github.com/isaacs/core-util-is) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [create-ecdh](https://github.com/crypto-browserify/createECDH) | 4.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [create-hash](https://github.com/crypto-browserify/createHash) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [create-hmac](https://github.com/crypto-browserify/createHmac) | 1.1.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [crypto-browserify](https://github.com/crypto-browserify/crypto-browserify) | 3.12.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [css-selector-tokenizer](https://github.com/css-modules/css-selector-tokenizer) | 0.7.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [css-selector-tokenizer](https://github.com/css-modules/css-selector-tokenizer) | 0.7.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cssauron](https://github.com/chrisdickinson/cssauron) | 1.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cssesc](https://github.com/mathiasbynens/cssesc) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [custom-event-polyfill](https://github.com/krambuhl/custom-event-polyfill) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [cyclist](https://github.com/mafintosh/cyclist) | 0.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [d](https://github.com/medikoo/d) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [d](https://github.com/medikoo/d) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [damerau-levenshtein](https://github.com/lzrski/node-damerau-levenshtein) | 1.0.4 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [date-now](https://github.com/Colingo/date-now) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 2.6.9 | [MIT](http://www.opensource.org/licenses/MIT) |
| [debug](https://github.com/visionmedia/debug) | 3.2.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [deep-extend](https://github.com/unclechu/node-deep-extend) | 0.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [define-property](https://github.com/jonschlinkert/define-property) | 0.2.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [define-property](https://github.com/jonschlinkert/define-property) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [define-property](https://github.com/jonschlinkert/define-property) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [delayed-stream](https://github.com/felixge/node-delayed-stream) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [delegates](https://github.com/visionmedia/node-delegates) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [des.js](https://github.com/indutny/des.js) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [detect-libc](https://github.com/lovell/detect-libc) | 1.0.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [diff](https://github.com/kpdecker/jsdiff) | 3.5.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [diffie-hellman](https://github.com/crypto-browserify/diffie-hellman) | 5.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [domain-browser](https://github.com/bevry/domain-browser) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [duplexify](https://github.com/mafintosh/duplexify) | 3.7.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [elliptic](https://github.com/indutny/elliptic) | 6.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [emoji-regex](https://github.com/mathiasbynens/emoji-regex) | 6.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [emojis-list](https://github.com/kikobeats/emojis-list) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [end-of-stream](https://github.com/mafintosh/end-of-stream) | 1.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [enhanced-resolve](https://github.com/webpack/enhanced-resolve) | 4.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [errno](https://github.com/rvagg/node-errno) | 0.1.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [es5-ext](https://github.com/medikoo/es5-ext) | 0.10.50 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [es6-iterator](https://github.com/medikoo/es6-iterator) | 2.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [es6-symbol](https://github.com/medikoo/es6-symbol) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [escape-string-regexp](https://github.com/sindresorhus/escape-string-regexp) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [eslint-scope](https://github.com/eslint/eslint-scope) | 4.0.3 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [esprima](https://github.com/jquery/esprima) | 4.0.1 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [esrecurse](https://github.com/estools/esrecurse) | 4.2.1 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [estraverse](https://github.com/estools/estraverse) | 4.2.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [esutils](https://github.com/estools/esutils) | 2.0.2 | [BSD](http://www.opensource.org/licenses/BSD-2-Clause) |
| [eve-raphael](https://github.com/tomasAlabes/eve) | 0.5.0 | [Apache](http://www.apache.org/licenses/LICENSE-2.0) |
| [event-emitter](https://github.com/medikoo/event-emitter) | 0.3.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [events](https://github.com/Gozala/events) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [evp_bytestokey](https://github.com/crypto-browserify/EVP_BytesToKey) | 1.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [expand-brackets](https://github.com/jonschlinkert/expand-brackets) | 2.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [extend-shallow](https://github.com/jonschlinkert/extend-shallow) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [extend-shallow](https://github.com/jonschlinkert/extend-shallow) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [extend](https://github.com/justmoon/node-extend) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [extend](https://github.com/justmoon/node-extend) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [extglob](https://github.com/micromatch/extglob) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fast-deep-equal](https://github.com/epoberezkin/fast-deep-equal) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fastparse](https://github.com/webpack/fastparse) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [figgy-pudding](https://github.com/zkat/figgy-pudding) | 3.5.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [fill-range](https://github.com/jonschlinkert/fill-range) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [find-cache-dir](https://github.com/avajs/find-cache-dir) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [find-up](https://github.com/sindresorhus/find-up) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [flush-write-stream](https://github.com/mafintosh/flush-write-stream) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [for-in](https://github.com/jonschlinkert/for-in) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [form-data](https://github.com/form-data/form-data) | 2.3.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [formidable](https://github.com/felixge/node-formidable) | 1.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fragment-cache](https://github.com/jonschlinkert/fragment-cache) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [from2](https://github.com/hughsk/from2) | 2.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [fs-minipass](https://github.com/npm/fs-minipass) | 1.2.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [fs-write-stream-atomic](https://github.com/npm/fs-write-stream-atomic) | 1.0.10 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [fs.realpath](https://github.com/isaacs/fs.realpath) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [fsevents](https://github.com/strongloop/fsevents) | 1.2.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [gauge](https://github.com/iarna/gauge) | 2.7.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [get-value](https://github.com/jonschlinkert/get-value) | 2.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [github-slugger](https://github.com/Flet/github-slugger) | 1.2.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [glob-parent](https://github.com/es128/glob-parent) | 3.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [glob](https://github.com/isaacs/node-glob) | 7.1.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [graceful-fs](https://github.com/isaacs/node-graceful-fs) | 4.1.15 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [hammerjs](https://github.com/hammerjs/hammer.js) | 2.0.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-ansi](https://github.com/sindresorhus/has-ansi) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-flag](https://github.com/sindresorhus/has-flag) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-unicode](https://github.com/iarna/has-unicode) | 2.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [has-value](https://github.com/jonschlinkert/has-value) | 0.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-value](https://github.com/jonschlinkert/has-value) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-values](https://github.com/jonschlinkert/has-values) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [has-values](https://github.com/jonschlinkert/has-values) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [hash-base](https://github.com/crypto-browserify/hash-base) | 3.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [hash.js](https://github.com/indutny/hash.js) | 1.1.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [hmac-drbg](https://github.com/indutny/hmac-drbg) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [hosted-git-info](https://github.com/npm/hosted-git-info) | 2.7.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [https-browserify](https://github.com/substack/https-browserify) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [iconv-lite](https://github.com/ashtuchkin/iconv-lite) | 0.4.24 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ieee754](https://github.com/feross/ieee754) | 1.1.13 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [iferr](https://github.com/shesek/iferr) | 0.1.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ignore-walk](https://github.com/isaacs/ignore-walk) | 3.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [imurmurhash](https://github.com/jensyt/imurmurhash-js) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [indexof](https://github.com/component/indexof) | 0.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [inflight](https://github.com/npm/inflight) | 1.0.6 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [inherits](https://github.com/isaacs/inherits) | 2.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [inherits](https://github.com/isaacs/inherits) | 2.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ini](https://github.com/isaacs/ini) | 1.3.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [is-accessor-descriptor](https://github.com/jonschlinkert/is-accessor-descriptor) | 0.1.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-accessor-descriptor](https://github.com/jonschlinkert/is-accessor-descriptor) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-binary-path](https://github.com/sindresorhus/is-binary-path) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-buffer](https://github.com/feross/is-buffer) | 1.1.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-data-descriptor](https://github.com/jonschlinkert/is-data-descriptor) | 0.1.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-data-descriptor](https://github.com/jonschlinkert/is-data-descriptor) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-descriptor](https://github.com/jonschlinkert/is-descriptor) | 0.1.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-descriptor](https://github.com/jonschlinkert/is-descriptor) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-extendable](https://github.com/jonschlinkert/is-extendable) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-extendable](https://github.com/jonschlinkert/is-extendable) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-extglob](https://github.com/jonschlinkert/is-extglob) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-fullwidth-code-point](https://github.com/sindresorhus/is-fullwidth-code-point) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-glob](https://github.com/jonschlinkert/is-glob) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-glob](https://github.com/jonschlinkert/is-glob) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-number](https://github.com/jonschlinkert/is-number) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-plain-object](https://github.com/jonschlinkert/is-plain-object) | 2.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [is-windows](https://github.com/jonschlinkert/is-windows) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [isarray](https://github.com/juliangruber/isarray) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [isobject](https://github.com/jonschlinkert/isobject) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [isobject](https://github.com/jonschlinkert/isobject) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [js-tokens](https://github.com/lydell/js-tokens) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [js-yaml](https://github.com/nodeca/js-yaml) | 3.13.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [jsesc](https://github.com/mathiasbynens/jsesc) | 0.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [json-parse-better-errors](https://github.com/zkat/json-parse-better-errors) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [json-schema-traverse](https://github.com/epoberezkin/json-schema-traverse) | 0.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [json5](https://github.com/json5/json5) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [kind-of](https://github.com/jonschlinkert/kind-of) | 3.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [kind-of](https://github.com/jonschlinkert/kind-of) | 4.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [kind-of](https://github.com/jonschlinkert/kind-of) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [kind-of](https://github.com/jonschlinkert/kind-of) | 6.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [levenshtein-edit-distance](https://github.com/wooorm/levenshtein-edit-distance) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [loader-runner](https://github.com/webpack/loader-runner) | 2.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [loader-utils](https://github.com/webpack/loader-utils) | 1.2.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [locate-path](https://github.com/sindresorhus/locate-path) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lodash.debounce](https://github.com/lodash/lodash) | 4.0.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [lru-cache](https://github.com/isaacs/node-lru-cache) | 5.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [make-dir](https://github.com/sindresorhus/make-dir) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [map-cache](https://github.com/jonschlinkert/map-cache) | 0.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [map-visit](https://github.com/jonschlinkert/map-visit) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [md5.js](https://github.com/crypto-browserify/md5.js) | 1.3.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mdast-util-definitions](https://github.com/syntax-tree/mdast-util-definitions) | 1.2.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mdast-util-to-string](https://github.com/syntax-tree/mdast-util-to-string) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [memory-fs](https://github.com/webpack/memory-fs) | 0.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [methods](https://github.com/jshttp/methods) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [micromatch](https://github.com/micromatch/micromatch) | 3.1.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [miller-rabin](https://github.com/indutny/miller-rabin) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mime-db](https://github.com/jshttp/mime-db) | 1.38.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mime-types](https://github.com/jshttp/mime-types) | 2.1.22 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mime](https://github.com/broofa/node-mime) | 1.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [minimalistic-assert](https://github.com/calvinmetcalf/minimalistic-assert) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [minimalistic-crypto-utils](https://github.com/indutny/minimalistic-crypto-utils) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [minimatch-browser](https://github.com/isaacs/minimatch) | 1.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [minimatch](https://github.com/isaacs/minimatch) | 3.0.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [minimist](https://github.com/substack/minimist) | 0.0.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [minimist](https://github.com/substack/minimist) | 1.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [minipass](https://github.com/isaacs/minipass) | 2.3.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [minizlib](https://github.com/isaacs/minizlib) | 1.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mississippi](https://github.com/maxogden/mississippi) | 3.0.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [mixin-deep](https://github.com/jonschlinkert/mixin-deep) | 1.3.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [mkdirp](https://github.com/substack/node-mkdirp) | 0.5.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [moment-es6](https://github.com/Agamnentzar/moment-es6) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [moment](https://github.com/moment/moment) | 2.22.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [move-concurrently](https://github.com/npm/move-concurrently) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ms](https://github.com/zeit/ms) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ms](https://github.com/zeit/ms) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [nan](https://github.com/nodejs/nan) | 2.13.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [nanomatch](https://github.com/micromatch/nanomatch) | 1.2.13 | [MIT](http://www.opensource.org/licenses/MIT) |
| [needle](https://github.com/tomas/needle) | 2.2.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [neo-async](https://github.com/suguru03/neo-async) | 2.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [next-tick](https://github.com/medikoo/next-tick) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ng2-charts](https://github.com/valor-software/ng2-charts) | 1.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ngx-monaco-editor](https://github.com/atularen/ngx-monaco-editor) | 7.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [node-ensure](https://github.com/bauerca/node-ensure) | 0.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [node-libs-browser](https://github.com/webpack/node-libs-browser) | 2.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [node-pre-gyp](https://github.com/mapbox/node-pre-gyp) | 0.10.3 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [nopt](https://github.com/npm/nopt) | 4.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [normalize-path](https://github.com/jonschlinkert/normalize-path) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [npm-bundled](https://github.com/npm/npm-bundled) | 1.0.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [npm-packlist](https://github.com/npm/npm-packlist) | 1.2.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [npmlog](https://github.com/npm/npmlog) | 4.1.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [number-is-nan](https://github.com/sindresorhus/number-is-nan) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [object-assign](https://github.com/sindresorhus/object-assign) | 4.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [object-copy](https://github.com/jonschlinkert/object-copy) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [object-visit](https://github.com/jonschlinkert/object-visit) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [object.pick](https://github.com/jonschlinkert/object.pick) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [once](https://github.com/isaacs/once) | 1.4.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [os-browserify](https://github.com/CoderPuppy/os-browserify) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [os-homedir](https://github.com/sindresorhus/os-homedir) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [os-tmpdir](https://github.com/sindresorhus/os-tmpdir) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [osenv](https://github.com/npm/osenv) | 0.1.5 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [p-limit](https://github.com/sindresorhus/p-limit) | 2.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [p-locate](https://github.com/sindresorhus/p-locate) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [p-try](https://github.com/sindresorhus/p-try) | 2.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pako](https://github.com/nodeca/pako) | 1.0.10 | ([MIT](http://www.opensource.org/licenses/MIT) AND [Zlib](http://www.zlib.net/zlib_license.html)) |
| [parallel-transform](https://github.com/mafintosh/parallel-transform) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [parse-asn1](https://github.com/crypto-browserify/parse-asn1) | 5.1.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [parse5](https://github.com/inikulin/parse5) | 5.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pascalcase](https://github.com/jonschlinkert/pascalcase) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-browserify](https://github.com/substack/path-browserify) | 0.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-dirname](https://github.com/es128/path-dirname) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-exists](https://github.com/sindresorhus/path-exists) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-is-absolute](https://github.com/sindresorhus/path-is-absolute) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [path-parse](https://github.com/jbgutierrez/path-parse) | 1.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pbkdf2](https://github.com/crypto-browserify/pbkdf2) | 3.0.17 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pdfjs-dist](https://github.com/mozilla/pdfjs-dist) | 2.0.943 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [pify](https://github.com/sindresorhus/pify) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pkg-dir](https://github.com/sindresorhus/pkg-dir) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [posix-character-classes](https://github.com/jonschlinkert/posix-character-classes) | 0.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [process-nextick-args](https://github.com/calvinmetcalf/process-nextick-args) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [process](https://github.com/shtylman/node-process) | 0.11.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [promise-inflight](https://github.com/iarna/promise-inflight) | 1.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [propose](https://github.com/liushuping/propose) | 0.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [prr](https://github.com/rvagg/prr) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [public-encrypt](https://github.com/crypto-browserify/publicEncrypt) | 4.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pump](https://github.com/mafintosh/pump) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pump](https://github.com/mafintosh/pump) | 3.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [pumpify](https://github.com/mafintosh/pumpify) | 1.5.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [punycode](https://github.com/bestiejs/punycode.js) | 1.3.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [punycode](https://github.com/bestiejs/punycode.js) | 1.4.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [punycode](https://github.com/bestiejs/punycode.js) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [qs](https://github.com/ljharb/qs) | 6.7.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [querystring-es3](https://github.com/mike-spainhower/querystring) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [querystring](https://github.com/Gozala/querystring) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [randombytes](https://github.com/crypto-browserify/randombytes) | 2.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [randomfill](https://github.com/crypto-browserify/randomfill) | 1.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [raphael](https://github.com/DmitryBaranovskiy/raphael) | 2.2.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [rc](https://github.com/dominictarr/rc) | 1.2.8 | ([BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) OR [MIT](http://www.opensource.org/licenses/MIT) OR [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)) |
| [readable-stream](https://github.com/nodejs/readable-stream) | 2.3.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [readdirp](https://github.com/paulmillr/readdirp) | 2.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [reflect-metadata](https://github.com/rbuckton/reflect-metadata) | 0.1.13 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [regenerate](https://github.com/mathiasbynens/regenerate) | 1.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regex-not](https://github.com/jonschlinkert/regex-not) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regexpu-core](https://github.com/mathiasbynens/regexpu-core) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regjsgen](https://github.com/d10/regjsgen) | 0.2.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [regjsparser](https://github.com/jviereck/regjsparser) | 0.1.5 | [BSD](http://www.opensource.org/licenses/BSD-2-Clause) |
| [remark-validate-links](https://github.com/remarkjs/remark-validate-links) | 8.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [remove-trailing-separator](https://github.com/darsain/remove-trailing-separator) | 1.1.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [repeat-element](https://github.com/jonschlinkert/repeat-element) | 1.1.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [repeat-string](https://github.com/jonschlinkert/repeat-string) | 1.6.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [resolve-url](https://github.com/lydell/resolve-url) | 0.2.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [resolve](https://github.com/browserify/resolve) | 1.10.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [ret](https://github.com/fent/ret.js) | 0.1.15 | [MIT](http://www.opensource.org/licenses/MIT) |
| [rimraf](https://github.com/isaacs/rimraf) | 2.6.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [ripemd160](https://github.com/crypto-browserify/ripemd160) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [run-queue](https://github.com/iarna/run-queue) | 1.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [rxjs](https://github.com/reactivex/rxjs) | 6.4.0 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [safe-buffer](https://github.com/feross/safe-buffer) | 5.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [safe-regex](https://github.com/substack/safe-regex) | 1.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [safer-buffer](https://github.com/ChALkeR/safer-buffer) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [sax](https://github.com/isaacs/sax-js) | 1.2.4 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [schema-utils](https://github.com/webpack-contrib/schema-utils) | 0.4.7 | [MIT](http://www.opensource.org/licenses/MIT) |
| [schema-utils](https://github.com/webpack-contrib/schema-utils) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [semver-dsl](https://github.com/mgechev/semver-dsl) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [semver](https://github.com/npm/node-semver) | 5.6.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [serialize-javascript](https://github.com/yahoo/serialize-javascript) | 1.7.0 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [set-blocking](https://github.com/yargs/set-blocking) | 2.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [set-value](https://github.com/jonschlinkert/set-value) | 0.4.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [set-value](https://github.com/jonschlinkert/set-value) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [setimmediate](https://github.com/YuzuJS/setImmediate) | 1.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [sha.js](https://github.com/crypto-browserify/sha.js) | 2.4.11 | ([MIT](http://www.opensource.org/licenses/MIT) AND [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause)) |
| [signal-exit](https://github.com/tapjs/signal-exit) | 3.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [snapdragon-util](https://github.com/jonschlinkert/snapdragon-util) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [snapdragon](https://github.com/jonschlinkert/snapdragon) | 0.8.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-list-map](https://github.com/webpack/source-list-map) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-map-resolve](https://github.com/lydell/source-map-resolve) | 0.5.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-map-support](https://github.com/evanw/node-source-map-support) | 0.5.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-map-url](https://github.com/lydell/source-map-url) | 0.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [source-map](https://github.com/mozilla/source-map) | 0.5.6 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [source-map](https://github.com/mozilla/source-map) | 0.5.7 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [source-map](https://github.com/mozilla/source-map) | 0.6.1 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [split-string](https://github.com/jonschlinkert/split-string) | 3.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [sprintf-js](https://github.com/alexei/sprintf.js) | 1.0.3 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [sprintf-js](https://github.com/alexei/sprintf.js) | 1.1.2 | [BSD-3-Clause](http://www.opensource.org/licenses/BSD-3-Clause) |
| [ssri](https://github.com/zkat/ssri) | 6.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [static-extend](https://github.com/jonschlinkert/static-extend) | 0.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [stream-browserify](https://github.com/browserify/stream-browserify) | 2.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [stream-each](https://github.com/mafintosh/stream-each) | 1.2.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [stream-http](https://github.com/jhiesey/stream-http) | 2.8.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [stream-shift](https://github.com/mafintosh/stream-shift) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string-width](https://github.com/sindresorhus/string-width) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [string_decoder](https://github.com/nodejs/string_decoder) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [strip-ansi](https://github.com/chalk/strip-ansi) | 3.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [strip-json-comments](https://github.com/sindresorhus/strip-json-comments) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [superagent](https://github.com/visionmedia/superagent) | 3.8.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [supports-color](https://github.com/chalk/supports-color) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [supports-color](https://github.com/chalk/supports-color) | 5.5.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [systemjs](https://github.com/systemjs/systemjs) | 0.19.27 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tapable](https://github.com/webpack/tapable) | 1.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tar](https://github.com/npm/node-tar) | 4.4.8 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) | 1.2.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [terser](https://github.com/fabiosantoscode/terser) | 3.17.0 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [through2](https://github.com/rvagg/through2) | 2.0.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [through](https://github.com/dominictarr/through) | 2.3.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [timers-browserify](https://github.com/jryans/timers-browserify) | 2.0.10 | [MIT](http://www.opensource.org/licenses/MIT) |
| [to-arraybuffer](https://github.com/jhiesey/to-arraybuffer) | 1.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [to-object-path](https://github.com/jonschlinkert/to-object-path) | 0.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [to-regex-range](https://github.com/micromatch/to-regex-range) | 2.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [to-regex](https://github.com/jonschlinkert/to-regex) | 3.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tslib](https://github.com/Microsoft/tslib) | 1.9.3 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [tslint](https://github.com/palantir/tslint) | 5.9.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [tsutils](https://github.com/ajafff/tsutils) | 2.29.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [tty-browserify](https://github.com/substack/tty-browserify) | 0.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [typedarray](https://github.com/substack/typedarray) | 0.0.6 | [MIT](http://www.opensource.org/licenses/MIT) |
| [typescript](https://github.com/Microsoft/TypeScript) | 3.1.6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [union-value](https://github.com/jonschlinkert/union-value) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [unique-filename](https://github.com/iarna/unique-filename) | 1.1.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [unique-slug](https://github.com/iarna/unique-slug) | 2.0.1 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [unist-util-is](https://github.com/syntax-tree/unist-util-is) | 2.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [unist-util-visit-parents](https://github.com/syntax-tree/unist-util-visit-parents) | 2.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [unist-util-visit](https://github.com/syntax-tree/unist-util-visit) | 1.4.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [unset-value](https://github.com/jonschlinkert/unset-value) | 1.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [upath](https://github.com/anodynos/upath) | 1.1.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [uri-js](https://github.com/garycourt/uri-js) | 4.2.2 | [BSD-2-Clause](http://www.opensource.org/licenses/BSD-2-Clause) |
| [urix](https://github.com/lydell/urix) | 0.1.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [url](https://github.com/defunctzombie/node-url) | 0.11.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [urljoin](https://github.com/yanni4night/urljoin) | 0.1.5 | [MIT](http://www.opensource.org/licenses/MIT) |
| [use](https://github.com/jonschlinkert/use) | 3.1.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [util-deprecate](https://github.com/TooTallNate/util-deprecate) | 1.0.2 | [MIT](http://www.opensource.org/licenses/MIT) |
| [util](https://github.com/defunctzombie/node-util) | 0.10.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [util](https://github.com/defunctzombie/node-util) | 0.11.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [vm-browserify](https://github.com/substack/vm-browserify) | 0.0.4 | [MIT](http://www.opensource.org/licenses/MIT) |
| [watchpack](https://github.com/webpack/watchpack) | 1.6.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [web-animations-js](https://github.com/web-animations/web-animations-js) | 2.3.1 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [webpack-sources](https://github.com/webpack/webpack-sources) | 1.3.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [webpack](https://github.com/webpack/webpack) | 4.29.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [when](https://github.com/cujojs/when) | 3.7.8 | [MIT](http://www.opensource.org/licenses/MIT) |
| [wide-align](https://github.com/iarna/wide-align) | 1.1.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [worker-farm](https://github.com/rvagg/node-worker-farm) | 1.7.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [worker-loader](https://github.com/webpack-contrib/worker-loader) | 2.0.0 | [MIT](http://www.opensource.org/licenses/MIT) |
| [wrappy](https://github.com/npm/wrappy) | 1.0.2 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [xtend](https://github.com/Raynos/xtend) | 4.0.1 | [MIT](http://www.opensource.org/licenses/MIT) |
| [y18n](https://github.com/yargs/y18n) | 4.0.0 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [yallist](https://github.com/isaacs/yallist) | 3.0.3 | [ISC](https://www.isc.org/downloads/software-support-policy/isc-license/) |
| [zone.js](https://github.com/angular/zone.js) | 0.8.29 | [MIT](http://www.opensource.org/licenses/MIT) |
@@ -79,13 +79,14 @@ The template defined inside `empty-form` will be shown when no form definition i
| appName | `string` | | App id to fetch corresponding form and values. |
| data | [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` | | Custom form values map to be used with the rendered form. |
| disableCompleteButton | `boolean` | false | If true then the `Complete` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but will be disabled. |
| disableStartProcessButton | `boolean` | false | If true then the `Start Process` outcome button is shown but it will be disabled. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | \[] | Contains a list of form field validator instances. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | | Contains a list of form field validator instances. |
| form | [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. |
| formId | `string` | | Task id to fetch corresponding form and values. |
| nameNode | `string` | | Name to assign to the new node where the metadata are stored. |
| path | `string` | | Path of the folder where the metadata will be stored. |
| processInstanceId | `string` | | ProcessInstanceId id to fetch corresponding form and values. |
| readOnly | `boolean` | false | Toggle readonly state of the form. Forces all form widgets to render as readonly if enabled. |
| showCompleteButton | `boolean` | true | Toggle rendering of the `Complete` outcome button. |
| showRefreshButton | `boolean` | true | Toggle rendering of the `Refresh` button. |
@@ -93,7 +94,6 @@ The template defined inside `empty-form` will be shown when no form definition i
| showTitle | `boolean` | true | Toggle rendering of the form title. |
| showValidationIcon | `boolean` | true | Toggle rendering of the validation icon next to the form title. |
| taskId | `string` | | Task id to fetch corresponding form and values. |
| processInstanceId | `string `| | Process instance id to fetch corresponding form and values.|
### Events
@@ -1,6 +1,12 @@
---
Title: Form Definition Selector Cloud
Added: v3.3.0
Status: Active
---
# [Form Definition Selector Cloud](../../../lib/process-services-cloud/src/lib/form/components/form-definition-selector-cloud.component.ts "Defined in form-definition-selector-cloud.component.ts")
Allows one form to be selected.
Allows one form to be selected from a dropdown list. For forms to be displayed in this component they will need to be compatible with standAlone tasks.
## Basic Usage
@@ -11,6 +11,17 @@ Starts a process.
![adf-start-process](../../docassets/images/startProcess.png)
## Contents
- [Basic Usage](#basic-usage)
- [Class members](#class-members)
- [Properties](#properties)
- [Events](#events)
- [Details](#details)
- [Starting a process with a default name and a pre-selected process definition name](#starting-a-process-with-a-default-name-and-a-pre-selected-process-definition-name)
- [Starting a process with variables](#starting-a-process-with-variables)
- [Starting a process with values passed to the form](#starting-a-process-with-values-passed-to-the-form)
## Basic Usage
```html
@@ -30,8 +41,8 @@ Starts a process.
| name | `string` | "" | Name of the process. |
| processDefinitionName | `string` | | Name of the process definition. |
| showSelectProcessDropdown | `boolean` | true | Show/hide the process dropdown list. |
| variables | `Object` | | Variables to attach to the payload. |
| values | `TaskVariableCloud` | | Values to attach to a form. |
| values | [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` | | Parameter to pass form field values in the start form if one is associated. |
| variables | `__type` | | Variables to attach to the payload. |
### Events
@@ -57,7 +68,6 @@ You can use the `processDefinitionName` property to select which process will be
If the app contains only one process definition, this process definition will be selected by default
### Starting a process with variables
```html
@@ -26,18 +26,20 @@ class MyComponent {
### Methods
- **completeTaskForm**(appName: `string`, taskId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts), outcome: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
- **completeTaskForm**(appName: `string`, taskId: `string`, processInstanceId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts), outcome: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
Completes a task form.
- _appName:_ `string` - Name of the app
- _taskId:_ `string` - ID of the target task
- _processInstanceId:_ `string` -
- _formId:_ `string` - ID of the form to complete
- _formValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) values object
- _outcome:_ `string` - (Optional) [Form](../../../lib/process-services/task-list/models/form.model.ts) outcome
- _outcome:_ `string` - [Form](../../../lib/process-services/task-list/models/form.model.ts) outcome
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Updated task details
- **createTemporaryRawRelatedContent**(file: `any`, nodeId: `any`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
- **createTemporaryRawRelatedContent**(file: `any`, nodeId: `string`, contentHost: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
- _file:_ `any` -
- _nodeId:_ `any` -
- _nodeId:_ `string` -
- _contentHost:_ `string` -
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<any>` -
- **getBasePath**(appName: `string`): `string`<br/>
@@ -49,16 +51,17 @@ class MyComponent {
Parses JSON data to create a corresponding form.
- _url:_ `string` - String data to make the request
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FormFieldOption`](../../../lib/core/form/components/widgets/core/form-field-option.ts)`[]>` - Array of FormFieldOption object
- **getForm**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
- **getForm**(appName: `string`, formKey: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
Gets a form definition.
- _appName:_ `string` - Name of the app
- _taskId:_ `string` - ID of the target task
- _formKey:_ `string` - key of the target task
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<any>` - Form definition
- **getProcessStorageFolderTask**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
- **getProcessStorageFolderTask**(appName: `string`, taskId: `string`, processInstanceId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessStorageCloudModel`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`>`<br/>
- _appName:_ `string` -
- _taskId:_ `string` -
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<any>` -
- _processInstanceId:_ `string` -
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ProcessStorageCloudModel`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`>` -
- **getTask**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
Gets details of a task
@@ -81,10 +84,11 @@ class MyComponent {
- _data:_ [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` - (Optional) Values for the form's fields
- _readOnly:_ `boolean` - Toggles whether or not the form should be read-only
- **Returns** [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) created from the JSON specification
- **saveTaskForm**(appName: `string`, taskId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
- **saveTaskForm**(appName: `string`, taskId: `string`, processInstanceId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
Saves a task form.
- _appName:_ `string` - Name of the app
- _taskId:_ `string` - ID of the target task
- _processInstanceId:_ `string` -
- _formId:_ `string` - ID of the form to save
- _formValues:_ [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) values object
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Updated task details
@@ -39,9 +39,6 @@ Manages task filters.
- **getUsername**(): `string`<br/>
Gets the username field from the access token.
- **Returns** `string` - Username string
- **getValueFromToken**(key: `string`)<br/>
Gets a named value from the access token.
- _key:_ `string` - Key name of the value
- **updateFilter**(filter: [`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts))<br/>
Updates a task filter.
- _filter:_ [`TaskFilterCloudModel`](../../../lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts) - The filter to update
@@ -56,9 +56,9 @@ Any content in the body of `<adf-form>` will be shown when no form definition is
| ---- | ---- | ------------- | ----------- |
| data | [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) | | Custom form values map to be used with the rendered form. |
| disableCompleteButton | `boolean` | false | If true then the `Complete` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but will be disabled. |
| disableStartProcessButton | `boolean` | false | If true then the `Start Process` outcome button is shown but it will be disabled. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | \[] | Contains a list of form field validator instances. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | | Contains a list of form field validator instances. |
| form | [`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. |
| formId | `number` | | The id of the form definition to load and display with custom values. |
| formName | `string` | | Name of the form definition to load and display with custom values. |
+1
View File
@@ -9,6 +9,7 @@ The first **General available** release was v2.0.0.
## General available
- [3.3.0](RelNote330.md)
- [3.2.1](RelNote321.md)
- [3.2.0](RelNote320.md)
- [3.1.0](RelNote310.md)
-5
View File
@@ -314,11 +314,6 @@ Please refer to the [official documentation](http://docs.alfresco.com/) for furt
Below is the list of JIRA issues that were closed for this release.
Release Notes - Apps Development Framework - Version 3.2.0
<h2> Documentation
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4356'>ADF-4356</a>] - How to build an ADF application on top of Activiti 7 Community Edition
</li>
+466
View File
@@ -0,0 +1,466 @@
---
Title: Release notes v3.3.0
---
# Alfresco Application Development Framework (ADF) version 3.3.0 Release Note
These release notes provide information about the **3.3.0 release** of the Alfresco Application Development Framework.
This is the latest **General Available** release of the Application Development Framework, which contains the Angular components to build a Web Application on top of the Alfresco Platform.
The release can be found on GitHub at [this location](https://github.com/Alfresco/alfresco-ng2-components/releases/tag/3.3.0).
See the [ADF roadmap](../roadmap.md) for details of features planned for future
versions of ADF.
## Contents
- [New package versions](#new-package-versions)
- [Goals for this release](#goals-for-this-release)
- [Form visibility](#form-field-visibility)
- [Start a process with a form](#start-a-process-with-a-form)
- [Multilingual support for forms](#multilingual-support-for-forms)
- [Form validation](#form-validation)
- [Forms variables](#form-variables)
- [REST source for dropdown menu on forms](#rest-source-for-dropdown-menu-on-forms)
- [Date format localization](#date-format-localization)
- [Localisation](#localisation)
- [References](#references)
- [Issues addressed](#issues-addressed)
## New package versions
"@alfresco/adf-content-services" : "3.3.0"
"@alfresco/adf-process-services" : "3.3.0"
"@alfresco/adf-core" : "3.3.0"
"@alfresco/adf-insights" : "3.3.0",
"@alfresco/adf-extensions": "3.3.0"
## Goals for this release
This is the third minor release since of ADF since February 2019 when version 3 was released.
This release continues to provide additional support for [Activiti 7](https://www.activiti.org/), the next generation Cloud Native implementation of Activiti.
The functionality and enhancements of this release are focused on forms. Form field visibility has been improved, form validation has been implemented and it is now possible to use form variables. Multilingual support for forms has been enhanced and dropdown menus reading from a REST source have been updated. From an end-user perspective, a process can now be started using a form when the start event contains a valid form.
Please report issues with this release in the [issue tracker](https://github.com/Alfresco/alfresco-ng2-components/issues/new). You can collaborate on this release or share feedback by using the discussion tools on [Gitter](http://gitter.im/Alfresco/alfresco-ng2-components).
The following are the most important features of this release:
- [Form visibility](#form-field-visibility)
- [Start a process with a form](#start-a-process-with-a-form)
- [Multilingual support for forms](#multilingual-support-for-forms)
- [Form validation](#form-validation)
- [Forms variables](#form-variables)
- [REST source for dropdown menu on forms](#rest-source-for-dropdown-menu-on-forms)
- [Date format localization](#date-format-localization)
### Form field visibility
Form field visibility has been improved to respect the visibility conditions configured for each field in the Modelling Application.
### Start a process with a form
The ```adf-cloud-start-process``` component now contains the functionality to start a process using a form.
It is possible start a process with a form and variables:
```html
<adf-cloud-start-process
[appId]="YOUR_APP_ID"
[variables]="{ 'my-key1' : 'myvalue', 'my-key2' : 'myvalue2'}">
</adf-cloud-start-process>
```
It is also possible to start a process with a form and pass in the form values at the same time:
```html
<adf-cloud-start-process
[appId]="YOUR_APP_ID"
[values]="[{'name': 'firstName', 'value': 'MyName'}, {'name': 'lastName', 'value': 'MyLastName'}]">
</adf-cloud-start-process>
```
### Multilingual support for forms
In previous versions it was not possible to translate a label that was defined as part of a form. Is now possible translate form labels using i18n files.
For example, when modelling your form you can now add a label such as `FORM.FIRSTNAME`. In your `en.json` this would be:
```json
{
"FORM": {
"FIRSTNAME": "First Name",
"LASTNAME": "Last Name"
}
}
```
and in your `it.json`:
```json
{
"FORM": {
"FIRSTNAME": "Nome",
"LASTNAME": "Cognome"
}
}
```
Your app will now change the label of the form using the translations files.
### Form validation
Form validation will now display whether a form is valid or invalid.
### Form variables
Form variables can now assigned to forms. When creating an application that contains a form, variables can be assigned and will correctly display as the appropriate values when the form is launched.
### REST source for dropdown menu on forms
It is now possible to create a form that contains a dropdown widget that is configured to use a REST Service to populate its values.
### Date format localization
Date formats can now be localized in ADF. By default all dates are localized to `en-US`. This can be changed by adding the localization files provided by Angular. For more information refer to the [internationalization user guide](../user-guide/internationalization.md)
All components have also been refactored to use the same date format and we have created a new [localized date pipe](../core/pipes/localized-date.pipe.md) to format dates and change locales.
## Localisation
This release includes: Arabic, Brazilian Portuguese, Czech, Danish, Dutch, Finnish, French, German, Italian, Japanese, Norwegian (Bokmål), Polish, Russian, Simplified Chinese, Spanish and Swedish versions.
## References
The following is a brief list of references to help you get started with the new release:
- [Getting started guides with Alfresco Application Development Framework](https://community.alfresco.com/community/application-development-framework/pages/get-started)
- [Alfresco ADF Documentation on the Builder Network](../README.md)
- [Gitter chat supporting Alfresco ADF](https://gitter.im/Alfresco/alfresco-ng2-components)
- [ADF examples on GitHub](https://github.com/Alfresco/adf-examples)
- [Official GitHub Project - alfresco-ng2-components](https://github.com/Alfresco/alfresco-ng2-components)
- [Official GitHub Project - alfresco-js-api](https://github.com/Alfresco/alfresco-js-api)
- [Official GitHub Project - generator-ng2-alfresco-app](https://github.com/Alfresco/generator-ng2-alfresco-app)
Please refer to the [official documentation](http://docs.alfresco.com/) for further details and suggestions.
## Issues addressed
The following is the list of JIRA issues that were closed for this release:
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4618'>ADF-4618</a>] - Update the tutorial on RTL languages support
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4653'>ADF-4653</a>] - Creating the npm audit report
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4655'>ADF-4655</a>] - Review the documentation for the release
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4656'>ADF-4656</a>] - Release note for version 3.3.0
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4657'>ADF-4657</a>] - Tutorial on how to upgrade from ADF 3.2.1 to ADF 3.3.0
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4658'>ADF-4658</a>] - Update the compatibility matrix
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4659'>ADF-4659</a>] - Generate the list of third party Open Source components
</li>
</ul>
<h2> Feature
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-3126'>ADF-3126</a>] - Automatic translation support for Info Drawer
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4127'>ADF-4127</a>] - Claim a task on the new generation of BPM engines
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4342'>ADF-4342</a>] - Date Format in ADF should be centralised
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4349'>ADF-4349</a>] - Cloud - task-form-component - Create a new component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4527'>ADF-4527</a>] - Create a reusable HTML block for the buttons in the task form cloud component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4543'>ADF-4543</a>] - Language Menu - set text orientation
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4544'>ADF-4544</a>] - Cloud Task From - Refresh the buttons and form after an action is complete
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4545'>ADF-4545</a>] - Context Menu - RTL support
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4550'>ADF-4550</a>] - Get the repository from the Process Storage instead of the app.config.jsonTask
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4558'>ADF-4558</a>] - Dialogs - RTL support
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4631'>ADF-4631</a>] - Start Process Cloud - Ability to start a process with a form as start event
</li>
</ul>
<h2> Story
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4375'>ADF-4375</a>] - Simplifying the development of ADF Extensions
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4377'>ADF-4377</a>] - Simplifying the deployment of ADF Extensions
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4484'>ADF-4484</a>] - Quick themable Snackbar notifications
</li>
</ul>
<h2> Bug
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-1559'>ADF-1559</a>] - People control is referencing the rest api instead of enterprise for pictures
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-3192'>ADF-3192</a>] - [Form] - The fields are not properly aligned
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4034'>ADF-4034</a>] - Task list cloud - The Deleted task is changing the Status from &quot;Deleted&quot; in &quot;Canceled&quot;
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4041'>ADF-4041</a>] - People Cloud Component - preselected values not working to be filtered by username
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4137'>ADF-4137</a>] - PeopleCloudComponent - Use new translation key for search label
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4268'>ADF-4268</a>] - Unable to change any other property in the Info drawer for any other file after trying to change the name to one with special characters
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4293'>ADF-4293</a>] - The date is not displayed properly when rtl is enabled
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4314'>ADF-4314</a>] - [Process - Cloud] - can not claim a process task without any assignee
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4338'>ADF-4338</a>] - [Process-service-cloud] - TaskHeaderCloudComponent is using wrong date format
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4364'>ADF-4364</a>] - The user is infinitely redirected to the file opened in viewer when clicking on close icon
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4408'>ADF-4408</a>] - Setting copyContent to false on datatable cell html is not working as expected
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4466'>ADF-4466</a>] - There are alignment issues in IE11 browser for Multiselect checkboxes.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4467'>ADF-4467</a>] - Upload File Widget layout issue
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4468'>ADF-4468</a>] - FormCloud - Not able to show a value of a form variable
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4469'>ADF-4469</a>] - Changing the name of a file to an already existing one in the Metadata info dialog, errors in console.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4473'>ADF-4473</a>] - Cloud Task Header - Priority should take only integer values
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4474'>ADF-4474</a>] - Coud Form - Unable to submit form with date value
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4476'>ADF-4476</a>] - Cloud start task and start process have different styles
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4478'>ADF-4478</a>] - Layout container overflowing
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4488'>ADF-4488</a>] - FormCloud - Not able to render a dropdown with a RestService bind
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4489'>ADF-4489</a>] - Error should appear in the info drawer when trying to add illegal characters in the Name field
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4495'>ADF-4495</a>] - Remove Alfresco Dependencies script not working properly on Linux Machine
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4498'>ADF-4498</a>] - StickyHeader should be disabled when there is no header.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4530'>ADF-4530</a>] - The multiple process definitions in the app are not displayed in the dropdown when creating a new Process instance.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4531'>ADF-4531</a>] - The typeahead and filtering based on context doesn&#39;t work for the &#39;Select Process&#39; dropdown in cloud.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4546'>ADF-4546</a>] - Visibility conditions for Form variables don&#39;t work on Multiline Widget.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4548'>ADF-4548</a>] - The place holder text for the Dropdown widget is not displayed.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4552'>ADF-4552</a>] - Rating component not working properly
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4564'>ADF-4564</a>] - Yeoman&#39;s template for Activiti Cloud contains hardcoded URLs
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4569'>ADF-4569</a>] - Fix smart build script
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4578'>ADF-4578</a>] - Language Menu - list shows 2 Arabic entries
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4585'>ADF-4585</a>] - Can&#39;t save the form or complete the task when the dropdown has a value saved from rest response.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4586'>ADF-4586</a>] - DropdownCloud - form not preselecting the saved option
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4588'>ADF-4588</a>] - Copy content not showing correctly for ellipsis cell
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4596'>ADF-4596</a>] - Assignee field in start task is not translated to any other language
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4597'>ADF-4597</a>] - Demo shell is not translated Czech when the app language is changed to Czech
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4612'>ADF-4612</a>] - The linting is not working correctly in &quot;npm-build-all.sh&quot; script
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4623'>ADF-4623</a>] - Document List row shows &quot;name&quot; instead of metadata
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4625'>ADF-4625</a>] - Search Input does not respect RTL mode
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4626'>ADF-4626</a>] - Breadcrumb does not respect RTL
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4634'>ADF-4634</a>] - [APA] - Different statuses should load for Tasks than for Processes
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4636'>ADF-4636</a>] - Datatable background only takes table height, not the entire datatable
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4637'>ADF-4637</a>] - Login/Logout Bug from Applications/ADF
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4640'>ADF-4640</a>] - Consumer / Contributer can not unshare a file that he shared
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4651'>ADF-4651</a>] - Task form cloud not displayed
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4661'>ADF-4661</a>] - The &#39;Start process&#39; and &#39;Cancel&#39; button are displayed on left instead of right.
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4665'>ADF-4665</a>] - [ADF] - Application is refreshed when you have two instances of application opened
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4667'>ADF-4667</a>] - Document list sorting icon looks cut off in RTL
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4674'>ADF-4674</a>] - Validation isn&#39;t working in form-cloud
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4677'>ADF-4677</a>] - Date isn&#39;t displayed properly in DocumentList
</li>
</ul>
<h2> Task
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4054'>ADF-4054</a>] - GroupCloudService - Use composite api to fetch group roles
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4232'>ADF-4232</a>] - e2e - filePreviewPage - expect() calls are never reached
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4288'>ADF-4288</a>] - Automation task for ADF-3977
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4378'>ADF-4378</a>] - Creating the adf-extension schematic
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4380'>ADF-4380</a>] - Enhancing the compilation of plugins to make them dynamic
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4389'>ADF-4389</a>] - Manage the case of a process definition with name property set to null
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4402'>ADF-4402</a>] - Move component related styles from demo-shell to ADF components
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4421'>ADF-4421</a>] - Edit task filters excluded test fix
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4442'>ADF-4442</a>] - Create a configuration editor option to change the whole app.config.json
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4462'>ADF-4462</a>] - Create manual and automated test for Restore version does not refresh the document list
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4477'>ADF-4477</a>] - Add a check for end date for task header cloud tests
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4482'>ADF-4482</a>] - Automation tests for Social component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4490'>ADF-4490</a>] - Create manual and automated tests for task-form cloud component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4496'>ADF-4496</a>] - Share dialog should raise error notifications for unshare action
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4503'>ADF-4503</a>] - Check coverage for Number widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4505'>ADF-4505</a>] - Check coverage for Date widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4506'>ADF-4506</a>] - Check coverage for Dropdown widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4507'>ADF-4507</a>] - Check coverage for Amount widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4508'>ADF-4508</a>] - Check coverage for Radio button widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4509'>ADF-4509</a>] - Check coverage for Hyperlink widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4512'>ADF-4512</a>] - Check coverage for Display value widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4513'>ADF-4513</a>] - Check coverage for Display text widget
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4514'>ADF-4514</a>] - Move widgets pages to Testing package
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4519'>ADF-4519</a>] - Attach an ACS content to a form
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4521'>ADF-4521</a>] - Multilingual support for forms
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4529'>ADF-4529</a>] - Create method to automate the form editor page
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4535'>ADF-4535</a>] - [FIX E2E] people-group-cloud-component.e2e.ts
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4536'>ADF-4536</a>] - [FIX E2E] process-custom-filters.e2e.ts
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4538'>ADF-4538</a>] - [FIX E2E] start-task-custom-app-cloud.e2e.ts C297675
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4540'>ADF-4540</a>] - [FIX E2E] Task-list-properties.e2e.ts C297480 C297486 C297691
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4541'>ADF-4541</a>] - [FIX E2E] task-form-cloud-component.e2e.ts C307095
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4547'>ADF-4547</a>] - Fix flaky e2e tests
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4576'>ADF-4576</a>] - Remove duplicate getDeployedApplicationsByStatus service
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4579'>ADF-4579</a>] - App Layout - RTL support
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4582'>ADF-4582</a>] - User preference - set layout orientation based on locale
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4583'>ADF-4583</a>] - Upload dialog - RTL support
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4584'>ADF-4584</a>] - Header RTL styling
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4587'>ADF-4587</a>] - Fix e2e tests
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4601'>ADF-4601</a>] - DemoShell - Side navigation RTL support
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4614'>ADF-4614</a>] - User Preference Service in Process Workspace
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4633'>ADF-4633</a>] - MatIcon directionality
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4638'>ADF-4638</a>] - Import the new i18n language
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4639'>ADF-4639</a>] - ADF CLI to create the third party licenses and npm audit report
</li>
</ul>
<h2> Feature Documentation
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4435'>ADF-4435</a>] - Information about claim and unclaim buttons is missing from task form cloud component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4450'>ADF-4450</a>] - Remove showSaveButton property from task form cloud component
</li>
</ul>
<h2> Feature Bug
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4309'>ADF-4309</a>] - [Process-Cloud] - Standalone Task - Can not claim a task after releasing it
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4311'>ADF-4311</a>] - [Process-Cloud] - Incorrect label loaded for unclaim option -&gt; &quot;Resqueue&quot; should be &quot;Release&quot;
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4315'>ADF-4315</a>] - [Process Cloud] - The unclaimed task remains in wrong status
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4433'>ADF-4433</a>] - The attached form is not displayed on a standalone task
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4436'>ADF-4436</a>] - The implementation related to claim, unclaim, complete shouldn&#39;t be part of form cloud component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4437'>ADF-4437</a>] - showRefreshButton property shouldn&#39;t be part of task form cloud component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4439'>ADF-4439</a>] - Validation icon is displayed even when the form has invalid values
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4440'>ADF-4440</a>] - Not able to see the form on a completed task
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4441'>ADF-4441</a>] - Save button should be disabled when form fields values are invalid
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4443'>ADF-4443</a>] - Able to complete a task that has invalid values on the form
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4445'>ADF-4445</a>] - showSaveButton property is missing from form-cloud component
</li>
</ul>
<h2> Feature (Task)
</h2>
<ul>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4568'>ADF-4568</a>] - Automate ADF-4269 - Task of a process cannot be completed if unassigned
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4577'>ADF-4577</a>] - Automate ADF-4389 - Should display the validation message when Process definition has name property set to null
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4580'>ADF-4580</a>] - Automate C309878
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4600'>ADF-4600</a>] - Automate - Should be able to filter groups based on composite roles
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4604'>ADF-4604</a>] - Fix process-filters-cloud
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4607'>ADF-4607</a>] - Fix task-list-properties
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4609'>ADF-4609</a>] - Fix task-form-cloud
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4610'>ADF-4610</a>] - Fix people-group-cloud-filter-component
</li>
<li>[<a href='https://issues.alfresco.com/jira/browse/ADF-4613'>ADF-4613</a>] - Fix tag-component
</li>
</ul>
Please refer to the [Alfresco issue tracker](https://issues.alfresco.com/jira/projects/ADF/issues/ADF-581?filter=allopenissues) for other known issues in this release. If you have any questions about the release, please contact us using [Gitter](https://gitter.im/Alfresco/alfresco-ng2-components).
Thanks to the whole application team and the amazing Alfresco community for the hard work.
+1 -1
View File
@@ -6,7 +6,7 @@ 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. |
+12
View File
@@ -0,0 +1,12 @@
---
Title: Upgrade guides
---
# Upgrade guides
Below are links to the upgrade guides notes for all released versions of ADF back to v2.6.0
- [Upgrading from ADF v2.6 to v3.0](upgrade26-30.md)
- [Upgrading from ADF v3.0 to v3.1](upgrade30-31.md)
- [Upgrading from ADF v3.1 to v3.2](upgrade31-32.md)
- [Upgrading from ADF v3.2 to v3.3](upgrade32-33.md)
+103
View File
@@ -0,0 +1,103 @@
---
Title: Upgrading from ADF v3.2 to v3.3
---
# Upgrading from ADF v3.2 to v3.3
This guide explains how to upgrade your ADF v3.2 project to work with v3.3.
Do not skip this task, if you want your application to be updated to a most recent version of ADF. Upgrades of multiple versions of ADF cannot be done in one step only, but should follow the chain of sequential updates.
**Note:** the steps described below might involve making changes
to your code. If you are working with a versioning system then you should
commit any changes you are currently working on. If you aren't using versioning
then be sure to make a backup copy of your project before going ahead with the
upgrade.
## Library updates
### Automatic update using the Yeoman Generator
If your application has few changes from the original app created by the
[Yeoman generator](https://github.com/Alfresco/generator-ng2-alfresco-app)
then you may be able to update your project with the following steps:
1. Update the Yeoman generator to the latest version (3.3.0). Note that
you might need to run these commands with `sudo` on Linux or MacOS:
```sh
npm uninstall -g generator-alfresco-adf-app
npm install -g generator-alfresco-adf-app
```
2. Run the new yeoman app generator:
```sh
yo alfresco-adf-app
```
3. Clean your old distribution and dependencies by deleting the `node_modules` folder
and the `package-lock.json` file.
4. Install the dependencies:
```sh
npm install
```
At this point, the generator might have overwritten some of your code where it differs from
the original generated app. Be sure to check for any differences from your project code
(using a versioning system might make this easier) and if there are any differences,
retrofit your changes. When you have done this, you should be able to start the application
as usual:
```sh
npm run start
```
After starting the app, if everything is working fine, that's all and you don't need to do anything else. However, if things don't work as they should then recover the original version of the project and try the manual approach.
### Manual update
1. Update the `package.json` file with the latest library versions:
```json
"dependencies": {
...
"@alfresco/adf-core": "3.3.0",
"@alfresco/adf-content-services": "3.3.0",
"@alfresco/adf-process-services-cloud": "3.3.0",
"@alfresco/adf-insights": "3.3.0",
"@alfresco/js-api": "3.3.0",
...
```
2. Clean your old distribution and dependencies by deleting `node_modules` and `package-lock.json`.
3. Reinstall your dependencies
```sh
npm install
```
## Using the localized date pipe
Date values are also localized in your ADF app. By default they are localized to en-US, although you can easily change this by adding the localization files provided by Angular.
If you want to use a different locale simply add the locale file for your region in your `app.module.ts`.
<!-- {% raw %} -->
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
registerLocaleData(localeFr);
<!-- {% endraw %} -->
Usage of the [localized date pipe](../core/pipes/localized-date.pipe.md).
<!-- {% raw %} -->
{{ date | adfLocalizedDate: format : locale }}
<!-- {% endraw %} -->
Find more info about this in the [Angular sDocs](https://angular.io/guide/i18n#setting-up-the-locale-of-your-app).
+1
View File
@@ -15,6 +15,7 @@ on an item below to see the corresponding guide page.
- [App extensions](app-extensions.md)
- [Form Extensibility and Customisation](extensibility.md)
- [Internationalization in ADF](internationalization.md)
- [Localization in ADF](user-guide/localization.md)
- [Theming](theming.md)
- [Right-to-left language support](rtl-support.md)
- [Transclusion](transclusion.md)
-24
View File
@@ -154,30 +154,6 @@ component's `.ts` file:
<!-- {% endraw %} -->
## Using the localized date pipe
Date values are also localized in your ADF app. By default they are localized to en-US, although you can easily change this by adding the localization files provided by Angular.
If you want to use a different locale simply add the locale file for your region in your `app.module.ts`.
<!-- {% raw %} -->
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
registerLocaleData(localeFr);
<!-- {% endraw %} -->
Usage of the [localized date pipe](../core/pipes/localized-date.pipe.md).
<!-- {% raw %} -->
{{ date | adfLocalizedDate: format : locale }}
<!-- {% endraw %} -->
Find more info about this in the [Angular sDocs](https://angular.io/guide/i18n#setting-up-the-locale-of-your-app).
## Adding and replacing messages
The built-in translations certainly won't cover everything you will need for
+74
View File
@@ -0,0 +1,74 @@
### Localization in ADF
Localization is the process of making something local in character or restricting it to a particular place.
Dates are not written the same around the world. That is where localizing a date comes in handy. ADF lets you dynamically change the way dates are written in your app so that they can adapt to to a specific region.
## Contents
- [Setting up the configuration in your app](#setting-up-the-configuration-in-your-app)
- [Adding language support](#adding-language-support)
- [Using the localized date pipe](#using-the-localized-date-pipe)
- [Using the time ago pipe](#using-the-time-ago-pipe)
## Setting up the configuration in your app
You can overwrite the default values of this pipe by adding these properties to your ```app.config.json```:
```json
"dateValues": {
"defaultDateFormat": "mediumDate",
"defaultDateTimeFormat": "MMM d, y, h:mm",
"defaultLocale": "en-US"
}
```
| Name | Type | Description |
| ---- | ---- | ----------- |
| defaultDateFormat | string | The format to apply to date values |
| defaultDateTimeFormat | string | The format to apply to date-time values |
| defaultLocale | string | The locale id to apply |
This configuration overwrites the values in the localized date pipe as well as other components to have more consistency across your app. However, you can still overwrite these values any time by using the pipe in your code.
## Adding language support
Date values are also localized in your ADF app. By default they are localized to en-US, although you can easily change this by adding the localization files provided by Angular.
If you want to use a different locale simply add the locale file for your region in your `app.module.ts`.
<!-- {% raw %} -->
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
registerLocaleData(localeFr);
<!-- {% endraw %} -->
## Using the localized date pipe
Converts a date to a given format and locale.
<!-- {% raw %} -->
{{ date | adfLocalizedDate: format : locale }}
<!-- {% endraw %} -->
Usage of the [localized date pipe](../core/pipes/localized-date.pipe.md).
## Using the time ago pipe
Converts a recent past date into a number of days ago.
<!-- {% raw %} -->
{{ date | adfTimeAgo }}
<!-- {% endraw %} -->
Usage of the [time ago pipe](../core/pipes/time-ago.pipe.md).
Find more info about localization in the [Angular Docs](https://angular.io/guide/i18n#setting-up-the-locale-of-your-app).
+4 -2
View File
@@ -10,9 +10,11 @@ ADF currently has partial support for languages that are written from right to l
This is handled automatically by the framework and can be configured through `app.config.json`.
## Configuration
Since directionality cannot be inferred from information about the locale, there is a one-to-one relation between locale and language configuration in `app.config.json`.
The minimum configuration is to declare the `"direction": "rtl"` alt the level of the language entry associated with your browser locale. Omitting `direction` or failing to map it with a language key will default to `ltr`.
```json
// browser locale 'ar'
@@ -33,7 +35,6 @@ The minimum configuration is to declare the `"direction": "rtl"` alt the level o
If it is desired to start the application with a certain language locale and not default to browser locale, we can specify the `locale` at the configuration level and associate it with a language entry.
```json
{
...
"locale": "ar",
@@ -48,9 +49,10 @@ If it is desired to start the application with a certain language locale and not
...
}
```
## UserPreferencesService
For cases where a component logic depends on direction values over time, `UserPreferencesService` can be used to get information about the current direction value.
For cases where a component logic depends on direction values over time, [`UserPreferencesService`](../core/services/user-preferences.service.md) can be used to get information about the current direction value.
```typescript
import { Component, OnInit } from '@angular/core';
+9 -7
View File
@@ -12,6 +12,7 @@ backend services have been tested with each released version of ADF.
## Versions
- [v3.3.0](#v330)
- [v3.2.1](#v321)
- [v3.2.0](#v320)
- [v3.1.0](#v310)
@@ -24,15 +25,17 @@ backend services have been tested with each released version of ADF.
- [v2.1.0](#v210)
- [v2.0.0](#v200)
## v3.2.1
## v3.3.0
**Release:** 2019-05-09<br/>
**Release:** 2019-07-17<br/>
<!--v321 start-->
<!--v330 start-->
- Compliance to Activiti Cloud 7.1 endpoints.
- [Form definition selector cloud component](process-services-cloud/components/form-definition-selector-cloud.component.md)
- [Localized date pipe](core/pipes/localized-date.pipe.md)
- [Notification history component](core/components/notification-history.component.md)
<!--v321 end-->
<!--v330 end-->
## v3.2.0
@@ -46,6 +49,7 @@ backend services have been tested with each released version of ADF.
- [Form cloud component](process-services-cloud/components/form-cloud.component.md)
- [Form cloud service](process-services-cloud/services/form-cloud.service.md)
- [Json cell component](core/components/json-cell.component.md)
- [Multi value pipe](core/pipes/multi-value.pipe.md)
- [Task form cloud component](process-services-cloud/components/task-form-cloud.component.md)
<!--v320 end-->
@@ -309,7 +313,6 @@ backend services have been tested with each released version of ADF.
- [Folder actions service](content-services/services/folder-actions.service.md)
- [Folder create directive](content-services/directives/folder-create.directive.md)
- [Folder edit directive](content-services/directives/folder-edit.directive.md)
- [Form definition selector cloud component](process-services-cloud/components/form-definition-selector-cloud.component.md)
- [Form field component](core/components/form-field.component.md)
- [Form field model](core/models/form-field.model.md)
- [Form list component](core/components/form-list.component.md)
@@ -329,7 +332,6 @@ backend services have been tested with each released version of ADF.
- [Login component](core/components/login.component.md)
- [Logout directive](core/directives/logout.directive.md)
- [Mime type icon pipe](core/pipes/mime-type-icon.pipe.md)
- [Multi value pipe](core/pipes/multi-value.pipe.md)
- [Node delete directive](core/directives/node-delete.directive.md)
- [Node favorite directive](core/directives/node-favorite.directive.md)
- [Node name tooltip pipe](core/pipes/node-name-tooltip.pipe.md)
+10
View File
@@ -0,0 +1,10 @@
---
Title: Audit information
Github only: true
---
# License information
The pages linked below contain the audit for all third party dependencies of ADF.
- [ADF v3.3.0](audit-info-3.3.0.md)
+27
View File
@@ -0,0 +1,27 @@
---
Title: Audit info, Alfresco Angular components 3.3.0
---
# Audit information for Alfresco Angular components 3.3.0
This page lists the npm audit of the project in the version Alfresco Angular components 3.3.0
## Risks
- Critical risk dependencies 0
- High risk dependencies 0
- Moderate risk dependencies 4
- Low risk dependencies 1
Dependencies analyzed 64965
## Libraries
| Severity | Vulnerable versions | Module |
| --- | --- | --- |
|low | &#34;&lt;4.17.5&#34; | lodash |
|moderate | &#34;&lt;4.17.11&#34; | lodash |
|moderate | &#34;&gt;=0.3.14 &lt;0.6.2&#34; | marked |
|moderate | &#34;&lt;0.18.1&#34; | axios |
@@ -15,22 +15,17 @@
* limitations under the License.
*/
import { LoginPage } from '@alfresco/adf-testing';
import { LoginPage, UploadActions, StringUtil } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { ViewerPage } from '../../pages/adf/viewerPage';
import { CommentsPage } from '../../pages/adf/commentsPage';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { FileModel } from '../../models/ACS/fileModel';
import { browser } from 'protractor';
import resources = require('../../util/resources');
import CONSTANTS = require('../../util/constants');
import { StringUtil } from '@alfresco/adf-testing';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
describe('Comment Component', () => {
@@ -39,16 +34,19 @@ describe('Comment Component', () => {
const viewerPage = new ViewerPage();
const commentsPage = new CommentsPage();
const navigationBar = new NavigationBarPage();
const acsUser = new AcsUserModel();
let userFullName, nodeId;
const pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
const uploadActions = new UploadActions();
let nodeId, userFullName;
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
const comments = {
first: 'This is a comment',
@@ -64,11 +62,6 @@ describe('Comment Component', () => {
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
@@ -79,7 +72,7 @@ describe('Comment Component', () => {
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
const pngUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, '-my-');
const pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
nodeId = pngUploadedFile.entry.id;
@@ -96,7 +89,7 @@ describe('Comment Component', () => {
afterEach(async (done) => {
try {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, nodeId);
await uploadActions.deleteFileOrFolder(nodeId);
} catch (error) {
}
@@ -193,9 +186,9 @@ describe('Comment Component', () => {
role: CONSTANTS.CS_USER_ROLES.CONSUMER
});
pngUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, site.entry.guid);
pngUploadedFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, site.entry.guid);
await loginPage.loginToContentServicesUsingUserModel(acsUser);
loginPage.loginToContentServicesUsingUserModel(acsUser);
navigationBar.clickContentServicesButton();
@@ -203,10 +196,7 @@ describe('Comment Component', () => {
});
afterAll((done) => {
try {
uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, pngUploadedFile.entry.id);
} catch (error) {
}
uploadActions.deleteFileOrFolder(pngUploadedFile.entry.id);
done();
});
@@ -17,7 +17,7 @@
import { LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { CreateFolderDialog } from '../../pages/adf/dialog/createFolderDialog';
import { FolderDialog } from '../../pages/adf/dialog/folderDialog';
import { MetadataViewPage } from '../../pages/adf/metadataViewPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
@@ -27,10 +27,9 @@ describe('Create folder directive', function () {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const createFolderDialog = new CreateFolderDialog();
const createFolderDialog = new FolderDialog();
const notificationHistoryPage = new NotificationHistoryPage();
const metadataViewPage = new MetadataViewPage();
const acsUser = new AcsUserModel();
beforeAll(async (done) => {
@@ -74,11 +73,11 @@ describe('Create folder directive', function () {
const folderName = 'NotEnableFolder';
contentServicesPage.clickOnCreateNewFolder();
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName(folderName);
createFolderDialog.checkCreateBtnIsEnabled();
createFolderDialog.checkCreateUpdateBtnIsEnabled();
});
it('[C260156] Should not be possible create two folder with the same name', () => {
@@ -113,7 +112,7 @@ describe('Create folder directive', function () {
createFolderDialog.addFolderName(folderName);
createFolderDialog.addFolderDescription(description);
createFolderDialog.clickOnCreateButton();
createFolderDialog.clickOnCreateUpdateButton();
contentServicesPage.checkContentIsDisplayed(folderName);
@@ -127,20 +126,20 @@ describe('Create folder directive', function () {
contentServicesPage.clickOnCreateNewFolder();
createFolderDialog.addFolderName('*');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName('<');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName('>');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName('\\');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName('/');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName('?');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName(':');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
createFolderDialog.addFolderName('|');
createFolderDialog.checkCreateBtnIsDisabled();
createFolderDialog.checkCreateUpdateBtnIsDisabled();
});
});
@@ -18,13 +18,10 @@
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { FileModel } from '../../models/ACS/fileModel';
import { LoginPage, FileBrowserUtil, BrowserVisibility } from '@alfresco/adf-testing';
import { LoginPage, UploadActions, BrowserVisibility, FileBrowserUtil } from '@alfresco/adf-testing';
import { browser } from 'protractor';
import resources = require('../../util/resources');
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { FolderModel } from '../../models/ACS/folderModel';
@@ -62,27 +59,26 @@ describe('Version component actions', () => {
'location': resources.Files.ADF_DOCUMENTS.TEXT_FOLDER.folder_location
});
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
beforeAll(async (done) => {
const uploadActions = new UploadActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
await uploadActions.uploadFile(this.alfrescoJsApi, txtFileModel.location, txtFileModel.name, '-my-');
await uploadActions.uploadFile(this.alfrescoJsApi, file0BytesModel.location, file0BytesModel.name, '-my-');
await uploadActions.uploadFile(this.alfrescoJsApi, txtFileComma.location, txtFileComma.name, '-my-');
await uploadActions.uploadFile( txtFileModel.location, txtFileModel.name, '-my-');
await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-');
await uploadActions.uploadFile(txtFileComma.location, txtFileComma.name, '-my-');
const textFolderUploaded = await uploadActions.createFolder(this.alfrescoJsApi, folderInfo.name, '-my-');
await uploadActions.uploadFolder(this.alfrescoJsApi, folderInfo.location, textFolderUploaded.entry.id);
const textFolderUploaded = await uploadActions.createFolder(folderInfo.name, '-my-');
await uploadActions.uploadFolder(folderInfo.location, textFolderUploaded.entry.id);
await uploadActions.createFolder(this.alfrescoJsApi, folderSecond.name, '-my-');
await uploadActions.createFolder(folderSecond.name, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
@@ -0,0 +1,244 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { BrowserActions, LoginPage, NotificationHistoryPage, StringUtil, UploadActions } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { FolderDialog } from '../../pages/adf/dialog/folderDialog';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { browser, protractor } from 'protractor';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { FileModel } from '../../models/ACS/fileModel';
import resources = require('../../util/resources');
describe('Edit folder directive', function () {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const editFolderDialog = new FolderDialog();
const acsUser = new AcsUserModel();
const anotherAcsUser = new AcsUserModel();
const navigationBarPage = new NavigationBarPage();
const notificationHistoryPage = new NotificationHistoryPage();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const pdfFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF.file_location
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
const updateFolderName = StringUtil.generateRandomString(5);
let editFolder, anotherFolder, filePdfNode, subFolder;
beforeAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
editFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
anotherFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
subFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), editFolder.entry.id);
filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-');
await this.alfrescoJsApi.core.nodesApi.updateNode(editFolder.entry.id,
{
permissions: {
locallySet: [{
authorityId: anotherAcsUser.getId(),
name: 'Consumer',
accessStatus: 'ALLOWED'
}]
}
});
await loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await uploadActions.deleteFileOrFolder(editFolder.entry.id);
await uploadActions.deleteFileOrFolder(anotherFolder.entry.id);
await uploadActions.deleteFileOrFolder(filePdfNode.entry.id);
done();
});
beforeEach(async (done) => {
navigationBarPage.clickHomeButton();
navigationBarPage.clickContentServicesButton();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
done();
});
it('[C260161] Update folder - Cancel button', async () => {
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name);
contentServicesPage.clickOnEditFolder();
editFolderDialog.checkFolderDialogIsDisplayed();
expect(editFolderDialog.getDialogTitle()).toBe('Edit folder');
expect(editFolderDialog.getFolderName()).toBe(editFolder.entry.name);
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.checkCancelBtnIsEnabled();
editFolderDialog.clickOnCancelButton();
editFolderDialog.checkFolderDialogIsNotDisplayed();
});
it('[C260162] Update folder - Introducing letters', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true);
contentServicesPage.clickOnEditFolder();
editFolderDialog.checkFolderDialogIsDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.addFolderName(editFolder.entry.name + 'a');
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.clickOnCancelButton();
editFolderDialog.checkFolderDialogIsNotDisplayed();
contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name);
});
it('[C260163] Update folder name with an existing one', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true);
contentServicesPage.clickOnEditFolder();
editFolderDialog.checkFolderDialogIsDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.addFolderName(anotherFolder.entry.name);
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.clickOnCreateUpdateButton();
editFolderDialog.checkFolderDialogIsDisplayed();
notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.');
});
it('[C260164] Edit Folder - Unsupported characters', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name);
contentServicesPage.clickOnEditFolder();
editFolderDialog.checkFolderDialogIsDisplayed();
editFolderDialog.addFolderName('a*"<>\\/?:|');
expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain these characters * " < > \\ / ? : |');
editFolderDialog.checkCreateUpdateBtnIsDisabled();
editFolderDialog.addFolderName('a.a');
editFolderDialog.checkValidationMessageIsNotDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.addFolderName('a.');
expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t end with a period .');
editFolderDialog.checkCreateUpdateBtnIsDisabled();
editFolderDialog.getFolderNameField().clear();
editFolderDialog.getFolderNameField().sendKeys(protractor.Key.SPACE);
expect(editFolderDialog.getValidationMessage()).toBe('Folder name can\'t contain only spaces');
editFolderDialog.checkCreateUpdateBtnIsDisabled();
editFolderDialog.addFolderName(editFolder.entry.name);
editFolderDialog.addFolderDescription('a*"<>\\/?:|');
editFolderDialog.checkValidationMessageIsNotDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.addFolderDescription('a.');
editFolderDialog.checkValidationMessageIsNotDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.addFolderDescription('a.a');
editFolderDialog.checkValidationMessageIsNotDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.getFolderDescriptionField().sendKeys(protractor.Key.SPACE);
editFolderDialog.checkValidationMessageIsNotDisplayed();
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.clickOnCancelButton();
editFolderDialog.checkFolderDialogIsNotDisplayed();
});
it('[C260166] Enable/Disable edit folder icon - when file selected', async () => {
expect(contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false);
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', filePdfNode.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', filePdfNode.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', filePdfNode.entry.name);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false);
});
it('[C260166] Enable/Disable edit folder icon - when multiple folders selected', async () => {
contentServicesPage.clickMultiSelectToggle();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.getContentList().dataTablePage().checkAllRowsButtonIsDisplayed().checkAllRows();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.getContentList().dataTablePage().checkRowIsChecked('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsChecked('Display name', anotherFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', filePdfNode.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsNotChecked('Display name', filePdfNode.entry.name);
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(2);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false);
});
it('[C260166] Enable/Disable edit folder icon - when single folder selected', async () => {
expect(contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(0);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name);
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(1);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(true);
});
it('[C260165] Update folder name with non-existing one', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', editFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name);
contentServicesPage.clickOnEditFolder();
editFolderDialog.checkFolderDialogIsDisplayed();
editFolderDialog.addFolderName(updateFolderName);
editFolderDialog.checkCreateUpdateBtnIsEnabled();
editFolderDialog.clickOnCreateUpdateButton();
editFolderDialog.checkFolderDialogIsNotDisplayed();
contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', updateFolderName);
});
describe('Edit Folder - no permission', () => {
beforeEach(async (done) => {
loginPage.loginToContentServicesUsingUserModel(anotherAcsUser);
BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + editFolder.entry.id);
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
done();
});
it('[C260167] Edit folder without permission', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', subFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', subFolder.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', subFolder.entry.name);
expect(contentServicesPage.checkEditFolderButtonIsEnabled()).toBe(false);
});
});
});
@@ -0,0 +1,220 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ContentNodeSelectorDialogPage, LoginPage, StringUtil, UploadActions } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { browser } from 'protractor';
import { FileModel } from '../../models/ACS/fileModel';
import resources = require('../../util/resources');
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { CustomSources } from '../../pages/adf/demo-shell/customSourcesPage';
import { TrashcanPage } from '../../pages/adf/trashcanPage';
describe('Favorite directive', function () {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const navigationBarPage = new NavigationBarPage();
const acsUser = new AcsUserModel();
const customSourcesPage = new CustomSources();
const trashcanPage = new TrashcanPage();
const contentListPage = contentServicesPage.getDocumentList();
const contentNodeSelector = new ContentNodeSelectorDialogPage();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const pdfFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF.file_location
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
let testFolder1, testFolder2, testFolder3, testFolder4, testFile;
beforeAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
testFolder1 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
testFolder2 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
testFolder3 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
testFolder4 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
testFile = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await uploadActions.deleteFileOrFolder(testFolder1.entry.id);
await uploadActions.deleteFileOrFolder(testFolder2.entry.id);
await uploadActions.deleteFileOrFolder(testFolder3.entry.id);
await uploadActions.deleteFileOrFolder(testFolder4.entry.id);
done();
});
beforeEach(async (done) => {
navigationBarPage.clickContentServicesButton();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
done();
});
it('[C260247] Should be able to mark a file as favorite', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsMarkedFavorite();
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
customSourcesPage.navigateToCustomSources();
customSourcesPage.selectFavoritesSourceType();
customSourcesPage.checkRowIsDisplayed(testFile.entry.name);
navigationBarPage.clickContentServicesButton();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsNotMarkedFavorite();
customSourcesPage.navigateToCustomSources();
customSourcesPage.selectFavoritesSourceType();
customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name);
});
it('[C260249] Should be able to mark a folder as favorite', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsMarkedFavorite();
customSourcesPage.navigateToCustomSources();
customSourcesPage.selectFavoritesSourceType();
customSourcesPage.checkRowIsDisplayed(testFolder1.entry.name);
navigationBarPage.clickContentServicesButton();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsNotMarkedFavorite();
customSourcesPage.navigateToCustomSources();
customSourcesPage.selectFavoritesSourceType();
customSourcesPage.checkRowIsNotDisplayed(testFolder1.entry.name);
});
it('[C260251] Should retain the restored file as favorite', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsMarkedFavorite();
contentListPage.rightClickOnRow(testFile.entry.name);
contentServicesPage.pressContextMenuActionNamed('Delete');
contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
customSourcesPage.navigateToCustomSources();
customSourcesPage.selectFavoritesSourceType();
customSourcesPage.checkRowIsNotDisplayed(testFile.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
expect(trashcanPage.numberOfResultsDisplayed()).toBe(1);
trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name);
trashcanPage.clickRestore();
trashcanPage.checkTrashcanIsEmpty();
navigationBarPage.clickContentServicesButton();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
contentServicesPage.checkIsMarkedFavorite();
customSourcesPage.navigateToCustomSources();
customSourcesPage.selectFavoritesSourceType();
customSourcesPage.checkRowIsDisplayed(testFile.entry.name);
});
it('[C260252] Should retain the moved file as favorite', async () => {
contentServicesPage.getContentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsMarkedFavorite();
contentServicesPage.getDocumentList().rightClickOnRow(testFile.entry.name);
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(testFolder1.entry.name);
contentNodeSelector.clickContentNodeSelectorResult(testFolder1.entry.name);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
contentServicesPage.doubleClickRow(testFolder1.entry.name);
contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().selectRow('Display name', testFile.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFile.entry.name);
contentServicesPage.checkIsMarkedFavorite();
});
it('[C217216] Should be able to mark and unmark multiple folders as favorite', async () => {
contentServicesPage.clickMultiSelectToggle();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder2.entry.name);
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name);
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(3);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsMarkedFavorite();
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsNotSelected('Display name', testFolder3.entry.name);
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(2);
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder4.entry.name);
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(3);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder1.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder2.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder4.entry.name);
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsMarkedFavorite();
contentServicesPage.clickOnFavoriteButton();
contentServicesPage.checkIsNotMarkedFavorite();
contentServicesPage.getContentList().dataTablePage().checkAllRows();
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBeGreaterThanOrEqual(4);
contentServicesPage.getContentList().dataTablePage().uncheckAllRows();
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(0);
contentServicesPage.getContentList().dataTablePage().clickCheckbox('Display name', testFolder3.entry.name);
contentServicesPage.getContentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name);
expect(contentServicesPage.getContentList().dataTablePage().getNumberOfSelectedRows()).toBe(1);
contentServicesPage.checkIsMarkedFavorite();
});
});
@@ -0,0 +1,332 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { browser } from 'protractor';
import { FileModel } from '../../models/ACS/fileModel';
import resources = require('../../util/resources');
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { TrashcanPage } from '../../pages/adf/trashcanPage';
import { LoginPage, NotificationHistoryPage, StringUtil, UploadActions } from '@alfresco/adf-testing';
import { BreadCrumbPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbPage';
describe('Restore content directive', function () {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const navigationBarPage = new NavigationBarPage();
const acsUser = new AcsUserModel();
const anotherAcsUser = new AcsUserModel();
const trashcanPage = new TrashcanPage();
const breadCrumbPage = new BreadCrumbPage();
const notificationHistoryPage = new NotificationHistoryPage();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const pdfFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF.file_location
});
const testFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TEST.file_name,
'location': resources.Files.ADF_DOCUMENTS.TEST.file_location
});
const pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
const folderName = StringUtil.generateRandomString(5);
const uploadActions = new UploadActions(this.alfrescoJsApi);
let folderWithContent, folderWithFolder, subFolder, subFile, testFile, restoreFile, publicSite, siteFolder, siteFile;
beforeAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
await uploadActions.createFolder(folderName, '-my-');
folderWithContent = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
subFile = await uploadActions.uploadFile(testFileModel.location, testFileModel.name, folderWithContent.entry.id);
testFile = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
folderWithFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
subFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), folderWithFolder.entry.id);
restoreFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await uploadActions.deleteFileOrFolder(folderWithContent.entry.id);
await uploadActions.deleteFileOrFolder(folderWithFolder.entry.id);
await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id);
done();
});
beforeEach(async (done) => {
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
done();
});
describe('Restore same name folders', function () {
beforeAll(async (done) => {
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(folderName);
contentServicesPage.deleteContent(folderName);
contentServicesPage.checkContentIsNotDisplayed(folderName);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName);
done();
});
it('[C260227] Should validate when restoring Folders with same name', async () => {
await uploadActions.createFolder(folderName, '-my-');
navigationBarPage.clickContentServicesButton();
browser.refresh();
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(folderName);
contentServicesPage.deleteContent(folderName);
contentServicesPage.checkContentIsNotDisplayed(folderName);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName);
trashcanPage.getDocumentList().dataTablePage().checkAllRows();
trashcanPage.clickRestore();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderName);
navigationBarPage.clickContentServicesButton();
contentServicesPage.getContentList().dataTablePage().waitTillContentLoaded();
contentServicesPage.checkContentIsDisplayed(folderName);
notificationHistoryPage.checkNotifyContains('Can\'t restore, ' + folderName + ' item already exists');
});
});
it('[C260238] Should restore a file', async () => {
contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
contentServicesPage.deleteContent(testFile.entry.name);
contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().clickRowByContent(testFile.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(testFile.entry.name);
trashcanPage.clickRestore();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(testFile.entry.name);
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(testFile.entry.name);
contentServicesPage.deleteContent(testFile.entry.name);
contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(testFile.entry.name);
notificationHistoryPage.checkNotifyContains(testFile.entry.name + ' item restored');
});
it('[C260239] Should restore folder with content', async () => {
contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name);
contentServicesPage.deleteContent(folderWithContent.entry.name);
contentServicesPage.checkContentIsNotDisplayed(folderWithContent.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().clickRowByContent(folderWithContent.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithContent.entry.name);
trashcanPage.clickRestore();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsNotDisplayed(folderWithContent.entry.name);
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(folderWithContent.entry.name);
contentServicesPage.getContentList().dataTablePage().doubleClickRow('Display name', folderWithContent.entry.name);
contentServicesPage.checkContentIsDisplayed(subFile.entry.name);
notificationHistoryPage.checkNotifyContains(folderWithContent.entry.name + ' item restored');
});
it('[C260240] Should validate restore when the original location no longer exists', async () => {
contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
contentServicesPage.doubleClickRow(folderWithFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
contentServicesPage.deleteContent(subFolder.entry.name);
contentServicesPage.checkContentIsNotDisplayed(subFolder.entry.name);
breadCrumbPage.chooseBreadCrumb(acsUser.id);
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
contentServicesPage.deleteContent(folderWithFolder.entry.name);
contentServicesPage.checkContentIsNotDisplayed(folderWithFolder.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().clickRowByContent(subFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
trashcanPage.clickRestore();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(folderWithFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(subFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderWithFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderWithFolder.entry.name);
trashcanPage.clickRestore();
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(folderWithFolder.entry.name);
contentServicesPage.doubleClickRow(folderWithFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationIsPresent('Can\'t restore ' + subFolder.entry.name + ' item, the original location no longer exists');
notificationHistoryPage.checkNotificationIsPresent('Restore successful');
notificationHistoryPage.clickMarkAsRead();
});
it('[C260241] Should display restore icon both for file and folder', async () => {
contentServicesPage.checkContentIsDisplayed(folderName);
contentServicesPage.checkContentIsDisplayed(restoreFile.entry.name);
contentServicesPage.deleteContent(folderName);
contentServicesPage.deleteContent(restoreFile.entry.name);
contentServicesPage.checkContentIsNotDisplayed(folderName);
contentServicesPage.checkContentIsNotDisplayed(restoreFile.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.checkRestoreButtonIsNotDisplayed();
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName);
trashcanPage.checkRestoreButtonIsDisplayed();
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsNotSelected(folderName);
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(restoreFile.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name);
trashcanPage.checkRestoreButtonIsDisplayed();
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(folderName);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(folderName);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(restoreFile.entry.name);
trashcanPage.checkRestoreButtonIsDisplayed();
});
describe('Restore deleted library', () => {
beforeAll(async (done) => {
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
const publicSiteName = `00${StringUtil.generateRandomString(5)}`;
const publicSiteBody = {visibility: 'PUBLIC', title: publicSiteName};
publicSite = await this.alfrescoJsApi.core.sitesApi.createSite(publicSiteBody);
siteFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), publicSite.entry.guid);
siteFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, siteFolder.entry.id);
await this.alfrescoJsApi.core.sitesApi.deleteSite(publicSite.entry.id);
done();
});
it('[C260241] Should restore the deleted library along with contents inside', async () => {
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.getDocumentList().dataTablePage().checkRowContentIsDisplayed(publicSite.entry.id);
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(publicSite.entry.id);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(publicSite.entry.id);
trashcanPage.clickRestore();
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
contentServicesPage.selectSite(publicSite.entry.title);
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(siteFolder.entry.name);
contentServicesPage.doubleClickRow(siteFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(siteFile.entry.name);
notificationHistoryPage.checkNotifyContains(publicSite.entry.id + ' item restored');
});
});
describe('Restore with folder hierarchies', () => {
let parentFolder, folderWithin, pdfFile, pngFile, mainFile, mainFolder;
beforeAll(async (done) => {
await this.alfrescoJsApi.login(anotherAcsUser.id, anotherAcsUser.password);
await uploadActions.createFolder(folderName, '-my-');
parentFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
folderWithin = await uploadActions.createFolder(StringUtil.generateRandomString(5), parentFolder.entry.id);
pdfFile = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, folderWithin.entry.id);
pngFile = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, folderWithin.entry.id);
mainFile = await uploadActions.uploadFile(testFileModel.location, testFileModel.name, '-my-');
mainFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
await loginPage.loginToContentServicesUsingUserModel(anotherAcsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.waitForTableBody();
done();
});
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await uploadActions.deleteFileOrFolder(parentFolder.entry.id);
await uploadActions.deleteFileOrFolder(mainFolder.entry.id);
await uploadActions.deleteFileOrFolder(mainFile.entry.id);
done();
});
it('[C216431] Should restore hierarchy of folders', async () => {
contentServicesPage.deleteContent(parentFolder.entry.name);
contentServicesPage.deleteContent(mainFolder.entry.name);
contentServicesPage.deleteContent(mainFile.entry.name);
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
trashcanPage.checkRestoreButtonIsNotDisplayed();
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(parentFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(parentFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFolder.entry.name);
trashcanPage.getDocumentList().dataTablePage().clickRowByContentCheckbox(mainFile.entry.name);
trashcanPage.getDocumentList().dataTablePage().checkRowByContentIsSelected(mainFile.entry.name);
trashcanPage.clickRestore();
navigationBarPage.clickContentServicesButton();
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed(parentFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(mainFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(mainFile.entry.name);
contentServicesPage.doubleClickRow(parentFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(folderWithin.entry.name);
contentServicesPage.doubleClickRow(folderWithin.entry.name);
contentServicesPage.checkContentIsDisplayed(pdfFile.entry.name);
contentServicesPage.checkContentIsDisplayed(pngFile.entry.name);
});
});
});
@@ -15,18 +15,19 @@
* limitations under the License.
*/
import { browser } from 'protractor';
import { LoginPage } from '@alfresco/adf-testing';
import { browser, by, element } from 'protractor';
import { LoginPage, PaginationPage, UploadActions, StringUtil, ContentNodeSelectorDialogPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import resources = require('../../util/resources');
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { FileModel } from '../../models/ACS/fileModel';
import { StringUtil } from '@alfresco/adf-testing';
import { Util } from '../../util/util';
import { ContentNodeSelectorDialogPage } from '@alfresco/adf-testing';
import { BreadCrumbDropdownPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbDropdownPage';
import { BreadCrumbPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbPage';
import { InfinitePaginationPage } from '../../pages/adf/core/infinitePaginationPage';
import { FolderModel } from '../../models/ACS/folderModel';
describe('Document List Component - Actions', () => {
@@ -35,12 +36,15 @@ describe('Document List Component - Actions', () => {
const navigationBarPage = new NavigationBarPage();
const contentListPage = contentServicesPage.getDocumentList();
const contentNodeSelector = new ContentNodeSelectorDialogPage();
const uploadActions = new UploadActions();
const alfrescoJsApi = new AlfrescoApi({
const paginationPage = new PaginationPage();
const breadCrumbDropdownPage = new BreadCrumbDropdownPage();
const breadCrumbPage = new BreadCrumbPage();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
const infinitePaginationPage = new InfinitePaginationPage(element(by.css('adf-content-node-selector')));
describe('Document List Component - Check Actions', () => {
@@ -68,20 +72,20 @@ describe('Document List Component - Actions', () => {
beforeAll(async (done) => {
acsUser = new AcsUserModel();
folderName = `TATSUMAKY_${StringUtil.generateRandomString(5)}_SENPOUKYAKU`;
await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await alfrescoJsApi.login(acsUser.id, acsUser.password);
pdfUploadedNode = await uploadActions.uploadFile(alfrescoJsApi, pdfFileModel.location, pdfFileModel.name, '-my-');
await uploadActions.uploadFile(alfrescoJsApi, testFileModel.location, testFileModel.name, '-my-');
uploadedFolder = await uploadActions.createFolder(alfrescoJsApi, folderName, '-my-');
secondUploadedFolder = await uploadActions.createFolder(alfrescoJsApi, 'secondFolder', '-my-');
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
await uploadActions.uploadFile(testFileModel.location, testFileModel.name, '-my-');
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
secondUploadedFolder = await uploadActions.createFolder('secondFolder', '-my-');
fileNames = Util.generateSequenceFiles(1, nrOfFiles, files.base, files.extension);
await uploadActions.createEmptyFiles(alfrescoJsApi, fileNames, uploadedFolder.entry.id);
await uploadActions.createEmptyFiles(fileNames, uploadedFolder.entry.id);
await loginPage.loginToContentServicesUsingUserModel(acsUser);
await browser.driver.sleep(15000);
browser.driver.sleep(10000);
done();
});
@@ -94,10 +98,8 @@ describe('Document List Component - Actions', () => {
it('[C213257] Should be able to copy a file', () => {
contentServicesPage.checkContentIsDisplayed(pdfUploadedNode.entry.name);
contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name);
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(folderName);
contentNodeSelector.clickContentNodeSelectorResult(folderName);
@@ -107,6 +109,17 @@ describe('Document List Component - Actions', () => {
contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
});
it('[C260131] Copy - Destination picker search', () => {
contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name);
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(folderName);
contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName);
contentNodeSelector.clickCancelButton();
contentNodeSelector.checkDialogIsNotDisplayed();
});
it('[C297491] Should be able to move a file', () => {
contentServicesPage.checkContentIsDisplayed(testFileModel.name);
@@ -121,6 +134,17 @@ describe('Document List Component - Actions', () => {
contentServicesPage.checkContentIsDisplayed(testFileModel.name);
});
it('[C260127] Move - Destination picker search', () => {
contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name);
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(folderName);
contentNodeSelector.contentListPage().dataTablePage().checkCellByHighlightContent(folderName);
contentNodeSelector.clickCancelButton();
contentNodeSelector.checkDialogIsNotDisplayed();
});
it('[C280561] Should be able to delete a file via dropdown menu', () => {
contentServicesPage.doubleClickRow(uploadedFolder.entry.name);
@@ -205,4 +229,147 @@ describe('Document List Component - Actions', () => {
});
});
describe('Folder Actions - Copy and Move', () => {
const folderModel1 = new FolderModel({'name': StringUtil.generateRandomString()});
const folderModel2 = new FolderModel({'name': StringUtil.generateRandomString()});
const folderModel3 = new FolderModel({'name': StringUtil.generateRandomString()});
const folderModel4 = new FolderModel({'name': StringUtil.generateRandomString()});
const folderModel5 = new FolderModel({'name': StringUtil.generateRandomString()});
const folderModel6 = new FolderModel({'name': StringUtil.generateRandomString()});
let folder1, folder2, folder3, folder4, folder5, folder6;
let folders;
const contentServicesUser = new AcsUserModel();
beforeAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(contentServicesUser);
await this.alfrescoJsApi.login(contentServicesUser.id, contentServicesUser.password);
folder1 = await uploadActions.createFolder('A' + folderModel1.name, '-my-');
folder2 = await uploadActions.createFolder('B' + folderModel2.name, '-my-');
folder3 = await uploadActions.createFolder('C' + folderModel3.name, '-my-');
folder4 = await uploadActions.createFolder('D' + folderModel4.name, '-my-');
folder5 = await uploadActions.createFolder('E' + folderModel5.name, '-my-');
folder6 = await uploadActions.createFolder('F' + folderModel6.name, '-my-');
folders = [folder1, folder2, folder3, folder4, folder5, folder6];
done();
});
beforeEach(async (done) => {
loginPage.loginToContentServicesUsingUserModel(contentServicesUser);
contentServicesPage.goToDocumentList();
contentServicesPage.waitForTableBody();
paginationPage.selectItemsPerPage('5');
contentServicesPage.checkAcsContainer();
contentListPage.waitForTableBody();
done();
});
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await folders.forEach(function (folder) {
uploadActions.deleteFileOrFolder(folder.entry.id);
});
done();
});
it('[C260132] Move action on folder with - Load more', () => {
expect(paginationPage.getCurrentItemsPerPage()).toEqual('5');
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Move');
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
expect(contentNodeSelector.getDialogHeaderText()).toBe('Move \'' + 'A' + folderModel1.name + '\' to...');
contentNodeSelector.checkSearchInputIsDisplayed();
expect(contentNodeSelector.getSearchLabel()).toBe('Search');
contentNodeSelector.checkSelectedSiteIsDisplayed('My files');
contentNodeSelector.checkCancelButtonIsDisplayed();
contentNodeSelector.checkMoveCopyButtonIsDisplayed();
expect(contentNodeSelector.getMoveCopyButtonText()).toBe('MOVE');
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5);
infinitePaginationPage.clickLoadMoreButton();
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6);
infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickCancelButton();
contentNodeSelector.checkDialogIsNotDisplayed();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Move');
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
infinitePaginationPage.clickLoadMoreButton();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name);
contentServicesPage.doubleClickRow('F' + folderModel6.name);
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Move');
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
breadCrumbDropdownPage.clickParentFolder();
breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed();
breadCrumbDropdownPage.choosePath(contentServicesUser.id);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name);
breadCrumbPage.chooseBreadCrumb(contentServicesUser.id);
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
});
it('[C305051] Copy action on folder with - Load more', () => {
expect(paginationPage.getCurrentItemsPerPage()).toEqual('5');
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Copy');
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
expect(contentNodeSelector.getDialogHeaderText()).toBe('Copy \'' + 'A' + folderModel1.name + '\' to...');
contentNodeSelector.checkSearchInputIsDisplayed();
expect(contentNodeSelector.getSearchLabel()).toBe('Search');
contentNodeSelector.checkSelectedSiteIsDisplayed('My files');
contentNodeSelector.checkCancelButtonIsDisplayed();
contentNodeSelector.checkMoveCopyButtonIsDisplayed();
expect(contentNodeSelector.getMoveCopyButtonText()).toBe('COPY');
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5);
infinitePaginationPage.clickLoadMoreButton();
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6);
infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickCancelButton();
contentNodeSelector.checkDialogIsNotDisplayed();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Copy');
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
infinitePaginationPage.clickLoadMoreButton();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
paginationPage.clickOnNextPage();
contentListPage.waitForTableBody();
contentServicesPage.doubleClickRow('F' + folderModel6.name);
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
});
});
});
@@ -20,9 +20,8 @@ import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { ViewerPage } from '../../pages/adf/viewerPage';
import { browser } from 'protractor';
import resources = require('../../util/resources');
import { LoginPage, StringUtil } from '@alfresco/adf-testing';
import { LoginPage, StringUtil, UploadActions } from '@alfresco/adf-testing';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { FileModel } from '../../models/ACS/fileModel';
import moment from 'moment-es6';
@@ -31,33 +30,30 @@ describe('Document List Component', () => {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
let uploadedFolder, uploadedFolderExtra;
const uploadActions = new UploadActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
let acsUser = null;
let testFileNode, pdfBFileNode;
beforeAll(() => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
});
afterEach(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
if (uploadedFolder) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, uploadedFolder.entry.id);
await uploadActions.deleteFileOrFolder(uploadedFolder.entry.id);
uploadedFolder = null;
}
if (uploadedFolderExtra) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, uploadedFolderExtra.entry.id);
await uploadActions.deleteFileOrFolder(uploadedFolderExtra.entry.id);
uploadedFolderExtra = null;
}
if (testFileNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, testFileNode.entry.id);
await uploadActions.deleteFileOrFolder(testFileNode.entry.id);
testFileNode = null;
}
if (pdfBFileNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, pdfBFileNode.entry.id);
await uploadActions.deleteFileOrFolder(pdfBFileNode.entry.id);
pdfBFileNode = null;
}
done();
@@ -97,9 +93,9 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
uploadedFolder = await uploadActions.createFolder(this.alfrescoJsApi, folderName, '-my-');
pdfUploadedNode = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFileModel.location, pdfFileModel.name, '-my-');
docxUploadedNode = await uploadActions.uploadFile(this.alfrescoJsApi, docxFileModel.location, docxFileModel.name, '-my-');
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
pdfUploadedNode = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
docxUploadedNode = await uploadActions.uploadFile(docxFileModel.location, docxFileModel.name, '-my-');
done();
});
@@ -107,16 +103,16 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
if (pdfUploadedNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, pdfUploadedNode.entry.id);
await uploadActions.deleteFileOrFolder(pdfUploadedNode.entry.id);
}
if (docxUploadedNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, docxUploadedNode.entry.id);
await uploadActions.deleteFileOrFolder(docxUploadedNode.entry.id);
}
if (timeAgoUploadedNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, timeAgoUploadedNode.entry.id);
await uploadActions.deleteFileOrFolder(timeAgoUploadedNode.entry.id);
}
if (mediumDateUploadedNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, mediumDateUploadedNode.entry.id);
await uploadActions.deleteFileOrFolder(mediumDateUploadedNode.entry.id);
}
done();
});
@@ -144,7 +140,7 @@ describe('Document List Component', () => {
it('[C279928] Should be able to display date with timeAgo', async (done) => {
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
timeAgoUploadedNode = await uploadActions.uploadFile(this.alfrescoJsApi, timeAgoFileModel.location, timeAgoFileModel.name, '-my-');
timeAgoUploadedNode = await uploadActions.uploadFile(timeAgoFileModel.location, timeAgoFileModel.name, '-my-');
contentServicesPage.goToDocumentList();
const dateValue = contentServicesPage.getColumnValueForRow(timeAgoFileModel.name, 'Created');
expect(dateValue).toMatch(/(ago|few)/);
@@ -153,7 +149,7 @@ describe('Document List Component', () => {
it('[C279929] Should be able to display the date with date type', async (done) => {
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
mediumDateUploadedNode = await uploadActions.uploadFile(this.alfrescoJsApi, mediumFileModel.location, mediumFileModel.name, '-my-');
mediumDateUploadedNode = await uploadActions.uploadFile(mediumFileModel.location, mediumFileModel.name, '-my-');
const createdDate = moment(mediumDateUploadedNode.createdAt).format('ll');
contentServicesPage.goToDocumentList();
contentServicesPage.enableMediumTimeFormat();
@@ -191,9 +187,9 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.core.peopleApi.addPerson(user);
await this.alfrescoJsApi.login(user.id, user.password);
fileANode = await uploadActions.uploadFile(this.alfrescoJsApi, fakeFileA.location, fakeFileA.name, '-my-');
fileBNode = await uploadActions.uploadFile(this.alfrescoJsApi, fakeFileB.location, fakeFileB.name, '-my-');
fileCNode = await uploadActions.uploadFile(this.alfrescoJsApi, fakeFileC.location, fakeFileC.name, '-my-');
fileANode = await uploadActions.uploadFile(fakeFileA.location, fakeFileA.name, '-my-');
fileBNode = await uploadActions.uploadFile(fakeFileB.location, fakeFileB.name, '-my-');
fileCNode = await uploadActions.uploadFile(fakeFileC.location, fakeFileC.name, '-my-');
await loginPage.loginToContentServicesUsingUserModel(user);
contentServicesPage.goToDocumentList();
@@ -204,13 +200,13 @@ describe('Document List Component', () => {
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
if (fileANode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileANode.entry.id);
await uploadActions.deleteFileOrFolder(fileANode.entry.id);
}
if (fileBNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileBNode.entry.id);
await uploadActions.deleteFileOrFolder(fileBNode.entry.id);
}
if (fileCNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileCNode.entry.id);
await uploadActions.deleteFileOrFolder(fileCNode.entry.id);
}
done();
});
@@ -276,7 +272,7 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
uploadedFolder = await uploadActions.createFolder(this.alfrescoJsApi, folderName, '-my-');
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkContentIsDisplayed(uploadedFolder.entry.name);
@@ -308,8 +304,8 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
uploadedFolder = await uploadActions.createFolder(this.alfrescoJsApi, folderNameA, '-my-');
uploadedFolderExtra = await uploadActions.createFolder(this.alfrescoJsApi, folderNameB, '-my-');
uploadedFolder = await uploadActions.createFolder(folderNameA, '-my-');
uploadedFolderExtra = await uploadActions.createFolder(folderNameB, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkContentIsDisplayed(folderNameA);
@@ -332,8 +328,8 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
testFileNode = await uploadActions.uploadFile(this.alfrescoJsApi, testFileA.location, testFileA.name, '-my-');
pdfBFileNode = await uploadActions.uploadFile(this.alfrescoJsApi, testFileB.location, testFileB.name, '-my-');
testFileNode = await uploadActions.uploadFile(testFileA.location, testFileA.name, '-my-');
pdfBFileNode = await uploadActions.uploadFile(testFileB.location, testFileB.name, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkContentIsDisplayed(testFileA.name);
@@ -357,7 +353,7 @@ describe('Document List Component', () => {
let folder = null;
for (let i = 0; i < 20; i++) {
folderName = `MEESEEKS_000${i}`;
folder = await uploadActions.createFolder(this.alfrescoJsApi, folderName, '-my-');
folder = await uploadActions.createFolder(folderName, '-my-');
folderCreated.push(folder);
}
done();
@@ -365,7 +361,7 @@ describe('Document List Component', () => {
afterAll(async (done) => {
Promise.all(folderCreated.map((folder) =>
uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, folder.entry.id)
uploadActions.deleteFileOrFolder(folder.entry.id)
)).then(() => {
done();
});
@@ -395,7 +391,7 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
file = await uploadActions.uploadFile(this.alfrescoJsApi, file0BytesModel.location, file0BytesModel.name, '-my-');
file = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-');
await loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList()
@@ -0,0 +1,214 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { browser } from 'protractor';
import {
LoginPage,
UploadActions,
StringUtil,
ContentNodeSelectorDialogPage,
NotificationHistoryPage, BrowserActions
} from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import resources = require('../../util/resources');
import {AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { FileModel } from '../../models/ACS/fileModel';
describe('Document List Component', () => {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const navigationBarPage = new NavigationBarPage();
const contentNodeSelector = new ContentNodeSelectorDialogPage();
const notificationHistoryPage = new NotificationHistoryPage();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
let uploadedFolder, uploadedFile, sourceFolder, destinationFolder, subFolder, subFolder2, copyFolder, subFile, duplicateFolderName;
let acsUser = null, anotherAcsUser: AcsUserModel;
let folderName, sameNameFolder;
const pdfFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF.file_location
});
const testFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TEST.file_name,
'location': resources.Files.ADF_DOCUMENTS.TEST.file_location
});
beforeAll(async (done) => {
acsUser = new AcsUserModel();
anotherAcsUser = new AcsUserModel();
folderName = StringUtil.generateRandomString(5);
sameNameFolder = StringUtil.generateRandomString(5);
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.core.peopleApi.addPerson(anotherAcsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
uploadedFolder = await uploadActions.createFolder(folderName, '-my-');
destinationFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
sourceFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-');
subFolder = await uploadActions.createFolder(sameNameFolder, sourceFolder.entry.id);
subFolder2 = await uploadActions.createFolder(StringUtil.generateRandomString(5), subFolder.entry.id);
copyFolder = await uploadActions.createFolder(StringUtil.generateRandomString(5), sourceFolder.entry.id);
duplicateFolderName = await uploadActions.createFolder(sameNameFolder, '-my-');
subFile = await uploadActions.uploadFile(testFileModel.location, testFileModel.name, subFolder.entry.id);
await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, uploadedFolder.entry.id);
uploadedFile = await uploadActions.uploadFile(pdfFileModel.location, pdfFileModel.name, '-my-');
await this.alfrescoJsApi.core.nodesApi.updateNode(sourceFolder.entry.id,
{
permissions: {
locallySet: [{
authorityId: anotherAcsUser.getId(),
name: 'Consumer',
accessStatus: 'ALLOWED'
}]
}
});
browser.driver.sleep(10000);
done();
});
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
uploadActions.deleteFileOrFolder(uploadedFolder.entry.id);
uploadActions.deleteFileOrFolder(uploadedFile.entry.id);
uploadActions.deleteFileOrFolder(sourceFolder.entry.id);
uploadActions.deleteFileOrFolder(destinationFolder.entry.id);
done();
});
describe('Document List Component - Actions Move and Copy', () => {
beforeEach(async (done) => {
await loginPage.loginToContentServicesUsingUserModel(acsUser);
navigationBarPage.clickContentServicesButton();
done();
});
it('[C260128] Move - Same name file', () => {
contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name);
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(folderName);
contentNodeSelector.clickContentNodeSelectorResult(folderName);
contentNodeSelector.clickMoveCopyButton();
notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.');
});
it('[C260134] Move - folder with subfolder and file within it', () => {
contentServicesPage.checkContentIsDisplayed(destinationFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name);
contentServicesPage.getDocumentList().rightClickOnRow(sourceFolder.entry.name);
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(destinationFolder.entry.name);
contentNodeSelector.clickContentNodeSelectorResult(destinationFolder.entry.name);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsNotDisplayed(sourceFolder.entry.name);
contentServicesPage.doubleClickRow(destinationFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(sourceFolder.entry.name);
contentServicesPage.doubleClickRow(sourceFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
contentServicesPage.doubleClickRow(subFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(subFile.entry.name);
});
it('[C260135] Move - Same name folder', () => {
contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name);
contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name);
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name);
contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name);
contentNodeSelector.clickMoveCopyButton();
notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.');
});
it('[C260129] Copy - Same name file', () => {
contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
contentServicesPage.getDocumentList().rightClickOnRow(pdfFileModel.name);
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(folderName);
contentNodeSelector.clickContentNodeSelectorResult(folderName);
contentNodeSelector.clickMoveCopyButton();
notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.');
});
it('[C260136] Copy - Same name folder', () => {
contentServicesPage.checkContentIsDisplayed(duplicateFolderName.entry.name);
contentServicesPage.getDocumentList().rightClickOnRow(duplicateFolderName.entry.name);
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.typeIntoNodeSelectorSearchField(sourceFolder.entry.name);
contentNodeSelector.clickContentNodeSelectorResult(sourceFolder.entry.name);
contentNodeSelector.clickMoveCopyButton();
notificationHistoryPage.checkNotifyContains('This name is already in use, try a different name.');
});
});
describe('Document List actionns - Move, Copy on no permission folder', () => {
beforeAll((done) => {
loginPage.loginToContentServicesUsingUserModel(anotherAcsUser);
BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + sourceFolder.entry.id);
contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded();
done();
});
it('[C260133] Move - no permission folder', () => {
contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
contentServicesPage.getDocumentList().rightClickOnRow(subFolder.entry.name);
contentServicesPage.checkContextActionIsVisible('Move');
expect(contentServicesPage.checkContentActionIsEnabled('Move')).toBe(false);
contentServicesPage.closeActionContext();
});
it('[C260140] Copy - No permission folder', () => {
contentServicesPage.checkContentIsDisplayed(subFolder.entry.name);
contentServicesPage.checkContentIsDisplayed(copyFolder.entry.name);
contentServicesPage.getDocumentList().rightClickOnRow(copyFolder.entry.name);
contentServicesPage.checkContextActionIsVisible('Copy');
expect(contentServicesPage.checkContentActionIsEnabled('Copy')).toBe(true);
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder.entry.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisabled(subFolder.entry.name);
contentNodeSelector.clickContentNodeSelectorResult(subFolder.entry.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected(subFolder.entry.name);
expect(contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false);
contentNodeSelector.contentListPage().dataTablePage().doubleClickRowByContent(subFolder.entry.name);
contentNodeSelector.contentListPage().dataTablePage().waitTillContentLoaded();
contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(subFolder2.entry.name);
});
});
});
@@ -1,188 +0,0 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { by, element, browser } from 'protractor';
import { LoginPage, PaginationPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { StringUtil } from '@alfresco/adf-testing';
import { ContentNodeSelectorDialogPage } from '@alfresco/adf-testing';
import { BreadCrumbDropdownPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbDropdownPage';
import { FolderModel } from '../../models/ACS/folderModel';
import { BreadCrumbPage } from '../../pages/adf/content-services/breadcrumb/breadCrumbPage';
import { InfinitePaginationPage } from '../../pages/adf/core/infinitePaginationPage';
describe('Document List Component - Actions', () => {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const contentListPage = contentServicesPage.getDocumentList();
const contentNodeSelector = new ContentNodeSelectorDialogPage();
const paginationPage = new PaginationPage();
const breadCrumbDropdownPage = new BreadCrumbDropdownPage();
const breadCrumbPage = new BreadCrumbPage();
const uploadActions = new UploadActions();
const infinitePaginationPage = new InfinitePaginationPage(element(by.css('adf-content-node-selector')));
const alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
describe('Folder Actions - Copy and Move', () => {
const folderModel1 = new FolderModel({ 'name': StringUtil.generateRandomString() });
const folderModel2 = new FolderModel({ 'name': StringUtil.generateRandomString() });
const folderModel3 = new FolderModel({ 'name': StringUtil.generateRandomString() });
const folderModel4 = new FolderModel({ 'name': StringUtil.generateRandomString() });
const folderModel5 = new FolderModel({ 'name': StringUtil.generateRandomString() });
const folderModel6 = new FolderModel({ 'name': StringUtil.generateRandomString() });
let folder1, folder2, folder3, folder4, folder5, folder6;
let folders;
const contentServicesUser = new AcsUserModel();
beforeAll(async (done) => {
await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await alfrescoJsApi.core.peopleApi.addPerson(contentServicesUser);
await alfrescoJsApi.login(contentServicesUser.id, contentServicesUser.password);
folder1 = await uploadActions.createFolder(alfrescoJsApi, 'A' + folderModel1.name, '-my-');
folder2 = await uploadActions.createFolder(alfrescoJsApi, 'B' + folderModel2.name, '-my-');
folder3 = await uploadActions.createFolder(alfrescoJsApi, 'C' + folderModel3.name, '-my-');
folder4 = await uploadActions.createFolder(alfrescoJsApi, 'D' + folderModel4.name, '-my-');
folder5 = await uploadActions.createFolder(alfrescoJsApi, 'E' + folderModel5.name, '-my-');
folder6 = await uploadActions.createFolder(alfrescoJsApi, 'F' + folderModel6.name, '-my-');
folders = [folder1, folder2, folder3, folder4, folder5, folder6];
await loginPage.loginToContentServicesUsingUserModel(contentServicesUser);
contentServicesPage.goToDocumentList();
contentServicesPage.waitForTableBody();
paginationPage.selectItemsPerPage('5');
contentServicesPage.checkAcsContainer();
contentListPage.waitForTableBody();
done();
});
afterAll(async (done) => {
await alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await folders.forEach(function (folder) {
uploadActions.deleteFilesOrFolder(alfrescoJsApi, folder.entry.id);
});
done();
});
it('[C260132] Move action on folder with - Load more', () => {
expect(paginationPage.getCurrentItemsPerPage()).toEqual('5');
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Move');
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
expect(contentNodeSelector.getDialogHeaderText()).toBe('Move \'' + 'A' + folderModel1.name + '\' to...');
contentNodeSelector.checkSearchInputIsDisplayed();
expect(contentNodeSelector.getSearchLabel()).toBe('Search');
contentNodeSelector.checkSelectedSiteIsDisplayed('My files');
contentNodeSelector.checkCancelButtonIsDisplayed();
contentNodeSelector.checkMoveCopyButtonIsDisplayed();
expect(contentNodeSelector.getMoveCopyButtonText()).toBe('MOVE');
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5);
infinitePaginationPage.clickLoadMoreButton();
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6);
infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickCancelButton();
contentNodeSelector.checkDialogIsNotDisplayed();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Move');
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
infinitePaginationPage.clickLoadMoreButton();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name);
contentServicesPage.doubleClickRow('F' + folderModel6.name);
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Move');
contentServicesPage.pressContextMenuActionNamed('Move');
contentNodeSelector.checkDialogIsDisplayed();
breadCrumbDropdownPage.clickParentFolder();
breadCrumbDropdownPage.checkBreadCrumbDropdownIsDisplayed();
breadCrumbDropdownPage.choosePath(contentServicesUser.id);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsNotDisplayed('A' + folderModel1.name);
breadCrumbPage.chooseBreadCrumb(contentServicesUser.id);
contentServicesPage.waitForTableBody();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
});
it('[C305051] Copy action on folder with - Load more', () => {
expect(paginationPage.getCurrentItemsPerPage()).toEqual('5');
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + 5 + ' of ' + 6);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Copy');
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
expect(contentNodeSelector.getDialogHeaderText()).toBe('Copy \'' + 'A' + folderModel1.name + '\' to...');
contentNodeSelector.checkSearchInputIsDisplayed();
expect(contentNodeSelector.getSearchLabel()).toBe('Search');
contentNodeSelector.checkSelectedSiteIsDisplayed('My files');
contentNodeSelector.checkCancelButtonIsDisplayed();
contentNodeSelector.checkMoveCopyButtonIsDisplayed();
expect(contentNodeSelector.getMoveCopyButtonText()).toBe('COPY');
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(5);
infinitePaginationPage.clickLoadMoreButton();
expect(contentNodeSelector.numberOfResultsDisplayed()).toBe(6);
infinitePaginationPage.checkLoadMoreButtonIsNotDisplayed();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickCancelButton();
contentNodeSelector.checkDialogIsNotDisplayed();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
contentListPage.rightClickOnRow('A' + folderModel1.name);
contentServicesPage.checkContextActionIsVisible('Copy');
contentServicesPage.pressContextMenuActionNamed('Copy');
contentNodeSelector.checkDialogIsDisplayed();
infinitePaginationPage.clickLoadMoreButton();
contentNodeSelector.contentListPage().dataTablePage().selectRowByContent('F' + folderModel6.name);
contentNodeSelector.contentListPage().dataTablePage().checkRowByContentIsSelected('F' + folderModel6.name);
contentNodeSelector.clickMoveCopyButton();
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
paginationPage.clickOnNextPage();
contentListPage.waitForTableBody();
contentServicesPage.doubleClickRow('F' + folderModel6.name);
contentServicesPage.checkContentIsDisplayed('A' + folderModel1.name);
});
});
});
@@ -19,9 +19,8 @@ import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { browser } from 'protractor';
import resources = require('../../util/resources');
import { LoginPage, StringUtil } from '@alfresco/adf-testing';
import { LoginPage, StringUtil, UploadActions } from '@alfresco/adf-testing';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { FileModel } from '../../models/ACS/fileModel';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
@@ -29,16 +28,13 @@ describe('Document List Component', () => {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const uploadActions = new UploadActions();
let acsUser = null;
const navBar = new NavigationBarPage();
beforeAll(() => {
this.alfrescoJsApi = new AlfrescoApi({
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
let acsUser = null;
const navBar = new NavigationBarPage();
describe('Gallery View', () => {
@@ -74,11 +70,11 @@ describe('Document List Component', () => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
funnyUser = await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
filePdfNode = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFile.location, pdfFile.name, '-my-');
fileTestNode = await uploadActions.uploadFile(this.alfrescoJsApi, testFile.location, testFile.name, '-my-');
fileDocxNode = await uploadActions.uploadFile(this.alfrescoJsApi, docxFile.location, docxFile.name, '-my-');
folderNode = await uploadActions.createFolder(this.alfrescoJsApi, folderName, '-my-');
filePDFSubNode = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFile.location, pdfFile.name, folderNode.entry.id);
filePdfNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-');
fileTestNode = await uploadActions.uploadFile(testFile.location, testFile.name, '-my-');
fileDocxNode = await uploadActions.uploadFile(docxFile.location, docxFile.name, '-my-');
folderNode = await uploadActions.createFolder(folderName, '-my-');
filePDFSubNode = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, folderNode.entry.id);
await loginPage.loginToContentServicesUsingUserModel(acsUser);
@@ -174,19 +170,19 @@ describe('Document List Component', () => {
afterAll(async (done) => {
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
if (filePdfNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, filePdfNode.entry.id);
await uploadActions.deleteFileOrFolder(filePdfNode.entry.id);
}
if (fileTestNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileTestNode.entry.id);
await uploadActions.deleteFileOrFolder(fileTestNode.entry.id);
}
if (fileDocxNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileDocxNode.entry.id);
await uploadActions.deleteFileOrFolder(fileDocxNode.entry.id);
}
if (filePDFSubNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, filePDFSubNode.entry.id);
await uploadActions.deleteFileOrFolder(filePDFSubNode.entry.id);
}
if (folderNode) {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, folderNode.entry.id);
await uploadActions.deleteFileOrFolder(folderNode.entry.id);
}
done();
});
@@ -15,18 +15,14 @@
* limitations under the License.
*/
import { LoginPage } from '@alfresco/adf-testing';
import { LoginPage, UploadActions, PaginationPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { PaginationPage } from '@alfresco/adf-testing';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { FolderModel } from '../../models/ACS/folderModel';
import { Util } from '../../util/util';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { browser } from 'protractor';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
describe('Document List - Pagination', function () {
const pagination = {
@@ -50,6 +46,7 @@ describe('Document List - Pagination', function () {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const paginationPage = new PaginationPage();
const navigationBarPage = new NavigationBarPage();
const acsUser = new AcsUserModel();
const newFolderModel = new FolderModel({ 'name': 'newFolder' });
@@ -60,17 +57,15 @@ describe('Document List - Pagination', function () {
const secondSetNumber = 25;
const folderTwoModel = new FolderModel({ 'name': 'folderTwo' });
const folderThreeModel = new FolderModel({ 'name': 'folderThree' });
beforeAll(async (done) => {
const uploadActions = new UploadActions();
fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension);
secondSetOfFiles = Util.generateSequenceFiles(10, secondSetNumber + 9, pagination.secondSetBase, pagination.extension);
this.alfrescoJsApi = new AlfrescoApi({
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
const uploadActions = new UploadActions(this.alfrescoJsApi);
beforeAll(async (done) => {
fileNames = Util.generateSequenceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension);
secondSetOfFiles = Util.generateSequenceFiles(10, secondSetNumber + 9, pagination.secondSetBase, pagination.extension);
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
@@ -78,14 +73,14 @@ describe('Document List - Pagination', function () {
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
const folderThreeUploadedModel = await uploadActions.createFolder(this.alfrescoJsApi, folderThreeModel.name, '-my-');
const newFolderUploadedModel = await uploadActions.createFolder(this.alfrescoJsApi, newFolderModel.name, '-my-');
const folderThreeUploadedModel = await uploadActions.createFolder(folderThreeModel.name, '-my-');
const newFolderUploadedModel = await uploadActions.createFolder(newFolderModel.name, '-my-');
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, newFolderUploadedModel.entry.id);
await uploadActions.createEmptyFiles(fileNames, newFolderUploadedModel.entry.id);
await uploadActions.createEmptyFiles(this.alfrescoJsApi, secondSetOfFiles, folderThreeUploadedModel.entry.id);
await uploadActions.createEmptyFiles(secondSetOfFiles, folderThreeUploadedModel.entry.id);
await loginPage.loginToContentServicesUsingUserModel(acsUser);
loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
@@ -127,9 +122,14 @@ describe('Document List - Pagination', function () {
paginationPage.checkNextPageButtonIsDisabled();
paginationPage.checkPreviousPageButtonIsDisabled();
browser.refresh();
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty);
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
});
it('[C260069] Should be able to set Items per page to 5', () => {
@@ -180,6 +180,8 @@ describe('Document List - Pagination', function () {
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
});
it('[C260067] Should be able to set Items per page to 10', () => {
@@ -210,6 +212,9 @@ describe('Document List - Pagination', function () {
browser.refresh();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
currentPage = 1;
});
it('[C260065] Should be able to set Items per page to 15', () => {

Some files were not shown because too many files have changed in this diff Show More