From f6c86ed5b9199e56a6c2b6d217697b0fe8fa784d Mon Sep 17 00:00:00 2001 From: Joze RIHTARSIC <joze.rihtarsic@ext.ec.europa.eu> Date: Wed, 29 Aug 2018 09:12:06 +0200 Subject: [PATCH] Add web ui modul - first version --- pom.xml | 2 +- smp-angular/.angular-cli.json | 58 + smp-angular/.editorconfig | 13 + smp-angular/.gitignore | 43 + smp-angular/e2e/app.e2e-spec.ts | 14 + smp-angular/e2e/app.po.ts | 11 + smp-angular/e2e/tsconfig.e2e.json | 12 + smp-angular/karma.conf.js | 44 + smp-angular/package-lock.json | 8760 +++++++++++++++++ smp-angular/package.json | 58 + smp-angular/pom.xml | 94 + smp-angular/protractor.conf.js | 30 + smp-angular/proxy-config.json | 8 + smp-angular/src/app/alert/alert.component.css | 27 + .../src/app/alert/alert.component.html | 4 + smp-angular/src/app/alert/alert.component.ts | 25 + smp-angular/src/app/alert/alert.service.ts | 67 + .../src/app/alerts/alerts.component.html | 164 + .../src/app/alerts/alerts.component.spec.ts | 25 + .../src/app/alerts/alerts.component.ts | 401 + smp-angular/src/app/alerts/alertsentry.ts | 13 + smp-angular/src/app/alerts/alertsresult.ts | 14 + smp-angular/src/app/app.component.css | 93 + smp-angular/src/app/app.component.html | 108 + smp-angular/src/app/app.component.spec.ts | 34 + smp-angular/src/app/app.component.ts | 85 + smp-angular/src/app/app.module.ts | 179 + smp-angular/src/app/app.routes.ts | 24 + .../src/app/appinfo/domibusinfo.service.ts | 31 + smp-angular/src/app/appinfo/domibusinfo.ts | 5 + .../cancel-dialog/cancel-dialog.component.css | 42 + .../cancel-dialog.component.html | 26 + .../cancel-dialog.component.spec.ts | 25 + .../cancel-dialog/cancel-dialog.component.ts | 17 + .../src/app/common/capitalizefirst.pipe.ts | 19 + .../column-picker/column-picker-base.ts | 10 + .../column-picker/column-picker.component.css | 1 + .../column-picker.component.html | 25 + .../column-picker.component.spec.ts | 25 + .../column-picker/column-picker.component.ts | 77 + .../attribute/ClickStopPropagation.ts | 11 + .../src/app/common/dirty-operations.ts | 3 + .../src/app/common/dirty.guard.spec.ts | 15 + smp-angular/src/app/common/dirty.guard.ts | 23 + .../domain-selector.component.css | 8 + .../domain-selector.component.html | 5 + .../domain-selector.component.spec.ts | 25 + .../domain-selector.component.ts | 55 + .../src/app/common/module/SharedModule.ts | 14 + .../page-header/page-header.component.css | 4 + .../page-header/page-header.component.html | 4 + .../page-header/page-header.component.spec.ts | 25 + .../page-header/page-header.component.ts | 27 + .../page-helper/page-helper.component.css | 0 .../page-helper/page-helper.component.html | 3 + .../page-helper/page-helper.component.spec.ts | 25 + .../page-helper/page-helper.component.ts | 51 + .../common/row-limiter/row-limiter-base.ts | 11 + .../row-limiter/row-limiter.component.css | 2 + .../row-limiter/row-limiter.component.html | 9 + .../row-limiter/row-limiter.component.spec.ts | 25 + .../row-limiter/row-limiter.component.ts | 30 + .../save-dialog/save-dialog.component.css | 42 + .../save-dialog/save-dialog.component.html | 27 + .../save-dialog/save-dialog.component.spec.ts | 26 + .../save-dialog/save-dialog.component.ts | 17 + .../searchtable/searchtable-controller.ts | 15 + .../searchtable/searchtable.component.css | 18 + .../searchtable/searchtable.component.html | 111 + .../searchtable/searchtable.component.ts | 215 + .../common/searchtable/searchtableresult.ts | 11 + .../app/customDate/clearInvalid.directive.ts | 34 + smp-angular/src/app/customDate/datePipe.ts | 41 + .../src/app/customDate/dateformat.service.ts | 21 + .../src/app/domain/domain-controller.ts | 32 + .../domain-details-dialog.component.css | 0 .../domain-details-dialog.component.html | 46 + .../domain-details-dialog.component.spec.ts | 25 + .../domain-details-dialog.component.ts | 20 + .../src/app/domain/domain.component.css | 15 + .../src/app/domain/domain.component.html | 38 + .../src/app/domain/domain.component.ts | 75 + smp-angular/src/app/domain/domainresult.ts | 12 + smp-angular/src/app/domain/domainro.ts | 15 + .../src/app/download/download.service.ts | 12 + .../errorlog-details.component.css | 0 .../errorlog-details.component.html | 44 + .../errorlog-details.component.spec.ts | 25 + .../errorlog-details.component.ts | 19 + .../src/app/errorlog/errorlog.component.css | 1 + .../src/app/errorlog/errorlog.component.html | 136 + .../src/app/errorlog/errorlog.component.ts | 339 + smp-angular/src/app/errorlog/errorlogentry.ts | 11 + .../src/app/errorlog/errorlogresult.ts | 14 + .../src/app/footer/footer.component.css | 13 + .../src/app/footer/footer.component.html | 3 + .../src/app/footer/footer.component.ts | 28 + .../src/app/guards/authenticated.guard.ts | 25 + .../src/app/guards/authorized-admin.guard.ts | 21 + .../src/app/guards/authorized.guard.ts | 28 + smp-angular/src/app/home/home.component.css | 3 + smp-angular/src/app/home/home.component.html | 16 + smp-angular/src/app/home/home.component.ts | 28 + .../src/app/http/extended-http-client.ts | 47 + .../src/app/http/http.event.service.ts | 15 + smp-angular/src/app/login/login.component.css | 1 + .../src/app/login/login.component.html | 33 + smp-angular/src/app/login/login.component.ts | 104 + .../app/messagefilter/backendfilterentry.ts | 35 + .../editmessagefilter-form.component.css | 16 + .../editmessagefilter-form.component.html | 62 + .../editmessagefilter-form.component.ts | 85 + .../messagefilter/messagefilter.component.css | 33 + .../messagefilter.component.html | 139 + .../messagefilter/messagefilter.component.ts | 476 + .../app/messagefilter/messagefilterresult.ts | 6 + .../app/messagefilter/routingcriteriaentry.ts | 9 + .../default-password-dialog.component.css | 43 + .../default-password-dialog.component.html | 17 + .../default-password-dialog.component.spec.ts | 25 + .../default-password-dialog.component.ts | 16 + .../src/app/security/domain.service.ts | 66 + smp-angular/src/app/security/domain.ts | 7 + .../app/security/is-authorized.directive.ts | 26 + .../app/security/security.event.service.ts | 49 + .../src/app/security/security.service.ts | 119 + smp-angular/src/app/security/user.ts | 9 + .../servicegroup/servicegroup-controller.ts | 50 + .../servicegroup-details-dialog.component.css | 0 ...servicegroup-details-dialog.component.html | 38 + ...vicegroup-details-dialog.component.spec.ts | 25 + .../servicegroup-details-dialog.component.ts | 20 + ...ervicegroup-extension-dialog.component.css | 0 ...rvicegroup-extension-dialog.component.html | 28 + ...cegroup-extension-dialog.component.spec.ts | 25 + ...servicegroup-extension-dialog.component.ts | 20 + ...servicegroup-metadata-dialog.component.css | 41 + ...ervicegroup-metadata-dialog.component.html | 55 + ...icegroup-metadata-dialog.component.spec.ts | 25 + .../servicegroup-metadata-dialog.component.ts | 17 + ...icegroup-metadatalist-dialog.component.css | 41 + ...cegroup-metadatalist-dialog.component.html | 77 + ...roup-metadatalist-dialog.component.spec.ts | 25 + ...vicegroup-metadatalist-dialog.component.ts | 124 + .../servicegroup/servicegroup.component.css | 18 + .../servicegroup/servicegroup.component.html | 73 + .../servicegroup/servicegroup.component.ts | 85 + .../src/app/servicegroup/servicegroupro.ts | 18 + .../src/app/truststore/trustore.model.ts | 12 + .../src/app/truststore/trustore.service.ts | 52 + .../truststore-dialog.component.css | 0 .../truststore-dialog.component.html | 32 + .../truststore-dialog.component.spec.ts | 25 + .../truststore-dialog.component.ts | 24 + .../truststore-upload.component.css | 0 .../truststore-upload.component.html | 36 + .../truststore-upload.component.spec.ts | 25 + .../truststore-upload.component.ts | 49 + .../app/truststore/truststore.component.css | 43 + .../app/truststore/truststore.component.html | 60 + .../truststore/truststore.component.spec.ts | 25 + .../app/truststore/truststore.component.ts | 130 + smp-angular/src/app/user/user-controller.ts | 32 + .../user-details-dialog.component.css | 0 .../user-details-dialog.component.html | 36 + .../user-details-dialog.component.spec.ts | 25 + .../user-details-dialog.component.ts | 20 + smp-angular/src/app/user/user.component.css | 15 + smp-angular/src/app/user/user.component.html | 31 + smp-angular/src/app/user/user.component.ts | 65 + smp-angular/src/app/user/userro.ts | 10 + smp-angular/src/assets/.gitkeep | 0 .../assets/icons/MaterialIcons-Regular.eot | Bin 0 -> 143258 bytes .../assets/icons/MaterialIcons-Regular.ttf | Bin 0 -> 128180 bytes .../assets/icons/MaterialIcons-Regular.woff | Bin 0 -> 57620 bytes .../assets/icons/MaterialIcons-Regular.woff2 | Bin 0 -> 44300 bytes smp-angular/src/assets/images/EC+Logo2.png | Bin 0 -> 9708 bytes .../src/assets/images/favicon-16x16.png | Bin 0 -> 852 bytes .../src/assets/images/favicon-32x32.png | Bin 0 -> 2138 bytes smp-angular/src/assets/images/favicon.ico | Bin 0 -> 9662 bytes smp-angular/src/assets/images/smp.png | Bin 0 -> 1037 bytes .../src/assets/images/smp_logo_icon.png | Bin 0 -> 109596 bytes .../src/assets/images/smp_logo_icon.svg | 321 + .../stylesheets/angularMaterial2Icons.css | 37 + .../src/environments/environment.prod.ts | 3 + smp-angular/src/environments/environment.ts | 8 + smp-angular/src/favicon.ico | Bin 0 -> 9662 bytes smp-angular/src/index.html | 17 + smp-angular/src/main.ts | 10 + .../main/resources/META-INF/web-fragment.xml | 16 + smp-angular/src/polyfills.ts | 38 + smp-angular/src/styles.css | 316 + smp-angular/src/test.ts | 32 + smp-angular/src/theme.scss | 84 + smp-angular/src/tsconfig.app.json | 13 + smp-angular/src/tsconfig.spec.json | 20 + smp-angular/src/typings.d.ts | 5 + smp-angular/tsconfig.json | 20 + smp-angular/tslint.json | 116 + 199 files changed, 16755 insertions(+), 1 deletion(-) create mode 100644 smp-angular/.angular-cli.json create mode 100644 smp-angular/.editorconfig create mode 100644 smp-angular/.gitignore create mode 100644 smp-angular/e2e/app.e2e-spec.ts create mode 100644 smp-angular/e2e/app.po.ts create mode 100644 smp-angular/e2e/tsconfig.e2e.json create mode 100644 smp-angular/karma.conf.js create mode 100644 smp-angular/package-lock.json create mode 100644 smp-angular/package.json create mode 100644 smp-angular/pom.xml create mode 100644 smp-angular/protractor.conf.js create mode 100644 smp-angular/proxy-config.json create mode 100644 smp-angular/src/app/alert/alert.component.css create mode 100644 smp-angular/src/app/alert/alert.component.html create mode 100644 smp-angular/src/app/alert/alert.component.ts create mode 100644 smp-angular/src/app/alert/alert.service.ts create mode 100644 smp-angular/src/app/alerts/alerts.component.html create mode 100644 smp-angular/src/app/alerts/alerts.component.spec.ts create mode 100644 smp-angular/src/app/alerts/alerts.component.ts create mode 100644 smp-angular/src/app/alerts/alertsentry.ts create mode 100644 smp-angular/src/app/alerts/alertsresult.ts create mode 100644 smp-angular/src/app/app.component.css create mode 100644 smp-angular/src/app/app.component.html create mode 100644 smp-angular/src/app/app.component.spec.ts create mode 100644 smp-angular/src/app/app.component.ts create mode 100644 smp-angular/src/app/app.module.ts create mode 100644 smp-angular/src/app/app.routes.ts create mode 100644 smp-angular/src/app/appinfo/domibusinfo.service.ts create mode 100644 smp-angular/src/app/appinfo/domibusinfo.ts create mode 100644 smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.css create mode 100644 smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.html create mode 100644 smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.spec.ts create mode 100644 smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.ts create mode 100644 smp-angular/src/app/common/capitalizefirst.pipe.ts create mode 100644 smp-angular/src/app/common/column-picker/column-picker-base.ts create mode 100644 smp-angular/src/app/common/column-picker/column-picker.component.css create mode 100644 smp-angular/src/app/common/column-picker/column-picker.component.html create mode 100644 smp-angular/src/app/common/column-picker/column-picker.component.spec.ts create mode 100644 smp-angular/src/app/common/column-picker/column-picker.component.ts create mode 100644 smp-angular/src/app/common/directive/attribute/ClickStopPropagation.ts create mode 100644 smp-angular/src/app/common/dirty-operations.ts create mode 100644 smp-angular/src/app/common/dirty.guard.spec.ts create mode 100644 smp-angular/src/app/common/dirty.guard.ts create mode 100644 smp-angular/src/app/common/domain-selector/domain-selector.component.css create mode 100644 smp-angular/src/app/common/domain-selector/domain-selector.component.html create mode 100644 smp-angular/src/app/common/domain-selector/domain-selector.component.spec.ts create mode 100644 smp-angular/src/app/common/domain-selector/domain-selector.component.ts create mode 100644 smp-angular/src/app/common/module/SharedModule.ts create mode 100644 smp-angular/src/app/common/page-header/page-header.component.css create mode 100644 smp-angular/src/app/common/page-header/page-header.component.html create mode 100644 smp-angular/src/app/common/page-header/page-header.component.spec.ts create mode 100644 smp-angular/src/app/common/page-header/page-header.component.ts create mode 100644 smp-angular/src/app/common/page-helper/page-helper.component.css create mode 100644 smp-angular/src/app/common/page-helper/page-helper.component.html create mode 100644 smp-angular/src/app/common/page-helper/page-helper.component.spec.ts create mode 100644 smp-angular/src/app/common/page-helper/page-helper.component.ts create mode 100644 smp-angular/src/app/common/row-limiter/row-limiter-base.ts create mode 100644 smp-angular/src/app/common/row-limiter/row-limiter.component.css create mode 100644 smp-angular/src/app/common/row-limiter/row-limiter.component.html create mode 100644 smp-angular/src/app/common/row-limiter/row-limiter.component.spec.ts create mode 100644 smp-angular/src/app/common/row-limiter/row-limiter.component.ts create mode 100644 smp-angular/src/app/common/save-dialog/save-dialog.component.css create mode 100644 smp-angular/src/app/common/save-dialog/save-dialog.component.html create mode 100644 smp-angular/src/app/common/save-dialog/save-dialog.component.spec.ts create mode 100644 smp-angular/src/app/common/save-dialog/save-dialog.component.ts create mode 100644 smp-angular/src/app/common/searchtable/searchtable-controller.ts create mode 100644 smp-angular/src/app/common/searchtable/searchtable.component.css create mode 100644 smp-angular/src/app/common/searchtable/searchtable.component.html create mode 100644 smp-angular/src/app/common/searchtable/searchtable.component.ts create mode 100644 smp-angular/src/app/common/searchtable/searchtableresult.ts create mode 100644 smp-angular/src/app/customDate/clearInvalid.directive.ts create mode 100644 smp-angular/src/app/customDate/datePipe.ts create mode 100644 smp-angular/src/app/customDate/dateformat.service.ts create mode 100644 smp-angular/src/app/domain/domain-controller.ts create mode 100644 smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.css create mode 100644 smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.html create mode 100644 smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.spec.ts create mode 100644 smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.ts create mode 100644 smp-angular/src/app/domain/domain.component.css create mode 100644 smp-angular/src/app/domain/domain.component.html create mode 100644 smp-angular/src/app/domain/domain.component.ts create mode 100644 smp-angular/src/app/domain/domainresult.ts create mode 100644 smp-angular/src/app/domain/domainro.ts create mode 100644 smp-angular/src/app/download/download.service.ts create mode 100644 smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.css create mode 100644 smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.html create mode 100644 smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.spec.ts create mode 100644 smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.ts create mode 100644 smp-angular/src/app/errorlog/errorlog.component.css create mode 100644 smp-angular/src/app/errorlog/errorlog.component.html create mode 100644 smp-angular/src/app/errorlog/errorlog.component.ts create mode 100644 smp-angular/src/app/errorlog/errorlogentry.ts create mode 100644 smp-angular/src/app/errorlog/errorlogresult.ts create mode 100644 smp-angular/src/app/footer/footer.component.css create mode 100644 smp-angular/src/app/footer/footer.component.html create mode 100644 smp-angular/src/app/footer/footer.component.ts create mode 100644 smp-angular/src/app/guards/authenticated.guard.ts create mode 100644 smp-angular/src/app/guards/authorized-admin.guard.ts create mode 100644 smp-angular/src/app/guards/authorized.guard.ts create mode 100644 smp-angular/src/app/home/home.component.css create mode 100644 smp-angular/src/app/home/home.component.html create mode 100644 smp-angular/src/app/home/home.component.ts create mode 100644 smp-angular/src/app/http/extended-http-client.ts create mode 100644 smp-angular/src/app/http/http.event.service.ts create mode 100644 smp-angular/src/app/login/login.component.css create mode 100644 smp-angular/src/app/login/login.component.html create mode 100644 smp-angular/src/app/login/login.component.ts create mode 100644 smp-angular/src/app/messagefilter/backendfilterentry.ts create mode 100644 smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.css create mode 100644 smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.html create mode 100644 smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.ts create mode 100644 smp-angular/src/app/messagefilter/messagefilter.component.css create mode 100644 smp-angular/src/app/messagefilter/messagefilter.component.html create mode 100644 smp-angular/src/app/messagefilter/messagefilter.component.ts create mode 100644 smp-angular/src/app/messagefilter/messagefilterresult.ts create mode 100644 smp-angular/src/app/messagefilter/routingcriteriaentry.ts create mode 100644 smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.css create mode 100644 smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.html create mode 100644 smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.spec.ts create mode 100644 smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.ts create mode 100644 smp-angular/src/app/security/domain.service.ts create mode 100644 smp-angular/src/app/security/domain.ts create mode 100644 smp-angular/src/app/security/is-authorized.directive.ts create mode 100644 smp-angular/src/app/security/security.event.service.ts create mode 100644 smp-angular/src/app/security/security.service.ts create mode 100644 smp-angular/src/app/security/user.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-controller.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.css create mode 100644 smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.html create mode 100644 smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.spec.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.css create mode 100644 smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.html create mode 100644 smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.spec.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.css create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.html create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.spec.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.css create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.html create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.spec.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroup.component.css create mode 100644 smp-angular/src/app/servicegroup/servicegroup.component.html create mode 100644 smp-angular/src/app/servicegroup/servicegroup.component.ts create mode 100644 smp-angular/src/app/servicegroup/servicegroupro.ts create mode 100644 smp-angular/src/app/truststore/trustore.model.ts create mode 100644 smp-angular/src/app/truststore/trustore.service.ts create mode 100644 smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.css create mode 100644 smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.html create mode 100644 smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.spec.ts create mode 100644 smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.ts create mode 100644 smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.css create mode 100644 smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.html create mode 100644 smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.spec.ts create mode 100644 smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.ts create mode 100644 smp-angular/src/app/truststore/truststore.component.css create mode 100644 smp-angular/src/app/truststore/truststore.component.html create mode 100644 smp-angular/src/app/truststore/truststore.component.spec.ts create mode 100644 smp-angular/src/app/truststore/truststore.component.ts create mode 100644 smp-angular/src/app/user/user-controller.ts create mode 100644 smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css create mode 100644 smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html create mode 100644 smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.spec.ts create mode 100644 smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts create mode 100644 smp-angular/src/app/user/user.component.css create mode 100644 smp-angular/src/app/user/user.component.html create mode 100644 smp-angular/src/app/user/user.component.ts create mode 100644 smp-angular/src/app/user/userro.ts create mode 100644 smp-angular/src/assets/.gitkeep create mode 100644 smp-angular/src/assets/icons/MaterialIcons-Regular.eot create mode 100644 smp-angular/src/assets/icons/MaterialIcons-Regular.ttf create mode 100644 smp-angular/src/assets/icons/MaterialIcons-Regular.woff create mode 100644 smp-angular/src/assets/icons/MaterialIcons-Regular.woff2 create mode 100644 smp-angular/src/assets/images/EC+Logo2.png create mode 100644 smp-angular/src/assets/images/favicon-16x16.png create mode 100644 smp-angular/src/assets/images/favicon-32x32.png create mode 100644 smp-angular/src/assets/images/favicon.ico create mode 100644 smp-angular/src/assets/images/smp.png create mode 100644 smp-angular/src/assets/images/smp_logo_icon.png create mode 100755 smp-angular/src/assets/images/smp_logo_icon.svg create mode 100644 smp-angular/src/assets/stylesheets/angularMaterial2Icons.css create mode 100644 smp-angular/src/environments/environment.prod.ts create mode 100644 smp-angular/src/environments/environment.ts create mode 100644 smp-angular/src/favicon.ico create mode 100644 smp-angular/src/index.html create mode 100644 smp-angular/src/main.ts create mode 100644 smp-angular/src/main/resources/META-INF/web-fragment.xml create mode 100644 smp-angular/src/polyfills.ts create mode 100644 smp-angular/src/styles.css create mode 100644 smp-angular/src/test.ts create mode 100644 smp-angular/src/theme.scss create mode 100644 smp-angular/src/tsconfig.app.json create mode 100644 smp-angular/src/tsconfig.spec.json create mode 100644 smp-angular/src/typings.d.ts create mode 100644 smp-angular/tsconfig.json create mode 100644 smp-angular/tslint.json diff --git a/pom.xml b/pom.xml index c8b0edf36..7350e0b8b 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ <modules> <module>smp-parent-pom</module> <module>smp-api</module> - <!-- module>smp-angular</module --> + <module>smp-angular</module> <module>smp-server-library</module> <module>smp-webapp</module> </modules> diff --git a/smp-angular/.angular-cli.json b/smp-angular/.angular-cli.json new file mode 100644 index 000000000..2a3a939b3 --- /dev/null +++ b/smp-angular/.angular-cli.json @@ -0,0 +1,58 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "project": { + "name": "domibus-MSH-web" + }, + "apps": [ + { + "root": "src", + "outDir": "dist", + "assets": [ + "assets", + "favicon.ico" + ], + "index": "index.html", + "main": "main.ts", + "polyfills": "polyfills.ts", + "test": "test.ts", + "tsconfig": "tsconfig.app.json", + "testTsconfig": "tsconfig.spec.json", + "prefix": "app", + "styles": [ + "styles.css", + "theme.scss" + ], + "scripts": [], + "environmentSource": "environments/environment.ts", + "environments": { + "dev": "environments/environment.ts", + "prod": "environments/environment.prod.ts" + } + } + ], + "e2e": { + "protractor": { + "config": "./protractor.conf.js" + } + }, + "lint": [ + { + "project": "src/tsconfig.app.json" + }, + { + "project": "src/tsconfig.spec.json" + }, + { + "project": "e2e/tsconfig.e2e.json" + } + ], + "test": { + "karma": { + "config": "./karma.conf.js" + } + }, + "defaults": { + "styleExt": "css", + "component": {} + } +} diff --git a/smp-angular/.editorconfig b/smp-angular/.editorconfig new file mode 100644 index 000000000..6e87a003d --- /dev/null +++ b/smp-angular/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/smp-angular/.gitignore b/smp-angular/.gitignore new file mode 100644 index 000000000..28abbf308 --- /dev/null +++ b/smp-angular/.gitignore @@ -0,0 +1,43 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/src/main/resources/META-INF/resources + +# dependencies +/node_modules +/node + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage/* +/libpeerconnection.log +npm-debug.log +testem.log +/typings +/npm-debug* + +# e2e +/e2e/*.js +/e2e/*.map + +#System Files +.DS_Store +Thumbs.db diff --git a/smp-angular/e2e/app.e2e-spec.ts b/smp-angular/e2e/app.e2e-spec.ts new file mode 100644 index 000000000..8bb4871d7 --- /dev/null +++ b/smp-angular/e2e/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { DomibusAngular2WebPage } from './app.po'; + +describe('domibus-MSH-web App', function() { + let page: DomibusAngular2WebPage; + + beforeEach(() => { + page = new DomibusAngular2WebPage(); + }); + + it('should display message saying app works', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('app works!'); + }); +}); diff --git a/smp-angular/e2e/app.po.ts b/smp-angular/e2e/app.po.ts new file mode 100644 index 000000000..f11e8e55a --- /dev/null +++ b/smp-angular/e2e/app.po.ts @@ -0,0 +1,11 @@ +import { browser, element, by } from 'protractor'; + +export class DomibusAngular2WebPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/smp-angular/e2e/tsconfig.e2e.json b/smp-angular/e2e/tsconfig.e2e.json new file mode 100644 index 000000000..ac7a37325 --- /dev/null +++ b/smp-angular/e2e/tsconfig.e2e.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types":[ + "jasmine", + "node" + ] + } +} diff --git a/smp-angular/karma.conf.js b/smp-angular/karma.conf.js new file mode 100644 index 000000000..84b4cd5ac --- /dev/null +++ b/smp-angular/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/0.13/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular/cli'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular/cli/plugins/karma') + ], + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + files: [ + { pattern: './src/test.ts', watched: false } + ], + preprocessors: { + './src/test.ts': ['@angular/cli'] + }, + mime: { + 'text/x-typescript': ['ts','tsx'] + }, + coverageIstanbulReporter: { + reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true + }, + angularCli: { + environment: 'dev' + }, + reporters: config.angularCli && config.angularCli.codeCoverage + ? ['progress', 'coverage-istanbul'] + : ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; diff --git a/smp-angular/package-lock.json b/smp-angular/package-lock.json new file mode 100644 index 000000000..bd86eaa01 --- /dev/null +++ b/smp-angular/package-lock.json @@ -0,0 +1,8760 @@ +{ + "name": "smp-web", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular/animations": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-4.2.5.tgz", + "integrity": "sha1-EjD2vGoY8quyPifx2a6e+v0aYDE=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/cdk": { + "version": "2.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-2.0.0-beta.8.tgz", + "integrity": "sha512-OOtK+AA14cmRG9AbUgvoKC9Tooz0N37GTaRSV+xziC8GxXHgwvTu4PFSFHlBnHPipOYC/tB2oP39j3KuurEMPA==", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.2.0.tgz", + "integrity": "sha1-39i4mD7DfCttf5AurWA5bXtXFZc=", + "dev": true, + "requires": { + "@ngtools/json-schema": "1.1.0", + "@ngtools/webpack": "1.5.0", + "autoprefixer": "6.7.7", + "chalk": "1.1.3", + "common-tags": "1.4.0", + "core-object": "3.1.3", + "css-loader": "0.28.4", + "cssnano": "3.10.0", + "denodeify": "1.2.1", + "diff": "3.2.0", + "ember-cli-normalize-entity-name": "1.0.0", + "ember-cli-string-utils": "1.1.0", + "exports-loader": "0.6.4", + "extract-text-webpack-plugin": "2.1.2", + "file-loader": "0.10.1", + "fs-extra": "3.0.1", + "get-caller-file": "1.0.2", + "glob": "7.1.2", + "heimdalljs": "0.2.5", + "heimdalljs-logger": "0.1.9", + "html-webpack-plugin": "2.29.0", + "inflection": "1.12.0", + "inquirer": "3.1.1", + "isbinaryfile": "3.0.2", + "istanbul-instrumenter-loader": "2.0.0", + "json-loader": "0.5.4", + "less": "2.7.2", + "less-loader": "4.0.4", + "license-webpack-plugin": "0.4.3", + "lodash": "4.17.4", + "memory-fs": "0.4.1", + "minimatch": "3.0.4", + "node-modules-path": "1.0.1", + "node-sass": "4.5.3", + "nopt": "4.0.1", + "opn": "4.0.2", + "portfinder": "1.0.13", + "postcss-loader": "1.3.3", + "postcss-url": "5.1.2", + "raw-loader": "0.5.1", + "resolve": "1.3.3", + "rsvp": "3.6.0", + "rxjs": "5.5.11", + "sass-loader": "6.0.6", + "script-loader": "0.7.0", + "semver": "5.3.0", + "silent-error": "1.1.0", + "source-map-loader": "0.2.1", + "style-loader": "0.13.2", + "stylus": "0.54.5", + "stylus-loader": "3.0.1", + "temp": "0.8.3", + "typescript": "2.3.4", + "url-loader": "0.5.9", + "walk-sync": "0.3.2", + "webpack": "2.4.1", + "webpack-dev-middleware": "1.11.0", + "webpack-dev-server": "2.4.5", + "webpack-merge": "2.6.1", + "zone.js": "0.8.12" + }, + "dependencies": { + "rxjs": { + "version": "5.5.11", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", + "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + } + } + }, + "@angular/common": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.2.5.tgz", + "integrity": "sha1-TVCpW0RM1Yz3BvDandFAfTuDNi4=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/compiler": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.2.5.tgz", + "integrity": "sha1-tIZ0x0VrKw3xBy1w5OZnr4bN34M=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/compiler-cli": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.2.5.tgz", + "integrity": "sha1-OzltZa3oOA83EgHUNh/JYqSax2o=", + "dev": true, + "requires": { + "@angular/tsc-wrapped": "4.2.5", + "minimist": "1.2.0", + "reflect-metadata": "0.1.10" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@angular/core": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.2.5.tgz", + "integrity": "sha1-YcG1iFwmIzLXN/vg9dcRUXWahGQ=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/forms": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.2.5.tgz", + "integrity": "sha1-p+VcjR9aToU37+Ht14NOSh9ZxuQ=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/http": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-4.2.5.tgz", + "integrity": "sha1-P/+OXPjogmK6zRyZYwQxLDxaOu8=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/material": { + "version": "2.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-2.0.0-beta.8.tgz", + "integrity": "sha512-4+OecvjU15i+l/vXBP2qEHdlsU9taK6kBhsWKsxNLK3+TAVoV5qjc2rjOucHtTwI/oOjyBXnLJP6pl4tuLEUQw==", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/platform-browser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.2.5.tgz", + "integrity": "sha1-2d3+D4EITpjvJKefSF27ES54oMQ=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/platform-browser-dynamic": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.2.5.tgz", + "integrity": "sha1-gHbsSohcw6GiPF5UDECn/dP357I=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/platform-server": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-4.2.5.tgz", + "integrity": "sha1-1OPX6H0KdwYV3cSr0cfAdVRJYHk=", + "requires": { + "parse5": "3.0.2", + "tslib": "1.7.1", + "xhr2": "0.1.4" + } + }, + "@angular/router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-4.2.5.tgz", + "integrity": "sha1-fzZAiUk6saBurF8MYowPn9sRAI8=", + "requires": { + "tslib": "1.7.1" + } + }, + "@angular/tsc-wrapped": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.2.5.tgz", + "integrity": "sha1-Ci/CMwYXgNK+QCmWGHh4wng4t+M=", + "dev": true, + "requires": { + "tsickle": "0.21.6" + } + }, + "@ngtools/json-schema": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", + "dev": true + }, + "@ngtools/webpack": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.5.0.tgz", + "integrity": "sha1-tr5Y2FfUH4mZdR1rvD0h6EvJd8o=", + "dev": true, + "requires": { + "enhanced-resolve": "3.3.0", + "loader-utils": "1.1.0", + "magic-string": "0.19.1", + "source-map": "0.5.6" + } + }, + "@swimlane/ngx-datatable": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-datatable/-/ngx-datatable-9.3.0.tgz", + "integrity": "sha1-rrNLtywhAiNiFLR0z9mAgsUandA=" + }, + "@types/file-saver": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-0.0.1.tgz", + "integrity": "sha1-Ojo3iEuEDixMVXcMn6daPhF4Tvg=", + "dev": true + }, + "@types/jasmine": { + "version": "2.5.47", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.47.tgz", + "integrity": "sha1-u7qbzw6V54kMb0pHOU6LrKqWDrY=", + "dev": true + }, + "@types/node": { + "version": "7.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.33.tgz", + "integrity": "sha512-8fVvl6Yyk3jZvSYxRMS9/AmZJ5RXCOP9N4xSlykyBViVESu751pxHYTN14Embn1Fem78YwEHdC7p7KGQQpwunw==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "2.53.42", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz", + "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=", + "dev": true + }, + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "ajv": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.0.tgz", + "integrity": "sha1-wXNQJMXaLvdcwZBxMHPUTwmL9IY=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "0.1.0", + "json-schema-traverse": "0.3.1", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } + }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.0.3" + } + }, + "arr-flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", + "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000697", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + } + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.17.4", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", + "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", + "dev": true + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.3" + } + }, + "blocking-proxy": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", + "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "bn.js": { + "version": "4.11.7", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz", + "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==", + "dev": true + }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "content-type": "1.0.2", + "debug": "2.6.7", + "depd": "1.1.0", + "http-errors": "1.6.1", + "iconv-lite": "0.4.15", + "on-finished": "2.3.0", + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.15" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + } + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.0.6", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.0" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000697", + "electron-to-chromium": "1.3.15" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", + "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000697", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + } + }, + "caniuse-db": { + "version": "1.0.30000697", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000697.tgz", + "integrity": "sha1-IM5qnO7vTvShXcjoDy6PuQSejXc=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + }, + "dependencies": { + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + } + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", + "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "clap": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", + "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "clean-css": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.5.tgz", + "integrity": "sha1-0JqHoCpTdRF1iXlq52oGPKzbVBo=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-deep": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", + "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "dev": true, + "requires": { + "for-own": "1.0.0", + "is-plain-object": "2.0.3", + "kind-of": "3.2.2", + "shallow-clone": "0.1.2" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.3.tgz", + "integrity": "sha1-G1Sl4dz3fJkEVdTe6pjFZEFtyJM=", + "dev": true, + "requires": { + "q": "1.5.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.0.1.tgz", + "integrity": "sha1-uma3sqpWT+n0XWAEtAA60s8RaCg=", + "dev": true, + "requires": { + "app-root-path": "2.0.1", + "css-selector-tokenizer": "0.7.0", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.6", + "sprintf-js": "1.0.3" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.2", + "color-convert": "1.9.0", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.2" + } + }, + "color-name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", + "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.2" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "common-tags": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", + "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", + "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "compression": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", + "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "bytes": "2.3.0", + "compressible": "2.0.10", + "debug": "2.2.0", + "on-headers": "1.0.1", + "vary": "1.1.1" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", + "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", + "dev": true, + "requires": { + "debug": "2.6.7", + "finalhandler": "1.0.3", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + }, + "core-object": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.3.tgz", + "integrity": "sha1-3zmbMxG9sMkJ6Krokp/DwcSyWIA=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.3.tgz", + "integrity": "sha1-lSdx6w3dwcs/ovb75RpSLpOz7go=", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", + "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.12", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz", + "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "0.1.8" + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.0", + "source-map": "0.5.6" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" + } + }, + "directory-encoder": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/directory-encoder/-/directory-encoder-0.7.2.tgz", + "integrity": "sha1-WbTiqk8lQi9sY7UntGL14tDdLFg=", + "dev": true, + "requires": { + "fs-extra": "0.23.1", + "handlebars": "1.3.0", + "img-stats": "0.5.2" + }, + "dependencies": { + "fs-extra": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz", + "integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.15.tgz", + "integrity": "sha1-CDl5NIkcvPrrvRi4KpW1pIETg2k=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "ember-cli-normalize-entity-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz", + "integrity": "sha1-CxT3vLxZmqEXtf3cgeT9A8S61bc=", + "dev": true, + "requires": { + "silent-error": "1.1.0" + } + }, + "ember-cli-string-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz", + "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.6" + } + }, + "ensure-posix-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz", + "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=", + "dev": true + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "dev": true + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "dev": true, + "requires": { + "create-hash": "1.1.3" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "exports-loader": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "source-map": "0.5.6" + } + }, + "express": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", + "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "1.1.0", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.4", + "qs": "6.4.0", + "range-parser": "1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "external-editor": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", + "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", + "dev": true, + "requires": { + "iconv-lite": "0.4.18", + "jschardet": "1.4.2", + "tmp": "0.0.31" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extract-text-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", + "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", + "dev": true, + "requires": { + "async": "2.5.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.0.1" + } + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fast-deep-equal": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz", + "integrity": "sha1-XG9FmaumszPuM0Li7ZeGcvEAH40=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", + "integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=", + "dev": true, + "requires": { + "loader-utils": "1.1.0" + } + }, + "file-saver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", + "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=" + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "finalhandler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", + "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "dev": true, + "requires": { + "debug": "2.6.7", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "forwarded": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", + "dev": true + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.0", + "universalify": "0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "optional": true, + "requires": { + "globule": "1.2.0" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "gulp-util": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", + "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "1.0.12", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.1", + "vinyl": "0.5.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "handlebars": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", + "integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=", + "dev": true, + "requires": { + "optimist": "0.3.7", + "uglify-js": "2.3.6" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", + "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=", + "dev": true, + "optional": true, + "requires": { + "async": "0.2.10", + "optimist": "0.3.7", + "source-map": "0.1.43" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "heimdalljs": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.5.tgz", + "integrity": "sha1-aqVDCO7nk7ZCz/nPlHgURfN3MKw=", + "dev": true, + "requires": { + "rsvp": "3.2.1" + }, + "dependencies": { + "rsvp": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=", + "dev": true + } + } + }, + "heimdalljs-logger": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz", + "integrity": "sha1-12raTkW3u294b8nAEKaOsuL68XY=", + "dev": true, + "requires": { + "debug": "2.6.8", + "heimdalljs": "0.2.5" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "wbuf": "1.7.2" + } + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.2.tgz", + "integrity": "sha1-1zvD/0SJQkCIGM5gm/P7DqfvTrc=", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.5", + "commander": "2.9.0", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.0.23" + } + }, + "html-webpack-plugin": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz", + "integrity": "sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "html-minifier": "3.5.2", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "pretty-error": "2.1.1", + "toposort": "1.0.3" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", + "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.8", + "extend": "3.0.1" + } + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.1.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", + "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.1.0" + } + }, + "supports-color": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.1.0.tgz", + "integrity": "sha1-kswUuz2tiSjKVlbDPhmhnyCvXHo=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "img-stats": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/img-stats/-/img-stats-0.5.2.tgz", + "integrity": "sha1-wgNJbELy2esuWrgjL6dWurMsnis=", + "dev": true, + "requires": { + "xmldom": "0.1.27" + } + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inquirer": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.1.1.tgz", + "integrity": "sha512-H50sHQwgvvaTBd3HpKMVtL/u6LoHDvYym51gd7bGQe/+9HkCE+J0/3N5FJLfd6O6oz44hHewC2Pc2LodzWVafQ==", + "dev": true, + "requires": { + "ansi-escapes": "2.0.0", + "chalk": "1.1.3", + "cli-cursor": "2.1.0", + "cli-width": "2.1.0", + "external-editor": "2.0.4", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.0", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", + "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", + "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.10", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.2.14", + "wordwrap": "1.0.0" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "optional": true + } + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "istanbul-instrumenter-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz", + "integrity": "sha1-5UkpAKsLuoNe+oAkywC+mz7qJwA=", + "dev": true, + "requires": { + "convert-source-map": "1.5.0", + "istanbul-lib-instrument": "1.7.3", + "loader-utils": "0.2.17", + "object-assign": "4.1.1" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.3.tgz", + "integrity": "sha1-klsjkWPqvdaMxASPUsL6T4mez6c=", + "dev": true, + "requires": { + "babel-generator": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.3.0" + } + }, + "jasmine": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz", + "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2", + "jasmine-core": "2.6.1" + } + }, + "jasmine-core": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.1.tgz", + "integrity": "sha1-ZqYc3baZlY42E+3vNGyZb2MR/Ds=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.1.0.tgz", + "integrity": "sha1-uKp1hN9Y5Nq2Gs2++3bQlqo4Zj8=", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz", + "integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=", + "dev": true + }, + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jschardet": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.4.2.tgz", + "integrity": "sha1-KqEH8UKvQSHRRWWdRPUIMJYeaZo=", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-loader": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz", + "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", + "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "karma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", + "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "body-parser": "1.17.2", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.2", + "core-js": "2.4.1", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.3.6", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "0.5.6", + "tmp": "0.0.31", + "useragent": "2.1.13" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.2.14" + } + }, + "karma-cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", + "dev": true, + "requires": { + "resolve": "1.3.3" + } + }, + "karma-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-remap-istanbul": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/karma-remap-istanbul/-/karma-remap-istanbul-0.6.0.tgz", + "integrity": "sha1-l/O3cAZSVPm0ck8tm+SjouG69vw=", + "dev": true, + "requires": { + "istanbul": "0.4.5", + "remap-istanbul": "0.9.5" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "less": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", + "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=", + "dev": true, + "requires": { + "errno": "0.1.4", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.3.6", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.81.0", + "source-map": "0.5.6" + } + }, + "less-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.4.tgz", + "integrity": "sha1-tKjEOEPmXGfS6i6xRltcQjPVAGo=", + "dev": true, + "requires": { + "clone": "2.1.1", + "loader-utils": "1.1.0", + "pify": "2.3.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "license-webpack-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-0.4.3.tgz", + "integrity": "sha1-+diNTrwEQHoAYejMrCZXH4jlGhY=", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "dev": true, + "optional": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "magic-string": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz", + "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=", + "dev": true, + "requires": { + "vlq": "0.2.2" + } + }, + "make-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", + "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "matcher-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.4.tgz", + "integrity": "sha1-L2auCGmZbynkPQtiyD3R1D5YF1U=", + "dev": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md2": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/md2/-/md2-0.0.29.tgz", + "integrity": "sha512-wYy/gs92vkewX9dclSe5Q/r8hqO7qLYmduAfCNbgFYhGykrjLRuc55J/OliPeBRYpQHMs4H3RyHat8VAHPVNaQ==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true, + "optional": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "no-case": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", + "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.14" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0" + } + } + } + }, + "node-libs-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "node-modules-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", + "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", + "dev": true + }, + "node-sass": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", + "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", + "dev": true, + "optional": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.81.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.1" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.12" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", + "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=", + "requires": { + "@types/node": "6.0.79" + }, + "dependencies": { + "@types/node": { + "version": "6.0.79", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.79.tgz", + "integrity": "sha512-7F3/P6MkTPA0QxOstRqfcnoReCUy5V/QG92cyBoZSPnqdX44L8TtNELSVfN56gAttm3YWj9cEi8FRIPVq0WmeQ==" + } + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pbkdf2": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", + "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.8", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqs": "2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqid": "4.1.1" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.1.3", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.1.3", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.1.3", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", + "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-load-config": "1.2.0" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3" + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "requires": { + "postcss": "6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.1.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", + "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.1.0" + } + }, + "supports-color": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.1.0.tgz", + "integrity": "sha1-kswUuz2tiSjKVlbDPhmhnyCvXHo=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.1.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", + "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.1.0" + } + }, + "supports-color": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.1.0.tgz", + "integrity": "sha1-kswUuz2tiSjKVlbDPhmhnyCvXHo=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.1.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", + "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.1.0" + } + }, + "supports-color": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.1.0.tgz", + "integrity": "sha1-kswUuz2tiSjKVlbDPhmhnyCvXHo=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.1.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", + "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.1.0" + } + }, + "supports-color": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.1.0.tgz", + "integrity": "sha1-kswUuz2tiSjKVlbDPhmhnyCvXHo=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.17" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "uniqs": "2.0.0" + } + }, + "postcss-url": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-5.1.2.tgz", + "integrity": "sha1-mLMWW+jVkkccsMqt3iwNH4MvEz4=", + "dev": true, + "requires": { + "directory-encoder": "0.7.2", + "js-base64": "2.1.9", + "mime": "1.3.6", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "path-is-absolute": "1.0.1", + "postcss": "5.2.17" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "uniqs": "2.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "2.0.5" + } + }, + "protractor": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz", + "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=", + "dev": true, + "requires": { + "@types/node": "6.0.79", + "@types/q": "0.0.32", + "@types/selenium-webdriver": "2.53.42", + "blocking-proxy": "0.0.5", + "chalk": "1.1.3", + "glob": "7.1.2", + "jasmine": "2.6.0", + "jasminewd2": "2.1.0", + "optimist": "0.6.1", + "q": "1.4.1", + "saucelabs": "1.3.0", + "selenium-webdriver": "3.0.1", + "source-map-support": "0.4.15", + "webdriver-js-extender": "1.0.0", + "webdriver-manager": "12.0.6" + }, + "dependencies": { + "@types/node": { + "version": "6.0.79", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.79.tgz", + "integrity": "sha512-7F3/P6MkTPA0QxOstRqfcnoReCUy5V/QG92cyBoZSPnqdX44L8TtNELSVfN56gAttm3YWj9cEi8FRIPVq0WmeQ==", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "webdriver-manager": { + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", + "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "xml2js": "0.4.17" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + } + } + }, + "proxy-addr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", + "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "dev": true, + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.3.0" + } + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true, + "optional": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.7", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + } + }, + "reflect-metadata": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", + "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=", + "dev": true + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remap-istanbul": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.9.5.tgz", + "integrity": "sha1-oYYXsfMe7Fp9vud1OCmLd1YGqqg=", + "dev": true, + "requires": { + "amdefine": "1.0.1", + "gulp-util": "3.0.7", + "istanbul": "0.4.5", + "minimatch": "3.0.4", + "source-map": "0.5.6", + "through2": "2.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "rsvp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.0.tgz", + "integrity": "sha1-Zm3/+nFffhDu929NHlb7JWb85cM=", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "rxjs": { + "version": "5.5.11", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", + "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } + }, + "sass-loader": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", + "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", + "dev": true, + "requires": { + "async": "2.5.0", + "clone-deep": "0.3.0", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "saucelabs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", + "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.2.0" + } + }, + "script-loader": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.0.tgz", + "integrity": "sha1-aF3H5waeDe56kmdPDrxbD1W6pew=", + "dev": true, + "requires": { + "raw-loader": "0.5.1" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz", + "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=", + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "rimraf": "2.6.1", + "tmp": "0.0.30", + "xml2js": "0.4.17" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + } + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "5.3.0" + } + }, + "send": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", + "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "dev": true, + "requires": { + "debug": "2.6.7", + "depd": "1.1.0", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", + "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "batch": "0.6.1", + "debug": "2.6.8", + "escape-html": "1.0.3", + "http-errors": "1.6.1", + "mime-types": "2.1.15", + "parseurl": "1.3.1" + } + }, + "serve-static": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", + "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "requires": { + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "silent-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", + "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", + "dev": true, + "requires": { + "debug": "2.6.8" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + }, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.2.tgz", + "integrity": "sha1-8CEqhVDkyUaMjM6u79LjSTwDOtU=", + "dev": true, + "requires": { + "debug": "2.6.8", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.1.9" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-loader": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.1.tgz", + "integrity": "sha1-SBJr6SML1H+tBeRqjDwuPS2r5Qc=", + "dev": true, + "requires": { + "async": "0.9.2", + "loader-utils": "0.2.17", + "source-map": "0.1.43" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.8", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "2.6.8", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "dev": true, + "requires": { + "loader-utils": "1.1.0" + } + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "1.7.0", + "debug": "2.6.8", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "stylus-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", + "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.3", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + }, + "tapable": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz", + "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", + "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", + "dev": true, + "requires": { + "readable-stream": "2.0.6", + "xtend": "4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz", + "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "toposort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.3.tgz", + "integrity": "sha1-8CzYp0vYvi/A6YYRw7rLlaFxhpw=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ts-helpers/-/ts-helpers-1.1.2.tgz", + "integrity": "sha1-/Gm+nx87rtAfsaDvjUz+dIgU2DU=" + }, + "ts-node": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.0.4.tgz", + "integrity": "sha1-oUdevyT9Ti7i+6ixqhYFuXe95QY=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "1.1.3", + "diff": "3.2.0", + "make-error": "1.3.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15", + "tsconfig": "6.0.0", + "v8flags": "2.1.1", + "yn": "1.3.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tsconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "dev": true, + "requires": { + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tsickle": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", + "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", + "dev": true, + "requires": { + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map": "0.5.6", + "source-map-support": "0.4.15" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tslib": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", + "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=" + }, + "tslint": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.4.3.tgz", + "integrity": "sha1-dhyEArgONHt3M6BDkKdXslNYBGc=", + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "colors": "1.1.2", + "commander": "2.9.0", + "diff": "3.2.0", + "glob": "7.1.2", + "minimatch": "3.0.4", + "resolve": "1.3.3", + "semver": "5.3.0", + "tslib": "1.7.1", + "tsutils": "2.5.1" + } + }, + "tsutils": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.5.1.tgz", + "integrity": "sha1-wgATkMee7Bpcz6esEtWZY5aD4M8=", + "dev": true, + "requires": { + "tslib": "1.7.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.15" + } + }, + "typescript": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=", + "dev": true + }, + "uglify-js": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.23.tgz", + "integrity": "sha512-miLHbO2QcdQGxL/q1wLcUr6TGIRHhMnpKyywUbAdZRkJMqCeZCDmBsgYu1Wlj26xHBXN+sU5tHaWh38QsN208g==", + "dev": true, + "requires": { + "commander": "2.9.0", + "source-map": "0.5.6" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "universalify": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.0.tgz", + "integrity": "sha1-nrHEZR3rzGcMyU8adXYjMruWd3g=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.3.6" + } + }, + "url-parse": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", + "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "useragent": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.1.13.tgz", + "integrity": "sha1-u6Q+iqJNXOuDwpN0c+EC4h33TBA=", + "dev": true, + "requires": { + "lru-cache": "2.2.4", + "tmp": "0.0.31" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vlq": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", + "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=", + "dev": true + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "walk-sync": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.2.tgz", + "integrity": "sha512-FMB5VqpLqOCcqrzA9okZFc0wq0Qbmdm396qJxvQZhDpyu0W95G9JCmp74tx7iyYnyOcBtUuKJsgIKAqjozvmmQ==", + "dev": true, + "requires": { + "ensure-posix-path": "1.0.2", + "matcher-collection": "1.0.4" + } + }, + "watchpack": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.3.1.tgz", + "integrity": "sha1-fYaTkHsozmAT5/NhCqKhrPB9rYc=", + "dev": true, + "requires": { + "async": "2.5.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.0" + } + }, + "webdriver-js-extender": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", + "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "2.53.42", + "selenium-webdriver": "2.53.3" + }, + "dependencies": { + "adm-zip": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", + "dev": true + }, + "sax": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", + "dev": true + }, + "selenium-webdriver": { + "version": "2.53.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", + "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", + "dev": true, + "requires": { + "adm-zip": "0.4.4", + "rimraf": "2.6.1", + "tmp": "0.0.24", + "ws": "1.1.2", + "xml2js": "0.4.4" + } + }, + "tmp": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", + "dev": true + }, + "xml2js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", + "dev": true, + "requires": { + "sax": "0.6.1", + "xmlbuilder": "4.2.1" + } + } + } + }, + "webpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.4.1.tgz", + "integrity": "sha1-FakdvjSWbYpLmcfWVu/ZKi5ab2o=", + "dev": true, + "requires": { + "acorn": "5.1.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "async": "2.5.0", + "enhanced-resolve": "3.3.0", + "interpret": "1.0.3", + "json-loader": "0.5.4", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "0.2.17", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.0.0", + "source-map": "0.5.6", + "supports-color": "3.2.3", + "tapable": "0.2.6", + "uglify-js": "2.8.29", + "watchpack": "1.3.1", + "webpack-sources": "0.2.3", + "yargs": "6.6.0" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "source-list-map": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", + "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "webpack-sources": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", + "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=", + "dev": true, + "requires": { + "source-list-map": "1.1.2", + "source-map": "0.5.6" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", + "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.3.6", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0" + } + }, + "webpack-dev-server": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.4.5.tgz", + "integrity": "sha1-MThM6BE2vhCAtLTN4OubkOVO5s8=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "chokidar": "1.7.0", + "compression": "1.6.2", + "connect-history-api-fallback": "1.3.0", + "express": "4.15.3", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "opn": "4.0.2", + "portfinder": "1.0.13", + "serve-index": "1.9.0", + "sockjs": "0.3.18", + "sockjs-client": "1.1.2", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "3.2.3", + "webpack-dev-middleware": "1.11.0", + "yargs": "6.6.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-merge": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-2.6.1.tgz", + "integrity": "sha1-8dgB0sXTn4P/7J8RkkCz476ZShw=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "webpack-sources": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", + "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.5.6" + }, + "dependencies": { + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xml2js": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "4.2.1" + } + }, + "xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "optional": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz", + "integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=", + "dev": true, + "requires": { + "object-assign": "4.1.1" + } + }, + "zone.js": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.12.tgz", + "integrity": "sha1-hv9QU8mK7CkaC/S7rFAdaUoFz7s=" + } + } +} diff --git a/smp-angular/package.json b/smp-angular/package.json new file mode 100644 index 000000000..7d40cd3b3 --- /dev/null +++ b/smp-angular/package.json @@ -0,0 +1,58 @@ +{ + "name": "smp-web", + "version": "0.0.0", + "license": "MIT", + "angular-cli": {}, + "scripts": { + "ng": "ng", + "start": "ng serve --proxy-config proxy-config.json", + "build": "ng build --dev --base-href /smp/", + "prod": "ng build --prod --output-path=./src/main/resources/META-INF/resources", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^4.1.0", + "@angular/cdk": "^2.0.0-beta.8", + "@angular/common": "^4.1.0", + "@angular/compiler": "^4.1.0", + "@angular/core": "^4.1.0", + "@angular/forms": "^4.1.0", + "@angular/http": "^4.1.0", + "@angular/material": "^2.0.0-beta.8", + "@angular/platform-browser": "^4.1.0", + "@angular/platform-browser-dynamic": "^4.1.0", + "@angular/platform-server": "^4.1.0", + "@angular/router": "^4.1.0", + "@swimlane/ngx-datatable": "^9.1.0", + "core-js": "^2.4.1", + "file-saver": "^1.3.3", + "hammerjs": "^2.0.8", + "md2": "0.0.29", + "rxjs": "^5.5.11", + "ts-helpers": "^1.1.1", + "zone.js": "^0.8.9" + }, + "devDependencies": { + "@angular/cli": "^1.0.1", + "@angular/compiler-cli": "^4.1.0", + "@types/file-saver": "0.0.1", + "@types/jasmine": "2.5.47", + "@types/node": "^7.0.14", + "codelyzer": "~3.0.0", + "jasmine-core": "2.6.1", + "jasmine-spec-reporter": "4.1.0", + "karma": "1.7.0", + "karma-chrome-launcher": "^2.0.0", + "karma-cli": "^1.0.1", + "karma-jasmine": "^1.0.2", + "karma-remap-istanbul": "^0.6.0", + "protractor": "~5.1.1", + "rxjs": "^5.5.11", + "ts-node": "3.0.4", + "tslint": "^5.1.0", + "typescript": "~2.3.2" + } +} diff --git a/smp-angular/pom.xml b/smp-angular/pom.xml new file mode 100644 index 000000000..6262aa184 --- /dev/null +++ b/smp-angular/pom.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>eu.europa.ec.edelivery</groupId> + <artifactId>smp-parent-pom</artifactId> + <version>4.0.1-SNAPSHOT</version> + <relativePath>../smp-parent-pom/pom.xml</relativePath> + </parent> + <artifactId>smp-angular</artifactId> + <packaging>jar</packaging> + <name>SMP Angular UI</name> + + <properties> + <frontend-maven-plugin.version>1.3</frontend-maven-plugin.version> + <node.version>v8.9.1</node.version> + <npm.version>5.3.0</npm.version> + </properties> + + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>com.github.eirslett</groupId> + <artifactId>frontend-maven-plugin</artifactId> + <version>${frontend-maven-plugin.version}</version> + <executions> + <execution> + <id>install node and npm</id> + <goals> + <goal>install-node-and-npm</goal> + </goals> + <configuration> + <nodeVersion>${node.version}</nodeVersion> + <npmVersion>${npm.version}</npmVersion> + </configuration> + </execution> + + <execution> + <id>npm install</id> + <goals> + <goal>npm</goal> + </goals> + <configuration> + <arguments>install --unsafe-perm</arguments> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </pluginManagement> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <configuration> + <filesets> + <fileset> + <directory>./src/main/resources/META-INF/resources</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + </filesets> + </configuration> + </plugin> + <plugin> + <groupId>com.github.eirslett</groupId> + <artifactId>frontend-maven-plugin</artifactId> + <executions> + <execution> + <id>prod</id> + <goals> + <goal>npm</goal> + </goals> + <configuration> + <arguments>run-script prod</arguments> + </configuration> + <phase>generate-resources</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> diff --git a/smp-angular/protractor.conf.js b/smp-angular/protractor.conf.js new file mode 100644 index 000000000..1c5e1e5a4 --- /dev/null +++ b/smp-angular/protractor.conf.js @@ -0,0 +1,30 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './e2e/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + beforeLaunch: function() { + require('ts-node').register({ + project: 'e2e/tsconfig.e2e.json' + }); + }, + onPrepare() { + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; diff --git a/smp-angular/proxy-config.json b/smp-angular/proxy-config.json new file mode 100644 index 000000000..5917edca5 --- /dev/null +++ b/smp-angular/proxy-config.json @@ -0,0 +1,8 @@ +{ + "/ui/**": { + "target": "http://localhost:8080/smp/", + "changeOrigin": true, + "secure": false, + "logLevel": "debug" + } +} diff --git a/smp-angular/src/app/alert/alert.component.css b/smp-angular/src/app/alert/alert.component.css new file mode 100644 index 000000000..da456774d --- /dev/null +++ b/smp-angular/src/app/alert/alert.component.css @@ -0,0 +1,27 @@ +.alert { + padding: 20px; + color: white; + opacity: 1; + transition: opacity 0.6s; + margin-bottom: 15px; +} + +.alert-error {background-color: #f44336;} +.alert-success {background-color: #4CAF50;} +.alert-info {background-color: #2196F3;} +.alert-warning {background-color: #ff9800;} + +.closebtn { + margin-left: 15px; + color: white; + font-weight: bold; + float: right; + font-size: 22px; + line-height: 20px; + cursor: pointer; + transition: 0.3s; +} + +.closebtn:hover { + color: black; +} diff --git a/smp-angular/src/app/alert/alert.component.html b/smp-angular/src/app/alert/alert.component.html new file mode 100644 index 000000000..7ca0234c3 --- /dev/null +++ b/smp-angular/src/app/alert/alert.component.html @@ -0,0 +1,4 @@ +<div *ngIf="message" [ngClass]="{ 'alert': message, 'alert-success': message.type === 'success', 'alert-error': message.type === 'error' }" id="alertmessage_id"> + <span class="closebtn" (click)="clearAlert()">×</span> + {{message.text}} +</div> diff --git a/smp-angular/src/app/alert/alert.component.ts b/smp-angular/src/app/alert/alert.component.ts new file mode 100644 index 000000000..7a69f9369 --- /dev/null +++ b/smp-angular/src/app/alert/alert.component.ts @@ -0,0 +1,25 @@ +import {Component} from "@angular/core"; +import {AlertService} from "./alert.service"; + +@Component({ + moduleId: module.id, + selector: 'alert', + templateUrl: 'alert.component.html', + styleUrls: ['./alert.component.css'] +}) + +export class AlertComponent { + message: any; + + public static readonly MAX_COUNT_CSV: number = 10000; + + constructor(private alertService: AlertService) { } + + ngOnInit() { + this.alertService.getMessage().subscribe(message => { this.message = message; }); + } + + clearAlert():void { + this.alertService.clearAlert(); + } +} diff --git a/smp-angular/src/app/alert/alert.service.ts b/smp-angular/src/app/alert/alert.service.ts new file mode 100644 index 000000000..341650a04 --- /dev/null +++ b/smp-angular/src/app/alert/alert.service.ts @@ -0,0 +1,67 @@ +import {Injectable} from '@angular/core'; +import {Router, NavigationStart, NavigationEnd} from '@angular/router'; +import {Observable} from 'rxjs'; +import {Subject} from 'rxjs/Subject'; + +@Injectable() +export class AlertService { + private subject = new Subject<any>(); + private previousRoute: string; + + + //TODO move the logic in the ngInit block + constructor (private router: Router) { + this.previousRoute = ''; + // clear alert message on route change + router.events.subscribe(event => { + if (event instanceof NavigationStart) { + if (this.isRouteChanged(event.url)) { + console.log('Clearing alert when navigating from [' + this.previousRoute + '] to [' + event.url + ']'); + this.clearAlert(); + } else { + console.log('Alert kept when navigating from [' + this.previousRoute + '] to [' + event.url + ']'); + } + } else if (event instanceof NavigationEnd) { + let navigationEnd: NavigationEnd = event; + this.previousRoute = navigationEnd.url; + } + }); + } + + getPath (url: string): string { + var parser = document.createElement('a'); + parser.href = url; + return parser.pathname; + } + + isRouteChanged (currentRoute: string): boolean { + let result = false; + let previousRoutePath = this.getPath(this.previousRoute); + let currentRoutePath = this.getPath(currentRoute); + if (previousRoutePath !== currentRoutePath) { + result = true; + } + return result; + } + + clearAlert (): void { + this.subject.next(); + } + + success (message: string, keepAfterNavigationChange = false) { + this.subject.next({type: 'success', text: message}); + } + + error (message: string, keepAfterNavigationChange = false) { + this.subject.next({type: 'error', text: message}); + } + + exception (message: string, error: any, keepAfterNavigationChange = false): void { + const errMsg = error.message || (error.json ? error.json().message : error ); + this.error(message + ' \n' + errMsg, keepAfterNavigationChange); + } + + getMessage (): Observable<any> { + return this.subject.asObservable(); + } +} diff --git a/smp-angular/src/app/alerts/alerts.component.html b/smp-angular/src/app/alerts/alerts.component.html new file mode 100644 index 000000000..de8e1439c --- /dev/null +++ b/smp-angular/src/app/alerts/alerts.component.html @@ -0,0 +1,164 @@ +<page-header id="alertsheader_id">Alerts</page-header> + +<div class="selectionCriteria"> + <md-card> + <md-card-content> + <div class="panel"> + <form name="filterForm" #filterForm="ngForm" (ngSubmit)="search()"> + <!-- Processed --> + <md-select placeholder="Processed" [(ngModel)]="filter.processed" name="processed" id="processed_id"> + <md-option [value]="''"></md-option> + <md-option *ngFor="let aprocessed of aProcessedValues" [value]="aprocessed"> + {{aprocessed}} + </md-option> + </md-select> + <!-- Alert Type (Basic) --> + <md-select placeholder="Alert Type" [(ngModel)]="filter.alertType" name="alertType" + id="alerttype_id" (change)="onAlertTypeChanged(filter.alertType)"> + <md-option [value]="''"></md-option> + <md-option *ngFor="let atype of aTypes" [value]="atype"> + {{atype}} + </md-option> + </md-select> + <!-- Alert Id (Advanced) --> + <md-input-container *ngIf="advancedSearch"> + <input mdInput placeholder="Alert Id" name="alertId" [(ngModel)]="filter.alertId" + #alertId="ngModel" id="alertid_id"> + </md-input-container> + <!-- Alert Level (Basic) --> + <md-select placeholder="Alert Level" [(ngModel)]="filter.alertLevel" name="alertLevel" + id="alertlevel_id"> + <md-option [value]="''"> + </md-option> + <md-option *ngFor="let alevel of aLevels" [value]="alevel"> + {{alevel}} + </md-option> + </md-select> + <!-- Creation From (Basic) --> + <md2-datepicker placeholder="Creation From:" appClearInvalid + [(ngModel)]="filter.creationFrom" + name="creationFrom" + [max]="timestampCreationFromMaxDate" + (change)='onTimestampCreationFromChange($event)' + [type]="'datetime'" + #timestampControl="ngModel" id="creationfrom_id"> + </md2-datepicker> + <!-- Creation To (Basic) --> + <md2-datepicker placeholder="Creation To:" appClearInvalid + [(ngModel)]="filter.creationTo" + name="creationTo" + [min]="timestampCreationToMinDate" + [max]="timestampCreationToMaxDate" + (change)='onTimestampCreationToChange($event)' + [type]="'datetime'" + #timestampControl="ngModel" id="creationto_id"> + </md2-datepicker> + <!-- Reporting From --> + <md2-datepicker placeholder="Reporting From:" appClearInvalid + [(ngModel)]="filter.reportingFrom" + name="reportingFrom" + [max]="timestampReportingFromMaxDate" + (change)='onTimestampReportingFromChange($event)' + [type]="'datetime'" + #timestampControl="ngModel" id="reportingfrom_id" *ngIf="advancedSearch"> + </md2-datepicker> + <!-- Reporting To --> + <md2-datepicker placeholder="Reporting To:" appClearInvalid + [(ngModel)]="filter.reportingTo" + name="reportingTo" + [min]="timestampReportingToMinDate" + [max]="timestampReportingToMaxDate" + (change)='onTimestampReportingToChange($event)' + [type]="'datetime'" + #timestampControl="ngModel" id="reportingto_id" *ngIf="advancedSearch"> + </md2-datepicker> + + <!-- Alert Type Criteria --> + <div class="panel" *ngIf="isAlertTypeDefined()"> + <md-card> + <div> + <md-card-title> + {{filter.alertType}} + </md-card-title> + </div> + <md-card-content> + <md-input-container *ngFor="let item of items; let i = index"> + <input mdInput placeholder={{item}} name={{item}} [(ngModel)]="dynamicFilters[i]" + #{{item}}="ngModel" id={{item}}_id> + </md-input-container> + </md-card-content> + </md-card> + </div> + + <!-- Search Button and Basic/Advanced Search--> + <div class="searchArea"> + <button md-raised-button color="primary" [disabled]="!filterForm.form.valid" id="searchbutton_id"> + <md-icon>search</md-icon> + <span>Search</span> + </button> + <a href="#" *ngIf="!advancedSearch" (click)="toggleAdvancedSearch()" id="advancedlink_id">Advanced</a> + <a href="#" *ngIf="advancedSearch" (click)="toggleAdvancedSearch()" id="basiclink_id">Basic</a> + </div> + </form> + </div> + </md-card-content> + </md-card> + + <ng-template #rowProcessed let-row="row" let-value="value" ngx-datatable-cell-template> + <input autofocus type="checkbox" [checked]="value" id="processed{{row.$$index}}_id" (click)="setProcessedValue(row)"/> + </ng-template> + +</div> + +<div class="panel"> + <div class="group-filter-button"> + <span class="row-button"> + <app-row-limiter [pageSizes]="rowLimiter.pageSizes" + (onPageSizeChanged)="changePageSize($event.value)"></app-row-limiter> + </span> + <span class="column-filter-button"> + <app-column-picker [allColumns]="columnPicker.allColumns" [selectedColumns]="columnPicker.selectedColumns" + (onSelectedColumnsChanged)="columnPicker.changeSelectedColumns($event)"></app-column-picker> + </span> + <button md-icon-button color="primary" [disabled]="!isSaveAsCSVButtonEnabled()" (click)="saveAsCSV()" + id="saveascsvbutton_id" md-tooltip="Export as CSV"> + <img src="assets/images/exportCSV.svg" width="30" height="30"> + </button> + </div> + +<!-- Data Table --> + <ngx-datatable + id="alertsTable" + class="material striped" + [rows]="rows" + [columns]="columnPicker.selectedColumns" + [columnMode]="'force'" + [headerHeight]="50" + [footerHeight]="50" + [rowHeight]="'auto'" + [scrollbarH]="true" + [externalPaging]="true" + [externalSorting]="true" + [loadingIndicator]="loading" + [count]="count" + [offset]="offset" + [limit]="rowLimiter.pageSize" + [sorts]="[{prop: 'Creation Time', dir: 'desc'}]" + (page)='onPage($event)' + (sort)="onSort($event)" + (activate)="onActivate($event)"> + </ngx-datatable> + + <div class="group-action-button"> + <button id="alertsCancelButton" md-raised-button color="primary" (click)="cancel()" + [disabled]="buttonsDisabled"> + <md-icon>cancel</md-icon> + <span>Cancel</span> + </button> + <button id="alertsSaveButton" md-raised-button color="primary" (click)="save(false)" + [disabled]="buttonsDisabled"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + </div> +</div> diff --git a/smp-angular/src/app/alerts/alerts.component.spec.ts b/smp-angular/src/app/alerts/alerts.component.spec.ts new file mode 100644 index 000000000..09c3964cf --- /dev/null +++ b/smp-angular/src/app/alerts/alerts.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from "@angular/core/testing"; + +import {AlertsComponent} from "./alerts.component"; + +describe('AlertsComponent', () => { + let component: AlertsComponent; + let fixture: ComponentFixture<AlertsComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [AlertsComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AlertsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/alerts/alerts.component.ts b/smp-angular/src/app/alerts/alerts.component.ts new file mode 100644 index 000000000..64a179024 --- /dev/null +++ b/smp-angular/src/app/alerts/alerts.component.ts @@ -0,0 +1,401 @@ +import {Component, TemplateRef, ViewChild} from "@angular/core"; +import {ColumnPickerBase} from "../common/column-picker/column-picker-base"; +import {RowLimiterBase} from "../common/row-limiter/row-limiter-base"; +import {isNullOrUndefined} from "util"; +import {DownloadService} from "../download/download.service"; +import {AlertComponent} from "../alert/alert.component"; +import {Observable} from "rxjs/Observable"; +import {AlertsResult} from "./alertsresult"; +import {Http, URLSearchParams, Response, Headers} from "@angular/http"; +import {AlertService} from "../alert/alert.service"; +import {AlertsEntry} from "./alertsentry"; +import {CancelDialogComponent} from "../common/cancel-dialog/cancel-dialog.component"; +import {MdDialog} from "@angular/material"; +import {SaveDialogComponent} from "../common/save-dialog/save-dialog.component"; + +@Component({ + moduleId: module.id, + templateUrl: 'alerts.component.html', + providers: [] +}) + +export class AlertsComponent { + + @ViewChild('rowProcessed') rowProcessed: TemplateRef<any>; + + static readonly ALERTS_URL: string = 'rest/alerts'; + + columnPicker: ColumnPickerBase = new ColumnPickerBase(); + rowLimiter: RowLimiterBase = new RowLimiterBase(); + + advancedSearch: boolean; + loading: boolean = false; + + // data table + rows = []; + count: number = 0; + offset: number = 10; + //default value + orderBy: string = "creationTime"; + //default value + asc: boolean = false; + + buttonsDisabled: boolean = true; + + // Mocked values + aTypes = ['MSG_COMMUNICATION_FAILURE','MSG_TEST']; + aLevels = ['HIGH', 'MEDIUM', 'LOW']; + + aProcessedValues = ['PROCESSED', 'UNPROCESSED']; + + filter: any = {}; + + dynamicFilters = []; + + items=[]; + + timestampCreationFromMaxDate: Date = new Date(); + timestampCreationToMinDate: Date = null; + timestampCreationToMaxDate: Date = new Date(); + timestampReportingFromMaxDate: Date = new Date(); + timestampReportingToMinDate: Date = null; + timestampReportingToMaxDate: Date = new Date(); + + constructor(private http: Http, private alertService: AlertService, public dialog: MdDialog) { + + } + + ngOnInit() { + this.filter.alertType = null; + + this.columnPicker.allColumns = [ + { name: 'Processed', cellTemplate: this.rowProcessed, width: 50 }, + { name: 'Alert Id' }, + { name: 'Alert Type' }, + { name: 'Alert Level', width: 50 }, + { name: 'Alert Text' }, + { name: 'Creation Time' }, + { name: 'Reporting Time' }, + { name: 'Parameters', sortable: false } + ]; + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Processed", "ID", "Alert Type", "Alert Level", "Creation Time", "Reporting Time", "Parameters"].indexOf(col.name) != -1 + }); + + this.page(this.offset, this.rowLimiter.pageSize, this.orderBy, this.asc); + } + + getAlertsEntries(offset: number, pageSize: number, orderBy: string, asc: boolean): Observable<AlertsResult> { + let searchParams: URLSearchParams = new URLSearchParams(); + searchParams.set('page', offset.toString()); + searchParams.set('pageSize', pageSize.toString()); + searchParams.set('orderBy', orderBy); + + // filters + if(this.filter.processed) { + searchParams.set('processed', this.filter.processed==='PROCESSED'?'true':'false'); + } + + if(this.filter.alertType) { + searchParams.set('alertType', this.filter.alertType); + } + + if(this.filter.alertId) { + searchParams.set('alertId', this.filter.alertId); + } + + if(this.filter.alertLevel) { + searchParams.set('alertLevel', this.filter.alertLevel); + } + + if(this.filter.creationFrom) { + searchParams.set('creationFrom', this.filter.creationFrom.getTime()); + } + + if(this.filter.creationTo) { + searchParams.set('creationTo', this.filter.creationTo.getTime()); + } + + if(this.filter.reportingFrom) { + searchParams.set('reportingFrom', this.filter.reportingFrom.getTime()); + } + + if(this.filter.reportingTo) { + searchParams.set('reportingTo', this.filter.reportingTo.getTime()); + } + + if(this.dynamicFilters.length > 0) { + let d : string[]; + for(let i = 0; i < this.dynamicFilters.length; i++) { + d[i] = ''; + } + for(let filter in this.dynamicFilters) { + d[filter] = this.dynamicFilters[filter]; + } + searchParams.set('parameters', d.toString()); + } + + if (asc != null) { + searchParams.set('asc', asc.toString()); + } + + return this.http.get(AlertsComponent.ALERTS_URL, { + search: searchParams + }).map((response: Response) => + response.json() + ); + } + + page(offset, pageSize, orderBy, asc) { + this.loading = true; + + let newEntries: AlertsEntry[] = []; + + // MOCK info + /*let entry1: AlertsEntry = new AlertsEntry(true, 'alertId1', this.aTypes[0], this.aLevels[0], 'aText1', new Date(), new Date(), ['asasas','ddsdsd','ddd']); + let entry2: AlertsEntry = new AlertsEntry(false, 'alertId2', this.aTypes[1], this.aLevels[1], 'aText2', new Date(), new Date(), ['tryrty','trurutru']); + let entry3: AlertsEntry = new AlertsEntry(true, 'alertId3', this.aTypes[0], this.aLevels[0], 'aText3', new Date(), new Date(), ['aaaaa','bbbbb','cccccc']); + newEntries[0] = entry1; + newEntries[1] = entry2; + newEntries[2] = entry3; + + // information of parameters and values + let entry: any; + for(entry in newEntries) { + let buildParams = [], pos = 0, params = this.getDynamicParameters(newEntries[entry].alertType); + for(let param in params) { + buildParams[pos] = params[param] + '=' + newEntries[entry].parameters[pos++]; + } + newEntries[entry].parameters = buildParams; + } + + this.rows = newEntries; + + this.count = 3; + this.offset = offset; + this.rowLimiter.pageSize = pageSize; + this.orderBy = orderBy; + this.asc = asc; + this.loading = false;*/ + + this.getAlertsEntries(offset, pageSize, orderBy, asc).subscribe( (result: AlertsResult) => { + console.log("alerts response: " + result); + this.offset = offset; + this.rowLimiter.pageSize = pageSize; + this.orderBy = orderBy; + this.asc = asc; + this.count = result.count; + + const start = offset * pageSize; + const end = start + pageSize; + const newRows = [...result.alertsEntries]; + + let index = 0; + for(let i = start; i <end; i++) { + newRows[i] = result.alertsEntries[index++]; + } + + // information of parameters and values + let entry: any; + for(entry in newRows) { + let buildParams = [], pos = 0, params = this.getDynamicParameters(newRows[entry].alertType); + for(let param in params) { + buildParams[pos] = params[param] + '=' + newRows[entry].parameters[pos++]; + } + newRows[entry].parameters = buildParams; + } + + this.rows = newRows; + + this.filter = result.filter; + this.aLevels = result.alertsLevels; + this.aTypes = result.alertsType; + + this.loading = false; + + if(this.count > AlertComponent.MAX_COUNT_CSV) { + this.alertService.error("Maximum number of rows reached for downloading CSV"); + } + }, (error: any) => { + console.log("error getting the alerts:" + error); + this.loading = false; + this.alertService.error("Error occured:" + error); + }); + } + + search() { + console.log("Searching using filter:" + this.filter); + this.page(0, this.rowLimiter.pageSize, this.orderBy, this.asc); + } + + toggleAdvancedSearch() { + this.advancedSearch = !this.advancedSearch; + return false;//to prevent default navigation + } + + onAlertTypeChanged(alertType: string) { + this.items = this.getDynamicParameters(alertType); + } + + getDynamicParameters(alertType:string): string[] { + if(!isNullOrUndefined(alertType) && alertType != '') { + // just for testing begin: MOCK + if(alertType == 'MSG_COMMUNICATION_FAILURE') { + return ['MSG_COMM1', 'MSG_COMM2', 'MSG_COMM3'] + } else { + return ['MSG_TEST1', 'MSG_TEST2']; + } + // just for testing end + } else { + return []; + } + } + + onTimestampCreationFromChange(event) { + this.timestampCreationToMinDate = event.value; + } + + onTimestampCreationToChange(event) { + this.timestampCreationFromMaxDate = event.value; + } + + onTimestampReportingFromChange(event) { + this.timestampReportingToMinDate = event.value; + } + + onTimestampReportingToChange(event) { + this.timestampReportingFromMaxDate = event.value; + } + + + // datatable methods + + onActivate(event) { + console.log('Activate Event', event); + + // Prepared if in the future we will show details of alerts + /*if ("dblclick" === event.type) { + this.details(event.row); + }*/ + } + + onPage(event) { + console.log('Page Event', event); + this.page(event.offset, event.pageSize, this.orderBy, this.asc); + } + + onSort(event) { + console.log('Sort Event', event); + let ascending = true; + if (event.newValue === 'desc') { + ascending = false; + } + this.page(this.offset, this.rowLimiter.pageSize, event.column.prop, ascending); + } + + changePageSize(newPageLimit: number) { + console.log('New page limit:', newPageLimit); + this.rowLimiter.pageSize = newPageLimit; + this.page(0, newPageLimit, this.orderBy, this.asc); + } + + /** + * Method that checks if CSV Button export can be enabled + * @returns {boolean} true, if button can be enabled; and false, otherwise + */ + isSaveAsCSVButtonEnabled() : boolean { + return this.rows.length < AlertComponent.MAX_COUNT_CSV; + } + + saveAsCSV() { + if(!this.buttonsDisabled) { + this.save(true); + } else { + DownloadService.downloadNative(AlertsComponent.ALERTS_URL + "/csv" + this.getFilterPath()); + } + } + + private getFilterPath() { + let result = '?'; + //filters + if(this.filter.processed != null) { + result += 'processed=' + (this.filter.processed==='PROCESSED') + '&'; + } + + if(this.filter.alertType) { + result += 'alertType=' + this.filter.alertType + '&'; + } + + if(this.filter.alertId) { + result += 'alertId=' + this.filter.alertId + '&'; + } + + if(this.filter.alertLevel) { + result += 'alertLevel=' + this.filter.alertLevel + '&'; + } + + if(this.filter.creationFrom) { + result += 'creationFrom=' + this.filter.creationFrom.getTime() + '&'; + } + + if(this.filter.creationTo) { + result += 'creationTo=' + this.filter.creationTo.getTime() + '&'; + } + + if(this.filter.reportingFrom) { + result += 'reportingFrom=' + this.filter.reportingFrom.getTime() + '&'; + } + + if(this.filter.reportingTo) { + result += 'reportingTo=' + this.filter.reportingTo.getTime() + '&'; + } + + return result; + + } + + public isAlertTypeDefined(): boolean { + return !isNullOrUndefined(this.filter.alertType) && this.filter.alertType != ''; + } + + cancel() { + let dialogRef = this.dialog.open(CancelDialogComponent); + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.buttonsDisabled = true; + this.page(this.offset, this.rowLimiter.pageSize, this.orderBy, this.asc); + } + }); + } + + save(withDownloadCSV: boolean) { + let headers = new Headers({'Content-Type': 'application/json'}); + let dialogRef = this.dialog.open(SaveDialogComponent); + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.http.put(AlertsComponent.ALERTS_URL, JSON.stringify(this.rows), {headers: headers}).subscribe(res => { + this.alertService.success("The operation 'update alerts' completed successfully.", false); + this.page(this.offset, this.rowLimiter.pageSize, this.orderBy, this.asc); + if(withDownloadCSV) { + DownloadService.downloadNative(AlertsComponent.ALERTS_URL + "/csv"); + } + }, err => { + this.alertService.error("The operation 'update alerts' not completed successfully.", false); + this.page(this.offset, this.rowLimiter.pageSize, this.orderBy, this.asc); + }); + } else { + if(withDownloadCSV) { + DownloadService.downloadNative(AlertsComponent.ALERTS_URL + "/csv"); + } + } + }); + } + + setProcessedValue(row) { + this.buttonsDisabled = false; + row.processed = !row.processed; + this.rows[row.$$index] = row; + } + +} diff --git a/smp-angular/src/app/alerts/alertsentry.ts b/smp-angular/src/app/alerts/alertsentry.ts new file mode 100644 index 000000000..6d03991f6 --- /dev/null +++ b/smp-angular/src/app/alerts/alertsentry.ts @@ -0,0 +1,13 @@ +export class AlertsEntry { + constructor(public processed: boolean, + public alertId: string, + public alertType: string, + public alertLevel: string, + public alertText: string, + public creationTime: Date, + public reportingTime: Date, + public parameters: string[]) + { + + } +} diff --git a/smp-angular/src/app/alerts/alertsresult.ts b/smp-angular/src/app/alerts/alertsresult.ts new file mode 100644 index 000000000..04ebfbf58 --- /dev/null +++ b/smp-angular/src/app/alerts/alertsresult.ts @@ -0,0 +1,14 @@ +import {AlertsEntry} from "./alertsentry"; + +export class AlertsResult { + + constructor(public alertsEntries: Array<AlertsEntry>, + public pageSize: number, + public count: number, + public filter: any, + public alertsType: Array<string>, + public alertsLevels: Array<string> + ) { + + } +} diff --git a/smp-angular/src/app/app.component.css b/smp-angular/src/app/app.component.css new file mode 100644 index 000000000..6fa6ae891 --- /dev/null +++ b/smp-angular/src/app/app.component.css @@ -0,0 +1,93 @@ +[md-raised-button] { + width: 100%; +} + +md-sidenav-container { + width: 100%; + height: 100%; + /*border: solid green;*/ + +} + +md-sidenav { + text-align: center; + box-shadow: 7px 7px 10px #9B9B9B; + /*border: dashed red;*/ +} + +md-sidenav.menu-expanded { + width: 220px; + +} + +md-sidenav.menu-collapsed { + width: 50px; +} + +html, body, material-app, .my-content { + margin: 0; + width: 100%; + height: 100%; + /*border: dashed red;*/ +} + +.menu-expanded .sideNavButton { + text-align: left; + padding-left: 20%; +} + +.menu-collapsed .sideNavButton { + text-align: center; + padding: 0 !important; + max-width: 50px !important; + min-width: 0px !important; +} + +.menu-collapsed .sideNavSubmenu { + margin-left: -10px; +} + +.menu-collapsed span.mat-expansion-indicator { + display: none !important; +} + +.mat-expansion-panel-header { + padding-left: 0; +} + +.menu-collapsed .mat-expansion-panel-header { + padding-right: 0px; + margin-right: -10px; +} + +.menu-collapsed.mat-sidenav { + min-width: 1vw !important; +} + +.menu-expanded #topLogo { + display: flex; + justify-content: center; + align-items: center; + padding-top: 18px; + padding-bottom: 20px; + padding-left: 15px; +} + +.menu-collapsed #topLogo { + display: block; + padding-top: 30px; + padding-bottom: 12px; + padding-left: 0; + height: 70px; +} + +#collapse_id, #expand_id { + text-align: center; + width: 50px; + height: 50px; + min-width: 0 +} + +.menu-collapsed .sideNavButton span { + display: none; +} diff --git a/smp-angular/src/app/app.component.html b/smp-angular/src/app/app.component.html new file mode 100644 index 000000000..83c3585fe --- /dev/null +++ b/smp-angular/src/app/app.component.html @@ -0,0 +1,108 @@ +<md-sidenav-container > + <md-sidenav mode="side" opened="true" ngClass="{{menuClass}}"> + <!-- sidenav content --> + <div id="topLogo"> + <img src="assets/images/smp_logo_icon.svg" [attr.height]="fullMenu ? '74px' : '40px'" [attr.width]="fullMenu ? '74px' : '40px'"/> + <div id="topLogoText" *ngIf="fullMenu"> + <h1>eDeliver SMP <span>Administration <br>Console</span></h1> + </div> + </div> + + <button md-raised-button class="sideNavButton" [routerLink]="['/']" id="messages_id"> + <md-icon md-tooltip="Search participants" mdTooltipDisabled="{{fullMenu}}" mdTooltipPosition="right">search</md-icon> + <span>Participants</span> + </button> + + <button md-raised-button class="sideNavButton" [routerLink]="['/user']" *ngIf="hasAdmin()" id="user_id"> + <md-icon md-tooltip="Users" mdTooltipDisabled="{{fullMenu}}" mdTooltipPosition="right">people</md-icon> + <span>Users</span> + </button> + + <button md-raised-button class="sideNavButton" [routerLink]="['/truststore']" *ngIf="hasAdmin()" id="truststore_id"> + <md-icon md-tooltip="Truststore" mdTooltipDisabled="{{fullMenu}}" mdTooltipPosition="right">vpn_key</md-icon> + <span>Keystore</span> + </button> + <button md-raised-button class="sideNavButton" [routerLink]="['/domain']" *ngIf="hasAdmin()" id="domain_id"> + <md-icon md-tooltip="Domain" mdTooltipDisabled="{{fullMenu}}" mdTooltipPosition="right">domain</md-icon> + <span>Domain</span> + </button> + + <div class="collapse-button"> + <button *ngIf="fullMenu" md-raised-button id="expand_id" (click)="toggleMenu()"> + <md-icon md-tooltip="Collapse" mdTooltipPosition="right">chevron_left</md-icon> + </button> + + <button *ngIf="!fullMenu" md-raised-button id="collapse_id" (click)="toggleMenu()"> + <md-icon md-tooltip="Esxpand" mdTooltipPosition="right">chevron_right</md-icon> + </button> + </div> + + <div id="bottomLogo" *ngIf="fullMenu"> + <div> + <img src="assets/images/EC+Logo2.png"/> + </div> + <div class="domibusTextSmall" + style="display: flex;flex-direction: column-reverse;text-align: left;color:#004494;padding-left: 5px;"> + <div> + Connecting Europe + </div> + <div style="font-size: 10pt"> + CEF Digital + </div> + </div> + </div> + + </md-sidenav> + + <!-- primary content --> + <div id=".my-content" style="position:absolute; bottom:5px; top:5px; right: 5px; left: 5px"> + + + <div id="sandwichMenuHolder"> + + + <domain-selector *ngIf="currentUser" [currentComponent]="outlet.activated ? outlet.component : null"></domain-selector> + + <div class="helpMenu"> + <page-helper></page-helper> + </div> + <div id="sandwichMenu"> + <button md-icon-button [md-menu-trigger-for]="settingsMenu" id="settingsmenu_id" md-tooltip="Menu"> + <md-icon>menu</md-icon> + </button> + + <md-menu x-position="before" #settingsMenu="mdMenu"> + + <div *ngIf="currentUser"> + + <button md-menu-item disabled="true" id="currentuser_id"> + <md-icon>person</md-icon> + <span>{{currentUser}}</span> + </button> + + <hr/> + + <button md-menu-item (click)="logout($event)" id="logout_id"> + <md-icon>power_settings_new</md-icon> + <span>Logout</span> + </button> + + </div> + + <div *ngIf="!currentUser" style="text-align: center; vertical-align: middle;margin: 2px;"> + <button md-menu-item disabled="true"> + <md-icon>person_outline</md-icon> + <span>Not logged in</span> + </button> + </div> + + </md-menu> + </div> + </div> + <div id="routerHolder" style="min-height: 100%" > + <router-outlet></router-outlet> + </div> + <alert></alert> + </div> + +</md-sidenav-container> diff --git a/smp-angular/src/app/app.component.spec.ts b/smp-angular/src/app/app.component.spec.ts new file mode 100644 index 000000000..5be2cb3fa --- /dev/null +++ b/smp-angular/src/app/app.component.spec.ts @@ -0,0 +1,34 @@ +/* tslint:disable:no-unused-variable */ + +import { TestBed, async } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + }); + TestBed.compileComponents(); + }); + + it('should create the app', async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + })); + + it(`should have as title 'app works!'`, async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('app works!'); + })); + + it('should render title in a h1 tag', async(() => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain('app works!'); + })); +}); diff --git a/smp-angular/src/app/app.component.ts b/smp-angular/src/app/app.component.ts new file mode 100644 index 000000000..bc10a567a --- /dev/null +++ b/smp-angular/src/app/app.component.ts @@ -0,0 +1,85 @@ +import {Component, OnInit, ViewChild} from "@angular/core"; +import {SecurityService} from "./security/security.service"; +import {Router, RouterOutlet} from "@angular/router"; +import {SecurityEventService} from "./security/security.event.service"; +import {Title} from "@angular/platform-browser"; +import {Http, Response} from "@angular/http"; +import {Observable} from "rxjs/Observable"; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) +export class AppComponent implements OnInit { + + isAdmin: boolean; + _currentUser: string; + fullMenu: boolean = true; + menuClass: string = this.fullMenu ? "menu-expanded" : "menu-collapsed"; + + @ViewChild(RouterOutlet) + outlet: RouterOutlet; + + constructor(private securityService: SecurityService, + private router: Router, + private securityEventService: SecurityEventService, + private http: Http, + private titleService: Title) { + let applicationNameResponse: Observable<Response> = this.http.get('rest/application/name'); + + applicationNameResponse.subscribe((name: Response) => { + this.titleService.setTitle(name.json()); + }); + } + + ngOnInit() { + this.securityEventService.onLoginSuccessEvent().subscribe( + data => { + this.isAdmin = this.securityService.isCurrentUserAdmin(); + }); + + this.securityEventService.onLoginErrorEvent().subscribe( + error => { + this.isAdmin = this.securityService.isCurrentUserAdmin(); + }); + + this.securityEventService.onLogoutSuccessEvent().subscribe( + data => { + this.isAdmin = this.securityService.isCurrentUserAdmin(); + this.router.navigate(['/login']); + }); + } + + hasAdmin(): boolean { + return this.securityService.isCurrentUserAdmin(); + } + + get currentUser(): string { + let user = this.securityService.getCurrentUser(); + return user ? user.username : ""; + } + + logout(event: Event): void { + event.preventDefault(); + this.router.navigate(['/login']).then((ok) => { + if (ok) { + this.securityService.logout(); + } + }) + } + + toggleMenu() { + this.fullMenu = !this.fullMenu + this.menuClass = this.fullMenu ? "menu-expanded" : "menu-collapsed" + setTimeout(() => { + var evt = document.createEvent("HTMLEvents") + evt.initEvent('resize', true, false) + window.dispatchEvent(evt) + }, 500) + //ugly hack but otherwise the ng-datatable doesn't resize when collapsing the menu + //alternatively this can be tried (https://github.com/swimlane/ngx-datatable/issues/193) but one has to implement it on every page + //containing a ng-datatable and it only works after one clicks inside the table + } + +} diff --git a/smp-angular/src/app/app.module.ts b/smp-angular/src/app/app.module.ts new file mode 100644 index 000000000..4da1f77da --- /dev/null +++ b/smp-angular/src/app/app.module.ts @@ -0,0 +1,179 @@ +import {BrowserModule} from "@angular/platform-browser"; +import {NgModule} from "@angular/core"; +import {FormsModule, ReactiveFormsModule} from "@angular/forms"; +import {Http, HttpModule, RequestOptions, XHRBackend} from "@angular/http"; +import { + MdButtonModule, + MdDialogModule, + MdIconModule, + MdInputModule, + MdListModule, + MdMenuModule, + MdSelectModule, + MdSidenavModule, + MdTooltipModule, + MdExpansionModule +} from "@angular/material"; +import "hammerjs"; + +import {NgxDatatableModule} from "@swimlane/ngx-datatable"; +import {Md2Module, Md2SelectModule} from "md2"; + +import {AppComponent} from "./app.component"; +import {LoginComponent} from "./login/login.component"; +import {HomeComponent} from "./home/home.component"; + + + +import {AuthenticatedGuard} from "./guards/authenticated.guard"; +import {AuthorizedGuard} from "./guards/authorized.guard"; +import {routing} from "./app.routes"; +import {IsAuthorized} from "./security/is-authorized.directive"; +import {ExtendedHttpClient} from "./http/extended-http-client"; +import {HttpEventService} from "./http/http.event.service"; +import {SecurityService} from "./security/security.service"; +import {SecurityEventService} from "./security/security.event.service"; +import {DomainService} from "./security/domain.service"; +import {AlertComponent} from "./alert/alert.component"; +import {AlertService} from "./alert/alert.service"; +import {ErrorLogComponent} from "./errorlog/errorlog.component"; +import {FooterComponent} from "./footer/footer.component"; +import {DomibusInfoService} from "./appinfo/domibusinfo.service"; +import {AuthorizedAdminGuard} from "./guards/authorized-admin.guard"; +import {MessageFilterComponent} from "./messagefilter/messagefilter.component"; +import {ServiceGroupComponent} from "./servicegroup/servicegroup.component"; +import {DomainComponent} from "./domain/domain.component"; +import {UserComponent} from "./user/user.component"; +import {TruststoreComponent} from "./truststore/truststore.component"; +import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; +import {ServicegroupMetadatalistDialogComponent} from "./servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component"; +import {RowLimiterComponent} from "./common/row-limiter/row-limiter.component"; +import {DatePipe} from "./customDate/datePipe"; +import {CapitalizeFirstPipe} from "./common/capitalizefirst.pipe"; +import {DefaultPasswordDialogComponent} from "./security/default-password-dialog/default-password-dialog.component"; +import {ServicegroupDetailsDialogComponent} from "./servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component"; +import {ErrorlogDetailsComponent} from "./errorlog/errorlog-details/errorlog-details.component"; +import {EditMessageFilterComponent} from "./messagefilter/editmessagefilter-form/editmessagefilter-form.component"; +import {CancelDialogComponent} from "./common/cancel-dialog/cancel-dialog.component"; +import {DirtyGuard} from "./common/dirty.guard"; +import {SaveDialogComponent} from "./common/save-dialog/save-dialog.component"; +import {TruststoreDialogComponent} from "./truststore/truststore-dialog/truststore-dialog.component"; +import {TrustStoreUploadComponent} from "./truststore/truststore-upload/truststore-upload.component"; +import {ColumnPickerComponent} from "./common/column-picker/column-picker.component"; +import {PageHelperComponent} from "./common/page-helper/page-helper.component"; +import {SharedModule} from "./common/module/SharedModule";; +import {ClearInvalidDirective} from "./customDate/clearInvalid.directive"; +import {PageHeaderComponent} from "./common/page-header/page-header.component"; +import {DomainSelectorComponent} from "./common/domain-selector/domain-selector.component"; +import {AlertsComponent} from "./alerts/alerts.component"; + +import {SearchTableComponent} from "./common/searchtable/searchtable.component"; +import {ServiceGroupExtensionDialogComponent} from "./servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component"; +import {ServicegroupMetadataDialogComponent} from "./servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component"; +import {DomainDetailsDialogComponent} from "./domain/domain-details-dialog/domain-details-dialog.component"; +import {UserDetailsDialogComponent} from "./user/user-details-dialog/user-details-dialog.component"; + + +export function extendedHttpClientFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions, httpEventService: HttpEventService) { + return new ExtendedHttpClient(xhrBackend, requestOptions, httpEventService); +} + +@NgModule({ + declarations: [ + AppComponent, + LoginComponent, + HomeComponent, + MessageFilterComponent, + ServiceGroupComponent, + DomainComponent, + DomainDetailsDialogComponent, + UserComponent, + ErrorLogComponent, + AlertComponent, + FooterComponent, + IsAuthorized, + TruststoreComponent, + SaveDialogComponent, + ServicegroupMetadatalistDialogComponent, + ServicegroupMetadataDialogComponent, + ServiceGroupExtensionDialogComponent, + CancelDialogComponent, + RowLimiterComponent, + DatePipe, + CapitalizeFirstPipe, + DefaultPasswordDialogComponent, + EditMessageFilterComponent, + ServicegroupDetailsDialogComponent, + ErrorlogDetailsComponent, + TruststoreDialogComponent, + TrustStoreUploadComponent, + ColumnPickerComponent, + TrustStoreUploadComponent, + PageHelperComponent, + ClearInvalidDirective, + PageHeaderComponent, + DomainSelectorComponent, + AlertsComponent, + SearchTableComponent, + UserDetailsDialogComponent + ], + entryComponents: [ + AppComponent, + ServicegroupMetadatalistDialogComponent, + ServicegroupMetadataDialogComponent, + ServicegroupDetailsDialogComponent, + ServiceGroupExtensionDialogComponent, + DomainDetailsDialogComponent, + UserDetailsDialogComponent, + CancelDialogComponent, + SaveDialogComponent, + DefaultPasswordDialogComponent, + EditMessageFilterComponent, + ErrorlogDetailsComponent, + TruststoreDialogComponent, + TrustStoreUploadComponent, + ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + FormsModule, + HttpModule, + NgxDatatableModule, + MdButtonModule, + MdDialogModule, + MdTooltipModule, + MdMenuModule, + MdInputModule, + MdIconModule, + MdListModule, + MdSidenavModule, + MdSelectModule, + routing, + ReactiveFormsModule, + Md2Module, + Md2SelectModule, + SharedModule, + MdExpansionModule + ], + providers: [ + AuthenticatedGuard, + AuthorizedGuard, + AuthorizedAdminGuard, + DirtyGuard, + HttpEventService, + SecurityService, + SecurityEventService, + DomainService, + DomibusInfoService, + AlertService, + { + provide: Http, + useFactory: extendedHttpClientFactory, + deps: [XHRBackend, RequestOptions, HttpEventService], + multi: false + } + ], + bootstrap: [AppComponent] +}) +export class AppModule { +} diff --git a/smp-angular/src/app/app.routes.ts b/smp-angular/src/app/app.routes.ts new file mode 100644 index 000000000..7f178f7bf --- /dev/null +++ b/smp-angular/src/app/app.routes.ts @@ -0,0 +1,24 @@ +import {RouterModule, Routes} from '@angular/router'; +import {LoginComponent} from './login/login.component'; +import {ServiceGroupComponent} from './servicegroup/servicegroup.component'; +import {DomainComponent} from './domain/domain.component'; +import {AuthenticatedGuard} from './guards/authenticated.guard'; +import {AuthorizedAdminGuard} from './guards/authorized-admin.guard'; +import {UserComponent} from './user/user.component'; +import {TruststoreComponent} from 'app/truststore/truststore.component'; + + +const appRoutes: Routes = [ + {path: '', component: ServiceGroupComponent}, + {path: 'servicegroup', component: ServiceGroupComponent}, + {path: 'domain', component: DomainComponent}, + {path: 'user', component: UserComponent}, + + {path: 'truststore', component: TruststoreComponent, canActivate: [AuthenticatedGuard, AuthorizedAdminGuard]}, + + {path: 'login', component: LoginComponent}, + {path: '**', component: ServiceGroupComponent, canActivate: [AuthenticatedGuard]} + +]; + +export const routing = RouterModule.forRoot(appRoutes); diff --git a/smp-angular/src/app/appinfo/domibusinfo.service.ts b/smp-angular/src/app/appinfo/domibusinfo.service.ts new file mode 100644 index 000000000..5f77bc697 --- /dev/null +++ b/smp-angular/src/app/appinfo/domibusinfo.service.ts @@ -0,0 +1,31 @@ +import {Injectable} from "@angular/core"; +import {Http, Response} from "@angular/http"; +import {Observable} from "rxjs/Observable"; +import "rxjs/add/operator/map"; +import {Router} from "@angular/router"; +import {HttpEventService} from "../http/http.event.service"; +import {ReplaySubject} from "rxjs"; +import {DomibusInfo} from "./domibusinfo"; + +@Injectable() +export class DomibusInfoService { + constructor(private http: Http, private router: Router) { + } + + getDomibusInfo(): Observable<DomibusInfo> { + let subject = new ReplaySubject(); + this.http.get('rest/application/info') + .map((response: Response) => { + let domibusInfo = new DomibusInfo(response.json().version); + return domibusInfo; + }) + .subscribe((res: DomibusInfo) => { + subject.next(res); + }, (error: any) => { + console.log("getDomibusInfo:" + error); + // subject.next(null); + }); + return subject.asObservable(); + } + +} diff --git a/smp-angular/src/app/appinfo/domibusinfo.ts b/smp-angular/src/app/appinfo/domibusinfo.ts new file mode 100644 index 000000000..cc5af6e74 --- /dev/null +++ b/smp-angular/src/app/appinfo/domibusinfo.ts @@ -0,0 +1,5 @@ +export class DomibusInfo { + + constructor(public version:string) { + } +} diff --git a/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.css b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.css new file mode 100644 index 000000000..5e50dc67f --- /dev/null +++ b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.css @@ -0,0 +1,42 @@ +label:hover, label:active, input:hover + label, input:active + label { + color: #3f51b5; +} + +.divTable { + display: table; + width: 100%; +} + +.divTableRow { + display: table-row; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} + +.divTableCell, .divTableHead { + /*border: 1px solid #999999;*/ + display: table-cell; + padding: 3px 3px; + text-align: center; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} + +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} + +.divTableBody { + display: table-row-group; +} + + diff --git a/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.html b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.html new file mode 100644 index 000000000..57caa638b --- /dev/null +++ b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.html @@ -0,0 +1,26 @@ +<div style="width: 500px;text-align: center"> + <h1 md-dialog-title>Do you want to cancel all unsaved operations?</h1> + + <div class="divTable"> + <div class="divTableBody"> + + <div class="divTableRow"> + + <div class="divTableCell"> + <button md-raised-button color="primary" (click)="dialogRef.close(true)" id="yesbuttondialog_id"> + <md-icon>check_circle</md-icon> + <span>Yes</span> + </button> + </div> + + <div class="divTableCell"> + <button md-raised-button color="primary" (click)="dialogRef.close(false)" id="nobuttondialog_id"> + <md-icon>cancel</md-icon> + <span>No</span> + </button> + </div> + + </div> + </div> + </div> +</div> diff --git a/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.spec.ts b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.spec.ts new file mode 100644 index 000000000..5689e3fb5 --- /dev/null +++ b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CancelDialogComponent } from './cancel-dialog.component'; + +describe('CancelDialogComponent', () => { + let component: CancelDialogComponent; + let fixture: ComponentFixture<CancelDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CancelDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CancelDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.ts b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.ts new file mode 100644 index 000000000..a3dbf4d5e --- /dev/null +++ b/smp-angular/src/app/common/cancel-dialog/cancel-dialog.component.ts @@ -0,0 +1,17 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'app-cancel-dialog', + templateUrl: './cancel-dialog.component.html', + styleUrls: ['./cancel-dialog.component.css'] +}) +export class CancelDialogComponent implements OnInit { + + constructor(public dialogRef: MdDialogRef<CancelDialogComponent>) { + } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/common/capitalizefirst.pipe.ts b/smp-angular/src/app/common/capitalizefirst.pipe.ts new file mode 100644 index 000000000..21402945e --- /dev/null +++ b/smp-angular/src/app/common/capitalizefirst.pipe.ts @@ -0,0 +1,19 @@ +import {Pipe, PipeTransform} from '@angular/core'; + +/* + * Capitalize the first letter of the string + * Takes a string as a value. + * Usage: + * value | capitalizefirst +*/ +@Pipe({ + name: 'capitalizeFirst' +}) +export class CapitalizeFirstPipe implements PipeTransform { + transform(value: string, args: any[]): string { + if (value === null) { + return 'Not assigned'; + } + return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase(); + } +} diff --git a/smp-angular/src/app/common/column-picker/column-picker-base.ts b/smp-angular/src/app/common/column-picker/column-picker-base.ts new file mode 100644 index 000000000..231e775d6 --- /dev/null +++ b/smp-angular/src/app/common/column-picker/column-picker-base.ts @@ -0,0 +1,10 @@ +export class ColumnPickerBase { + columnSelection: boolean; + allColumns = []; + selectedColumns = []; + + changeSelectedColumns(newSelectedColumns: Array<any>) { + this.selectedColumns = newSelectedColumns + } + +} diff --git a/smp-angular/src/app/common/column-picker/column-picker.component.css b/smp-angular/src/app/common/column-picker/column-picker.component.css new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/smp-angular/src/app/common/column-picker/column-picker.component.css @@ -0,0 +1 @@ + diff --git a/smp-angular/src/app/common/column-picker/column-picker.component.html b/smp-angular/src/app/common/column-picker/column-picker.component.html new file mode 100644 index 000000000..dbe09a919 --- /dev/null +++ b/smp-angular/src/app/common/column-picker/column-picker.component.html @@ -0,0 +1,25 @@ +<div style="margin-bottom:10px"> + <a class="domibusLink hide-show-column" href="#" *ngIf="!columnSelection" (click)="toggleColumnSelection()" + id="columnslinkoff_id" click-stop-propagation>Show + columns</a> + <a class="domibusLink hide-show-column" href="#" *ngIf="columnSelection" (click)="toggleColumnSelection()" + id="columnslinkon_id" click-stop-propagation>Hide + columns</a> +</div> + +<div *ngIf="columnSelection" style="margin-bottom: 10px;"> + <div *ngFor='let col of allColumns' style="display: inline-block;margin:5px;"> + <input + type='checkbox' + [id]="col.name" + (click)='toggle(col)' + [checked]='isChecked(col)' + /> + <label [attr.for]="col.name">{{col.name}}</label> + </div> + <div class="all-none-selection"> + <a href="#" class="domibusLink" id="all_id" (click)="selectAllColumns()" click-stop-propagation>All</a> + <a href="#" class="domibusLink" id="none_id" (click)="selectNoColumns()" click-stop-propagation>None</a> + </div> +</div> + diff --git a/smp-angular/src/app/common/column-picker/column-picker.component.spec.ts b/smp-angular/src/app/common/column-picker/column-picker.component.spec.ts new file mode 100644 index 000000000..61b81430e --- /dev/null +++ b/smp-angular/src/app/common/column-picker/column-picker.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ColumnPickerComponent } from './column-picker.component'; + +describe('ColumnPickerComponent', () => { + let component: ColumnPickerComponent; + let fixture: ComponentFixture<ColumnPickerComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ColumnPickerComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ColumnPickerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/common/column-picker/column-picker.component.ts b/smp-angular/src/app/common/column-picker/column-picker.component.ts new file mode 100644 index 000000000..4a5e17c9f --- /dev/null +++ b/smp-angular/src/app/common/column-picker/column-picker.component.ts @@ -0,0 +1,77 @@ +import {Component, EventEmitter, Input, OnInit, Output} from "@angular/core"; +import {isNullOrUndefined} from "util"; + +@Component({ + selector: 'app-column-picker', + templateUrl: './column-picker.component.html', + styleUrls: ['./column-picker.component.css'] +}) +export class ColumnPickerComponent implements OnInit { + + columnSelection: boolean; + + @Input() + allColumns = []; + + @Input() + selectedColumns = []; + + @Output() + onSelectedColumnsChanged = new EventEmitter<Array<any>>(); + + constructor() { + } + + ngOnInit() { + } + + toggleColumnSelection() { + this.columnSelection = !this.columnSelection + } + + /* + * Note: if an 'Actions' column exists, it will be the last one of the array + * */ + toggle(col) { + const isChecked = this.isChecked(col); + + if (isChecked) { + this.selectedColumns = this.selectedColumns.filter(c => { + return c.name !== col.name; + }); + } else { + this.selectedColumns.splice(this.allColumns.indexOf(col), 0, col); + this.selectedColumns = [...this.selectedColumns]; + } + + this.setLastColumn(this.selectedColumns, 'Actions'); + + this.onSelectedColumnsChanged.emit(this.selectedColumns); + } + + setLastColumn(array : Array<any>, colName : any) { + let col = array.find(x => x.name === colName); + if(!isNullOrUndefined(col)) { + let posCol = array.indexOf(col); + array.splice(posCol, 1); + array.push(col); + } + } + + isChecked(col) { + return this.selectedColumns.find(c => { + return c.name === col.name; + }); + } + + selectAllColumns() { + this.selectedColumns = [...this.allColumns]; + this.onSelectedColumnsChanged.emit(this.selectedColumns); + } + + selectNoColumns() { + this.selectedColumns = []; + this.onSelectedColumnsChanged.emit(this.selectedColumns); + } + +} diff --git a/smp-angular/src/app/common/directive/attribute/ClickStopPropagation.ts b/smp-angular/src/app/common/directive/attribute/ClickStopPropagation.ts new file mode 100644 index 000000000..cce15ec4c --- /dev/null +++ b/smp-angular/src/app/common/directive/attribute/ClickStopPropagation.ts @@ -0,0 +1,11 @@ +import {Directive, HostListener} from "@angular/core"; + +@Directive({ + selector: "[click-stop-propagation]" +}) +export class ClickStopPropagationDirective { + @HostListener("click", ["$event"]) + public onClick(event: any): void { + event.preventDefault(); + } +} diff --git a/smp-angular/src/app/common/dirty-operations.ts b/smp-angular/src/app/common/dirty-operations.ts new file mode 100644 index 000000000..a8a2b3fc4 --- /dev/null +++ b/smp-angular/src/app/common/dirty-operations.ts @@ -0,0 +1,3 @@ +export interface DirtyOperations { + isDirty(): boolean; +} diff --git a/smp-angular/src/app/common/dirty.guard.spec.ts b/smp-angular/src/app/common/dirty.guard.spec.ts new file mode 100644 index 000000000..c0e5d97cf --- /dev/null +++ b/smp-angular/src/app/common/dirty.guard.spec.ts @@ -0,0 +1,15 @@ +import { TestBed, async, inject } from '@angular/core/testing'; + +import { DirtyGuard } from './dirty.guard'; + +describe('DirtyGuard', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DirtyGuard] + }); + }); + + it('should ...', inject([DirtyGuard], (guard: DirtyGuard) => { + expect(guard).toBeTruthy(); + })); +}); diff --git a/smp-angular/src/app/common/dirty.guard.ts b/smp-angular/src/app/common/dirty.guard.ts new file mode 100644 index 000000000..0a32d7e61 --- /dev/null +++ b/smp-angular/src/app/common/dirty.guard.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate} from '@angular/router'; +import { Observable } from 'rxjs/Observable'; +import {MdDialog} from "@angular/material"; +import {CancelDialogComponent} from "./cancel-dialog/cancel-dialog.component"; + +@Injectable() +export class DirtyGuard implements CanActivate, CanDeactivate<any> { + + constructor(public dialog: MdDialog) { + + }; + + canActivate(next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { + return true; + } + + canDeactivate(component: any, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { + if (component.isDirty && !component.isDirty()) return true; + return this.dialog.open(CancelDialogComponent).afterClosed(); + } +} diff --git a/smp-angular/src/app/common/domain-selector/domain-selector.component.css b/smp-angular/src/app/common/domain-selector/domain-selector.component.css new file mode 100644 index 000000000..333d7e7a4 --- /dev/null +++ b/smp-angular/src/app/common/domain-selector/domain-selector.component.css @@ -0,0 +1,8 @@ +:host { + float: right; + margin-right: 120px; +} + +:host /deep/ .mat-select-trigger { + min-width: 140px; +} diff --git a/smp-angular/src/app/common/domain-selector/domain-selector.component.html b/smp-angular/src/app/common/domain-selector/domain-selector.component.html new file mode 100644 index 000000000..f081b5144 --- /dev/null +++ b/smp-angular/src/app/common/domain-selector/domain-selector.component.html @@ -0,0 +1,5 @@ +<md-select *ngIf="showDomains" [(ngModel)]="domainCode" (change)="changeDomain()"> + <md-option *ngFor="let d of domains" [value]="d.code"> + {{d.name}} + </md-option> +</md-select> diff --git a/smp-angular/src/app/common/domain-selector/domain-selector.component.spec.ts b/smp-angular/src/app/common/domain-selector/domain-selector.component.spec.ts new file mode 100644 index 000000000..4b7120c65 --- /dev/null +++ b/smp-angular/src/app/common/domain-selector/domain-selector.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from "@angular/core/testing"; + +import {DomainSelectorComponent} from "./domain-selector.component"; + +describe('DomainSelectorComponent', () => { + let component: DomainSelectorComponent; + let fixture: ComponentFixture<DomainSelectorComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [DomainSelectorComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DomainSelectorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/common/domain-selector/domain-selector.component.ts b/smp-angular/src/app/common/domain-selector/domain-selector.component.ts new file mode 100644 index 000000000..ee6bf1f9c --- /dev/null +++ b/smp-angular/src/app/common/domain-selector/domain-selector.component.ts @@ -0,0 +1,55 @@ +import {Component, OnInit, Input} from '@angular/core'; +import {SecurityService} from '../../security/security.service'; +import {DomainService} from '../../security/domain.service'; +import {Domain} from '../../security/domain'; +import {MdDialog} from '@angular/material'; +import {CancelDialogComponent} from '../cancel-dialog/cancel-dialog.component'; + +@Component({ + selector: 'domain-selector', + templateUrl: './domain-selector.component.html', + styleUrls: ['./domain-selector.component.css'] +}) +export class DomainSelectorComponent implements OnInit { + + showDomains: boolean; + currentDomainCode: string; + domainCode: string; + domains: Domain[]; + + @Input() + currentComponent: any; + + constructor (private domainService: DomainService, private securityService: SecurityService, private dialog: MdDialog) { + } + + ngOnInit () { + this.domainService.isMultiDomain().subscribe((isMultiDomain: boolean) => { + if (isMultiDomain && this.securityService.isCurrentUserSuperAdmin()) { + this.showDomains = true; + this.domainService.getCurrentDomain().subscribe((domain: Domain) => this.domainCode = this.currentDomainCode = domain ? domain.code : null); + this.domainService.getDomains().subscribe((domains: Domain[]) => this.domains = domains); + } + }); + } + + changeDomain () { + let canChangeDomain = Promise.resolve(true); + if (this.currentComponent && this.currentComponent.isDirty && this.currentComponent.isDirty()) { + canChangeDomain = this.dialog.open(CancelDialogComponent).afterClosed().toPromise<boolean>(); + } + + canChangeDomain.then((canChange: boolean) => { + if (!canChange) throw false; + + let domain = this.domains.find(d => d.code == this.domainCode); + this.domainService.setCurrentDomain(domain).then(() => { + if (this.currentComponent.ngOnInit) + this.currentComponent.ngOnInit(); + }); + + }).catch(() => { // domain not changed -> reset the combo value + this.domainCode = this.currentDomainCode; + }); + } +} diff --git a/smp-angular/src/app/common/module/SharedModule.ts b/smp-angular/src/app/common/module/SharedModule.ts new file mode 100644 index 000000000..764139f59 --- /dev/null +++ b/smp-angular/src/app/common/module/SharedModule.ts @@ -0,0 +1,14 @@ +import {NgModule} from "@angular/core"; + +import {ClickStopPropagationDirective} from "app/common/directive/attribute/ClickStopPropagation"; + +@NgModule({ + declarations: [ + ClickStopPropagationDirective + ], + exports: [ + ClickStopPropagationDirective + ] +}) +export class SharedModule { +} diff --git a/smp-angular/src/app/common/page-header/page-header.component.css b/smp-angular/src/app/common/page-header/page-header.component.css new file mode 100644 index 000000000..e25fefba3 --- /dev/null +++ b/smp-angular/src/app/common/page-header/page-header.component.css @@ -0,0 +1,4 @@ +:host:before { + display: none !important; + content: '' !important; +} diff --git a/smp-angular/src/app/common/page-header/page-header.component.html b/smp-angular/src/app/common/page-header/page-header.component.html new file mode 100644 index 000000000..596222714 --- /dev/null +++ b/smp-angular/src/app/common/page-header/page-header.component.html @@ -0,0 +1,4 @@ +<h1> + <span *ngIf="isMultiDomain">{{currentDomain}}:</span> + <ng-content></ng-content> +</h1> diff --git a/smp-angular/src/app/common/page-header/page-header.component.spec.ts b/smp-angular/src/app/common/page-header/page-header.component.spec.ts new file mode 100644 index 000000000..999d24a32 --- /dev/null +++ b/smp-angular/src/app/common/page-header/page-header.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PageHeaderComponent } from './page-header.component'; + +describe('PageHeaderComponent', () => { + let component: PageHeaderComponent; + let fixture: ComponentFixture<PageHeaderComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PageHeaderComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PageHeaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/common/page-header/page-header.component.ts b/smp-angular/src/app/common/page-header/page-header.component.ts new file mode 100644 index 000000000..d3abeda9e --- /dev/null +++ b/smp-angular/src/app/common/page-header/page-header.component.ts @@ -0,0 +1,27 @@ +import {Component, EventEmitter, Input, OnInit} from "@angular/core"; +import {DomainService} from "../../security/domain.service"; +import {Domain} from "../../security/domain"; + +@Component({ + selector: 'page-header', + templateUrl: './page-header.component.html', + styleUrls: ['./page-header.component.css'] +}) +export class PageHeaderComponent implements OnInit { + + isMultiDomain: boolean; + currentDomain: string; + + constructor(private domainService : DomainService) { + } + + ngOnInit() { + this.domainService.isMultiDomain().subscribe((isMultiDomain: boolean) => { + this.isMultiDomain = isMultiDomain; + if (isMultiDomain) { + this.domainService.getCurrentDomain().subscribe((domain: Domain) => this.currentDomain = domain ? domain.name : ''); + } + }); + } + +} diff --git a/smp-angular/src/app/common/page-helper/page-helper.component.css b/smp-angular/src/app/common/page-helper/page-helper.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/common/page-helper/page-helper.component.html b/smp-angular/src/app/common/page-helper/page-helper.component.html new file mode 100644 index 000000000..ca0f502db --- /dev/null +++ b/smp-angular/src/app/common/page-helper/page-helper.component.html @@ -0,0 +1,3 @@ +<a (click)="openHelpDialog()" *ngIf="activateHelp"> + <md-icon md-tooltip="Help" style="cursor: pointer">help</md-icon> +</a> diff --git a/smp-angular/src/app/common/page-helper/page-helper.component.spec.ts b/smp-angular/src/app/common/page-helper/page-helper.component.spec.ts new file mode 100644 index 000000000..1e3c09ef6 --- /dev/null +++ b/smp-angular/src/app/common/page-helper/page-helper.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from "@angular/core/testing"; + +import {PageHelperComponent} from "./page-helper.component"; + +describe('PageHelperComponent', () => { + let component: PageHelperComponent; + let fixture: ComponentFixture<PageHelperComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [PageHelperComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PageHelperComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/common/page-helper/page-helper.component.ts b/smp-angular/src/app/common/page-helper/page-helper.component.ts new file mode 100644 index 000000000..529f0a82f --- /dev/null +++ b/smp-angular/src/app/common/page-helper/page-helper.component.ts @@ -0,0 +1,51 @@ +import {Component, OnInit} from "@angular/core"; +import {MdDialog} from "@angular/material"; +import {NavigationStart, Router} from "@angular/router"; +import {isNullOrUndefined} from "util"; + +@Component({ + selector: 'page-helper', + templateUrl: './page-helper.component.html', + styleUrls: ['./page-helper.component.css'] +}) +export class PageHelperComponent implements OnInit { + + pageName: string; + helpPages: Map<String, String> = new Map<String, String>(); + activateHelp: boolean = false; + + constructor(public dialog: MdDialog, private router: Router) { + } + + ngOnInit() { + let MAIN_HELP_PAGE = "https://ec.europa.eu/cefdigital/wiki/display/CEFDIGITAL/Domibus+v3.3+Admin+Console+Help"; + let VERSION_SPECIFIC_PAGE = "#Domibusv3.3AdminConsoleHelp-"; + + this.helpPages.set("/", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "Messages"); + this.helpPages.set("/login", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "Login"); + this.helpPages.set("/messagefilter", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "MessageFilter"); + this.helpPages.set("/truststore", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "Truststore"); + this.helpPages.set("/pmode", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "PMode"); + this.helpPages.set("/errorlog", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "ErrorLog"); + this.helpPages.set("/jms", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "JMSMonitoring"); + this.helpPages.set("/user", MAIN_HELP_PAGE + VERSION_SPECIFIC_PAGE + "Users"); + this.router.events.subscribe(event => { + if (event instanceof NavigationStart) { + console.log("Navigation change [" + event.url + "]"); + let page = this.helpPages.get(event.url); + if (isNullOrUndefined(page)) { + this.activateHelp = false; + } else { + this.activateHelp = true; + this.pageName = page.toString(); + } + } + }); + } + + + openHelpDialog() { + window.open(this.pageName, "_blank"); + } + +} diff --git a/smp-angular/src/app/common/row-limiter/row-limiter-base.ts b/smp-angular/src/app/common/row-limiter/row-limiter-base.ts new file mode 100644 index 000000000..76c0fd64b --- /dev/null +++ b/smp-angular/src/app/common/row-limiter/row-limiter-base.ts @@ -0,0 +1,11 @@ +export class RowLimiterBase { + + pageSizes: Array<any> = [ + {key: '10', value: 10}, + {key: '25', value: 25}, + {key: '50', value: 50}, + {key: '100', value: 100} + ]; + + pageSize: number = this.pageSizes[0].value; +} diff --git a/smp-angular/src/app/common/row-limiter/row-limiter.component.css b/smp-angular/src/app/common/row-limiter/row-limiter.component.css new file mode 100644 index 000000000..139597f9c --- /dev/null +++ b/smp-angular/src/app/common/row-limiter/row-limiter.component.css @@ -0,0 +1,2 @@ + + diff --git a/smp-angular/src/app/common/row-limiter/row-limiter.component.html b/smp-angular/src/app/common/row-limiter/row-limiter.component.html new file mode 100644 index 000000000..196e7bc58 --- /dev/null +++ b/smp-angular/src/app/common/row-limiter/row-limiter.component.html @@ -0,0 +1,9 @@ +<div> + <md-select placeholder="Rows" [(ngModel)]="pageSize" name="pageSize" (change)="changePageSize($event)" + id="pagesize_id"> + <md-option *ngFor="let rowLimit of pageSizes" [value]="rowLimit.value"> + {{rowLimit.key}} + </md-option> + </md-select> +</div> + diff --git a/smp-angular/src/app/common/row-limiter/row-limiter.component.spec.ts b/smp-angular/src/app/common/row-limiter/row-limiter.component.spec.ts new file mode 100644 index 000000000..da68e909e --- /dev/null +++ b/smp-angular/src/app/common/row-limiter/row-limiter.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RowLimiterComponent } from './row-limiter.component'; + +describe('RowLimiterComponent', () => { + let component: RowLimiterComponent; + let fixture: ComponentFixture<RowLimiterComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RowLimiterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RowLimiterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/common/row-limiter/row-limiter.component.ts b/smp-angular/src/app/common/row-limiter/row-limiter.component.ts new file mode 100644 index 000000000..77d1ff930 --- /dev/null +++ b/smp-angular/src/app/common/row-limiter/row-limiter.component.ts @@ -0,0 +1,30 @@ +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; + +@Component({ + selector: 'app-row-limiter', + templateUrl: './row-limiter.component.html', + styleUrls: ['./row-limiter.component.css'] +}) +export class RowLimiterComponent implements OnInit { + + @Input() + pageSizes: Array<any>; + + @Output() + private onPageSizeChanged = new EventEmitter<number>(); + + pageSize: number; + + constructor() { + } + + ngOnInit() { + this.pageSize = this.pageSizes[0].value; + } + + changePageSize(newPageLimit:number) { + this.onPageSizeChanged.emit(newPageLimit); + console.log('New page limit:', newPageLimit); + } + +} diff --git a/smp-angular/src/app/common/save-dialog/save-dialog.component.css b/smp-angular/src/app/common/save-dialog/save-dialog.component.css new file mode 100644 index 000000000..5e50dc67f --- /dev/null +++ b/smp-angular/src/app/common/save-dialog/save-dialog.component.css @@ -0,0 +1,42 @@ +label:hover, label:active, input:hover + label, input:active + label { + color: #3f51b5; +} + +.divTable { + display: table; + width: 100%; +} + +.divTableRow { + display: table-row; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} + +.divTableCell, .divTableHead { + /*border: 1px solid #999999;*/ + display: table-cell; + padding: 3px 3px; + text-align: center; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} + +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} + +.divTableBody { + display: table-row-group; +} + + diff --git a/smp-angular/src/app/common/save-dialog/save-dialog.component.html b/smp-angular/src/app/common/save-dialog/save-dialog.component.html new file mode 100644 index 000000000..1d326fcb6 --- /dev/null +++ b/smp-angular/src/app/common/save-dialog/save-dialog.component.html @@ -0,0 +1,27 @@ +<div style="width: 500px;text-align: center"> + <h1 md-dialog-title>Do you want to save your changes?</h1> + + <div class="divTable"> + <div class="divTableBody"> + + <div class="divTableRow"> + + <div class="divTableCell"> + <button md-raised-button color="primary" (click)="dialogRef.close(true)" id="yesbuttondialog_id"> + <md-icon>check_circle</md-icon> + <span>Yes</span> + </button> + </div> + + <div class="divTableCell"> + <button md-raised-button color="primary" (click)="dialogRef.close(false)" id="nobuttondialog_id"> + <md-icon>cancel</md-icon> + <span>No</span> + </button> + </div> + + </div> + </div> + </div> +</div> + diff --git a/smp-angular/src/app/common/save-dialog/save-dialog.component.spec.ts b/smp-angular/src/app/common/save-dialog/save-dialog.component.spec.ts new file mode 100644 index 000000000..2edb76189 --- /dev/null +++ b/smp-angular/src/app/common/save-dialog/save-dialog.component.spec.ts @@ -0,0 +1,26 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SaveDialogComponent } from './save-dialog.component'; + +describe('ServicegroupExtensionDialogComponent', () => { + let component: SaveDialogComponent; + let fixture: ComponentFixture<SaveDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SaveDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SaveDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); + diff --git a/smp-angular/src/app/common/save-dialog/save-dialog.component.ts b/smp-angular/src/app/common/save-dialog/save-dialog.component.ts new file mode 100644 index 000000000..0c3e764bb --- /dev/null +++ b/smp-angular/src/app/common/save-dialog/save-dialog.component.ts @@ -0,0 +1,17 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'app-messagefilter-dialog', + templateUrl: './save-dialog.component.html', + styleUrls: ['./save-dialog.component.css'] +}) +export class SaveDialogComponent implements OnInit { + + constructor(public dialogRef: MdDialogRef<SaveDialogComponent>) { + } + + ngOnInit() { + } +} + diff --git a/smp-angular/src/app/common/searchtable/searchtable-controller.ts b/smp-angular/src/app/common/searchtable/searchtable-controller.ts new file mode 100644 index 000000000..16cb32050 --- /dev/null +++ b/smp-angular/src/app/common/searchtable/searchtable-controller.ts @@ -0,0 +1,15 @@ +export class SearchTableController { + + + showDetails(row: any) { + + } + + edit(row: any) { + + } + + delete(row: any) { + + } +} diff --git a/smp-angular/src/app/common/searchtable/searchtable.component.css b/smp-angular/src/app/common/searchtable/searchtable.component.css new file mode 100644 index 000000000..d1a612141 --- /dev/null +++ b/smp-angular/src/app/common/searchtable/searchtable.component.css @@ -0,0 +1,18 @@ +/* --- Select ---*/ +.mat-select{ + padding:20px 0; +} + +/* --- Button ---*/ +.group-btn { + margin-top:20px; + } + +#hiddenButtonId { + position: fixed; +} + + +.datatable-body{ + overflow-y: scroll; +} diff --git a/smp-angular/src/app/common/searchtable/searchtable.component.html b/smp-angular/src/app/common/searchtable/searchtable.component.html new file mode 100644 index 000000000..3135c062c --- /dev/null +++ b/smp-angular/src/app/common/searchtable/searchtable.component.html @@ -0,0 +1,111 @@ +<div style="position: absolute; top: 5px; bottom: 5px; left: 5px; right: 5px;"> + <page-header id="{{id}}_header_id">{{title}}</page-header> + + <div class="selectionCriteria"> + <md-card> + + <md-card-content> + + <div class="panel"> + <form name="filterForm" #filterForm="ngForm" (ngSubmit)="search()"> + <ng-container *ngTemplateOutlet="searchPanel"></ng-container> + + <div class="searchArea"> + <button md-raised-button color="primary" [disabled]="!filterForm.form.valid" id="searchbutton_id"> + <md-icon>search</md-icon> + <span>Search</span> + </button> + </div> + </form> + </div> + </md-card-content> + </md-card> + </div> + + <div class="panel" style="position: absolute; top: 270px; bottom: 5px; left: 5px; right: 5px;"> + <div class="group-filter-button"> + <span class="row-button"> + <app-row-limiter [pageSizes]="rowLimiter.pageSizes" + (onPageSizeChanged)="changePageSize($event.value)"></app-row-limiter> + </span> + <span class="column-filter-button"> + <app-column-picker [allColumns]="columnPicker.allColumns" [selectedColumns]="columnPicker.selectedColumns" + (onSelectedColumnsChanged)="columnPicker.changeSelectedColumns($event)"></app-column-picker> + </span> + </div> + <!-- temporal solution <div - absolut - wrapping> for stretch table height to fit screen size: scrollbarV does not work - virtual scrolling has + row bugs.--> + <div class="panel" style="position: absolute; overflow-y: scroll;top: 100px; bottom: 40px; left: 0px; right: 0px;"> + <ngx-datatable + id="serviceGroupTable" + class="material striped" + style="" + [rows]="rows" + [columns]="columnPicker.selectedColumns" + [columnMode]="'force'" + [headerHeight]="50" + [footerHeight]="50" + [rowHeight]="'auto'" + [scrollbarH]="true" + [externalPaging]="true" + [externalSorting]="true" + [loadingIndicator]="loading" + [count]="count" + [offset]="offset" + [limit]="rowLimiter.pageSize" + [sorts]="[{prop: 'received', dir: 'desc'}]" + (page)='onPage($event)' + (sort)="onSort($event)" + [selected]="selected" + [selectionType]="'multi'" + (activate)="onActivate($event)" + (select)="onSelect($event)"> + </ngx-datatable> + </div> + + <ng-template #rowActions let-row="row" let-value="value" ngx-datatable-cell-template> + + <button md-icon-button color="primary" + (click)="editRowButtonAction(row)" id="editButtonRow{{row.$$index}}_id" tooltip="Edit"> + <md-icon>edit</md-icon> + </button> + + + <button md-icon-button color="primary" (click)="deleteRowButtonAction(row)" + id="deleteButtonRow{{row.$$index}}_id" tooltip="Delete"> + <md-icon>delete</md-icon> + </button> + </ng-template> + + + <div class="group-action-button" style="position: absolute;left: 8px; bottom: 8px;"> + <button md-raised-button color="primary" (click)="newButtonAction()" + id="add_id"> + <md-icon>add</md-icon> + <span>New</span> + </button> + + <button md-raised-button color="primary" [disabled]="!isRowSelected()" (click)="editButtonAction()" + id="edit_id"> + <md-icon>edit</md-icon> + <span>Edit</span> + </button> + + <button md-raised-button color="primary" [disabled]="!isRowSelected()" (click)="deleteButtonAction()" + id="resendbutton_id"> + <md-icon>delete</md-icon> + <span>Delete</span> + </button> + + <ng-container *ngTemplateOutlet="additionalToolButtons"></ng-container> + + </div> + </div> + + +</div> + +<!-- + + +--> diff --git a/smp-angular/src/app/common/searchtable/searchtable.component.ts b/smp-angular/src/app/common/searchtable/searchtable.component.ts new file mode 100644 index 000000000..55e365934 --- /dev/null +++ b/smp-angular/src/app/common/searchtable/searchtable.component.ts @@ -0,0 +1,215 @@ +import {Component, EventEmitter, Input, TemplateRef, ViewChild} from "@angular/core"; +import {Http, URLSearchParams, Response} from "@angular/http"; +import {SearchTableResult} from "./searchtableresult"; +import {Observable} from "rxjs"; +import {AlertService} from "../../alert/alert.service"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {ColumnPickerBase} from "../column-picker/column-picker-base"; +import {RowLimiterBase} from "../row-limiter/row-limiter-base"; +import {AlertComponent} from "../../alert/alert.component"; +import {SearchTableController} from "./searchtable-controller"; + +@Component({ + selector: 'smp-search-table', + templateUrl: './searchtable.component.html', + providers: [], + styleUrls: ['./searchtable.component.css'] +}) + +export class SearchTableComponent { + @ViewChild('rowActions') rowActions: TemplateRef<any>; + + @Input() @ViewChild('additionalToolButtons') additionalToolButtons: TemplateRef<any>; + @Input() @ViewChild('searchPanel') searchPanel: TemplateRef<any>; + + + + + @Input() id: String = ""; + @Input() title: String = ""; + @Input() columnPicker: ColumnPickerBase; + @Input() url: string = ''; + @Input() searchTableController: SearchTableController; + @Input() filter: any = {}; + + + + columnActions:any; + + rowLimiter: RowLimiterBase = new RowLimiterBase(); + + selected = []; + + + + loading: boolean = false; + rows = []; + count: number = 0; + offset: number = 0; + //default value + orderBy: string = null; + //default value + asc: boolean = false; + + msgStatus: Array<String>; + + + messageResent = new EventEmitter(false); + + constructor(protected http: Http, protected alertService: AlertService, public dialog: MdDialog) { + } + + ngOnInit() { + + this.columnActions = { + cellTemplate: this.rowActions, + name: 'Actions', + width: 80, + sortable: false + }; + /** + * Add actions to last column + */ + if (this.columnPicker) { + this.columnPicker.allColumns.push(this.columnActions); + + this.columnPicker.selectedColumns.push(this.columnActions); + } + this.page(this.offset, this.rowLimiter.pageSize, this.orderBy, this.asc); + } + + getTableDataEntries(offset: number, pageSize: number, orderBy: string, asc: boolean): Observable< SearchTableResult > { + let searchParams: URLSearchParams = new URLSearchParams(); + searchParams.set('page', offset.toString()); + searchParams.set('pageSize', pageSize.toString()); + searchParams.set('orderBy', orderBy); + + //filters + if (this.filter.participantId) { + searchParams.set('participantId', this.filter.participantId); + } + + if (this.filter.participantSchema) { + searchParams.set('participantSchema', this.filter.participantSchema); + } + + + if(this.filter.domain) { + searchParams.set('domain', this.filter.domain ) + } + + if (asc != null) { + searchParams.set('asc', asc.toString()); + } + + return this.http.get(this.url, { + search: searchParams + }).map((response: Response) => + response.json() + ); + } + + page(offset, pageSize, orderBy, asc) { + this.loading = true; + + this.getTableDataEntries(offset, pageSize, orderBy, asc).subscribe((result: SearchTableResult ) => { + console.log("service group response:" + result); + this.offset = offset; + this.rowLimiter.pageSize = pageSize; + this.orderBy = orderBy; + this.asc = asc; + this.count = result.count; + this.selected = []; + + const start = offset * pageSize; + const end = start + pageSize; + const newRows = [...result.serviceEntities]; + + let index = 0; + for (let i = start; i < end; i++) { + newRows[i] = result.serviceEntities[index++]; + } + + this.rows = newRows; + + this.loading = false; + + if(this.count > AlertComponent.MAX_COUNT_CSV) { + this.alertService.error("Maximum number of rows reached for downloading CSV"); + } + }, (error: any) => { + console.log("error getting the message log:" + error); + this.loading = false; + this.alertService.error("Error occured:" + error); + }); + } + + onPage(event) { + console.log('Page Event', event); + this.page(event.offset, event.pageSize, this.orderBy, this.asc); + } + + onSort(event) { + console.log('Sort Event', event); + let ascending = true; + if (event.newValue === 'desc') { + ascending = false; + } + this.page(this.offset, this.rowLimiter.pageSize, event.column.prop, ascending); + } + + onSelect({selected}) { + // console.log('Select Event', selected, this.selected); + } + + onActivate(event) { + // console.log('Activate Event', event); + + if ("dblclick" === event.type) { + this.details(event.row); + } + } + + changePageSize(newPageLimit: number) { + console.log('New page limit:', newPageLimit); + this.page(0, newPageLimit, this.orderBy, this.asc); + } + + search() { + console.log("Searching using filter:" + this.filter); + this.page(0, this.rowLimiter.pageSize, this.orderBy, this.asc); + } + + isRowSelected() { + if (this.selected) + return true; + + return false; + } + + + details(selectedRow: any) { + this.searchTableController.showDetails(selectedRow); + } + + newButtonAction(){ + + } + + editButtonAction(){ + this.editRowButtonAction( this.selected[0]); + } + + deleteButtonAction(){ + // delete all seleted rows + } + + editRowButtonAction(row: any){ + this.details(row); + } + + deleteRowButtonAction(row: any){ + + } + +} diff --git a/smp-angular/src/app/common/searchtable/searchtableresult.ts b/smp-angular/src/app/common/searchtable/searchtableresult.ts new file mode 100644 index 000000000..f09349b02 --- /dev/null +++ b/smp-angular/src/app/common/searchtable/searchtableresult.ts @@ -0,0 +1,11 @@ + +export class SearchTableResult { + + constructor(public serviceEntities: Array<any>, + public pageSize: number, + public count: number, + public filter: any + ) { + + } +} diff --git a/smp-angular/src/app/customDate/clearInvalid.directive.ts b/smp-angular/src/app/customDate/clearInvalid.directive.ts new file mode 100644 index 000000000..b6941ea03 --- /dev/null +++ b/smp-angular/src/app/customDate/clearInvalid.directive.ts @@ -0,0 +1,34 @@ +import {Directive, ElementRef, OnInit, OnDestroy} from '@angular/core'; +import {Md2Datepicker} from 'md2'; + +@Directive({ + selector: '[appClearInvalid]' +}) +export class ClearInvalidDirective implements OnInit, OnDestroy { + private input: any; + + constructor(private el: ElementRef, private host: Md2Datepicker) { + } + + onBlurHandler(event) { + if (!this.host.value) { + this.input.value = ''; + } + } + + ngOnInit() { + const inputList = this.el.nativeElement.getElementsByTagName('input'); + if (inputList.length !== 1) { + return; + } + + this.input = inputList[0]; + this.input.addEventListener('blur', this.onBlurHandler.bind(this)); + } + + ngOnDestroy() { + if (this.input) { + this.input.removeEventListener('blur', this.onBlurHandler); + } + } +} diff --git a/smp-angular/src/app/customDate/datePipe.ts b/smp-angular/src/app/customDate/datePipe.ts new file mode 100644 index 000000000..62033e0bf --- /dev/null +++ b/smp-angular/src/app/customDate/datePipe.ts @@ -0,0 +1,41 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'domibusDate' +}) + +/** + * This Pipe was created because Dates were not being correctly shown in IE/EDGE + * It's an Angular4 known issue but they didn't solve yet. + * When they solve it, we can delete this file and use the pipe with date and format again. + */ +export class DatePipe implements PipeTransform { + transform(value: string, type: string = ""): string { + if(value) { + let d = new Date(value); + + let dd = ("0"+d.getDate()).slice(-2); //day + let MM = ("0"+(d.getMonth()+1)).slice(-2); //month + let yyyy = d.getFullYear(); //year + let date = `${dd}-${MM}-${yyyy}`; + + let time = ''; + + if (type != 'short') { + let hh = ("0"+d.getHours()).slice(-2); //hours + let mm = ("0"+d.getMinutes()).slice(-2); //minutes + let ss = ("0"+d.getSeconds()).slice(-2); //seconds + let currentTimezone = (d.getTimezoneOffset()/60) * -1; + let gmt = 'GMT'; + if (currentTimezone !== 0) { + gmt += currentTimezone > 0 ? '+' : ' '; + gmt += currentTimezone; + } + time = `${hh}:${mm}:${ss}${gmt}`; + } + + return `${date} ${time}`; + } + return ""; + } +} diff --git a/smp-angular/src/app/customDate/dateformat.service.ts b/smp-angular/src/app/customDate/dateformat.service.ts new file mode 100644 index 000000000..e6791c5bd --- /dev/null +++ b/smp-angular/src/app/customDate/dateformat.service.ts @@ -0,0 +1,21 @@ +import {Injectable} from "@angular/core"; + +@Injectable() +export class DateFormatService { + + private static getFormattedDate(date: Date): string { + return ("0" + date.getDate()).slice(-2).toString()+"-"+ + ("0" + (date.getMonth() + 1)).slice(-2).toString()+"-"+ + date.getFullYear().toString(); + } + + private static getFormattedTime(date: Date): string { + return ("0" + date.getHours()).slice(-2).toString()+"h"+ + ("0" + date.getMinutes()).slice(-2).toString()+"m"+ + ("0" + date.getSeconds()).slice(-2).toString(); + } + + static format(date: Date): string { + return this.getFormattedDate(date) + "_" + this.getFormattedTime(date); + } +} diff --git a/smp-angular/src/app/domain/domain-controller.ts b/smp-angular/src/app/domain/domain-controller.ts new file mode 100644 index 000000000..e650bc376 --- /dev/null +++ b/smp-angular/src/app/domain/domain-controller.ts @@ -0,0 +1,32 @@ +import {SearchTableController} from "../common/searchtable/searchtable-controller"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {DomainDetailsDialogComponent} from "./domain-details-dialog/domain-details-dialog.component"; + + +export class DomainController extends SearchTableController { + + constructor(public dialog: MdDialog) { + super(); + } + + + public showDetails(row: any) { + let dialogRef: MdDialogRef<DomainDetailsDialogComponent> = this.dialog.open(DomainDetailsDialogComponent); + dialogRef.componentInstance.domain = row; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + + } + + + + + public edit(row: any) { + + } + + public delete(row: any) { + + } +} diff --git a/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.css b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.html b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.html new file mode 100644 index 000000000..06802bc1d --- /dev/null +++ b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.html @@ -0,0 +1,46 @@ +<h2 md-dialog-title>Domain details</h2> +<md-dialog-content style="height:460px;width:650px"> + <md-card> + <md-card-content> + <md-input-container style="width:100%"> + <input mdInput placeholder="Domain id" value="{{domain.domainId}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="SML SMP id" value="{{domain.bdmslSmpId}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="ClienCert header" value="{{domain.bdmslClientCertHeader}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="ClienCert alias" value="{{domain.bdmslClientCertAlias}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Signature alias" value="{{domain.signatureCertAlias}}" readonly/> + </md-input-container> + + </md-card-content> + </md-card> + +</md-dialog-content> + +<md-dialog-actions> + <div class="group-action-button" > + <button id="ServiceGroupsSaveButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + + + <button id="ServiceGroupsCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> + </div> +</md-dialog-actions> + diff --git a/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.spec.ts b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.spec.ts new file mode 100644 index 000000000..801e26a0c --- /dev/null +++ b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicegroupDetailsDialogComponent } from './servicegroup-details-dialog.component'; + +describe('ServicegroupDetailsDialogComponent', () => { + let component: ServicegroupDetailsDialogComponent; + let fixture: ComponentFixture<ServicegroupDetailsDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicegroupDetailsDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicegroupDetailsDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.ts b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.ts new file mode 100644 index 000000000..ed229d5bf --- /dev/null +++ b/smp-angular/src/app/domain/domain-details-dialog/domain-details-dialog.component.ts @@ -0,0 +1,20 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'domain-details-dialog', + templateUrl: './domain-details-dialog.component.html', + styleUrls: ['./domain-details-dialog.component.css'] +}) +export class DomainDetailsDialogComponent implements OnInit { + + domain; + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + + constructor(public dialogRef: MdDialogRef<DomainDetailsDialogComponent>) { + } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/domain/domain.component.css b/smp-angular/src/app/domain/domain.component.css new file mode 100644 index 000000000..94bdbcf05 --- /dev/null +++ b/smp-angular/src/app/domain/domain.component.css @@ -0,0 +1,15 @@ +/* --- Select ---*/ +.mat-select{ + padding:20px 0; +} + +/* --- Button ---*/ +.group-btn { + margin-top:20px; + } + +#hiddenButtonId { + position: fixed; +} + + diff --git a/smp-angular/src/app/domain/domain.component.html b/smp-angular/src/app/domain/domain.component.html new file mode 100644 index 000000000..aa1096d09 --- /dev/null +++ b/smp-angular/src/app/domain/domain.component.html @@ -0,0 +1,38 @@ + +<smp-search-table + page_id= 'domain_id' + title= 'Domains' + [columnPicker] = "columnPicker" + url="ui/domain" + [additionalToolButtons]="additionalToolButtons" + [searchTableController]="domainController" + [searchPanel]="searchPanel" + [filter]="filter" + +> + <ng-template #additionalToolButtons > + + </ng-template> + + <ng-template #searchPanel> + <md-input-container> + <input mdInput placeholder="Domain Id" name="Domain Id" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="Domain_id"> + </md-input-container> + <md-input-container> + <input mdInput placeholder="SMP Id" name="SMP Id" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="SMPid"> + </md-input-container> + <md-input-container> + <input mdInput placeholder="ClientCert Header" name="ClientCert Header" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="ClientCert_header"> + </md-input-container> + + <md-input-container> + <input mdInput placeholder="ClientCert Alias" name="ClientCert Alias" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="ClientCert_Alias"> + </md-input-container> + + </ng-template> + +</smp-search-table> diff --git a/smp-angular/src/app/domain/domain.component.ts b/smp-angular/src/app/domain/domain.component.ts new file mode 100644 index 000000000..399277d3c --- /dev/null +++ b/smp-angular/src/app/domain/domain.component.ts @@ -0,0 +1,75 @@ +import {Component, TemplateRef, ViewChild} from "@angular/core"; +import {ColumnPickerBase} from "../common/column-picker/column-picker-base"; +import {MdDialog, MdDialogRef} from "@angular/material"; + +import {Http} from "@angular/http"; +import {AlertService} from "../alert/alert.service"; +import {DomainController} from "./domain-controller"; +; + + +@Component({ + moduleId: module.id, + templateUrl:'./domain.component.html', + styleUrls: ['./domain.component.css'], + providers: [], +}) + +export class DomainComponent { + + @ViewChild('rowMetadataAction') rowMetadataAction: TemplateRef<any> + @ViewChild('rowExtensionAction') rowExtensionAction: TemplateRef<any> + + @ViewChild('rowActions') rowActions: TemplateRef<any>; + + + columnPicker: ColumnPickerBase = new ColumnPickerBase(); + + domainController: DomainController; + filter: any = {}; + + constructor(protected http: Http, protected alertService: AlertService, public dialog: MdDialog) { + } + + ngOnInit() { + this.domainController = new DomainController(this.dialog); + + this.columnPicker.allColumns = [ + { + name: 'Domain Id', + prop: 'domainId', + width: 275 + }, + { + name: 'ClientCert Header', + prop: 'bdmslClientCertHeader', + }, + { + name: 'ClientCert Alias', + prop: 'bdmslClientCertAlias', + }, + { + name: 'SMP Id', + prop: 'bdmslSmpId', + width: 120 + }, + { + name: 'Signature CertAlias', + prop: 'signatureCertAlias', + width: 120 + }, + ]; + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Domain Id", "ClientCert Header", "ClientCert Alias", "SMP Id"].indexOf(col.name) != -1 + }); + + } + + + + details(row: any) { + this.domainController.showDetails(row); + + } +} diff --git a/smp-angular/src/app/domain/domainresult.ts b/smp-angular/src/app/domain/domainresult.ts new file mode 100644 index 000000000..57bd728b6 --- /dev/null +++ b/smp-angular/src/app/domain/domainresult.ts @@ -0,0 +1,12 @@ +import {DomainRO} from "./domainro"; + +export class DomainResult { + + constructor(public serviceEntities: Array<DomainRO>, + public pageSize: number, + public count: number, + public filter: any + ) { + + } +} diff --git a/smp-angular/src/app/domain/domainro.ts b/smp-angular/src/app/domain/domainro.ts new file mode 100644 index 000000000..f13a69c48 --- /dev/null +++ b/smp-angular/src/app/domain/domainro.ts @@ -0,0 +1,15 @@ +export class DomainRO { + constructor(public domainId: string, + public bdmslClientCertHeader: string, + public bdmslClientCertAlias: string, + public bdmslSmpId: string, + public signatureCertAlias: string + + + ) { + + } +} + + + diff --git a/smp-angular/src/app/download/download.service.ts b/smp-angular/src/app/download/download.service.ts new file mode 100644 index 000000000..00f1159c7 --- /dev/null +++ b/smp-angular/src/app/download/download.service.ts @@ -0,0 +1,12 @@ + +export class DownloadService { + + public static downloadNative(content) { + let element = document.createElement('a'); + element.setAttribute('href', content); + element.style.display = 'none'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + } +} diff --git a/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.css b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.html b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.html new file mode 100644 index 000000000..8672c6745 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.html @@ -0,0 +1,44 @@ +<h2 md-dialog-title>Error log details</h2> +<md-dialog-content style="height:450px;width:650px"> + <md-card> + <md-card-content> + <md-input-container style="width:100%"> + <input mdInput placeholder="Signal Message Id" value="{{message.errorSignalMessageId}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="AP Role" value="{{message.mshRole}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Message Id" value="{{message.messageInErrorId}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Error Code" value="{{message.errorCode}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Error Detail" value="{{message.errorDetail}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Timestamp" value="{{message.timestamp | domibusDate: dateFormat}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Notified" value="{{message.notified | domibusDate: dateFormat}}" readonly/> + </md-input-container> + + </md-card-content> + </md-card> + +</md-dialog-content> + +<md-dialog-actions> + <button id="messageLogDetailsCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> +</md-dialog-actions> + diff --git a/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.spec.ts b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.spec.ts new file mode 100644 index 000000000..206fecc74 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ErrorlogDetailsComponent } from './errorlog-details.component'; + +describe('ErrorlogDetailsComponent', () => { + let component: ErrorlogDetailsComponent; + let fixture: ComponentFixture<ErrorlogDetailsComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ErrorlogDetailsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ErrorlogDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.ts b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.ts new file mode 100644 index 000000000..6df351dcd --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlog-details/errorlog-details.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'app-errorlog-details', + templateUrl: './errorlog-details.component.html', + styleUrls: ['./errorlog-details.component.css'] +}) +export class ErrorlogDetailsComponent implements OnInit { + + message; + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + + constructor(public dialogRef: MdDialogRef<ErrorlogDetailsComponent>) { } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/errorlog/errorlog.component.css b/smp-angular/src/app/errorlog/errorlog.component.css new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlog.component.css @@ -0,0 +1 @@ + diff --git a/smp-angular/src/app/errorlog/errorlog.component.html b/smp-angular/src/app/errorlog/errorlog.component.html new file mode 100644 index 000000000..1153350f5 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlog.component.html @@ -0,0 +1,136 @@ +<page-header id="errorlogheader_id">Error Log</page-header> +<div class="selectionCriteria"> + <md-card> + <md-card-content> + + <div class="panel"> + <form name="filterForm" #filterForm="ngForm" (ngSubmit)="search()"> + + <md-input-container> + <input mdInput placeholder="Signal Message Id" name="errorSignalMessageId" + [(ngModel)]="filter.errorSignalMessageId" #errorSignalMessageId="ngModel" id="signalmessageid_id" + width="40px"> + </md-input-container> + + <md-input-container> + <input mdInput placeholder="Message Id" name="messageInErrorId" [(ngModel)]="filter.messageInErrorId" + #messageInErrorId="ngModel" id="messageid_id"> + </md-input-container> + <md2-datepicker placeholder="Error From:" appClearInvalid + [(ngModel)]="filter.timestampFrom" + name="fromTimestmap" + [type]="'datetime'" + [max]="timestampFromMaxDate" + (change)='onTimestampFromChange($event)' + id="fromtimestamp_id"></md2-datepicker> + <md2-datepicker placeholder="Error To:" appClearInvalid + [(ngModel)]="filter.timestampTo" + name="toTimestmap" + [min]="timestampToMinDate" + [max]="timestampToMaxDate" + (change)='onTimestampToChange($event)' + [type]="'datetime'" + #timestampControl="ngModel" id="totimestamp_id"></md2-datepicker> + + <md-input-container *ngIf="advancedSearch"> + <input mdInput placeholder="Error Detail" name="ErrorDetail" [(ngModel)]="filter.errorDetail" + #errorDetail="ngModel" id="errordetail_id"> + </md-input-container> + <md-select placeholder="AP Role" [(ngModel)]="filter.mshRole" name="mshRole" class="optionField" + id="aprole_id" + *ngIf="advancedSearch"> + <md-option [value]="''"> + </md-option> + <md-option *ngFor="let role of mshRoles" [value]="role"> + {{role}} + </md-option> + </md-select> + + <md-select placeholder="Error Code" [(ngModel)]="filter.errorCode" name="errorCode" class="optionField" + id="errorcode_id" *ngIf="advancedSearch"> + <md-option [value]="''"> + </md-option> + <md-option *ngFor="let code of errorCodes" [value]="code"> + {{code}} + </md-option> + </md-select> + + + <md2-datepicker placeholder="Notified From:" appClearInvalid + [(ngModel)]="filter.notifiedFrom" + name="notifiedFrom" + [type]="'datetime'" + [max]="notifiedFromMaxDate" + (change)='onNotifiedFromChange($event)' + #timestampControl="ngModel" id="notifiedfrom_id" + *ngIf="advancedSearch"></md2-datepicker> + <md2-datepicker placeholder="Notified To:" appClearInvalid + [(ngModel)]="filter.notifiedTo" + name="notifiedTo" + [type]="'datetime'" + [min]="notifiedToMinDate" + [max]="notifiedToMaxDate" + (change)='onNotifiedToChange($event)' + #timestampControl="ngModel" id="notifiedto_id" + *ngIf="advancedSearch"></md2-datepicker> + + + <div class="searchArea"> + <button md-raised-button color="primary" [disabled]="!filterForm.form.valid" id="searchbutton_id"> + <md-icon>search</md-icon> + <span>Search</span> + </button> + <a href="#" *ngIf="!advancedSearch" (click)="toggleAdvancedSearch()" id="advancedlink_id">Advanced</a> + <a href="#" *ngIf="advancedSearch" (click)="toggleAdvancedSearch()" id="basiclink_id">Basic</a> + </div> + </form> + </div> + + </md-card-content> + </md-card> +</div> + +<div class="panel"> + <div class="group-filter-button"> + <span class="row-button"> + <app-row-limiter [pageSizes]="rowLimiter.pageSizes" + (onPageSizeChanged)="changePageSize($event.value)"></app-row-limiter> + </span> + <span class="column-filter-button"> + <app-column-picker [allColumns]="columnPicker.allColumns" [selectedColumns]="columnPicker.selectedColumns" + (onSelectedColumnsChanged)="columnPicker.changeSelectedColumns($event)"></app-column-picker> + </span> + <button md-icon-button color="primary" [disabled]="!isSaveAsCSVButtonEnabled()" (click)="saveAsCSV()" + id="saveascsvbutton_id" md-tooltip="Export as CSV"> + <img src="assets/images/exportCSV.svg" width="30" height="30"> + </button> + </div> + + + <ngx-datatable + id="errorLogTable" + class="material striped" + [rows]="rows" + [columnMode]="'force'" + [columns]="columnPicker.selectedColumns" + [headerHeight]="50" + [footerHeight]="50" + [rowHeight]="'auto'" + [scrollbarH]="true" + [externalPaging]="true" + [externalSorting]="true" + [loadingIndicator]="loading" + [count]="count" + [offset]="offset" + [limit]="rowLimiter.pageSize" + [sorts]="[{prop: 'timestamp', dir: 'desc'}]" + (page)='onPage($event)' + (sort)="onSort($event)" + (activate)="onActivate($event)" + (select)="onSelect($event)"> +</ngx-datatable> + + <ng-template #rowWithDateFormatTpl let-row="row" let-value="value" ngx-datatable-cell-template> + <span class="text-select">{{value | domibusDate: dateFormat}}</span> + </ng-template> +</div> diff --git a/smp-angular/src/app/errorlog/errorlog.component.ts b/smp-angular/src/app/errorlog/errorlog.component.ts new file mode 100644 index 000000000..f75658757 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlog.component.ts @@ -0,0 +1,339 @@ +import {Component, TemplateRef, ViewChild, Renderer2, AfterViewInit, ElementRef} from "@angular/core"; +import {Observable} from "rxjs"; +import {Http, Response, URLSearchParams} from "@angular/http"; +import {ErrorLogResult} from "./errorlogresult"; +import {AlertService} from "../alert/alert.service"; +import {ErrorlogDetailsComponent} from "app/errorlog/errorlog-details/errorlog-details.component"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {ColumnPickerBase} from "../common/column-picker/column-picker-base"; +import {RowLimiterBase} from "../common/row-limiter/row-limiter-base"; +import {DownloadService} from "../download/download.service"; +import {AlertComponent} from "../alert/alert.component"; +import { Md2Datepicker } from "md2"; + +@Component({ + moduleId: module.id, + templateUrl: 'errorlog.component.html', + providers: [], + styleUrls: ['./errorlog.component.css'] +}) + +export class ErrorLogComponent implements AfterViewInit { + + columnPicker: ColumnPickerBase = new ColumnPickerBase() + rowLimiter: RowLimiterBase = new RowLimiterBase() + + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + + @ViewChild('rowWithDateFormatTpl') rowWithDateFormatTpl: TemplateRef<any>; + @ViewChild('bibi') bibi: Md2Datepicker; + + timestampFromMaxDate: Date = new Date(); + timestampToMinDate: Date = null; + timestampToMaxDate: Date = new Date(); + + notifiedFromMaxDate: Date = new Date(); + notifiedToMinDate: Date = null; + notifiedToMaxDate: Date = new Date(); + + filter: any = {}; + loading: boolean = false; + rows = []; + count: number = 0; + offset: number = 0; + //default value + orderBy: string = "timestamp"; + //default value + asc: boolean = false; + + mshRoles: Array<String>; + errorCodes: Array<String>; + + advancedSearch: boolean; + + static readonly ERROR_LOG_URL : string = 'rest/errorlogs'; + static readonly ERROR_LOG_CSV_URL : string = ErrorLogComponent.ERROR_LOG_URL + '/csv'; + + constructor(private elementRef: ElementRef, private http: Http, private alertService: AlertService, public dialog: MdDialog, private renderer: Renderer2) { + } + + ngOnInit() { + this.columnPicker.allColumns = [ + { + name: "Signal Message Id", + prop: "errorSignalMessageId" + }, + { + name: "AP Role", + prop: "mshRole", + width: 50 + }, + { + name: 'Message Id', + prop: "messageInErrorId", + }, + { + name: 'Error Code', + width: 50 + }, + { + name: 'Error Detail', + width: 350 + }, + { + cellTemplate: this.rowWithDateFormatTpl, + name: 'Timestamp', + width: 180 + }, + { + cellTemplate: this.rowWithDateFormatTpl, + name: 'Notified' + } + + ]; + + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Message Id", "Error Code", "Timestamp"].indexOf(col.name) != -1 + }); + + this.page(this.offset, this.rowLimiter.pageSize, this.orderBy, this.asc); + + // this.bibi.registerOnValidatorChange(() => { + // console.log('bau') + // }) + // this.bibi.registerOnTouched(() => { + // console.log('bau touch'); + // return {}; + // }); + // + // this.bibi._onTouched = () => { console.log('wwwhat?')} + // this.bibi._validatorOnChange + } + + onTest() { + console.log('onTest') + } + + getErrorLogEntries(offset: number, pageSize: number, orderBy: string, asc: boolean): Observable<ErrorLogResult> { + let searchParams: URLSearchParams = new URLSearchParams(); + searchParams.set('page', offset.toString()); + searchParams.set('pageSize', pageSize.toString()); + searchParams.set('orderBy', orderBy); + + //filter + if (this.filter.errorSignalMessageId) { + searchParams.set('errorSignalMessageId', this.filter.errorSignalMessageId); + } + if (this.filter.mshRole) { + searchParams.set('mshRole', this.filter.mshRole); + } + if (this.filter.messageInErrorId) { + searchParams.set('messageInErrorId', this.filter.messageInErrorId); + } + if (this.filter.errorCode) { + searchParams.set('errorCode', this.filter.errorCode); + } + if (this.filter.errorDetail) { + searchParams.set('errorDetail', this.filter.errorDetail); + } + if (this.filter.timestampFrom != null) { + searchParams.set('timestampFrom', this.filter.timestampFrom.getTime()); + } + if (this.filter.timestampTo != null) { + searchParams.set('timestampTo', this.filter.timestampTo.getTime()); + } + if (this.filter.notifiedFrom != null) { + searchParams.set('notifiedFrom', this.filter.notifiedFrom.getTime()); + } + if (this.filter.notifiedTo != null) { + searchParams.set('notifiedTo', this.filter.notifiedTo.getTime()); + } + + if (asc != null) { + searchParams.set('asc', asc.toString()); + } + + return this.http.get(ErrorLogComponent.ERROR_LOG_URL, { + search: searchParams + }).map((response: Response) => + response.json() + ); + } + + page(offset, pageSize, orderBy, asc) { + this.loading = true; + + this.getErrorLogEntries(offset, pageSize, orderBy, asc).subscribe((result: ErrorLogResult) => { + console.log("errorLog response:" + result); + this.offset = offset; + this.rowLimiter.pageSize = pageSize; + this.orderBy = orderBy; + this.asc = asc; + this.count = result.count; + + const start = offset * pageSize; + const end = start + pageSize; + const newRows = [...result.errorLogEntries]; + + let index = 0; + for (let i = start; i < end; i++) { + newRows[i] = result.errorLogEntries[index++]; + } + + this.rows = newRows; + + if (result.filter.timestampFrom != null) { + result.filter.timestampFrom = new Date(result.filter.timestampFrom); + } + if (result.filter.timestampTo != null) { + result.filter.timestampTo = new Date(result.filter.timestampTo); + } + if (result.filter.notifiedFrom != null) { + result.filter.notifiedFrom = new Date(result.filter.notifiedFrom); + } + if (result.filter.notifiedTo != null) { + result.filter.notifiedTo = new Date(result.filter.notifiedTo); + } + + this.filter = result.filter; + this.mshRoles = result.mshRoles; + this.errorCodes = result.errorCodes; + + this.loading = false; + + if(this.count > AlertComponent.MAX_COUNT_CSV) { + this.alertService.error("Maximum number of rows reached for downloading CSV"); + } + }, (error: any) => { + console.log("error getting the error log:" + error); + this.loading = false; + this.alertService.error("Error occured:" + error); + }); + + } + + onPage(event) { + console.log('Page Event', event); + this.page(event.offset, event.pageSize, this.orderBy, this.asc); + } + + onSort(event) { + console.log('Sort Event', event); + let ascending = true; + if (event.newValue === 'desc') { + ascending = false; + } + this.page(this.offset, this.rowLimiter.pageSize, event.column.prop, ascending); + } + + changePageSize(newPageLimit: number) { + console.log('New page limit:', newPageLimit); + this.page(0, newPageLimit, this.orderBy, this.asc); + } + + search() { + console.log("Searching using filter:" + this.filter); + this.page(0, this.rowLimiter.pageSize, this.orderBy, this.asc); + } + + onTimestampFromChange(event) { + this.timestampToMinDate = event.value; + } + + onTimestampToChange(event) { + this.timestampFromMaxDate = event.value; + } + + onNotifiedFromChange(event) { + this.notifiedToMinDate = event.value; + } + + onNotifiedToChange(event) { + this.notifiedFromMaxDate = event.value; + } + + toggleAdvancedSearch(): boolean { + this.advancedSearch = !this.advancedSearch; + return false;//to prevent default navigation + } + + onSelect({selected}) { + // console.log('Select Event', selected, this.selected); + } + + onActivate(event) { + // console.log('Activate Event', event); + + if ("dblclick" === event.type) { + this.details(event.row); + } + } + + details(selectedRow: any) { + let dialogRef: MdDialogRef<ErrorlogDetailsComponent> = this.dialog.open(ErrorlogDetailsComponent); + dialogRef.componentInstance.message = selectedRow; + // dialogRef.componentInstance.currentSearchSelectedSource = this.currentSearchSelectedSource; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + } + + private getFilterPath() { + let result = '?'; + + //filter + if (this.filter.errorSignalMessageId) { + result += 'errorSignalMessageId=' + this.filter.errorSignalMessageId + '&'; + } + if (this.filter.mshRole) { + result += 'mshRole=' + this.filter.mshRole + '&'; + } + if (this.filter.messageInErrorId) { + result += 'messageInErrorId=' + this.filter.messageInErrorId + '&'; + } + if (this.filter.errorCode) { + result += 'errorCode=' + this.filter.errorCode + '&'; + } + if (this.filter.errorDetail) { + result += 'errorDetail=' + this.filter.errorDetail + '&'; + } + if (this.filter.timestampFrom != null) { + result += 'timestampFrom=' + this.filter.timestampFrom.getTime() + '&'; + } + if (this.filter.timestampTo != null) { + result += 'timestampTo=' + this.filter.timestampTo.getTime() + '&'; + } + if (this.filter.notifiedFrom != null) { + result += 'notifiedFrom=' + this.filter.notifiedFrom.getTime() + '&'; + } + if (this.filter.notifiedTo != null) { + result += 'notifiedTo=' + this.filter.notifiedTo.getTime() + '&'; + } + + return result; + } + + isSaveAsCSVButtonEnabled() { + return (this.count < AlertComponent.MAX_COUNT_CSV); + } + + saveAsCSV() { + DownloadService.downloadNative(ErrorLogComponent.ERROR_LOG_CSV_URL + this.getFilterPath()); + } + + ngAfterViewInit() { + // var inputs = this.elementRef.nativeElement.getElementsByTagName('input'); + // console.log( 'inputs[0] ', inputs ) + // inputs[2].onblur = () => { console.log('on blur '); + // if (!this.filter.timestampFrom) + // inputs[2].value = ''; + // } + + } + + onClick(event) { + console.log(event); + } + +} diff --git a/smp-angular/src/app/errorlog/errorlogentry.ts b/smp-angular/src/app/errorlog/errorlogentry.ts new file mode 100644 index 000000000..9c6b2a285 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlogentry.ts @@ -0,0 +1,11 @@ +export class ErrorLogEntry { + + + constructor(errorSignalMessageId: string, + mshRole: string, + messageInErrorId: string, + errorCode: string, + timestamp: Date, + notified: Date) { + } +} diff --git a/smp-angular/src/app/errorlog/errorlogresult.ts b/smp-angular/src/app/errorlog/errorlogresult.ts new file mode 100644 index 000000000..ae9114f26 --- /dev/null +++ b/smp-angular/src/app/errorlog/errorlogresult.ts @@ -0,0 +1,14 @@ +import {ErrorLogEntry} from "./errorlogentry"; +export class ErrorLogResult { + + constructor(public errorLogEntries: Array<ErrorLogEntry>, + // public offset: number, + public pageSize: number, + // public orderBy: string, + // public asc: boolean, + public count: number, + public filter: any, + public mshRoles: Array<string>, + public errorCodes: Array<string>) { + } +} diff --git a/smp-angular/src/app/footer/footer.component.css b/smp-angular/src/app/footer/footer.component.css new file mode 100644 index 000000000..d06fb69f2 --- /dev/null +++ b/smp-angular/src/app/footer/footer.component.css @@ -0,0 +1,13 @@ +#footer { + position:absolute; + bottom:0; + left: 10px; + width:100%; + overflow:hidden; + text-align: center; +} + +#footer .domibusVersion { + display: inline-block; + font-size: 15px; +} diff --git a/smp-angular/src/app/footer/footer.component.html b/smp-angular/src/app/footer/footer.component.html new file mode 100644 index 000000000..816b3d598 --- /dev/null +++ b/smp-angular/src/app/footer/footer.component.html @@ -0,0 +1,3 @@ +<div id="footer"> + <span class="domibusVersion">{{domibusVersion}}</span> +</div> diff --git a/smp-angular/src/app/footer/footer.component.ts b/smp-angular/src/app/footer/footer.component.ts new file mode 100644 index 000000000..96c832076 --- /dev/null +++ b/smp-angular/src/app/footer/footer.component.ts @@ -0,0 +1,28 @@ +import {Component, OnInit} from "@angular/core"; +import {DomibusInfoService} from "../appinfo/domibusinfo.service"; +import {DomibusInfo} from "../appinfo/domibusinfo"; + +@Component({ + moduleId: module.id, + templateUrl: 'footer.component.html', + selector: 'footer', + providers: [], + styleUrls: ['./footer.component.css'] +}) + +export class FooterComponent implements OnInit { + domibusVersion: string; + + constructor(private domibusInfoService: DomibusInfoService) { + } + + ngOnInit(): void { + console.log("FooterComponent onInit"); + this.domibusInfoService.getDomibusInfo().subscribe((domibusInfo: DomibusInfo) => { + this.domibusVersion = domibusInfo.version; + } + ); + } + + +} diff --git a/smp-angular/src/app/guards/authenticated.guard.ts b/smp-angular/src/app/guards/authenticated.guard.ts new file mode 100644 index 000000000..52a5d08e4 --- /dev/null +++ b/smp-angular/src/app/guards/authenticated.guard.ts @@ -0,0 +1,25 @@ +import {Injectable} from "@angular/core"; +import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router"; +import {SecurityService} from "../security/security.service"; +import {ReplaySubject} from "rxjs"; + +@Injectable() +export class AuthenticatedGuard implements CanActivate { + + constructor(private router: Router, private securityService: SecurityService) { + } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + const subject = new ReplaySubject(); + this.securityService.isAuthenticated(true).subscribe((isAuthenticated: boolean) => { + if(isAuthenticated) { + subject.next(true); + } else { + // not logged in so redirect to login page with the return url + this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}}); + subject.next(false); + } + }); + return subject.asObservable() + } +} diff --git a/smp-angular/src/app/guards/authorized-admin.guard.ts b/smp-angular/src/app/guards/authorized-admin.guard.ts new file mode 100644 index 000000000..67cf658d8 --- /dev/null +++ b/smp-angular/src/app/guards/authorized-admin.guard.ts @@ -0,0 +1,21 @@ +import {Injectable} from "@angular/core"; +import {ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router"; +import {SecurityService} from "../security/security.service"; +import {AuthorizedGuard} from "./authorized.guard"; + +@Injectable() +export class AuthorizedAdminGuard extends AuthorizedGuard { + + constructor(securityService: SecurityService) { + super(securityService); + } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + return super.canActivate(route, state); + } + + + getAllowedRoles(route: ActivatedRouteSnapshot): Array<string> { + return [SecurityService.ROLE_DOMAIN_ADMIN, SecurityService.ROLE_AP_ADMIN]; + } +} diff --git a/smp-angular/src/app/guards/authorized.guard.ts b/smp-angular/src/app/guards/authorized.guard.ts new file mode 100644 index 000000000..915ff55eb --- /dev/null +++ b/smp-angular/src/app/guards/authorized.guard.ts @@ -0,0 +1,28 @@ +import {Injectable} from "@angular/core"; +import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router"; +import {SecurityService} from "../security/security.service"; +import {ReplaySubject} from "rxjs"; + +@Injectable() +export class AuthorizedGuard implements CanActivate { + + constructor(private securityService: SecurityService) { + } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + console.debug("AuthorizedGuard"); + let allowedRoles = this.getAllowedRoles(route); + let subject = new ReplaySubject(); + this.securityService.isAuthorized(allowedRoles).subscribe((isAuthorized:boolean) => { + console.debug("AuthorizedGuard canActivate [" + isAuthorized + "]"); + subject.next(isAuthorized); + },(error:any) => { + console.debug("AuthorizedGuard canActivate error [" + error + "]"); + }); + return subject.asObservable(); + } + + getAllowedRoles(route: ActivatedRouteSnapshot) { + return route.data["allowedRoles"] as Array<string>; + } +} diff --git a/smp-angular/src/app/home/home.component.css b/smp-angular/src/app/home/home.component.css new file mode 100644 index 000000000..eb32d205a --- /dev/null +++ b/smp-angular/src/app/home/home.component.css @@ -0,0 +1,3 @@ +.userInfo { + margin-top:30px; +} diff --git a/smp-angular/src/app/home/home.component.html b/smp-angular/src/app/home/home.component.html new file mode 100644 index 000000000..8029f15aa --- /dev/null +++ b/smp-angular/src/app/home/home.component.html @@ -0,0 +1,16 @@ +<div> + <table class="userInfo"> + <tr> + <td>Username:</td> + <td>{{currentUser.username}}</td> + </tr> + <tr> + <td>Role(s):</td> + <td> + <table *ngFor="let role of currentUser.authorities"> + <tr><td>{{role}}</td></tr> + </table> + </td> + </tr> + </table> +</div> diff --git a/smp-angular/src/app/home/home.component.ts b/smp-angular/src/app/home/home.component.ts new file mode 100644 index 000000000..797893f7a --- /dev/null +++ b/smp-angular/src/app/home/home.component.ts @@ -0,0 +1,28 @@ +import {Component, OnInit} from '@angular/core'; + +import {SecurityService} from '../security/security.service'; +import {User} from "../security/user"; + +@Component({ + moduleId: module.id, + templateUrl: 'home.component.html', + providers: [], + styleUrls: ['./home.component.css'] +}) + +export class HomeComponent implements OnInit{ + currentUser: User; + + ngOnInit(): void { + console.log("HomeComponent onInit") + this.currentUser = this.securityService.getCurrentUser(); + } + + constructor(private securityService: SecurityService) { + } + + logout(event:Event):void { + event.preventDefault(); + this.securityService.logout(); + } +} diff --git a/smp-angular/src/app/http/extended-http-client.ts b/smp-angular/src/app/http/extended-http-client.ts new file mode 100644 index 000000000..1d26dceef --- /dev/null +++ b/smp-angular/src/app/http/extended-http-client.ts @@ -0,0 +1,47 @@ +import {Injectable} from '@angular/core'; +import { + Http, Response, RequestOptionsArgs, Headers, RequestOptions, ConnectionBackend, + XHRBackend +} from '@angular/http'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/share'; +import 'rxjs/add/observable/throw'; +import {Observer} from 'rxjs/Observer'; +import {HttpEventService} from "./http.event.service"; + +@Injectable() +export class ExtendedHttpClient extends Http { + http: Http; + httpEventService: HttpEventService; + + constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions, httpEventService: HttpEventService) { + super(_backend, _defaultOptions); + this.httpEventService = httpEventService; + } + + setOptions(options?: RequestOptionsArgs): RequestOptionsArgs { + if (!options) { + options = {}; + } + if (!options.headers) { + options.headers = new Headers(); + } + return options; + } + + request(url: string, options?: RequestOptionsArgs): Observable<Response> { + options = this.setOptions(options); + + return super.request(url, options).catch((error: Response) => { + if ((error.status === 403)) { + console.log('The authentication session expires or the user is not authorised'); + this.httpEventService.requestForbiddenEvent(error); + // return Observable.empty(); + } + return Observable.throw(error); + }); + } + +} diff --git a/smp-angular/src/app/http/http.event.service.ts b/smp-angular/src/app/http/http.event.service.ts new file mode 100644 index 000000000..c5a763ab4 --- /dev/null +++ b/smp-angular/src/app/http/http.event.service.ts @@ -0,0 +1,15 @@ +import {Injectable} from "@angular/core"; +import {Subject} from "rxjs/Subject"; +import {Response} from "@angular/http"; + +@Injectable() +export class HttpEventService extends Subject<any> { + constructor() { + super(); + } + requestForbiddenEvent(error: Response) { + if(error) { + super.next(error); + } + } +} diff --git a/smp-angular/src/app/login/login.component.css b/smp-angular/src/app/login/login.component.css new file mode 100644 index 000000000..e02abfc9b --- /dev/null +++ b/smp-angular/src/app/login/login.component.css @@ -0,0 +1 @@ + diff --git a/smp-angular/src/app/login/login.component.html b/smp-angular/src/app/login/login.component.html new file mode 100644 index 000000000..aae172e41 --- /dev/null +++ b/smp-angular/src/app/login/login.component.html @@ -0,0 +1,33 @@ +<div id="page" class="login-page"> + <div id="formContainer"> + <form name="loginForm" #loginForm="ngForm" (ngSubmit)="login()"> + <table cellspacing="0"> + <tr> + <td> + <md-input-container> + <input mdInput placeholder="Username" name="username" [(ngModel)]="model.username" #username="ngModel" + required id="username_id"> + </md-input-container> + </td> + </tr> + <tr> + <td> + <md-input-container> + <input type="password" mdInput placeholder="Password" name="password" [(ngModel)]="model.password" + #password="ngModel" required id="password_id"> + </md-input-container> + </td> + </tr> + <tr> + <td> + <button md-raised-button color="primary" [disabled]="!loginForm.form.valid" id="loginbutton_id"> + <md-icon>input</md-icon> + <span>Login</span> + </button> + </td> + </tr> + </table> + <footer></footer> + </form> + </div> +</div> diff --git a/smp-angular/src/app/login/login.component.ts b/smp-angular/src/app/login/login.component.ts new file mode 100644 index 000000000..147f722aa --- /dev/null +++ b/smp-angular/src/app/login/login.component.ts @@ -0,0 +1,104 @@ +import {Component, OnDestroy, OnInit} from "@angular/core"; +import {Router, ActivatedRoute} from "@angular/router"; +import {SecurityService} from "../security/security.service"; +import {HttpEventService} from "../http/http.event.service"; +import {AlertService} from "../alert/alert.service"; +import {SecurityEventService} from "../security/security.event.service"; +import {User} from "../security/user"; +import {MdDialogRef, MdDialog} from "@angular/material"; +import {DefaultPasswordDialogComponent} from "app/security/default-password-dialog/default-password-dialog.component"; + +@Component({ + moduleId: module.id, + templateUrl: 'login.component.html', + styleUrls: ['./login.component.css'] +}) + +export class LoginComponent implements OnInit, OnDestroy { + + + model: any = {}; + loading = false; + returnUrl: string; + sub: any; + + constructor(private route: ActivatedRoute, + private router: Router, + private securityService: SecurityService, + private httpEventService: HttpEventService, + private alertService: AlertService, + private securityEventService: SecurityEventService, + private dialog: MdDialog) { + } + + ngOnInit() { + // get return url from route parameters or default to '/' + this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + + this.httpEventService.subscribe((error) => { + console.log("Received forbidden request event") + this.securityService.logout(); + }); + + this.sub = this.securityEventService.onLoginSuccessEvent().subscribe( + data => { + console.log("Authentication successfull"); + this.verifyDefaultLoginUsed(); + this.router.navigate([this.returnUrl]); + }); + + this.securityEventService.onLoginErrorEvent().subscribe( + error => { + console.error("Error authenticating:" + error); + let message; + const HTTP_UNAUTHORIZED = 401; + const HTTP_FORBIDDEN = 403; + const HTTP_NOTFOUND = 404; + const HTTP_GATEWAY_TIMEOUT = 504; + const USER_INACTIVE = 'Inactive'; + const USER_SUSPENDED = 'Suspended'; + switch (error.status) { + case HTTP_UNAUTHORIZED: + case HTTP_FORBIDDEN: + let forbiddenCode = error.json().message; + console.log("User forbiden code " + forbiddenCode); + switch (forbiddenCode) { + case USER_INACTIVE: + message = "The user is inactive. Please contact your administrator."; + break; + case USER_SUSPENDED: + message = "The user is suspended. Please try again later or contact your administrator."; + break; + default: + message = "The username/password combination you provided are not valid. Please try again or contact your administrator."; + break; + } + break; + case HTTP_GATEWAY_TIMEOUT: + case HTTP_NOTFOUND: + message = "Unable to login. Domibus is not running."; + break; + default: + message = "Default error (" + error.status + ") occurred during login."; + break; + } + this.alertService.error(message); + }); + } + + login() { + this.securityService.login(this.model.username, this.model.password); + } + + verifyDefaultLoginUsed() { + let currentUser: User = this.securityService.getCurrentUser(); + if (currentUser.defaultPasswordUsed) { + this.dialog.open(DefaultPasswordDialogComponent); + } + } + + ngOnDestroy(): void { + console.log("Destroying login component"); + this.sub.unsubscribe(); + } +} diff --git a/smp-angular/src/app/messagefilter/backendfilterentry.ts b/smp-angular/src/app/messagefilter/backendfilterentry.ts new file mode 100644 index 000000000..36d8ffbaf --- /dev/null +++ b/smp-angular/src/app/messagefilter/backendfilterentry.ts @@ -0,0 +1,35 @@ +import {RoutingCriteriaEntry} from "./routingcriteriaentry"; + + +export class BackendFilterEntry { + + from: RoutingCriteriaEntry; + to: RoutingCriteriaEntry; + action: RoutingCriteriaEntry; + service: RoutingCriteriaEntry ; + + public constructor(public entityId: number, + public index: number, + public backendName: string, + public routingCriterias: Array<RoutingCriteriaEntry>, + public persisted: boolean) { + this.initRoutingCriteria(); + } + + public initRoutingCriteria() { + this.from = this.getRoutingCriteria("from"); + this.to = this.getRoutingCriteria("to"); + this.action = this.getRoutingCriteria("action"); + this.service = this.getRoutingCriteria("service"); + } + + public getRoutingCriteria(property: string): RoutingCriteriaEntry { + for (let i = 0; i < this.routingCriterias.length; i++) { + if (this.routingCriterias[i].name == property) { + return this.routingCriterias[i]; + } + } + return null; + } + +} diff --git a/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.css b/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.css new file mode 100644 index 000000000..5df038ca0 --- /dev/null +++ b/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.css @@ -0,0 +1,16 @@ +.ng-valid[required], .ng-valid.required { + border-left: 5px solid #42A948; /* green */ +} + +.ng-invalid:not(form) { + border-left: 5px solid #a94442; /* red */ +} + +.formError { + color: red; +} + +.alertMessage { + font-size: 30%; + color: red; +} diff --git a/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.html b/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.html new file mode 100644 index 000000000..8e97babaa --- /dev/null +++ b/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.html @@ -0,0 +1,62 @@ +<div style="width: 500px"> + <h2 md-dialog-title>{{formTitle}}</h2> + <form [formGroup]="messageFilterForm"> + <md-card> + <div> + <md2-select mdInput placeholder="Plugin" id="backendfilter_id" floatPlaceholder="always" (change)="updatePlugin($event)" [(ngModel)]="plugin" [style.width]="'100%'" [formControl]="messageFilterForm.controls['plugin']"> + <md2-option *ngFor="let bName of backendFilterNames" [value]="bName.toString()"> + {{bName.toString()}} + </md2-option> + </md2-select> + </div> + + <div> + <md-input-container [style.width]="'100%'"> + <input mdInput placeholder="From" name="from" id="from_id" [value]="from" (blur)="updateFrom($event)" [formControl]="messageFilterForm.controls['from']" pattern="[a-zA-Z0-9_:-]+:[a-zA-Z0-9_:-]+" [maxLength]="textMaxLength"> + <div *ngIf="messageFilterForm.controls['from'].hasError('pattern')" style="color:red; font-size: 70%">You should follow the rule: [partyName]:[partyType]</div> + </md-input-container> + </div> + + <div> + <md-input-container [style.width]="'100%'"> + <input mdInput placeholder="To" name="to" id="to_id" [value]="to" (blur)="updateTo($event)" [formControl]="messageFilterForm.controls['to']" pattern="[a-zA-Z0-9_:-]+:[a-zA-Z0-9_:-]+" [maxLength]="textMaxLength"> + <div *ngIf="messageFilterForm.controls['to'].hasError('pattern')" style="color:red; font-size: 70%">You should follow the rule: [partyName]:[partyType]</div> + </md-input-container> + </div> + + <div> + <md-input-container [style.width]="'100%'"> + <input mdInput placeholder="Action" name="action" id="action_id" [value]="action" (blur)="updateAction($event)" [formControl]="messageFilterForm.controls['action']" pattern="[a-zA-Z0-9_:-]+" [maxLength]="textMaxLength"> + <div *ngIf="messageFilterForm.controls['action'].hasError('pattern')" style="color:red; font-size: 70%">You should follow the rule : [action]</div> + </md-input-container> + </div> + + <div> + <md-input-container [style.width]="'100%'"> + <input mdInput placeholder="Service" name="service" id="service_id" [value]="service" (blur)="updateService($event)" [formControl]="messageFilterForm.controls['service']" pattern="[a-zA-Z0-9_:-]+:[a-zA-Z0-9_:-]+" [maxLength]="textMaxLength"> + <div *ngIf="messageFilterForm.controls['service'].hasError('pattern')" style="color:red; font-size: 70%">You should follow the rule: [serviceName]:[serviceType]</div> + </md-input-container> + </div> + + <table class="buttonsRow"> + <tr> + <td> + <!-- Can optionally provide a result for the closing dialog. --> + <button md-raised-button color="primary" [md-dialog-close]="true" (click)="submitForm()" type="submit" [disabled]="!messageFilterForm.valid" id="okbutton_id"> + <md-icon>check_circle</md-icon> + <span>OK</span> + </button> + </td> + <td> + <button md-raised-button color="primary" md-dialog-close id="cancelbutton_id"> + <md-icon>cancel</md-icon> + <span>Cancel</span> + </button> + </td> + </tr> + </table> + + <div></div> + </md-card> + </form> +</div> diff --git a/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.ts b/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.ts new file mode 100644 index 000000000..69b6cb1ea --- /dev/null +++ b/smp-angular/src/app/messagefilter/editmessagefilter-form/editmessagefilter-form.component.ts @@ -0,0 +1,85 @@ +import {Component, Inject} from '@angular/core'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import {MD_DIALOG_DATA, MdDialogRef} from '@angular/material'; +import {BackendFilterEntry} from '../backendfilterentry'; +import {isNullOrUndefined} from 'util'; + +let NEW_MODE = 'New Message Filter'; +let EDIT_MODE = 'Message Filter Edit'; +let MAX_LENGTH = 255; + +@Component({ + selector: 'editmessagefilter-form', + templateUrl: 'editmessagefilter-form.component.html' +}) +export class EditMessageFilterComponent { + + plugin: string; + from: string; + to: string; + service: string; + action: string; + formTitle: string = EDIT_MODE; + textMaxLength = MAX_LENGTH; + + backendFilterNames: Array<String> = []; + + messageFilterForm: FormGroup; + + constructor(public dialogRef: MdDialogRef<EditMessageFilterComponent>, + @Inject(MD_DIALOG_DATA) public data: any, + fb: FormBuilder) { + if (isNullOrUndefined(data.edit)) { + this.formTitle = NEW_MODE; + this.backendFilterNames = data.backendFilterNames; + this.plugin = this.backendFilterNames[0].toString(); + this.from = ''; + this.to = ''; + this.action = ''; + this.service = ''; + } else { + let backEntry: BackendFilterEntry = new BackendFilterEntry(this.data.edit.entityId, + this.data.edit.index, + this.data.edit.backendName, + this.data.edit.routingCriterias, + this.data.edit.persisted); + this.backendFilterNames = data.backendFilterNames; + this.plugin = backEntry.backendName; + this.from = isNullOrUndefined(backEntry.from) ? '' : backEntry.from.expression; + this.to = isNullOrUndefined(backEntry.to) ? '' : backEntry.to.expression; + this.action = isNullOrUndefined(backEntry.action) ? '' : backEntry.action.expression; + this.service = isNullOrUndefined(backEntry.service) ? '' : backEntry.service.expression; + } + this.messageFilterForm = fb.group({ + 'plugin': [null, Validators.required], + 'from': [null, Validators.pattern], + 'to': [null, Validators.pattern], + 'action': [null, Validators.pattern], + 'service': [null, Validators.pattern] + }); + } + + updatePlugin(event) { + this.plugin = event.value; + } + + updateFrom(event) { + this.from = event.target.value; + } + + updateTo(event) { + this.to = event.target.value; + } + + updateAction(event) { + this.action = event.target.value; + } + + updateService(event) { + this.service = event.target.value; + } + + submitForm() { + this.dialogRef.close(true); + } +} diff --git a/smp-angular/src/app/messagefilter/messagefilter.component.css b/smp-angular/src/app/messagefilter/messagefilter.component.css new file mode 100644 index 000000000..deedc1c96 --- /dev/null +++ b/smp-angular/src/app/messagefilter/messagefilter.component.css @@ -0,0 +1,33 @@ +.justified { + white-space: normal; + overflow: hidden; + text-overflow: ellipsis; + display: block; + max-width: 100%; +} + +:before { + content: "\200D"; + display:inline; +} + +.clickable { + display:inline-block; + width: 100%; + height: 100%; +} + +.rowsDiv { + margin-top:30px; +} + +.pluginRow { + width: 100%; +} + + +.tableArea { + width: 100%; + height: 80%; +} + diff --git a/smp-angular/src/app/messagefilter/messagefilter.component.html b/smp-angular/src/app/messagefilter/messagefilter.component.html new file mode 100644 index 000000000..440c9186c --- /dev/null +++ b/smp-angular/src/app/messagefilter/messagefilter.component.html @@ -0,0 +1,139 @@ +<page-header id="messagefilterheader_id">Message Filter</page-header> +<div class="selectionCriteria"> + <div class="panel"> + <md-card> + <md-card-content> + <form name="messageFilterForm" #messageFilterForm="ngForm"> + <button md-icon-button color="primary" [disabled]="!isSaveAsCSVButtonEnabled()" (click)="saveAsCSV()" + id="saveascsvbutton_id" md-tooltip="Export as CSV"> + <img src="assets/images/exportCSV.svg" width="30" height="30"> + </button> + <ngx-datatable + #mydatatable + class="material striped" + [columnMode]="'force'" + [headerHeight]="50" + [footerHeight]="50" + [rowHeight]="'auto'" + [rows]="rows" + [selected]="selected" + [selectionType]="'multi'" + (select)='onSelect($event)' + id="messageFilterTable"> + <ngx-datatable-column name="Plugin" prop="backendName" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <span class="justified, clickable" style="word-wrap: break-word" (dblclick)="buttonEditAction(this.selected[0])" id="pluginRow{{row.$$index}}_id"> + {{value}} + </span> + </ng-template> + </ngx-datatable-column> + <ngx-datatable-column name="From" prop="from.expression" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <span class="justified, clickable" style="word-wrap: break-word" (dblclick)="buttonEditAction(this.selected[0])" id="fromRow{{row.$$index}}_id"> + {{value}} + </span> + </ng-template> + </ngx-datatable-column> + <ngx-datatable-column name="To" prop="to.expression" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <span class="justified, clickable" style="word-wrap: break-word" (dblclick)="buttonEditAction(this.selected[0])" id="toRow{{row.$$index}}_id"> + {{value}} + </span> + </ng-template> + </ngx-datatable-column> + <ngx-datatable-column name="Action" prop="action.expression" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <span class="clickable" style="word-wrap: break-word" (dblclick)="buttonEditAction(this.selected[0])" id="actionRow{{row.$$index}}_id"> + {{value}} + </span> + </ng-template> + </ngx-datatable-column> + <ngx-datatable-column name="Service" prop="service.expression" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <span class="justified, clickable" style="word-wrap: break-word" (dblclick)="buttonEditAction(this.selected[0])" id="serviceRow{{row.$$index}}_id"> + {{value}} + </span> + </ng-template> + </ngx-datatable-column> + <ngx-datatable-column name="Persisted" prop="persisted" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <input autofocus type="checkbox" [checked]="value" disabled (dblclick)="buttonEditAction(this.selected[0])" id="persistedRow{{row.$$index}}_id"/> + </ng-template> + </ngx-datatable-column> + <ngx-datatable-column name="Actions" prop="actions" [sortable]="false"> + <ng-template ngx-datatable-cell-template let-value="value" let-row="row"> + <button md-icon-button color="primary" type="button" [disabled]="row.$$index===0" + (click)="buttonMoveUpAction(row)" id="moveUpButtonRow{{row.$$index}}_id" tooltip="Move Up"> + <md-icon>arrow_drop_up</md-icon> + </button> + <button md-icon-button color="primary" type="button" [disabled]="row.$$index===rows.length - 1" + (click)="buttonMoveDownAction(row)" id="moveDownButtonRow{{row.$$index}}_id" + tooltip="Move Down"> + <md-icon>arrow_drop_down</md-icon> + </button> + <button md-icon-button color="primary" type="button" (click)="buttonEditAction(row)" + id="editButtonRow{{row.$$index}}_id" tooltip="Edit"> + <md-icon>edit</md-icon> + </button> + <button md-icon-button color="primary" type="button" (click)="buttonDeleteAction(row)" + id="deleteButtonRow{{row.$$index}}_id" tooltip="Delete"> + <md-icon>delete</md-icon> + </button> + </ng-template> + </ngx-datatable-column> + </ngx-datatable> + + <table class="group-action-button"> + <tr> + <td> + <button md-raised-button color="primary" type="button" [disabled]="!enableMoveUp" + (click)="buttonMoveUp()" id="moveupbutton_id"> + <md-icon>arrow_drop_up</md-icon> + <span>Move Up</span> + </button> + </td> + <td> + <button md-raised-button color="primary" type="button" [disabled]="!enableMoveDown" + (click)="buttonMoveDown()" id="movedownbutton_id"> + <md-icon>arrow_drop_down</md-icon> + <span>Move Down</span> + </button> + </td> + </tr> + </table> + <table class="group-action-button"> + <tr> + <td> + <button md-raised-button color="primary" type="button" [disabled]="!enableCancel" + (click)="cancelDialog()" id="cancelbutton_id"> + <md-icon>cancel</md-icon> + <span>Cancel</span> + </button> + <button md-raised-button color="primary" type="button" [disabled]="!enableSave" (click)="saveDialog(false)" + id="savebutton_id"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + <button md-raised-button color="primary" type="button" (click)="buttonNew()" id="newbutton_id"> + <md-icon>add</md-icon> + <span>New</span> + </button> + <button md-raised-button color="primary" type="button" [disabled]="!enableEdit" + (click)="buttonEditAction(this.selected[0])" + id="editbutton_id"> + <md-icon>edit</md-icon> + <span>Edit</span> + </button> + <button md-raised-button color="primary" type="button" [disabled]="!enableDelete" + (click)="buttonDelete()" id="deletebutton_id"> + <md-icon>delete</md-icon> + <span>Delete</span> + </button> + </td> + </tr> + </table> + </form> + </md-card-content> + </md-card> + </div> +</div> diff --git a/smp-angular/src/app/messagefilter/messagefilter.component.ts b/smp-angular/src/app/messagefilter/messagefilter.component.ts new file mode 100644 index 000000000..53096b7cb --- /dev/null +++ b/smp-angular/src/app/messagefilter/messagefilter.component.ts @@ -0,0 +1,476 @@ +import {Component} from "@angular/core"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {AlertService} from "../alert/alert.service"; +import {Http, Headers, Response} from "@angular/http"; +import {Observable} from "rxjs/Observable"; +import {MessageFilterResult} from "./messagefilterresult"; +import {BackendFilterEntry} from "./backendfilterentry"; +import {RoutingCriteriaEntry} from "./routingcriteriaentry"; +import {isNullOrUndefined, isUndefined} from "util"; +import {EditMessageFilterComponent} from "./editmessagefilter-form/editmessagefilter-form.component"; +import {DirtyOperations} from "../common/dirty-operations"; +import {CancelDialogComponent} from "../common/cancel-dialog/cancel-dialog.component"; +import {SaveDialogComponent} from "../common/save-dialog/save-dialog.component"; +import {DownloadService} from "../download/download.service"; + +@Component({ + moduleId: module.id, + templateUrl: 'messagefilter.component.html', + providers: [], + styleUrls: ['./messagefilter.component.css'] +}) + +export class MessageFilterComponent implements DirtyOperations { + + rows = []; + selected = []; + + backendFilterNames = []; + + rowNumber = -1; + + enableCancel = false; + enableSave = false; + enableDelete = false; + enableEdit = false; + + enableMoveUp = false; + enableMoveDown = false; + + loading: boolean = false; + + areFiltersPersisted: boolean; + + static readonly MESSAGE_FILTER_URL: string = 'rest/messagefilters'; + + constructor(private http: Http, private alertService: AlertService, public dialog: MdDialog) { + } + + + getBackendFiltersInfo() { + this.getMessageFilterEntries().subscribe((result: MessageFilterResult) => { + console.log("messagefilter response: " + result); + + let newRows = []; + this.backendFilterNames = []; + if (!isNullOrUndefined(result.messageFilterEntries)) { + for (let i = 0; i < result.messageFilterEntries.length; i++) { + let currentFilter: BackendFilterEntry = result.messageFilterEntries[i]; + if (isNullOrUndefined(currentFilter)) { + continue; + } + let backendEntry = new BackendFilterEntry(currentFilter.entityId, i, currentFilter.backendName, currentFilter.routingCriterias, currentFilter.persisted); + newRows.push(backendEntry); + if (this.backendFilterNames.indexOf(backendEntry.backendName) == -1) { + this.backendFilterNames.push(backendEntry.backendName); + } + } + this.areFiltersPersisted = result.areFiltersPersisted; + + this.rows = newRows; + + if (!this.areFiltersPersisted && this.backendFilterNames.length > 1) { + this.alertService.error("One or several filters in the table were not configured yet (Persisted flag is not checked). " + + "It is strongly recommended to double check the filters configuration and afterwards save it."); + this.enableSave = true; + } + } + }, (error: any) => { + console.log("error getting the message filter: " + error); + this.loading = false; + this.alertService.error("Error occurred: " + error); + }); + } + + getMessageFilterEntries(): Observable<MessageFilterResult> { + return this.http.get(MessageFilterComponent.MESSAGE_FILTER_URL).map((response: Response) => + response.json() + ); + } + + ngOnInit() { + this.loading = true; + + this.getBackendFiltersInfo(); + } + + createValueProperty(cell, newProp, row) { + switch (cell) { + case 'from': + this.rows[row].from = newProp; + break; + case 'to': + this.rows[row].to = newProp; + break; + case 'action': + this.rows[row].action = newProp; + break; + case 'service': + this.rows[row].service = newProp; + break; + } + } + + buttonNew() { + let formRef: MdDialogRef<EditMessageFilterComponent> = this.dialog.open(EditMessageFilterComponent, {data: {backendFilterNames: this.backendFilterNames}}); + formRef.afterClosed().subscribe(result => { + if (result == true) { + let routingCriterias: Array<RoutingCriteriaEntry> = []; + if (!isNullOrUndefined(formRef.componentInstance.from) && formRef.componentInstance.from != "") { + routingCriterias.push(new RoutingCriteriaEntry(0, 'from', formRef.componentInstance.from)); + } + if (!isNullOrUndefined(formRef.componentInstance.to) && formRef.componentInstance.to != "") { + routingCriterias.push(new RoutingCriteriaEntry(0, 'to', formRef.componentInstance.to)); + } + if (!isNullOrUndefined(formRef.componentInstance.action) && formRef.componentInstance.action != "") { + routingCriterias.push(new RoutingCriteriaEntry(0, 'action', formRef.componentInstance.action)); + } + if (!isNullOrUndefined(formRef.componentInstance.service) && formRef.componentInstance.service != "") { + routingCriterias.push(new RoutingCriteriaEntry(0, 'service', formRef.componentInstance.service)); + } + let backendEntry = new BackendFilterEntry(0, this.rowNumber + 1, formRef.componentInstance.plugin, routingCriterias, false); + if (this.findRowsIndex(backendEntry) == -1) { + this.rows.push(backendEntry); + this.enableSave = formRef.componentInstance.messageFilterForm.dirty; + this.enableCancel = formRef.componentInstance.messageFilterForm.dirty; + } else { + this.alertService.error("Impossible to insert a duplicate entry"); + } + } + }); + } + + private findRowsIndex(backendEntry: BackendFilterEntry): number { + for (let i = 0; i < this.rows.length; i++) { + let currentRow = this.rows[i]; + if (currentRow.backendName === backendEntry.backendName && this.compareRoutingCriterias(backendEntry.routingCriterias, currentRow.routingCriterias)) { + return i; + } + } + return -1; + } + + private compareRoutingCriterias(criteriasA: RoutingCriteriaEntry[], criteriasB: RoutingCriteriaEntry[]): boolean { + let result: boolean = true; + for (let entry of criteriasA) { + result = result && this.findRoutingCriteria(entry, criteriasB); + } + return result; + } + + private findRoutingCriteria(toFind: RoutingCriteriaEntry, routingCriterias: RoutingCriteriaEntry[]): boolean { + for (let entry of routingCriterias) { + if (entry.name === toFind.name && entry.expression === toFind.expression) { + return true; + } + } + return toFind.expression === '' && routingCriterias.length == 0; + } + + buttonEditAction(row) { + let formRef: MdDialogRef<EditMessageFilterComponent> = this.dialog.open(EditMessageFilterComponent, { + data: { + backendFilterNames: this.backendFilterNames, + edit: row + } + }); + formRef.afterClosed().subscribe(result => { + if (result == true) { + let routingCriterias: Array<RoutingCriteriaEntry> = []; + if (!isNullOrUndefined(formRef.componentInstance.from)) { + routingCriterias.push(new RoutingCriteriaEntry(0, 'from', formRef.componentInstance.from)); + } + if (!isNullOrUndefined(formRef.componentInstance.to)) { + routingCriterias.push(new RoutingCriteriaEntry(0, 'to', formRef.componentInstance.to)); + } + if (!isNullOrUndefined(formRef.componentInstance.action)) { + routingCriterias.push(new RoutingCriteriaEntry(0, 'action', formRef.componentInstance.action)); + } + if (!isNullOrUndefined(formRef.componentInstance.service)) { + routingCriterias.push(new RoutingCriteriaEntry(0, 'service', formRef.componentInstance.service)); + } + let backendEntry = new BackendFilterEntry(0, this.rowNumber + 1, formRef.componentInstance.plugin, routingCriterias, false); + let backendEntryPos = this.findRowsIndex(backendEntry); + if (backendEntryPos == -1) { + this.updateSelectedPlugin(formRef.componentInstance.plugin); + this.updateSelectedFrom(formRef.componentInstance.from); + this.updateSelectedTo(formRef.componentInstance.to); + this.updateSelectedAction(formRef.componentInstance.action); + this.updateSelectedService(formRef.componentInstance.service); + + this.enableSave = formRef.componentInstance.messageFilterForm.dirty; + this.enableCancel = formRef.componentInstance.messageFilterForm.dirty; + } else { + if (this.findRowsIndex(backendEntry) != this.rowNumber) { + this.alertService.error("Impossible to insert a duplicate entry"); + } + } + } + }); + } + + private deleteRoutingCriteria(rc: string) { + let numRoutingCriterias = this.rows[this.rowNumber].routingCriterias.length; + for (let i = 0; i < numRoutingCriterias; i++) { + let routCriteria = this.rows[this.rowNumber].routingCriterias[i]; + if (routCriteria.name == rc) { + this.rows[this.rowNumber].routingCriterias.splice(i, 1); + return; + } + } + } + + private createRoutingCriteria(rc: string, value: string) { + if (value.length == 0) { + return; + } + let newRC = new RoutingCriteriaEntry(null, rc, value); + this.rows[this.rowNumber].routingCriterias.push(newRC); + this.createValueProperty(rc, newRC, this.rowNumber); + } + + private updateSelectedTo(value: string) { + if (!isNullOrUndefined(this.rows[this.rowNumber].to)) { + if (value.length == 0) { + // delete + this.deleteRoutingCriteria('to'); + this.rows[this.rowNumber].to.expression = ''; + } else { + // update + this.rows[this.rowNumber].to.expression = value; + } + } else { + // create + this.createRoutingCriteria('to', value); + } + } + + private updateSelectedPlugin(value: string) { + this.rows[this.rowNumber].backendName = value; + } + + private updateSelectedFrom(value: string) { + if (!isNullOrUndefined(this.rows[this.rowNumber].from)) { + if (value.length == 0) { + // delete + this.deleteRoutingCriteria('from'); + this.rows[this.rowNumber].from.expression = ''; + } else { + // update + this.rows[this.rowNumber].from.expression = value; + } + } else { + // create + this.createRoutingCriteria('from', value); + } + } + + private updateSelectedAction(value: string) { + if (!isNullOrUndefined(this.rows[this.rowNumber].action)) { + if (value.length == 0) { + // delete + this.deleteRoutingCriteria('action'); + this.rows[this.rowNumber].action.expression = ''; + } else { + // update + this.rows[this.rowNumber].action.expression = value; + } + } else { + // create + this.createRoutingCriteria('action', value); + } + } + + private updateSelectedService(value: string) { + if (!isNullOrUndefined(this.rows[this.rowNumber].service)) { + if (value.length == 0) { + // delete + this.deleteRoutingCriteria('service'); + this.rows[this.rowNumber].service.expression = ''; + } else { + // update + this.rows[this.rowNumber].service.expression = value; + } + } else { + // create + this.createRoutingCriteria('service', value); + } + } + + private disableSelectionAndButtons() { + this.selected = []; + this.enableMoveDown = false; + this.enableMoveUp = false; + this.enableCancel = false; + this.enableSave = false; + this.enableEdit = false; + this.enableDelete = false; + } + + isSaveAsCSVButtonEnabled() : boolean { + return (this.rows.length < 10000); + } + + saveAsCSV() { + if(this.isDirty()) { + this.saveDialog(true); + } else { + DownloadService.downloadNative(MessageFilterComponent.MESSAGE_FILTER_URL + "/csv"); + } + } + + cancelDialog() { + let dialogRef = this.dialog.open(CancelDialogComponent); + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.disableSelectionAndButtons(); + this.getBackendFiltersInfo(); + } + }); + } + + saveDialog(withDownloadCSV: boolean) { + let headers = new Headers({'Content-Type': 'application/json'}); + let dialogRef = this.dialog.open(SaveDialogComponent); + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.disableSelectionAndButtons(); + this.http.put(MessageFilterComponent.MESSAGE_FILTER_URL, JSON.stringify(this.rows), {headers: headers}).subscribe(res => { + this.alertService.success("The operation 'update message filters' completed successfully.", false); + this.getBackendFiltersInfo(); + if(withDownloadCSV) { + DownloadService.downloadNative(MessageFilterComponent.MESSAGE_FILTER_URL + "/csv"); + } + }, err => { + this.alertService.error("The operation 'update message filters' not completed successfully.", false); + }); + } else { + if(withDownloadCSV) { + DownloadService.downloadNative(MessageFilterComponent.MESSAGE_FILTER_URL + "/csv"); + } + } + }); + } + + buttonDeleteAction(row) { + this.enableCancel = true; + this.enableSave = true; + this.enableDelete = false; + this.enableEdit = false; + + this.enableMoveUp = false; + this.enableMoveDown = false; + + this.rows.splice(row.$$index, 1); + + this.selected = []; + } + + buttonDelete() { + this.enableCancel = true; + this.enableSave = true; + this.enableDelete = false; + this.enableEdit = false; + + this.enableMoveUp = false; + this.enableMoveDown = false; + + // we need to use the old for loop approach to don't mess with the entries on the top before + for (let i = this.selected.length - 1; i >= 0; i--) { + this.rows.splice(this.selected[i].$$index, 1); + } + + this.selected = []; + } + + private moveUpInternal(rowNumber) { + if (rowNumber < 1) { + return; + } + let array = this.rows.slice(); + let move = array[rowNumber]; + array[rowNumber] = array[rowNumber - 1]; + array[rowNumber - 1] = move; + + this.rows = array.slice(); + this.rowNumber--; + + if (rowNumber == 0) { + this.enableMoveUp = false; + } + this.enableMoveDown = true; + this.enableSave = true; + this.enableCancel = true; + } + + buttonMoveUpAction(row) { + this.moveUpInternal(row.$$index); + setTimeout(() => { + document.getElementById('pluginRow'+(row.$$index)+'_id').click(); + }, 50); + } + + buttonMoveUp() { + this.moveUpInternal(this.rowNumber); + } + + private moveDownInternal(rowNumber) { + if (rowNumber > this.rows.length - 1) { + return; + } + + let array = this.rows.slice(); + let move = array[rowNumber]; + array[rowNumber] = array[rowNumber + 1]; + array[rowNumber + 1] = move; + + this.rows = array.slice(); + this.rowNumber++; + + if (rowNumber == this.rows.length - 1) { + this.enableMoveDown = false; + } + this.enableMoveUp = true; + this.enableSave = true; + this.enableCancel = true; + } + + buttonMoveDownAction(row) { + this.moveDownInternal(row.$$index); + setTimeout(() => { + document.getElementById('pluginRow'+(row.$$index)+'_id').click(); + }, 50); + } + + buttonMoveDown() { + this.moveDownInternal(this.rowNumber); + } + + onSelect({selected}) { + console.log('Select Event', selected, this.selected); + + if (isNullOrUndefined(selected) || selected.length == 0) { + // unselect + this.enableMoveDown = false; + this.enableMoveUp = false; + this.enableDelete = false; + this.enableEdit = false; + + return; + } + + // select + this.rowNumber = this.selected[0].$$index; + + this.selected.splice(0, this.selected.length); + this.selected.push(...selected); + this.enableMoveDown = selected.length == 1 && this.rowNumber < this.rows.length - 1; + this.enableMoveUp = selected.length == 1 && this.rowNumber > 0; + this.enableDelete = selected.length > 0; + this.enableEdit = selected.length == 1; + } + + isDirty(): boolean { + return this.enableCancel; + } +} diff --git a/smp-angular/src/app/messagefilter/messagefilterresult.ts b/smp-angular/src/app/messagefilter/messagefilterresult.ts new file mode 100644 index 000000000..9e98822ed --- /dev/null +++ b/smp-angular/src/app/messagefilter/messagefilterresult.ts @@ -0,0 +1,6 @@ +import {BackendFilterEntry} from "./backendfilterentry"; +export class MessageFilterResult { + + constructor(public messageFilterEntries: Array<BackendFilterEntry>, public areFiltersPersisted: boolean) { + } +} diff --git a/smp-angular/src/app/messagefilter/routingcriteriaentry.ts b/smp-angular/src/app/messagefilter/routingcriteriaentry.ts new file mode 100644 index 000000000..44df5794b --- /dev/null +++ b/smp-angular/src/app/messagefilter/routingcriteriaentry.ts @@ -0,0 +1,9 @@ +export class RoutingCriteriaEntry { + + public constructor( + public entityId: number, + public name: string, + public expression: string + ) { + } +} diff --git a/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.css b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.css new file mode 100644 index 000000000..55a259899 --- /dev/null +++ b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.css @@ -0,0 +1,43 @@ +label:hover, label:active, input:hover + label, input:active + label { + color: #3f51b5; +} + + +.divTable { + display: table; + width: 100%; +} + +.divTableRow { + display: table-row; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} + +.divTableCell, .divTableHead { + /*border: 1px solid #999999;*/ + display: table-cell; + padding: 3px 3px; + text-align: center; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} + +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} + +.divTableBody { + display: table-row-group; +} + + diff --git a/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.html b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.html new file mode 100644 index 000000000..e30dabd05 --- /dev/null +++ b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.html @@ -0,0 +1,17 @@ + <h1 md-dialog-title>You are using the default password for this user. We strongly recommend you to change it using the + user console. + </h1> + <div class="divTable"> + <div class="divTableBody"> + + <div class="divTableRow"> + <div class="divTableCell"> + <button md-raised-button color="primary" (click)="dialogRef.close('ok')" id="defaultpassbutton_id"> + <md-icon>check_circle</md-icon> + <span>OK</span> + </button> + </div> + </div> + </div> + </div> + diff --git a/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.spec.ts b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.spec.ts new file mode 100644 index 000000000..086487d0c --- /dev/null +++ b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DefaultPasswordDialogComponent } from './default-password-dialog.component'; + +describe('DefaultPasswordDialogComponent', () => { + let component: DefaultPasswordDialogComponent; + let fixture: ComponentFixture<DefaultPasswordDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DefaultPasswordDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DefaultPasswordDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.ts b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.ts new file mode 100644 index 000000000..a2519a804 --- /dev/null +++ b/smp-angular/src/app/security/default-password-dialog/default-password-dialog.component.ts @@ -0,0 +1,16 @@ +import {Component, OnInit} from "@angular/core"; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'app-default-password-dialog', + templateUrl: './default-password-dialog.component.html', + styleUrls: ['./default-password-dialog.component.css'] +}) +export class DefaultPasswordDialogComponent implements OnInit { + + constructor(public dialogRef: MdDialogRef<DefaultPasswordDialogComponent>) { } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/security/domain.service.ts b/smp-angular/src/app/security/domain.service.ts new file mode 100644 index 000000000..ed76cd86d --- /dev/null +++ b/smp-angular/src/app/security/domain.service.ts @@ -0,0 +1,66 @@ +import {Injectable} from '@angular/core'; +import {Http, Headers, Response} from '@angular/http'; +import {Observable} from 'rxjs/Observable'; +import {ReplaySubject} from 'rxjs'; +import 'rxjs/add/operator/map'; +import {Domain} from './domain'; + +@Injectable() +export class DomainService { + + static readonly MULTI_TENANCY_URL: string = 'rest/application/multitenancy'; + static readonly CURRENT_DOMAIN_URL: string = 'rest/security/user/domain'; + static readonly DOMAIN_LIST_URL: string = 'rest/application/domains'; + + private isMultiDomainSubject: ReplaySubject<boolean>; + private domainSubject: ReplaySubject<Domain>; + + constructor (private http: Http) { + } + + isMultiDomain (): Observable<boolean> { + if (!this.isMultiDomainSubject) { + this.isMultiDomainSubject = new ReplaySubject<boolean>(); + this.http.get(DomainService.MULTI_TENANCY_URL).subscribe((res: Response) => { + this.isMultiDomainSubject.next(res.json()); + }, (error: any) => { + console.log('get isMultiDomain:' + error); + this.isMultiDomainSubject.next(false); + }); + } + return this.isMultiDomainSubject.asObservable(); + } + + getCurrentDomain (): Observable<Domain> { + if (!this.domainSubject) { + this.domainSubject = new ReplaySubject<Domain>(); + this.http.get(DomainService.CURRENT_DOMAIN_URL).subscribe((res: Response) => { + this.domainSubject.next(res.json()); + }, (error: any) => { + console.log('getCurrentDomain:' + error); + this.domainSubject.next(null); + }); + } + return this.domainSubject.asObservable(); + } + + resetDomain (): void { + if (this.domainSubject) { + this.domainSubject.unsubscribe(); + } + this.domainSubject = null; + } + + getDomains (): Observable<Domain[]> { + return this.http.get(DomainService.DOMAIN_LIST_URL).map((res: Response) => res.json()); + } + + setCurrentDomain (domain: Domain) { + return this.http.put(DomainService.CURRENT_DOMAIN_URL, domain.code).toPromise().then(() => { + if (this.domainSubject) { + this.domainSubject.next(domain); + } + }); + } + +} diff --git a/smp-angular/src/app/security/domain.ts b/smp-angular/src/app/security/domain.ts new file mode 100644 index 000000000..aba5088dc --- /dev/null +++ b/smp-angular/src/app/security/domain.ts @@ -0,0 +1,7 @@ +export class Domain { + code: string; + name: string; + + constructor(code: string, name: string) { + } +} diff --git a/smp-angular/src/app/security/is-authorized.directive.ts b/smp-angular/src/app/security/is-authorized.directive.ts new file mode 100644 index 000000000..2dfd23f04 --- /dev/null +++ b/smp-angular/src/app/security/is-authorized.directive.ts @@ -0,0 +1,26 @@ +import {Directive,ElementRef,Input} from '@angular/core'; +import {SecurityService} from './security.service'; + +@Directive({ + selector:'[isAuthorized]', + providers:[] +}) +export class IsAuthorized { + @Input('isAuthorized') role:string; + constructor(private _elementRef:ElementRef, private securityService:SecurityService) { + + } + ngOnInit():void { + if(this.role && this.role.trim() !== '') { + this.securityService.isAuthorized([this.role]).subscribe((isAuthorized:boolean) => { + if(!isAuthorized) { + let el : HTMLElement = this._elementRef.nativeElement; + el.parentNode.removeChild(el); + } + }, + (error:any) => { + console.log("Error in IsAuthorized directive [" + error + "]"); + }); + } + } +} diff --git a/smp-angular/src/app/security/security.event.service.ts b/smp-angular/src/app/security/security.event.service.ts new file mode 100644 index 000000000..7953c1340 --- /dev/null +++ b/smp-angular/src/app/security/security.event.service.ts @@ -0,0 +1,49 @@ +import {Injectable} from "@angular/core"; +import {Response} from "@angular/http"; +import {Observable} from "rxjs/Observable"; +import "rxjs/add/operator/map"; +import {Subject} from "rxjs"; + +@Injectable() +export class SecurityEventService { + + private loginSuccessSubject = new Subject<any>(); + private loginErrorSubject = new Subject<any>(); + private logoutSuccessSubject = new Subject<any>(); + private logoutErrorSubject = new Subject<any>(); + + constructor() { + } + + notifyLoginSuccessEvent(res: Response) { + this.loginSuccessSubject.next(res); + } + + onLoginSuccessEvent(): Observable<Response> { + return this.loginSuccessSubject.asObservable(); + } + + notifyLoginErrorEvent(error: any) { + this.loginErrorSubject.next(error); + } + + onLoginErrorEvent(): Observable<any> { + return this.loginErrorSubject.asObservable(); + } + + notifyLogoutSuccessEvent(res: Response) { + this.logoutSuccessSubject.next(res); + } + + onLogoutSuccessEvent(): Observable<Response> { + return this.logoutSuccessSubject.asObservable(); + } + + notifyLogoutErrorEvent(error: any) { + this.logoutErrorSubject.next(error); + } + + onLogoutErrorEvent(): Observable<any> { + return this.logoutErrorSubject.asObservable(); + } +} diff --git a/smp-angular/src/app/security/security.service.ts b/smp-angular/src/app/security/security.service.ts new file mode 100644 index 000000000..432412f92 --- /dev/null +++ b/smp-angular/src/app/security/security.service.ts @@ -0,0 +1,119 @@ +import {Injectable} from '@angular/core'; +import {Http, Headers, Response} from '@angular/http'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; +import {User} from './user'; +import {ReplaySubject} from 'rxjs'; +import {SecurityEventService} from './security.event.service'; +import {DomainService} from './domain.service'; + +@Injectable() +export class SecurityService { + static ROLE_AP_ADMIN = 'ROLE_AP_ADMIN'; + static ROLE_DOMAIN_ADMIN = 'ROLE_ADMIN'; + + constructor (private http: Http, private securityEventService: SecurityEventService, private domainService: DomainService) { + } + + login (username: string, password: string) { + this.domainService.resetDomain(); + let headers = new Headers({'Content-Type': 'application/json'}); + return this.http.post('rest/security/authentication', + JSON.stringify({ + username: username, + password: password + }), + {headers: headers}) + .subscribe((response: Response) => { + console.log('Login success'); + localStorage.setItem('currentUser', JSON.stringify(response.json())); + this.securityEventService.notifyLoginSuccessEvent(response); + }, + (error: any) => { + console.log('Login error'); + this.securityEventService.notifyLoginErrorEvent(error); + }); + } + + logout () { + console.log('Logging out'); + this.domainService.resetDomain(); + this.http.delete('rest/security/authentication').subscribe((res: Response) => { + localStorage.removeItem('currentUser'); + this.securityEventService.notifyLogoutSuccessEvent(res); + }, + (error: any) => { + console.debug('error logging out [' + error + ']'); + this.securityEventService.notifyLogoutErrorEvent(error); + }); + } + + getCurrentUser (): User { + return JSON.parse(localStorage.getItem('currentUser')); + } + + private getCurrentUsernameFromServer (): Observable<string> { + let subject = new ReplaySubject(); + this.http.get('rest/security/user') + .subscribe((res: Response) => { + subject.next(res.text()); + }, (error: any) => { + //console.log('getCurrentUsernameFromServer:' + error); + subject.next(null); + }); + return subject.asObservable(); + } + + isAuthenticated (callServer: boolean = false): Observable<boolean> { + let subject = new ReplaySubject(); + if (callServer) { + //we get the username from the server to trigger the redirection to the login screen in case the user is not authenticated + this.getCurrentUsernameFromServer() + .subscribe((user: string) => { + console.log('isAuthenticated: getCurrentUsernameFromServer [' + user + ']'); + subject.next(user !== null); + }, (user: string) => { + console.log('isAuthenticated error' + user); + subject.next(false); + }); + + } else { + let currentUser = this.getCurrentUser(); + subject.next(currentUser !== null); + } + return subject.asObservable(); + } + + isCurrentUserSuperAdmin (): boolean { + return this.isCurrentUserInRole([SecurityService.ROLE_AP_ADMIN]); + } + + isCurrentUserAdmin (): boolean { + return this.isCurrentUserInRole([SecurityService.ROLE_DOMAIN_ADMIN, SecurityService.ROLE_AP_ADMIN]); + } + + isCurrentUserInRole (roles: Array<string>): boolean { + let hasRole = false; + const currentUser = this.getCurrentUser(); + if (currentUser && currentUser.authorities) { + roles.forEach((role: string) => { + if (currentUser.authorities.indexOf(role) !== -1) { + hasRole = true; + } + }); + } + return hasRole; + } + + isAuthorized (roles: Array<string>): Observable<boolean> { + let subject = new ReplaySubject(); + + this.isAuthenticated(false).subscribe((isAuthenticated: boolean) => { + if (isAuthenticated && roles) { + let hasRole = this.isCurrentUserInRole(roles); + subject.next(hasRole); + } + }); + return subject.asObservable(); + } +} diff --git a/smp-angular/src/app/security/user.ts b/smp-angular/src/app/security/user.ts new file mode 100644 index 000000000..f793d56cf --- /dev/null +++ b/smp-angular/src/app/security/user.ts @@ -0,0 +1,9 @@ +export class User { + id: number; + username: string; + authorities: Array<string>; + defaultPasswordUsed:boolean; + + constructor(id: number, login: string, profile: string, authorities: Array<string>,defaultPasswordUsed:boolean) { + } +} diff --git a/smp-angular/src/app/servicegroup/servicegroup-controller.ts b/smp-angular/src/app/servicegroup/servicegroup-controller.ts new file mode 100644 index 000000000..7e761fac9 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-controller.ts @@ -0,0 +1,50 @@ +import {SearchTableController} from "../common/searchtable/searchtable-controller"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {ServicegroupDetailsDialogComponent} from "./servicegroup-details-dialog/servicegroup-details-dialog.component"; +import {Http} from "@angular/http"; +import {AlertService} from "../alert/alert.service"; +import {ServiceGroupExtensionDialogComponent} from "./servicegroup-extension-dialog/servicegroup-extension-dialog.component"; +import {ServicegroupMetadatalistDialogComponent} from "./servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component"; + +export class ServiceGroupController extends SearchTableController { + + constructor(public dialog: MdDialog) { + super(); + } + + + public showDetails(row: any) { + let dialogRef: MdDialogRef<ServicegroupDetailsDialogComponent> = this.dialog.open(ServicegroupDetailsDialogComponent); + dialogRef.componentInstance.servicegroup = row; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + + } + + public showExtension(row: any) { + let dialogRef: MdDialogRef<ServiceGroupExtensionDialogComponent> = this.dialog.open(ServiceGroupExtensionDialogComponent); + dialogRef.componentInstance.servicegroup = row; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + } + + public showMetadataList(row: any) { + let dialogRef: MdDialogRef<ServicegroupMetadatalistDialogComponent> = this.dialog.open(ServicegroupMetadatalistDialogComponent); + // dialogRef.componentInstance.servicegroup = row; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + + } + + + public edit(row: any) { + + } + + public delete(row: any) { + + } +} diff --git a/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.css b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.html b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.html new file mode 100644 index 000000000..99d819dce --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.html @@ -0,0 +1,38 @@ +<h2 md-dialog-title>ServiceGroup details</h2> +<md-dialog-content style="height:260px;width:650px"> + <md-card> + <md-card-content> + <md-input-container style="width:100%"> + <input mdInput placeholder="Participant Id" value="{{servicegroup.serviceGroupROId.participantId}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Participant schema" value="{{servicegroup.serviceGroupROId.participantSchema}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="Domain" value="{{servicegroup.domain}}" readonly/> + </md-input-container> + + </md-card-content> + </md-card> + +</md-dialog-content> + +<md-dialog-actions> + <div class="group-action-button" > + <button id="ServiceGroupsSaveButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + + + <button id="ServiceGroupsCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> + </div> +</md-dialog-actions> + diff --git a/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.spec.ts b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.spec.ts new file mode 100644 index 000000000..801e26a0c --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicegroupDetailsDialogComponent } from './servicegroup-details-dialog.component'; + +describe('ServicegroupDetailsDialogComponent', () => { + let component: ServicegroupDetailsDialogComponent; + let fixture: ComponentFixture<ServicegroupDetailsDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicegroupDetailsDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicegroupDetailsDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.ts b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.ts new file mode 100644 index 000000000..4498741f8 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-details-dialog/servicegroup-details-dialog.component.ts @@ -0,0 +1,20 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'app-messagelog-details', + templateUrl: './servicegroup-details-dialog.component.html', + styleUrls: ['./servicegroup-details-dialog.component.css'] +}) +export class ServicegroupDetailsDialogComponent implements OnInit { + + servicegroup; + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + + constructor(public dialogRef: MdDialogRef<ServicegroupDetailsDialogComponent>) { + } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.css b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.html b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.html new file mode 100644 index 000000000..6552d2d48 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.html @@ -0,0 +1,28 @@ +<h2 md-dialog-title>ServiceGroup Extension</h2> +<md-dialog-content style="height:260px;width:650px"> + <textarea style="width: 100%; height: 95%"><Extension> + <ExtensionID>another sample not mandatory extension ID</ExtensionID> + <ExtensionName>name</ExtensionName> + <ExtensionAgencyID>sample string</ExtensionAgencyID> + <ExtensionAgencyName>sample string</ExtensionAgencyName> + <ext:nextdummynode xmlns:ext="http://test2.eu">token1</ext:nextdummynode> +</Extension></textarea> + +</md-dialog-content> + +<md-dialog-actions> + <div class="group-action-button"> + <button id="ServiceGroupsSaveButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + + <button id="ServiceGroupsCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> + </div> +</md-dialog-actions> + diff --git a/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.spec.ts b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.spec.ts new file mode 100644 index 000000000..801e26a0c --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicegroupDetailsDialogComponent } from './servicegroup-details-dialog.component'; + +describe('ServicegroupDetailsDialogComponent', () => { + let component: ServicegroupDetailsDialogComponent; + let fixture: ComponentFixture<ServicegroupDetailsDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicegroupDetailsDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicegroupDetailsDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.ts b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.ts new file mode 100644 index 000000000..91e48463f --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-extension-dialog/servicegroup-extension-dialog.component.ts @@ -0,0 +1,20 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'servicegroup-extension-dialog', + templateUrl: './servicegroup-extension-dialog.component.html', + styleUrls: ['./servicegroup-extension-dialog.component.css'] +}) +export class ServiceGroupExtensionDialogComponent implements OnInit { + + servicegroup; + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + + constructor(public dialogRef: MdDialogRef<ServiceGroupExtensionDialogComponent>) { + } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.css b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.css new file mode 100644 index 000000000..7389196e5 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.css @@ -0,0 +1,41 @@ +label:hover, label:active, input:hover + label, input:active + label { + color: #3f51b5; +} + +.divTable { + display: table; + width: 100%; +} + +.divTableRow { + display: table-row; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} + +.divTableCell, .divTableHead { + /*border: 1px solid #999999;*/ + display: table-cell; + padding: 3px 3px; + text-align: center; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} + +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} + +.divTableBody { + display: table-row-group; +} + diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.html b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.html new file mode 100644 index 000000000..5b93e0676 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.html @@ -0,0 +1,55 @@ +<h2 md-dialog-title>ServiceGroup Metadata</h2> +<md-dialog-content style="height:460px;width:950px"> + <textarea style="width: 100%; height: 95%"><ServiceMetadata xmlns="http://docs.oasis-open.org/bdxr/ns/SMP/2016/05"> + <ServiceInformation> + <ParticipantIdentifier scheme="participantSchema">participantIdentifier</ParticipantIdentifier> + <DocumentIdentifier scheme="docSchema">docTypeIdentifier</DocumentIdentifier> + <ProcessList> + <Process> + <ProcessIdentifier scheme="cenbii-procid-ubl">urn:www.cenbii.eu:profile:bii04:ver1.0</ProcessIdentifier> + <ServiceEndpointList> + <Endpoint transportProfile="busdox-transport-start"> + <EndpointURI>https://poland.pl/theService</EndpointURI> + <RequireBusinessLevelSignature>true</RequireBusinessLevelSignature> + <ServiceActivationDate>2003-01-01T00:00:00</ServiceActivationDate> + <ServiceExpirationDate>2020-05-01T00:00:00</ServiceExpirationDate> + <Certificate>MIICUTCCAbqgAwIBAgIEWoKrxzANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQGEwJCRTEcMBoGA1UECgwTRXVyb3BlYW4gQ29tbWlzc2lvbjEYMBYGA1UECwwPRElHSVQgZURlbGl2ZXJ5MSYwJAYDVQQDDB1TYW1wbGUgU2lnbmF0dXJlcyBDZXJ0aWZpY2F0ZTAeFw0xODAyMTMwOTEzMjBaFw0zODAyMTMwOTEzMjBaMG0xCzAJBgNVBAYTAkJFMRwwGgYDVQQKDBNFdXJvcGVhbiBDb21taXNzaW9uMRgwFgYDVQQLDA9ESUdJVCBlRGVsaXZlcnkxJjAkBgNVBAMMHVNhbXBsZSBTaWduYXR1cmVzIENlcnRpZmljYXRlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIWYibbbJ6YT3uLQ0oup8kB1jJO/o16nlRfB3CbCbmpGZ2r+zCh67EMstKLltuk3peJ6QTcSaFV2oS1KLKWxwWsV4iEs5qggA5BTkzUicTsQWw39OcPPe0wniJeXdNUlOUFP2ab0ZQ9UMrJgVtlyF2uLijoKx1XR0mpTKmajh1CQIDAQABMA0GCSqGSIb3DQEBCwUAA4GBABoFFJ+vgOo/78SPv73+MEdxkydn5EMsZ+Q4Vt1BmBaq78RcjeS7LpvPZtRxSzW+w59825BbaOCJ5K0oc6lwOXc+SS0ZI0JK2vMlp/2REFLedqHqnhpSWFKWM0Zrq80o1SzBQHC1hq95RXml6RzzPEEK0Ll0dVH7HXRpekRScGic</Certificate> + <ServiceDescription>Sample description of invoicing service</ServiceDescription> + <TechnicalContactUrl>https://example.com</TechnicalContactUrl> + </Endpoint> + </ServiceEndpointList> + <Extension> + <ExtensionID>optional sample ID</ExtensionID> + <ExtensionName>UTF-8 characters are handled, i.e. polish special ones: zażółć gęślÄ… jaźń</ExtensionName> + <ExtensionAgencyID>text</ExtensionAgencyID> + <ExtensionAgencyName>text</ExtensionAgencyName> + <ex:dummy xmlns:ex="http://test.eu">dummy1</ex:dummy> + </Extension> + <Extension> + <ex:dummy xmlns:ex="http://test.eu">dumm2</ex:dummy> + </Extension> + </Process> + </ProcessList> + <Extension> + <ex:dummynode xmlns:ex="http://test.eu">Sample not mandatory extension</ex:dummynode> + </Extension> + </ServiceInformation> +</ServiceMetadata></textarea> + +</md-dialog-content> + +<md-dialog-actions> + <div class="group-action-button"> + <button id="ServiceGroupsSaveButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + + <button id="ServiceGroupsCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> + </div> +</md-dialog-actions> diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.spec.ts b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.spec.ts new file mode 100644 index 000000000..46d476bf4 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicegroupMetadataDialogComponent } from './servicegroup-metadata-dialog.component'; + +describe('ServicegroupExtensionDialogComponent', () => { + let component: ServicegroupMetadataDialogComponent; + let fixture: ComponentFixture<ServicegroupMetadataDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicegroupMetadataDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicegroupMetadataDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.ts b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.ts new file mode 100644 index 000000000..651b39645 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadata-dialog/servicegroup-metadata-dialog.component.ts @@ -0,0 +1,17 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'app-messagelog-dialog', + templateUrl: './servicegroup-metadata-dialog.component.html', + styleUrls: ['./servicegroup-metadata-dialog.component.css'] +}) +export class ServicegroupMetadataDialogComponent implements OnInit { + + constructor(public dialogRef: MdDialogRef<ServicegroupMetadataDialogComponent>) { + } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.css b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.css new file mode 100644 index 000000000..7389196e5 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.css @@ -0,0 +1,41 @@ +label:hover, label:active, input:hover + label, input:active + label { + color: #3f51b5; +} + +.divTable { + display: table; + width: 100%; +} + +.divTableRow { + display: table-row; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} + +.divTableCell, .divTableHead { + /*border: 1px solid #999999;*/ + display: table-cell; + padding: 3px 3px; + text-align: center; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} + +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} + +.divTableBody { + display: table-row-group; +} + diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.html b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.html new file mode 100644 index 000000000..6ea0b960a --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.html @@ -0,0 +1,77 @@ +<h2 md-dialog-title>ServiceGroup Metadata list</h2> +<md-dialog-content style="height:460px;width:950px"> + + + <ngx-datatable + id="metadataTable" + class="material striped" + style="height: 400px;width: 920px;" + [rows]="rows" + [columns]="columnPicker.selectedColumns" + [columnMode]="'force'" + [headerHeight]="50" + [footerHeight]="50" + [rowHeight]="'auto'" + [scrollbarH]="true" + [externalPaging]="true" + [externalSorting]="true" + [loadingIndicator]="loading" + [count]="count" + [offset]="offset" + [limit]="rowLimiter.pageSize" + [sorts]="[{prop: 'received', dir: 'desc'}]" + (page)='onPage($event)' + (sort)="onSort($event)" + [selected]="selected" + [selectionType]="'multi'" + (activate)="onActivate($event)" + (select)="onSelect($event)"> + </ngx-datatable> + + + <ng-template #rowActions let-row="row" let-value="value" ngx-datatable-cell-template> + + <button md-icon-button color="primary" + (click)="editRowButtonAction(row)" id="editButtonRow{{row.$$index}}_id" tooltip="Edit"> + <md-icon>edit</md-icon> + </button> + + + <button md-icon-button color="primary" (click)="deleteRowButtonAction(row)" + id="deleteButtonRow{{row.$$index}}_id" tooltip="Delete"> + <md-icon>delete</md-icon> + </button> + </ng-template> + +</md-dialog-content> + +<md-dialog-actions> + <div class="group-action-button"> + + <button md-raised-button color="primary" (click)="newButtonAction()" + id="add_id"> + <md-icon>add</md-icon> + <span>New</span> + </button> + + <button md-raised-button color="primary" [disabled]="!isRowSelected()" (click)="editButtonAction()" + id="edit_id"> + <md-icon>edit</md-icon> + <span>Edit</span> + </button> + + <button md-raised-button color="primary" [disabled]="!isRowSelected()" (click)="deleteButtonAction()" + id="resendbutton_id"> + <md-icon>delete</md-icon> + <span>Delete</span> + </button> + <div style="background-color: #03A9F4; display: inline-block; width: 3px; height: 20px; margin-right: 8px"> + </div> + <button id="ServiceGroupMetadataListCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> + </div> +</md-dialog-actions> + diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.spec.ts b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.spec.ts new file mode 100644 index 000000000..8ebd8bf23 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicegroupMetadatalistDialogComponent } from './servicegroup-metadatalist-dialog.component'; + +describe('ServicegroupExtensionDialogComponent', () => { + let component: ServicegroupMetadatalistDialogComponent; + let fixture: ComponentFixture<ServicegroupMetadatalistDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicegroupMetadatalistDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicegroupMetadatalistDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.ts b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.ts new file mode 100644 index 000000000..4ce7a5cc5 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup-metadatalist-dialog/servicegroup-metadatalist-dialog.component.ts @@ -0,0 +1,124 @@ +import {Component, EventEmitter, OnInit, TemplateRef, ViewChild} from '@angular/core'; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {ColumnPickerBase} from "../../common/column-picker/column-picker-base"; +import {ServiceGroupController} from "../servicegroup-controller"; +import {RowLimiterBase} from "../../common/row-limiter/row-limiter-base"; +import {ServiceGroupExtensionDialogComponent} from "../servicegroup-extension-dialog/servicegroup-extension-dialog.component"; +import {ServicegroupMetadataDialogComponent} from "../servicegroup-metadata-dialog/servicegroup-metadata-dialog.component"; + +@Component({ + selector: 'app-messagelog-dialog', + templateUrl: './servicegroup-metadatalist-dialog.component.html', + styleUrls: ['./servicegroup-metadatalist-dialog.component.css'] +}) +export class ServicegroupMetadatalistDialogComponent implements OnInit { + + @ViewChild('rowActions') rowActions: TemplateRef<any>; + + + + columnPicker: ColumnPickerBase = new ColumnPickerBase(); + + + + columnActions:any; + + rowLimiter: RowLimiterBase = new RowLimiterBase(); + + selected = []; + + + filter: any = {}; + loading: boolean = false; + rows = []; + count: number = 0; + offset: number = 0; + //default value + orderBy: string = null; + //default value + asc: boolean = false; + + + messageResent = new EventEmitter(false); + + + constructor(public dialogRef: MdDialogRef<ServicegroupMetadatalistDialogComponent>, public dialog: MdDialog) { + } + + + ngOnInit() { + + this.columnPicker.allColumns = [ + { + name: 'Document Id', + prop: 'documentId', + width: 200, + }, + { + name: 'Document schema', + prop: 'documentSchema', + width: 200, + }, { + cellTemplate: this.rowActions, + name: 'Actions', + width: 60, + sortable: false + } + + + ]; + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Document Id", "Document schema", "Actions"].indexOf(col.name) != -1 + }); + + + this.rows = [{ + documentId:"urn:be:ncpb", + documentSchema:"ehealth-docid-qns", + + }, + { + documentId:"urn:pl:ncpb", + documentSchema:"ehealth-docid-qns", + + }, + { + documentId:"urn:ge:ncpb", + documentSchema:"ehealth-docid-qns", + + }, + { + documentId:"urn:si:ncpb", + documentSchema:"ehealth-docid-qns", + + }]; + this.count=3; + this.offset=0; + this.loading = false; + } + + isRowSelected() { + if (this.selected) + return true; + + return false; + } + + newButtonAction (){this.details()} + editButtonAction (){this.details()} + deleteButtonAction (){} + + details() { + let dialogRef: MdDialogRef<ServicegroupMetadataDialogComponent> = this.dialog.open(ServicegroupMetadataDialogComponent); + //dialogRef.componentInstance.servicegroup = row; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + + } + + + + +} diff --git a/smp-angular/src/app/servicegroup/servicegroup.component.css b/smp-angular/src/app/servicegroup/servicegroup.component.css new file mode 100644 index 000000000..d1a612141 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup.component.css @@ -0,0 +1,18 @@ +/* --- Select ---*/ +.mat-select{ + padding:20px 0; +} + +/* --- Button ---*/ +.group-btn { + margin-top:20px; + } + +#hiddenButtonId { + position: fixed; +} + + +.datatable-body{ + overflow-y: scroll; +} diff --git a/smp-angular/src/app/servicegroup/servicegroup.component.html b/smp-angular/src/app/servicegroup/servicegroup.component.html new file mode 100644 index 000000000..6bb189f09 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup.component.html @@ -0,0 +1,73 @@ +<smp-search-table + page_id='participants_id' + title='Participants' + [columnPicker]="columnPicker" + url="ui/servicegroup" + [additionalToolButtons]="additionalToolButtons" + [searchPanel]="searchPanel" + [filter]="filter" + [searchTableController]="serviceGroupController" +> + + <ng-template #rowMetadataAction let-row="row" let-value="value" ngx-datatable-cell-template> + + <button md-button color="primary" + (click)="metadataRowButtonAction(row)" id="metadataRowButtonAction{{row.$$index}}_id" tooltip="Metadata"> + <md-icon>view_list</md-icon> + <span>Metadata</span> + </button> + + </ng-template> + + <ng-template #rowExtensionAction let-row="row" let-value="value" ngx-datatable-cell-template> + + <button md-button color="primary" + (click)="extensionRowButtonAction(row)" id="extensionRowButtonAction{{row.$$index}}_id" tooltip="Extension"> + <md-icon>code</md-icon> + <span>Extension</span> + </button> + + </ng-template> + + <ng-template #searchPanel> + <md-input-container> + <input mdInput placeholder="Participant Id" name="messageId" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="messageid_id"> + </md-input-container> + <md-input-container> + <input mdInput placeholder="Participant schema" name="patricipantSchema" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="participanschema_id"> + </md-input-container> + <md-select placeholder="Domain " [(ngModel)]="filter.messageStatus" name="messageStatus" + id="messagestatus_id"> + <md-option [value]="''"> + </md-option> + <md-option *ngFor="let mstatus of msgStatus" [value]="mstatus"> + {{mstatus}} + </md-option> + </md-select> + </ng-template> + + + <ng-template #additionalToolButtons> + + <div style="background-color: #03A9F4; display: inline-block; width: 3px; height: 100%; margin-right: 8px"> + </div> + + + <button md-raised-button color="primary" + id="metadatabutton_id"> + <md-icon>view_list</md-icon> + <span>Metadata</span> + </button> + + <button md-raised-button color="primary" + id="extensionbutton_id"> + <md-icon>code</md-icon> + <span>Extension</span> + </button> + + + </ng-template> + +</smp-search-table> diff --git a/smp-angular/src/app/servicegroup/servicegroup.component.ts b/smp-angular/src/app/servicegroup/servicegroup.component.ts new file mode 100644 index 000000000..e36890bc5 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroup.component.ts @@ -0,0 +1,85 @@ +import {Component, TemplateRef, ViewChild} from "@angular/core"; +import {ColumnPickerBase} from "../common/column-picker/column-picker-base"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {ServicegroupDetailsDialogComponent} from "./servicegroup-details-dialog/servicegroup-details-dialog.component"; +import {Http} from "@angular/http"; +import {AlertService} from "../alert/alert.service"; +import {ServiceGroupController} from "./servicegroup-controller"; + + +@Component({ + moduleId: module.id, + templateUrl:'./servicegroup.component.html', + styleUrls: ['./servicegroup.component.css'], + providers: [], +}) + +export class ServiceGroupComponent { + + @ViewChild('rowMetadataAction') rowMetadataAction: TemplateRef<any> + @ViewChild('rowExtensionAction') rowExtensionAction: TemplateRef<any> + + @ViewChild('rowActions') rowActions: TemplateRef<any>; + + + columnPicker: ColumnPickerBase = new ColumnPickerBase(); + + serviceGroupController: ServiceGroupController; + filter: any = {}; + + constructor(protected http: Http, protected alertService: AlertService, public dialog: MdDialog) { + } + + ngOnInit() { + this.serviceGroupController = new ServiceGroupController(this.dialog); + + this.columnPicker.allColumns = [ + { + name: 'Participant Id', + prop: 'serviceGroupROId.participantId', + width: 275 + }, + { + name: 'Participant schema', + prop: 'serviceGroupROId.participantSchema', + }, + { + name: 'Domain', + prop: 'domain', + }, + { + cellTemplate: this.rowMetadataAction, + name: 'Matadata', + width: 80, + sortable: false + }, + { + cellTemplate: this.rowExtensionAction, + name: 'Extesion', + width: 80, + sortable: false + } + + + + ]; + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Participant Id", "Participant schema", "Domain", "Matadata", "Extesion"].indexOf(col.name) != -1 + }); + + } + + extensionRowButtonAction(row: any){ + this.serviceGroupController.showExtension(row); + } + + metadataRowButtonAction(row: any){ + this.serviceGroupController.showMetadataList(row); + } + + details(row: any) { + this.serviceGroupController.showDetails(row); + + } +} diff --git a/smp-angular/src/app/servicegroup/servicegroupro.ts b/smp-angular/src/app/servicegroup/servicegroupro.ts new file mode 100644 index 000000000..c733d5084 --- /dev/null +++ b/smp-angular/src/app/servicegroup/servicegroupro.ts @@ -0,0 +1,18 @@ +export class ServiceGroupRO { + constructor(public serviceGroupROId: ServiceGroupROId, + public domain: string + + ) { + + } +} + + +class ServiceGroupROId { + constructor(public participantId: string, + public participantSchema: string + ) { + + } +} + diff --git a/smp-angular/src/app/truststore/trustore.model.ts b/smp-angular/src/app/truststore/trustore.model.ts new file mode 100644 index 000000000..e8371127f --- /dev/null +++ b/smp-angular/src/app/truststore/trustore.model.ts @@ -0,0 +1,12 @@ +/** + * @author Thomas Dussart + * @since 3.3 + */ +export class TrustStoreEntry { + name: string + subject: string; + issuer: string; + validFrom: string; + validUntil: string; +} + diff --git a/smp-angular/src/app/truststore/trustore.service.ts b/smp-angular/src/app/truststore/trustore.service.ts new file mode 100644 index 000000000..78f78a02b --- /dev/null +++ b/smp-angular/src/app/truststore/trustore.service.ts @@ -0,0 +1,52 @@ +import {Http, Response} from "@angular/http"; +import {AlertService} from "app/alert/alert.service"; +import {Injectable} from "@angular/core"; +import {Observable} from "rxjs/Observable"; +import {TrustStoreEntry} from "./trustore.model"; + +/** + * @Author Dussart Thomas + * @Since 3.3 + */ + +@Injectable() +export class TrustStoreService { + + url = "rest/truststore"; + constructor(private http: Http, private alertService: AlertService) { + + } + + getEntries(): Observable<TrustStoreEntry[]> { + return this.http.get(this.url + '/list') + .map(this.extractData) + .catch(this.handleError); + } + + saveTrustStore(file, password): Observable<Response> { + let input = new FormData(); + input.append('truststore', file); + input.append('password', password); + return this.http.post(this.url + '/save', input); + } + + private extractData(res: Response) { + let body = res.json(); + return body || {}; + } + + private handleError(error: Response | any) { + this.alertService.error(error, false); + let errMsg: string; + if (error instanceof Response) { + const body = error.json() || ''; + const err = body.error || JSON.stringify(body); + errMsg = `${error.status} - ${error.statusText || ''} ${err}`; + } else { + errMsg = error.message ? error.message : error.toString(); + } + console.error(errMsg); + return Promise.reject(errMsg); + } + +} diff --git a/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.css b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.html b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.html new file mode 100644 index 000000000..a7f7ae854 --- /dev/null +++ b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.html @@ -0,0 +1,32 @@ +<h2 md-dialog-title>Truststore entry</h2> +<md-dialog-content style="height:450px;width:650px"> + <md-card> + <md-card-content> + <md-input-container style="width:100%"> + <input mdInput placeholder="Name" value="{{trustStoreEntry.name}}" readonly/> + </md-input-container> + <md-input-container style="width:100%"> + <input mdInput placeholder="Subject" value="{{trustStoreEntry.subject}}" readonly/> + </md-input-container> + <md-input-container style="width:100%"> + <input mdInput placeholder="Issuer" value="{{trustStoreEntry.issuer}}" readonly/> + </md-input-container> + <md-input-container style="width:100%"> + <input mdInput placeholder="Valid from" value="{{trustStoreEntry.validFrom| domibusDate: dateFormat}}" + readonly/> + </md-input-container> + <md-input-container style="width:100%"> + <input mdInput placeholder="Valid until" value="{{trustStoreEntry.validUntil| domibusDate: dateFormat}}" + readonly/> + </md-input-container> + </md-card-content> + </md-card> +</md-dialog-content> + +<md-dialog-actions> + <button id="closebutton_id" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> +</md-dialog-actions> diff --git a/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.spec.ts b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.spec.ts new file mode 100644 index 000000000..02ff0005c --- /dev/null +++ b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from "@angular/core/testing"; + +import {TruststoreDialogComponent} from "./truststore-dialog.component"; + +describe('TruststoreDialogComponent', () => { + let component: TruststoreDialogComponent; + let fixture: ComponentFixture<TruststoreDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [TruststoreDialogComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TruststoreDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.ts b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.ts new file mode 100644 index 000000000..f8e9e4b95 --- /dev/null +++ b/smp-angular/src/app/truststore/truststore-dialog/truststore-dialog.component.ts @@ -0,0 +1,24 @@ +import {Component, Inject} from "@angular/core"; +import {TrustStoreEntry} from "../trustore.model"; +import {MD_DIALOG_DATA, MdDialogRef} from "@angular/material"; + +/** + * @Author Dussart Thomas + * @Since 3.3 + */ + +@Component({ + selector: 'app-truststore-dialog', + templateUrl: './truststore-dialog.component.html', + styleUrls: ['./truststore-dialog.component.css'] +}) +export class TruststoreDialogComponent { + + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + trustStoreEntry: TrustStoreEntry; + + constructor(public dialogRef: MdDialogRef<TruststoreDialogComponent>, @Inject(MD_DIALOG_DATA) public data: any) { + this.trustStoreEntry = data.trustStoreEntry; + } + +} diff --git a/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.css b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.html b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.html new file mode 100644 index 000000000..62d3c2b1e --- /dev/null +++ b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.html @@ -0,0 +1,36 @@ +<h2 md-dialog-title>Upload truststore</h2> +<md-dialog-content style="height:150px;width:350px"> + <md-card> + <md-card-content> + <div class="divTableRow"> + <div class="divTableCell"> + <input #fileInput type="file" id="trustsore" accept=".jks" (change)="checkFile()"> + </div> + <div class="divTableCell"> + </div> + </div> + <md-input-container style="width:100%;margin-top: 1em;"> + <input mdInput placeholder="Password" id="password_id" name="password" type="password" [(ngModel)]="password"> + </md-input-container> + </md-card-content> + </md-card> +</md-dialog-content> + +<table class="buttonsRow"> + <tr> + <td> + <button id="okbuttonupload_id" md-raised-button color="primary" (click)="submit()" style="margin-top:10px" [disabled]="!enableSubmit"> + <md-icon>check_circle</md-icon> + <span>OK</span> + </button> + <button id="cancelbuttonupload_id" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>cancel</md-icon> + <span>Cancel</span> + </button> + </td> + </tr> +</table> + + + diff --git a/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.spec.ts b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.spec.ts new file mode 100644 index 000000000..36002a1ae --- /dev/null +++ b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from "@angular/core/testing"; + +import {TrustStoreUploadComponent} from "./truststore-upload.component"; + +describe('TrustStoreUploadComponent', () => { + let component: TrustStoreUploadComponent; + let fixture: ComponentFixture<TrustStoreUploadComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [TrustStoreUploadComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TrustStoreUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.ts b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.ts new file mode 100644 index 000000000..702d5a576 --- /dev/null +++ b/smp-angular/src/app/truststore/truststore-upload/truststore-upload.component.ts @@ -0,0 +1,49 @@ +import {Component, EventEmitter, Inject, ViewChild} from "@angular/core"; +import {MD_DIALOG_DATA, MdDialogRef} from "@angular/material"; +import {TrustStoreService} from "../trustore.service"; +import {AlertService} from "../../alert/alert.service"; +import {isNullOrUndefined, isString} from "util"; +import {isEmpty} from "rxjs/operator/isEmpty"; + +@Component({ + selector: 'app-trustore-upload', + templateUrl: './truststore-upload.component.html', + styleUrls: ['./truststore-upload.component.css'], + providers: [TrustStoreService] +}) +export class TrustStoreUploadComponent { + + password: any; + @ViewChild('fileInput') + private fileInput; + + onTruststoreUploaded = new EventEmitter(); + + enableSubmit = false; + + constructor(public dialogRef: MdDialogRef<TrustStoreUploadComponent>, + private truststorService: TrustStoreService, private alertService: AlertService, + @Inject(MD_DIALOG_DATA) public data: any) { + } + + public checkFile() { + this.enableSubmit = this.fileInput.nativeElement.files.length != 0; + } + + public submit() { + let fi = this.fileInput.nativeElement; + this.truststorService.saveTrustStore(fi.files[0], this.password).subscribe(res => { + this.alertService.success(res.text(), false); + this.onTruststoreUploaded.emit(); + }, + err => { + if(!err.ok && err.statusText.length == 0) { + this.alertService.error("Error updating truststore file (" + fi.files[0].name + ")", false); + } else { + this.alertService.error(err.text() + " (" + fi.files[0].name + ")", false); + } + } + ); + this.dialogRef.close(); + } +} diff --git a/smp-angular/src/app/truststore/truststore.component.css b/smp-angular/src/app/truststore/truststore.component.css new file mode 100644 index 000000000..9b9214e1b --- /dev/null +++ b/smp-angular/src/app/truststore/truststore.component.css @@ -0,0 +1,43 @@ +label:hover, label:active, input:hover + label, input:active + label { + color: #3f51b5; +} + +.divTable { + display: table; + width: 100%; +} + +.divTableRow { + display: table-row; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; +} + +.divTableCell, .divTableHead { + /*border: 1px solid #999999;*/ + display: table-cell; + padding: 3px 3px; +} + +.divTableHeading { + background-color: #EEE; + display: table-header-group; + font-weight: bold; +} + +.divTableFoot { + background-color: #EEE; + display: table-footer-group; + font-weight: bold; +} + +.divTableBody { + display: table-row-group; +} + +.firstColumn { + width: 20%; +} diff --git a/smp-angular/src/app/truststore/truststore.component.html b/smp-angular/src/app/truststore/truststore.component.html new file mode 100644 index 000000000..b544f55e4 --- /dev/null +++ b/smp-angular/src/app/truststore/truststore.component.html @@ -0,0 +1,60 @@ +<page-header id="truststoreheader_id">Truststore</page-header> +<div class="panel"> + <div class="selectionCriteria"> + <md-card> + <md-card-content> + <div class="group-filter-button"> + <span class="row-button"> + <app-row-limiter [pageSizes]="rowLimiter.pageSizes" + (onPageSizeChanged)="changePageSize($event.value)"></app-row-limiter> + </span> + <span class="column-filter-button"> + <app-column-picker [allColumns]="columnPicker.allColumns" [selectedColumns]="columnPicker.selectedColumns" + (onSelectedColumnsChanged)="columnPicker.changeSelectedColumns($event)"></app-column-picker> + </span> + <button md-icon-button color="primary" [disabled]="!isSaveAsCSVButtonEnabled()" (click)="saveAsCSV()" + id="saveascsvbutton_id" md-tooltip="Export as CSV"> + <img src="assets/images/exportCSV.svg" width="30" height="30"> + </button> + </div> + + <ngx-datatable + id="errorLogTable" + class="material striped" + [rows]="trustStoreEntries" + [columnMode]="'force'" + [columns]="columnPicker.selectedColumns" + [headerHeight]="50" + [footerHeight]="50" + [rowHeight]="'auto'" + [scrollbarH]="true" + [loadingIndicator]="loading" + [selectionType]="'multi'" + [selected]="selectedMessages" + [limit]="rowLimiter.pageSize" + [sorts]="[{prop: 'alias', dir: 'desc'}]" + (activate)="onActivate($event)" + (select)="onSelect($event)"> + + + </ngx-datatable> + + <ng-template #rowWithDateFormatTpl let-row="row" let-value="value" ngx-datatable-cell-template> + <span class="text-select">{{value | domibusDate: dateFormat}}</span> + </ng-template> + + <table class="group-action-button"> + <tr> + <td> + <button md-raised-button color="primary" (click)="openEditTrustStore()" id="uploadbutton_id"> + <md-icon>file_upload</md-icon> + <span>Upload</span> + </button> + </td> + </tr> + </table> + </md-card-content> + </md-card> + </div> +</div> + diff --git a/smp-angular/src/app/truststore/truststore.component.spec.ts b/smp-angular/src/app/truststore/truststore.component.spec.ts new file mode 100644 index 000000000..38f515b4f --- /dev/null +++ b/smp-angular/src/app/truststore/truststore.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TruststoreComponent } from './truststore.component'; + +describe('TruststoreComponent', () => { + let component: TruststoreComponent; + let fixture: ComponentFixture<TruststoreComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TruststoreComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TruststoreComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/truststore/truststore.component.ts b/smp-angular/src/app/truststore/truststore.component.ts new file mode 100644 index 000000000..1ab7f94f6 --- /dev/null +++ b/smp-angular/src/app/truststore/truststore.component.ts @@ -0,0 +1,130 @@ +import {Component, OnInit, TemplateRef, ViewChild} from "@angular/core"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import {TrustStoreService} from "./trustore.service"; +import {TrustStoreEntry} from "./trustore.model"; +import {TruststoreDialogComponent} from "./truststore-dialog/truststore-dialog.component"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {TrustStoreUploadComponent} from "./truststore-upload/truststore-upload.component"; +import {ColumnPickerBase} from "../common/column-picker/column-picker-base"; +import {RowLimiterBase} from "../common/row-limiter/row-limiter-base"; +import {DownloadService} from "../download/download.service"; +import {AlertComponent} from "../alert/alert.component"; +import {AlertService} from "../alert/alert.service"; + +@Component({ + selector: 'app-truststore', + templateUrl: './truststore.component.html', + styleUrls: ['./truststore.component.css'], + providers: [TrustStoreService] +}) +export class TruststoreComponent implements OnInit { + + columnPicker: ColumnPickerBase = new ColumnPickerBase(); + + rowLimiter: RowLimiterBase = new RowLimiterBase(); + + @ViewChild('rowWithDateFormatTpl') rowWithDateFormatTpl: TemplateRef<any>; + + trustStoreEntries: Array<TrustStoreEntry> = []; + selectedMessages: Array<any> = []; + loading: boolean = false; + + rows: Array<any> = []; + + static readonly TRUSTSTORE_URL: string = "rest/truststore"; + static readonly TRUSTSTORE_CSV_URL: string = TruststoreComponent.TRUSTSTORE_URL + "/csv"; + + constructor(private trustStoreService: TrustStoreService, public dialog: MdDialog, public alertService: AlertService) { + } + + ngOnInit(): void { + this.columnPicker.allColumns = [ + { + + name: 'Name', + prop: 'name' + }, + { + name: 'Subject', + prop: 'subject', + }, + { + name: 'Issuer', + prop: 'issuer', + }, + { + cellTemplate: this.rowWithDateFormatTpl, + name: 'Valid from', + prop: 'validFrom' + + }, + { + cellTemplate: this.rowWithDateFormatTpl, + name: 'Valid until', + prop: 'validUntil', + } + + ]; + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Name", "Subject", "Issuer", "Valid from", "Valid until"].indexOf(col.name) != -1 + }); + this.getTrustStoreEntries(); + + if(this.trustStoreEntries.length > AlertComponent.MAX_COUNT_CSV) { + this.alertService.error("Maximum number of rows reached for downloading CSV"); + } + } + + getTrustStoreEntries(): void { + this.trustStoreService.getEntries().subscribe(trustStoreEntries => this.trustStoreEntries = trustStoreEntries); + } + + onSelect({selected}) { + console.log('Select Event'); + this.selectedMessages.splice(0, this.selectedMessages.length); + this.selectedMessages.push(...selected); + } + + onActivate(event) { + console.log('Activate Event', event); + if ("dblclick" === event.type) { + this.details(event.row); + } + } + + details(selectedRow: any) { + let dialogRef: MdDialogRef<TruststoreDialogComponent> = this.dialog.open(TruststoreDialogComponent, {data: {trustStoreEntry: selectedRow}}); + dialogRef.afterClosed().subscribe(result => { + + }); + } + + changePageSize(newPageSize: number) { + this.rowLimiter.pageSize = newPageSize; + this.getTrustStoreEntries(); + } + + openEditTrustStore() { + let dialogRef: MdDialogRef<TrustStoreUploadComponent> = this.dialog.open(TrustStoreUploadComponent); + dialogRef.componentInstance.onTruststoreUploaded.subscribe(updated => { + this.getTrustStoreEntries(); + }); + } + + /** + * Method that checks if CSV Button export can be enabled + * @returns {boolean} true, if button can be enabled; and false, otherwise + */ + isSaveAsCSVButtonEnabled() : boolean { + return this.rows.length < AlertComponent.MAX_COUNT_CSV; + } + + /** + * Saves the content of the datatable into a CSV file + */ + saveAsCSV() { + DownloadService.downloadNative(TruststoreComponent.TRUSTSTORE_CSV_URL); + } +} diff --git a/smp-angular/src/app/user/user-controller.ts b/smp-angular/src/app/user/user-controller.ts new file mode 100644 index 000000000..22bc02d8d --- /dev/null +++ b/smp-angular/src/app/user/user-controller.ts @@ -0,0 +1,32 @@ +import {SearchTableController} from "../common/searchtable/searchtable-controller"; +import {MdDialog, MdDialogRef} from "@angular/material"; +import {UserDetailsDialogComponent} from "./user-details-dialog/user-details-dialog.component"; + + +export class UserController extends SearchTableController { + + constructor(public dialog: MdDialog) { + super(); + } + + + public showDetails(row: any) { + let dialogRef: MdDialogRef<UserDetailsDialogComponent> = this.dialog.open(UserDetailsDialogComponent); + dialogRef.componentInstance.user = row; + dialogRef.afterClosed().subscribe(result => { + //Todo: + }); + + } + + + + + public edit(row: any) { + + } + + public delete(row: any) { + + } +} diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html new file mode 100644 index 000000000..c31301815 --- /dev/null +++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html @@ -0,0 +1,36 @@ +<h2 md-dialog-title>User details</h2> +<md-dialog-content style="height:260px;width:650px"> + <md-card> + <md-card-content> + <md-input-container style="width:100%"> + <input mdInput placeholder="Username id" value="{{user.username}}" readonly/> + </md-input-container> + + <md-input-container style="width:100%"> + <input mdInput placeholder="isAdmin" value="{{user.idAdmin}}" readonly/> + </md-input-container> + + + + </md-card-content> + </md-card> + +</md-dialog-content> + +<md-dialog-actions> + <div class="group-action-button" > + <button id="ServiceGroupsSaveButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>save</md-icon> + <span>Save</span> + </button> + + + <button id="ServiceGroupsCloseButton" md-raised-button color="primary" (click)="dialogRef.close({})" + style="margin-top:10px"> + <md-icon>close</md-icon> + <span>Close</span> + </button> + </div> +</md-dialog-actions> + diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.spec.ts b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.spec.ts new file mode 100644 index 000000000..801e26a0c --- /dev/null +++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ServicegroupDetailsDialogComponent } from './servicegroup-details-dialog.component'; + +describe('ServicegroupDetailsDialogComponent', () => { + let component: ServicegroupDetailsDialogComponent; + let fixture: ComponentFixture<ServicegroupDetailsDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ServicegroupDetailsDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ServicegroupDetailsDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts new file mode 100644 index 000000000..6f7d9dc85 --- /dev/null +++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts @@ -0,0 +1,20 @@ +import {Component, OnInit} from '@angular/core'; +import {MdDialogRef} from "@angular/material"; + +@Component({ + selector: 'user-details-dialog', + templateUrl: './user-details-dialog.component.html', + styleUrls: ['./user-details-dialog.component.css'] +}) +export class UserDetailsDialogComponent implements OnInit { + + user; + dateFormat: String = 'yyyy-MM-dd HH:mm:ssZ'; + + constructor(public dialogRef: MdDialogRef<UserDetailsDialogComponent>) { + } + + ngOnInit() { + } + +} diff --git a/smp-angular/src/app/user/user.component.css b/smp-angular/src/app/user/user.component.css new file mode 100644 index 000000000..94bdbcf05 --- /dev/null +++ b/smp-angular/src/app/user/user.component.css @@ -0,0 +1,15 @@ +/* --- Select ---*/ +.mat-select{ + padding:20px 0; +} + +/* --- Button ---*/ +.group-btn { + margin-top:20px; + } + +#hiddenButtonId { + position: fixed; +} + + diff --git a/smp-angular/src/app/user/user.component.html b/smp-angular/src/app/user/user.component.html new file mode 100644 index 000000000..d14b4cd37 --- /dev/null +++ b/smp-angular/src/app/user/user.component.html @@ -0,0 +1,31 @@ + +<smp-search-table + page_id= 'user_id' + title= 'Users' + [columnPicker] = "columnPicker" + url="ui/user" + [additionalToolButtons]="additionalToolButtons" + [searchTableController]="userController" + [searchPanel]="searchPanel" + [filter]="filter" + +> + + + <ng-template #additionalToolButtons > + + </ng-template> + + <ng-template #searchPanel> + <md-input-container> + <input mdInput placeholder="Username" name="Username" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="messageid_id"> + </md-input-container> + <md-input-container> + <input mdInput placeholder="isAdmin" name="isAdmin" [(ngModel)]="filter.messageId" + #messageId="ngModel" id="participanschema_id"> + </md-input-container> + + </ng-template> + +</smp-search-table> diff --git a/smp-angular/src/app/user/user.component.ts b/smp-angular/src/app/user/user.component.ts new file mode 100644 index 000000000..6b21fd07a --- /dev/null +++ b/smp-angular/src/app/user/user.component.ts @@ -0,0 +1,65 @@ +import {Component, TemplateRef, ViewChild} from "@angular/core"; +import {ColumnPickerBase} from "../common/column-picker/column-picker-base"; +import {MdDialog, MdDialogRef} from "@angular/material"; + +import {Http} from "@angular/http"; +import {AlertService} from "../alert/alert.service"; +import {UserController} from "./user-controller"; +; + + +@Component({ + moduleId: module.id, + templateUrl:'./user.component.html', + styleUrls: ['./user.component.css'], + providers: [], +}) + +export class UserComponent { + + @ViewChild('rowMetadataAction') rowMetadataAction: TemplateRef<any> + @ViewChild('rowExtensionAction') rowExtensionAction: TemplateRef<any> + + @ViewChild('rowActions') rowActions: TemplateRef<any>; + + + columnPicker: ColumnPickerBase = new ColumnPickerBase(); + + userController: UserController; + filter: any = {}; + + constructor(protected http: Http, protected alertService: AlertService, public dialog: MdDialog) { + } + + ngOnInit() { + this.userController = new UserController(this.dialog); + + this.columnPicker.allColumns = [ + { + name: 'Username', + prop: 'username', + width: 275 + }, + { + name: 'isAdmin', + prop: 'isadmin', + width: 40 + } + + + + ]; + + this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => { + return ["Username", "isAdmin"].indexOf(col.name) != -1 + }); + + } + + + + details(row: any) { + this.userController.showDetails(row); + + } +} diff --git a/smp-angular/src/app/user/userro.ts b/smp-angular/src/app/user/userro.ts new file mode 100644 index 000000000..1220afa7f --- /dev/null +++ b/smp-angular/src/app/user/userro.ts @@ -0,0 +1,10 @@ +export class UserRO { + constructor(public username: string, + public admin: string, + ) { + + } +} + + + diff --git a/smp-angular/src/assets/.gitkeep b/smp-angular/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/smp-angular/src/assets/icons/MaterialIcons-Regular.eot b/smp-angular/src/assets/icons/MaterialIcons-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..70508ebabc9992e64f1314f866b2d7ab90438c58 GIT binary patch literal 143258 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 Hzx)3OGG_Ot literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/icons/MaterialIcons-Regular.ttf b/smp-angular/src/assets/icons/MaterialIcons-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7015564ad166a3e9d88c82f17829f0cc01ebe29a GIT binary patch literal 128180 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 literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/icons/MaterialIcons-Regular.woff b/smp-angular/src/assets/icons/MaterialIcons-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..b648a3eea2d16b6ce783906d6b7d5f251b9eb56c GIT binary patch literal 57620 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 BJ$(QG literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/icons/MaterialIcons-Regular.woff2 b/smp-angular/src/assets/icons/MaterialIcons-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9fa211252080046a23b2449dbdced6abc2b0bb34 GIT binary patch literal 44300 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 QW8}wPUeo^@jR61v08@RD2LJ#7 literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/EC+Logo2.png b/smp-angular/src/assets/images/EC+Logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..16435b3e66650edfdcc35eca1e0978a5c1ca24d1 GIT binary patch literal 9708 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 literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/favicon-16x16.png b/smp-angular/src/assets/images/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..407ffac6348255822fd975d184b478b24d713ef3 GIT binary patch literal 852 zcmV-a1FQUrP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;s^~55+?U!<wyVk0^vzS zK~y-)O_NP%RA(54pYNMHGr4gjWWbQ7REh?TNzsLZ8#UIAgwjQ`Y7t67P{gQ+TGaSM z>krjktDsmVLTjOfQd(RE5-k*!sIC7-qi7P1noOdT$(=j*et#}z1kd8--JJJ5aLy4l ze=7O<$Xsgbz9cRUv!$t<Q_ngv+OXl{gMeb&pBd&Y`4$~3Kp=$W;;*OaIgt|_zBGr1 zrpLU4iiSy5%?6<7L<_%l4sdL+jZF4D@59*wdsfc&sHxwIQ6LlG92k|vc;&rmSu4&B zA`^=+8XRC;`G6EN={U1fVs#^NDbM+z)^MwL2T}1gMuSmMUAv$nxdo$GHOq3ZJ;UuU zGVEwcfTP*Nxq2o>`uOAfe-Scdaa%9zPW^{f8sQcKG1j($(zQw9Ws-vav6%WQ0J0Jt zTQb?Dz%<V0shjf#6GL(8DJg$B;3H)%h1^|h6dzS<ZssD4R^V(}5(UqZvVk85a{SPL zh+Dl8M#K0}Khl$Yb?`H+h4G=Qp4A{6ds;k<(hwH|Nilx|Yrtwjdd7CvpFEAx@aEMc zR0Pef8wsagBV^b;7$S}iQFCULhm#=`3low9s}C`i>nl5;!LMmUMUe7Kg!v)-nJXwv zUME$R1Py6R$r`#IlwkDUKN2BfUu!!Te`zNU#xM%328T~LeHo)AVg5b{fl+`fTm16j zInM3w_HZ^rCLDhsy}<mXKa>5i69C}^;nV<r1|~-bsBioP1f1RWId}U0uf%CuvbSd! z*2F-7m(t}7XmD7@pI*Z`_<i36z+hr%Xbgb>7zY9mXIHbow}ZIYO?t*!j4sQx#?iI) z3Y*SurZ6#vvlgSltBQeXKm$m$O5$t-Nq-C0WC#l*I0x1ML>&933ka~<VN^NJ?<OF5 za`QN)V7OeQxWu);zQZ|?iFD;l07QU~bs(g8zf%I31ylpsinIift`J9n2$>LAQwMwi e<bW4|0eB09HgTQzVXIyM0000<MNUMnLSTX#8*=sl literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/favicon-32x32.png b/smp-angular/src/assets/images/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..95552a98ac95d269f7aaf632e352a9293d796c27 GIT binary patch literal 2138 zcmV-g2&MOlP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;s^~55)+}&A!`5t2j@vd zK~z}7b(edLT~!sve|w*E@157}OlLZ6X)DtQw3J|JwUntMDUAYEi53%7h<|9+7^4O; zF{vmCk!UEO0-*(iA+&}VG(=QNEP_Zw!BnX&rEP#d8RpTs(|O(Z*?VpOIQyQtcV>E$ zmAP~7KI?qz@vZe;1%Of-=QIGDw{?=rq<G`m0u#9^pjfdXV8hldlR1SLMXJg2{QYA< z6|jH<6dOLD;fl>2j1GjDipE;}rBF(E>(2#-`%3=20Ym|cwyqStx3u!r9ZwL1>j90E z0;T-R{NZQ6rg!TSuG;(@VvB$RBL4E=W}f@y5D)<Zz{Bs}NJsZ>oRs~!`pW?kqeH*t zhga?*NLg%D4FOF{o96ZhUM2|FCC60&t?gH`?UC;@I`lhG^H6%q-Lkcp134cFfF_gq zBrw0>-1MvSlKc71@ho?){sl^>HK4igz|$zb4zbKICy;4g-+0eK=aO|m=p$8tCP;0V z)yH(}SnyNsdHD-C2{hk*Y6&{L9w)Km=_UdasfO>xLR;rX4<G;(i&ke)dg-h_X85$Q z`0~3+H+O_&J6C|~LVUw06<h7FQeaJhlNe0x%CxKm(m)B&eEYGvxH><zs=HarpaB&u z;uE(m4M{gI!nsuP<w*Z4e0bsj-5*&_=aTEmG%rDXCY-DDth?CswGLk0Q$T4)*OIy5 z<|Stw+}@+;?GBMT5M}Fl;J9I=;<7AQ-V>5(SspjBf^$cA^Ya@Y@?C9Mym}5_|J9e7 z*K_lX3_usFH+Aspo*|r+naHgr-P#cH9hYVK?DA|Ka41EN-KWnpQdTK4t=*b1y&$f$ zg`=<h)4x0qOwxa1i2JrY%GpDEV#hLN%B66oC!u9)`=@cfX`O(xM8+b<Fj1;<=zN*T zSSrTgL}H-nrVb4*8%JkB2a&I70hq+O382Wtg;PlxtSMnl3FlzZs_Xn9f>cx7$YRP! zRKy9+2^z;EM<=;y?=bmFgoxm3Y)H4v(O6>>YAsrIsRv;EfGGhbTH30Ji6e_DW0=aA zXTr6BW7Wn>!Oh1xD2|`O+A2=4)>4Tq-&vt)Pb=C(ht%GMK$vRLR7+zCHCArCmph-? z0#rOB;*qH{2Io=Rs7NtCj0gm&rNCS^Y+VL412A~<b({o9oB=DAwh&5@AkHB+E)OD5 zEmbt*!>8j87r>=ham|xFc=!eGdiFZn7c>JJ8!05=v10hlf8+6^=du2lh0I@e6}A36 z_OCZ_PU8e8aTY{}?CwobiY!(vu`hwrWKlCQJcJlGHK`1wGMni6=sxb*_X?}8@5YpM zk^$!wCtiOeUOx&}e0(W$y066<sFtb>o*YRSBbHVzq?~2b;ue$>tc`&o77AmNn!aPF zv1Y7sT6xava2?-x_(jUaY&=xN12}LFQ;lD8>6%`eTGt=~mHZis<As`!+x{_0u(O}^ z;{yb{`uXvJ9L^e)6R^gTzc8uU_xKqqg|`zXOt&y~1<Tjoff$lfo&L`#)zScBpkv_; zsGuDuP#AxYY*!_IRzM4+Tw=T4sqm$jMi{RcFj0}g_Xji(vAy?ps+GZu?t<2?o3Ump zGa{2zi)RsmOzSGNUWf=>7&uB(o0^&h(@YBohYbS-3sLDjXAci)pbSJjvwaH_LwkXX zY%yO~XC0s!&mHoPGdPz)1p427o2FJZwZvvIC!jT)dh7R$4qng+-w*E_;NH)Ci@!g% zl~Vo)PTZ_fh(L3@X882MWL-M}8<i;J2GF4-FS?kG^u5HB-+LORD%wx7Do_Mv*!RR+ z-1DigaPG*C*&R4Yr4+^SlZZq~WH!3M@z=)*!l{`dws9Sb5&DkrWY@OsK!9`kFj+j{ z+aH5c!ok1(kxN#7lOXJB6jl~MIQ_p-*4{LN4i*Answ13xdxEQPOeM=l2k_2oJ9vJ_ zix^WOpF8jML$x+#bsa=WGT~gF{`W2*c4DSNat@`1gU^p*%xDtjMD8$P2tq-`C5uT> zWNdJld@kp+o%dD%%9`yje2#68ECe)4;j>X;&b$iFsaaW}lm!gc!m;Fj-#hyOAqZ_l z$%4Sf<s}bH0F(Z66|fpuL(kRw+46(MIH%D%MJf|;*)<(N*Q^>bRv3=4^ZRiQtbr4+ z9Rn<>COg&j2DCPwX+>{k-}nZwAyFx$xosJ}x1M0t#vd{A!5fr|!sQ$82D0^H0%{rX zV(ZkuUt{k415_*LdH+x>(Up$bgIE2cT-|o9)|K1=ghb`gcXyh(3m>IpLB)&1OoP5l zFi7oTVeif}?A`fA-&k?^!nE}uW9=8GtEOaTsKgLsbRxClXft&HYn@+21uauVQMIP6 z{V37?uSEwAXX0BjLzKE%^r;Ijx(8|#@YLbmC^a?BVx-OkD0@nkV*tuciCCergtH0c zvq$$+t$c7%4L_NClcD#H#tm4bma0!{RA+(;B{?So(jcYPOaOm-=m>wh_f}3G{0Y@U zpQmCR{own%dFsx)NTsWB^%S6*A#gORRGZW|odM_Ck|ZgD>5W%^DWDrv3%F+g|6F?3 zbaM8{hsi_Pd72gL7Z8;JRpr>L@8aB;r<HB!sqUV3mVIm`#fdCRhvZK6F>tcq^S?41 zfH^=D&<eEpCJcN;6;B=Ge+8v{swaVQ4?r3K#D3a=tZ&XDFzSa-G(8Ld2cWE6d)iE` QFaQ7m07*qoM6N<$g1mVAVE_OC literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/favicon.ico b/smp-angular/src/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..650f74d68e1ad93bcf0497cd27b2c3af43c6338d GIT binary patch literal 9662 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 U_-LI$YS;g9<I1`Fi}YaoUwpN<XaE2J literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/smp.png b/smp-angular/src/assets/images/smp.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6fef8a04aee19bab4eaf204a54656b211ad68c GIT binary patch literal 1037 zcmV+o1oHcdP)<h;3K|Lk000e1NJLTq000&M000mO1^@s6677#B00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru;s^~54F&;M%N_s#1DZ)h zK~y-)ZIf$gTV))^f9EtgX|gnJv(<H5Mq6z^d7B%o&bV%}F&Sgv(0!Pwn}}jj5Zs3e z6;UWCD1H$y6dj5k&Ksy@x6X=V^EQ&UIxT8VnbfxHY@5d9Bq!&+96#jrGVz56UjFa@ zeR%jk&))!IG&Dze>b<)O$C@eR<`_OTL?j+!<L+IUrbjV5Lf6(lzy;v>fp+4F9f)!O ztxP=6z|%#hM^n6dAO#46#I5Ui?!<>!kt9pU!!7-R6>bASlz->ZHQN9OfVckap*p&s z|2uP&@9^}^-6oxHJV2F|L`jw)3_LH65}*W_W*fUY*8vs~qAIZU+Wuvzz3veXzOp4i zB$h-Auyfy$>U*8qRdqCN*g-UYCx)@0!(ij?4*K8xghMaifJY-r0`SwGFfprYQE=;L z1!T*nT>%VpElR@Z_s8iyG7LyyfWyb{p>4~Hc-p}*tEpde2hd0JZ5?O{x>9e7S>zo- zK`2^Q)?n&+2m})*(p4x4i5qv)x+w$*z{PcoC<%@|jbl$!9laf}h}0!f(xWhQ2`v#q zpp~NRR_<sCh7k==%#C41HnXB`FHiPv!_M|IbowY-FU`%)rl?=Lhr1585R9}_%4cxw zEY&qgDT#&xtgy@qu@Yd<&zfBN@&lA8qa=7bMx^#WlKVerWnw$ZS1|co8YLik;6c!} z%uS{$#!4EGO%s22g7v)<e3h9+O9{CvV<sPW5An;n$8hYi#S|zNB(`cFN`e%S>bqER ze08NZK9WLv-tsgQUB$g$7m#i_M}JSB2^4wziL<=Wv6COqJVY^<u9)M0(hAZirYYN( z(aJ&z#rfVeT6zD8n#Ruk%!Q90XY_~hfNz$E<9NJ(<UE`APOz_QU@<>h0x15Oxk%mW zX57*Umxr_9X|#k=eu!hw9Og=94tu`fZ>KPM_Ea|yzqVm<<LVRPYn3Pukj##MgOZS+ z`4%XngjexExn$B)*z;K+=OZ5g^A?(J>ZI%B1>DjE)v=0ci;4w+;M~!(s6+RYN&N~q zc%Jr0<@u{_1Eqxt1dxu2X$GhYZYLb9kSPhG{1?Gc!dL7vI#^_M@C;x87FsVS7Rw+3 zOwuP`B6syuT<5Bv0*Bd&FUX{O7ROO(c7d|5&P8i)8L{@^Ex-U;fe>KPus%w5N+P8q z95-ofvM>#s%-|GI@JS6I%=PUJgsd9MMZsA5Zy@i#D}a9iLo^d*mloqh00000NkvXX Hu0mjfk~-GN literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/smp_logo_icon.png b/smp-angular/src/assets/images/smp_logo_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6df3b7f3f163b986b44a197573160fb38a0c04b6 GIT binary patch literal 109596 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%0Ao~y# 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�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 literal 0 HcmV?d00001 diff --git a/smp-angular/src/assets/images/smp_logo_icon.svg b/smp-angular/src/assets/images/smp_logo_icon.svg new file mode 100755 index 000000000..f2005c7c2 --- /dev/null +++ b/smp-angular/src/assets/images/smp_logo_icon.svg @@ -0,0 +1,321 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1215" + height="900" + viewBox="0 0 1215 900" + version="1.1" + id="svg2" + inkscape:version="0.91 r13725" + sodipodi:docname="smp_logo_icon.svg"> + <metadata + id="metadata56"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Domibus_logo_icon_2</dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1855" + inkscape:window-height="952" + id="namedview54" + showgrid="false" + inkscape:snap-text-baseline="false" + inkscape:zoom="0.23372157" + inkscape:cx="-477.99175" + inkscape:cy="1110.5901" + inkscape:window-x="65" + inkscape:window-y="24" + inkscape:window-maximized="1" + inkscape:current-layer="g3392" /> + <!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch --> + <title + id="title4">Domibus_logo_icon_2</title> + <desc + id="desc6">Created with Sketch.</desc> + <defs + id="defs8"> + <linearGradient + id="linearGradient4316" + osb:paint="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop4318" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4253"> + <stop + style="stop-color:#007ab5;stop-opacity:1" + offset="0" + id="stop4255" /> + <stop + style="stop-color:#00a3f2;stop-opacity:1" + offset="1" + id="stop4257" /> + </linearGradient> + <linearGradient + x1="556.42615" + y1="0" + x2="550.88867" + y2="1114.4225" + id="linearGradient-1" + gradientTransform="scale(0.92233629,1.0842032)" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#00A3F2" + offset="0%" + id="stop11" /> + <stop + stop-color="#007AB5" + offset="100%" + id="stop13" /> + </linearGradient> + <path + d="m 0,1176.5637 c 0,16.5654 13.434639,29.9943 29.990368,29.9943 l 381.258982,0 c 372.16367,0 615.17465,-224.31782 615.17465,-604.97837 C 1026.424,220.91907 783.41302,0 411.24935,0 L 29.990368,0 C 13.427145,0 0,13.433946 0,29.994348 L 0,1176.5637 Z" + id="path-2" + inkscape:connector-curvature="0" /> + <filter + x="-0.5" + y="-0.5" + width="2" + height="2" + filterUnits="objectBoundingBox" + id="filter-3"> + <feOffset + dx="0" + dy="20" + in="SourceAlpha" + result="shadowOffsetOuter1" + id="feOffset17" /> + <feGaussianBlur + stdDeviation="15" + in="shadowOffsetOuter1" + result="shadowBlurOuter1" + id="feGaussianBlur19" /> + <feColorMatrix + values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0" + type="matrix" + in="shadowBlurOuter1" + id="feColorMatrix21" /> + </filter> + <linearGradient + x1="0.5" + y1="0.75656396" + x2="0.5" + y2="1" + id="linearGradient-4"> + <stop + stop-color="#FFFFFF" + offset="0%" + id="stop24" /> + <stop + stop-color="#E8E8E8" + offset="100%" + id="stop26" /> + </linearGradient> + <filter + x="-0.5" + y="-0.5" + width="2" + height="2" + filterUnits="objectBoundingBox" + id="filter-5"> + <feOffset + dx="0" + dy="5" + in="SourceAlpha" + result="shadowOffsetOuter1" + id="feOffset29" /> + <feColorMatrix + values="0 0 0 0 0.771710247 0 0 0 0 0.771710247 0 0 0 0 0.771710247 0 0 0 1 0" + type="matrix" + in="shadowOffsetOuter1" + result="shadowMatrixOuter1" + id="feColorMatrix31" /> + <feMerge + id="feMerge33"> + <feMergeNode + in="shadowMatrixOuter1" + id="feMergeNode35" /> + <feMergeNode + in="SourceGraphic" + id="feMergeNode37" /> + </feMerge> + </filter> + <linearGradient + x1="0.5" + y1="0" + x2="0.5" + y2="1" + id="linearGradient-6"> + <stop + stop-color="#FFFFFF" + offset="0%" + id="stop40" /> + <stop + stop-color="#E8E8E8" + offset="100%" + id="stop42" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient-6" + id="linearGradient3388" + x1="266.47128" + y1="-1.5554573e-13" + x2="266.47128" + y2="532.94257" + gradientTransform="matrix(0.91212978,0,0,1.0963352,-2147.632,1560.1632)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient-6" + id="linearGradient3390" + x1="266.47128" + y1="-266.47128" + x2="266.47128" + y2="799.41388" + gradientTransform="scale(0.9121298,1.0963352)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4253" + id="linearGradient4259" + x1="624.67487" + y1="1398.0498" + x2="620.3963" + y2="580.83813" + gradientUnits="userSpaceOnUse" /> + <filter + style="color-interpolation-filters:sRGB;" + inkscape:label="Blur" + id="filter4364"> + <feGaussianBlur + stdDeviation="100 100" + result="fbSourceGraphic" + id="feGaussianBlur4366" /> + <feColorMatrix + result="fbSourceGraphicAlpha" + in="fbSourceGraphic" + values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0" + id="feColorMatrix4368" /> + <feGaussianBlur + id="feGaussianBlur4370" + stdDeviation="100 100" + result="blur" + in="fbSourceGraphic" /> + </filter> + <filter + inkscape:collect="always" + style="color-interpolation-filters:sRGB" + id="filter4584" + x="-0.069854853" + width="1.1397097" + y="-0.10163437" + height="1.2032687"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="60.137248" + id="feGaussianBlur4586" /> + </filter> + </defs> + <g + id="Logo-2" + style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1" + transform="translate(0,-528)"> + <g + id="Domibus_logo_icon_2"> + <g + id="Group-2" + transform="translate(94,111)"> + <g + id="g3392" + transform="matrix(0.57555164,0,0,0.57555164,652.33593,-40.646655)"> + <g + style="opacity:0.29600004;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;filter:url(#filter4584)" + id="D-9" + transform="translate(-297.6542,-326.09037)"> + <g + transform="scale(0.78714104,1.2704204)" + style="font-style:normal;font-weight:normal;font-size:1477.22583008px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4231-0"> + <path + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1" + d="m 193.35156,586.70898 c -58.82017,0 -103.916348,21.09624 -135.287107,63.28907 -31.370746,42.19283 -47.054687,102.49398 -47.054687,180.90234 0,62.58604 11.219418,112.33907 33.658203,149.25781 22.656667,36.9187 58.384631,63.8162 107.183591,80.6934 l 48.68946,17.4043 c 29.62794,10.5481 49.34312,22.5022 59.14648,35.8632 10.02122,13.3611 15.03125,32.3485 15.03125,56.961 0,27.4253 -7.29646,48.5215 -21.89258,63.289 -14.59611,14.7675 -35.61894,22.1504 -63.06836,22.1504 -27.01371,0 -55.11831,-6.68 -84.31054,-20.041 -28.974391,-13.7127 -59.036563,-33.9302 -90.189458,-60.6523 l 0,171.4082 c 31.152895,18.6351 62.306072,32.6999 93.458988,42.1933 31.1529,9.4934 62.1958,14.2403 93.13086,14.2403 65.5736,0 114.26384,-21.0963 146.07031,-63.2891 8.05941,-10.707 15.10168,-22.8211 21.13281,-36.334 l 0,99.9961 119.27344,0 0,-597.80662 112.41211,440.69142 79.73437,0 112.41211,-440.69142 0,597.80662 118.94727,0 12.54297,0 0,-283.5742 83.00195,0 c 62.088,0 109.6892,-22.9933 142.8027,-68.9785 33.3315,-46.3502 49.9981,-112.40776 49.9981,-198.17385 0,-85.40111 -16.6666,-151.09484 -49.9981,-197.08007 -33.1135,-46.35016 -80.7147,-69.5254 -142.8027,-69.5254 l -95.54492,0 -159.79492,0 -111.75782,437.40822 -111.10546,-437.40822 -160.1211,0 0,419.57422 c -2.32176,-4.509 -4.78581,-8.82987 -7.4082,-12.9414 -22.87451,-35.86393 -61.43442,-62.58566 -115.67969,-80.16602 l -53.5918,-17.4043 c -25.48874,-8.43859 -43.13414,-18.45949 -52.9375,-30.0625 -9.58551,-11.95465 -14.3789,-28.47975 -14.3789,-49.57617 0,-28.12854 7.19009,-48.87329 21.56836,-62.23437 14.37826,-13.36104 36.59846,-20.04102 66.66211,-20.04102 22.65665,0 46.73,4.92261 72.21875,14.76758 25.48874,9.84502 51.62992,24.43505 78.42578,43.77344 l 0,-166.66016 c -30.2815,-13.00944 -59.58152,-22.67889 -87.90235,-29.00781 -28.32082,-6.68053 -55.87992,-10.02149 -82.67578,-10.02149 z" + transform="matrix(2.2073091,0,0,1.3676288,-1227.128,170.02736)" + id="path4250-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sssccccssscccssccccccccccccscscsccccccscccsssscccs" /> + </g> + <g + transform="scale(0.77260486,1.2943227)" + style="font-style:normal;font-weight:normal;font-size:1505.01916504px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4235-9" /> + <g + transform="scale(0.77260486,1.2943227)" + style="font-style:normal;font-weight:normal;font-size:1505.01916504px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4239-3" /> + </g> + <g + id="D" + transform="translate(-330.8087,-386.89162)" + style="opacity:1"> + <g + transform="scale(0.78714104,1.2704204)" + style="font-style:normal;font-weight:normal;font-size:1477.22583008px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4231"> + <path + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:url(#linearGradient4259);fill-opacity:1" + d="m 193.35156,586.70898 c -58.82017,0 -103.916348,21.09624 -135.287107,63.28907 -31.370746,42.19283 -47.054687,102.49398 -47.054687,180.90234 0,62.58604 11.219418,112.33907 33.658203,149.25781 22.656667,36.9187 58.384631,63.8162 107.183591,80.6934 l 48.68946,17.4043 c 29.62794,10.5481 49.34312,22.5022 59.14648,35.8632 10.02122,13.3611 15.03125,32.3485 15.03125,56.961 0,27.4253 -7.29646,48.5215 -21.89258,63.289 -14.59611,14.7675 -35.61894,22.1504 -63.06836,22.1504 -27.01371,0 -55.11831,-6.68 -84.31054,-20.041 -28.974391,-13.7127 -59.036563,-33.9302 -90.189458,-60.6523 l 0,171.4082 c 31.152895,18.6351 62.306072,32.6999 93.458988,42.1933 31.1529,9.4934 62.1958,14.2403 93.13086,14.2403 65.5736,0 114.26384,-21.0963 146.07031,-63.2891 8.05941,-10.707 15.10168,-22.8211 21.13281,-36.334 l 0,99.9961 119.27344,0 0,-597.80662 112.41211,440.69142 79.73437,0 112.41211,-440.69142 0,597.80662 118.94727,0 12.54297,0 0,-283.5742 83.00195,0 c 62.088,0 109.6892,-22.9933 142.8027,-68.9785 33.3315,-46.3502 49.9981,-112.40776 49.9981,-198.17385 0,-85.40111 -16.6666,-151.09484 -49.9981,-197.08007 -33.1135,-46.35016 -80.7147,-69.5254 -142.8027,-69.5254 l -95.54492,0 -159.79492,0 -111.75782,437.40822 -111.10546,-437.40822 -160.1211,0 0,419.57422 c -2.32176,-4.509 -4.78581,-8.82987 -7.4082,-12.9414 -22.87451,-35.86393 -61.43442,-62.58566 -115.67969,-80.16602 l -53.5918,-17.4043 c -25.48874,-8.43859 -43.13414,-18.45949 -52.9375,-30.0625 -9.58551,-11.95465 -14.3789,-28.47975 -14.3789,-49.57617 0,-28.12854 7.19009,-48.87329 21.56836,-62.23437 14.37826,-13.36104 36.59846,-20.04102 66.66211,-20.04102 22.65665,0 46.73,4.92261 72.21875,14.76758 25.48874,9.84502 51.62992,24.43505 78.42578,43.77344 l 0,-166.66016 c -30.2815,-13.00944 -59.58152,-22.67889 -87.90235,-29.00781 -28.32082,-6.68053 -55.87992,-10.02149 -82.67578,-10.02149 z" + transform="matrix(2.2073091,0,0,1.3676288,-1227.128,170.02736)" + id="path4250" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sssccccssscccssccccccccccccscscsccccccscccsssscccs" /> + </g> + <g + transform="scale(0.77260486,1.2943227)" + style="font-style:normal;font-weight:normal;font-size:1505.01916504px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4235" /> + <g + transform="scale(0.77260486,1.2943227)" + style="font-style:normal;font-weight:normal;font-size:1505.01916504px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4239" /> + </g> + <g + style="fill:url(#linearGradient3390);filter:url(#filter-5)" + transform="matrix(0.77190154,0,0,0.77190154,1906.5704,-92.812679)" + id="Group-7"> + <path + inkscape:connector-curvature="0" + style="fill:url(#linearGradient3388)" + id="Combined-Shape" + d="m -1661.5192,1949.8406 0,188.7792 c 0,5.5205 -3.6833,7.4634 -8.2453,4.327 l -160.6507,-110.4473 -307.2169,0 c -5.5228,0 -9.9999,-4.486 -9.9999,-10.0018 l 0,-452.3328 c 0,-5.5238 4.4829,-10.0017 9.9999,-10.0017 l 466.113,0 c 5.5228,0 9.9999,4.4859 9.9999,10.0017 l 0,379.6757 z m -182.809,-192.5456 c 0,-33.5476 -27.1464,-60.6921 -60.6921,-60.6921 -33.5456,0 -60.692,27.1464 -60.692,60.6921 0,22.2265 12.5651,40.8362 30.346,51.3872 l 0,100.3429 c 0,16.7738 13.5723,30.346 30.346,30.346 16.7738,0 30.346,-13.5722 30.346,-30.346 l 0,-100.3429 c 17.7809,-10.551 30.3461,-29.1607 30.3461,-51.3872 z" /> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/smp-angular/src/assets/stylesheets/angularMaterial2Icons.css b/smp-angular/src/assets/stylesheets/angularMaterial2Icons.css new file mode 100644 index 000000000..000386d3b --- /dev/null +++ b/smp-angular/src/assets/stylesheets/angularMaterial2Icons.css @@ -0,0 +1,37 @@ +/* fallback */ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url(../icons/MaterialIcons-Regular.eot); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url(../icons/MaterialIcons-Regular.woff2) format('woff2'), + url(../icons/MaterialIcons-Regular.woff) format('woff'), + url(../icons/MaterialIcons-Regular.ttf) format('truetype'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + 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'; +} diff --git a/smp-angular/src/environments/environment.prod.ts b/smp-angular/src/environments/environment.prod.ts new file mode 100644 index 000000000..3612073bc --- /dev/null +++ b/smp-angular/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/smp-angular/src/environments/environment.ts b/smp-angular/src/environments/environment.ts new file mode 100644 index 000000000..b7f639aec --- /dev/null +++ b/smp-angular/src/environments/environment.ts @@ -0,0 +1,8 @@ +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `.angular-cli.json`. + +export const environment = { + production: false +}; diff --git a/smp-angular/src/favicon.ico b/smp-angular/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..650f74d68e1ad93bcf0497cd27b2c3af43c6338d GIT binary patch literal 9662 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 U_-LI$YS;g9<I1`Fi}YaoUwpN<XaE2J literal 0 HcmV?d00001 diff --git a/smp-angular/src/index.html b/smp-angular/src/index.html new file mode 100644 index 000000000..e1b38335e --- /dev/null +++ b/smp-angular/src/index.html @@ -0,0 +1,17 @@ +<!doctype html> +<html> +<head> + <base href="./"> + + <meta charset="utf-8"> + <title>eDelivery SMP</title> + + + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="icon" type="image/x-icon" href="favicon.ico"> + <link href="assets/stylesheets/angularMaterial2Icons.css" rel="stylesheet"> +</head> + <body> + <app-root>Loading...</app-root> + </body> +</html> diff --git a/smp-angular/src/main.ts b/smp-angular/src/main.ts new file mode 100644 index 000000000..46c1c73e2 --- /dev/null +++ b/smp-angular/src/main.ts @@ -0,0 +1,10 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { enableProdMode } from '@angular/core'; +import { environment } from './environments/environment'; +import { AppModule } from './app/app.module'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/smp-angular/src/main/resources/META-INF/web-fragment.xml b/smp-angular/src/main/resources/META-INF/web-fragment.xml new file mode 100644 index 000000000..8be3a42b8 --- /dev/null +++ b/smp-angular/src/main/resources/META-INF/web-fragment.xml @@ -0,0 +1,16 @@ +<web-fragment xmlns="http://java.sun.com/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://java.sun.com/xml/ns/javaee + http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd" + version="3.0"> + + <distributable/> + + <ordering> + <after> + <others/> + </after> + </ordering> + +</web-fragment> \ No newline at end of file diff --git a/smp-angular/src/polyfills.ts b/smp-angular/src/polyfills.ts new file mode 100644 index 000000000..1bdd4d3c6 --- /dev/null +++ b/smp-angular/src/polyfills.ts @@ -0,0 +1,38 @@ +// This file includes polyfills needed by Angular and is loaded before the app. +// You can add your own extra polyfills to this file. +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/set'; +import 'core-js/es6/reflect'; + +import 'core-js/es7/reflect'; +import 'zone.js/dist/zone'; + +// If you need to support the browsers/features below, uncomment the import +// and run `npm install import-name-here'; +// Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + +// Needed for: IE9 +// import 'classlist.js'; + +// Animations +// Needed for: All but Chrome and Firefox, Not supported in IE9 +// import 'web-animations-js'; + +// Date, currency, decimal and percent pipes +// Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 +// import 'intl'; + +// NgClass on SVG elements +// Needed for: IE10, IE11 +// import 'classlist.js'; diff --git a/smp-angular/src/styles.css b/smp-angular/src/styles.css new file mode 100644 index 000000000..267d7527e --- /dev/null +++ b/smp-angular/src/styles.css @@ -0,0 +1,316 @@ +/* You can add global styles to this file, and also import other style files */ +@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; +@import '~@swimlane/ngx-datatable/release/index.css'; +@import '~@swimlane/ngx-datatable/release/themes/material.css'; +@import '~@swimlane/ngx-datatable/release/assets/icons.css'; +@import url('https://fonts.googleapis.com/css?family=Open+Sans'); + +/*-------------------------------------------------- + [NORMALIZE] +----------------------------------------------------*/ +html, body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + font-family: 'Open Sans', sans-serif; +} + +.mat-dialog-title { + font-family: 'Open Sans', sans-serif !important; +} + +.mat-button, .mat-raised-button, .mat-icon-button { + font-family: 'Open Sans', sans-serif !important; + font-weight: bolder !important; +} + +.text-select { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + -o-user-select: text; + user-select: text; + word-wrap: break-word !important; +} + +div:before, +table:before, +tr:before, +td:before, +form:before, +tbody:before, +md-card:before, +md-card-content:before, +.panel:before, +.selectionCriteria:before, +table.buttonsRow:before, +table.buttonsMoveRow, +md-input-container:before, +ngx-datatable span:before { + content: " " !important; +} + +/* selection for datatable */ +.ngx-datatable .datatable-body-cell, .ngx-datatable .datatable-header-cell { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + -ms-user-select: auto !important; + -o-user-select: auto !important; + user-select: auto !important; +} + +.ngx-datatable .datatable-body-cell, .ngx-datatable .datatable-header-cell { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + -ms-user-select: auto !important; + -o-user-select: auto !important; + user-select: auto !important; +} + +.ngx-datatable span { + word-wrap: break-word; +} + +/*-------------------------------------------------- + [STRUCTURE] +----------------------------------------------------*/ + +/* --- CONTAINER --------- */ +/*------------------------ */ +.mat-sidenav-container { + background-color: #F5F5F5; + color: rgba(0, 0, 0, .99); +} + +/* --- SIDEBAR --------- */ +/*---------------------- */ +md-sidenav[_ngcontent-c0] { + box-shadow: 0px 0px 2px #9B9B9B !important; +} + +/* --- Logo ---*/ +#topLogoText { + margin-left: 5px; + text-align: left; +} + +#topLogo { + vertical-align: middle; +} + +#topLogoText h1 { + margin-top: 10px; + font-size: 18px; + font-weight: 900; +} + +#topLogoText h1 span { + display: inline-block; + margin-top: 10px; + font-size: 12px; + font-weight: 400; + line-height: 16px; +} + +/* --- Menu ---*/ +.mat-sidenav button { + box-shadow: none; + border-radius: 0; + line-height: 50px !important; + letter-spacing: 1px; +} + +.sideNavButton { + padding-left: 20px !important; +} + +/* --- Collapse button ---*/ +.collapse-button { + position: absolute; + bottom: 0; +} + +/* --- EC Logo ---*/ +#bottomLogo { + display: none; +} + +/* --- MAIN CONTENT --------- */ +/*--------------------------- */ +.mat-sidenav-content { + min-height: 100vh; +} + +/* --- Hamburger Menu ---*/ +/*Hamburger wrapper*/ +#sandwichMenuHolder { + position: relative; + display: block; +} + +/*Hamburger button*/ +#sandwichMenu { + position: absolute; + right: 10px; + top: 0; +} + +#sandwichMenu .mat-icon-button { + height: 40px; + width: 40px; +} + +#sandwichMenu .mat-icon.material-icons { + height: 40px; + width: 40px; + font-size: 40px; + line-height: 1; +} + +#sandwichMenu .material-icons:hover { + color: #03A9F4; +} + +/* --- Help button ---*/ +.helpMenu { + position: absolute; + top: 8px; + right: 37px; + width: 50px; +} + +/*-------------------------------------------------- + [LOGIN PAGE] +----------------------------------------------------*/ +.login-page form { + margin-top: 70px; +} + +.login-page #formContainer { + width: 100%; + display: flex; + justify-content: center; +} + +/*-------------------------------------------------- + [HEADING] +----------------------------------------------------*/ + +h1 { + font-size: 48px; + margin-top: 0; +} + +h2 { + font-size: 36px; +} + +/*-------------------------------------------------- + [LINKS] +----------------------------------------------------*/ +a { + text-decoration: none; +} + +a, +a:hover, +a:active, +button, +button:hover { + outline: 0; +} + +a:hover { + text-decoration: underline; +} + +/*-------------------------------------------------- + [PANEL] +----------------------------------------------------*/ +.panel { + margin-bottom: 20px; + padding: 20px; + background: #FFF; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24); +} + +md-card { + margin: 0; +} + +.searchArea { + margin-top: 0 !important; +} + +/* --- INPUT ---*/ +.panel md-select, .panel md2-datepicker, .panel md2-select { + padding-top: 10px; + padding-bottom: 10px; +} + +.panel md-select, .panel md-input-container, .panel md2-datepicker, .panel md2-select { + margin-right: 2%; +} + +.panel md-input-container, .panel md-select, .panel md2-datepicker, .panel md2-select { + width: 22%; +} + +@media (max-width: 991px) { + .panel md-input-container, .panel md-select, .panel md2-datepicker, .panel md2-select { + width: 46%; + } +} + +@media (max-width: 767px) { + .panel md-input-container, .panel md-select, .panel md2-datepicker, .panel md2-select { + width: 100%; + } +} + +.md-select-menu-container, +.md2-select-panel { + z-index: 99999 !important; +} + +/* --- GROUP BUTTON FILTER ---*/ +.group-filter-button { + position: relative; + margin-bottom: 20px; + padding-top: 20px; +} + +.column-filter-button a.hide-show-column { + position: absolute; + top: 30px; + right: 0; +} + +.all-none-selection { + padding-left: 10px; +} + +/* --- GROUP BUTTON ACTION ---*/ +.group-action-button { + margin-top: 20px; +} + +.group-action-button button { + margin-right: 10px; +} + +/* --- TABS --- */ +.md2-tab-ink-bar { + background-color: #03A9F4 !important; +} + +/*-------------------------------------------------- + [TABLE] +----------------------------------------------------*/ +.ngx-datatable.material { + background: #FFF; + box-shadow: none; + border: 1px solid rgba(0, 0, 0, 0.12); +} + diff --git a/smp-angular/src/test.ts b/smp-angular/src/test.ts new file mode 100644 index 000000000..9bf72267e --- /dev/null +++ b/smp-angular/src/test.ts @@ -0,0 +1,32 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/long-stack-trace-zone'; +import 'zone.js/dist/proxy.js'; +import 'zone.js/dist/sync-test'; +import 'zone.js/dist/jasmine-patch'; +import 'zone.js/dist/async-test'; +import 'zone.js/dist/fake-async-test'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. +declare var __karma__: any; +declare var require: any; + +// Prevent Karma from running prematurely. +__karma__.loaded = function () {}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); +// Finally, start Karma to run the tests. +__karma__.start(); diff --git a/smp-angular/src/theme.scss b/smp-angular/src/theme.scss new file mode 100644 index 000000000..02b3ccc28 --- /dev/null +++ b/smp-angular/src/theme.scss @@ -0,0 +1,84 @@ +@import '~@angular/material/theming'; +// Plus imports for other components in your app. + +// Include the common styles for Angular Material. We include this here so that you only +// have to load a single css file for Angular Material in your app. +// Be sure that you only ever include this mixin once! +@include mat-core(); + +// Define the palettes for your theme using the Material Design palettes available in palette.scss +// (imported above). For each palette, you can optionally specify a default, lighter, and darker +// hue. + +$input-app-primary: mat-palette($mat-blue); +$input-app-accent: mat-palette($mat-light-blue); + +// Create the theme object (a Sass map containing all of the palettes). +$input-app-theme: mat-light-theme($input-app-primary, $input-app-accent); + +// Include theme styles for core and each component used in your app. +// Alternatively, you can import and @include the theme mixins for each component +// that you are using. +@include angular-material-theme($input-app-theme); + +$datatable_background_color_hover: map-get($mat-grey, 600); +$datatable_background_color_focus: map-get($mat-grey, 600); +$datatable_background_color_active: map-get($mat-grey, 600); + +.ngx-datatable.material.cell-selection .datatable-body-cell.active, +.ngx-datatable.material.cell-selection .datatable-body-cell.active .datatable-row-group { + background-color: $datatable_background_color_active; + //color: #0d0d0d; +} + +.ngx-datatable.material.cell-selection .datatable-body-cell.active:hover, +.ngx-datatable.material.cell-selection .datatable-body-cell.active:hover .datatable-row-group { + background-color: $datatable_background_color_hover; + //color: #0d0d0d; +} + +.ngx-datatable.material.cell-selection .datatable-body-cell.active:focus, +.ngx-datatable.material.cell-selection .datatable-body-cell.active:focus .datatable-row-group { + background-color: $datatable_background_color_focus; + //color: #0d0d0d; +} + +.ngx-datatable.material.single-selection .datatable-body-row.active, +.ngx-datatable.material.single-selection .datatable-body-row.active .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active, +.ngx-datatable.material.multi-selection .datatable-body-row.active .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active, +.ngx-datatable.material.multi-click-selection .datatable-body-row.active .datatable-row-group { + background-color: $datatable_background_color_active; + color: #FFF; +} + +.ngx-datatable.material.single-selection .datatable-body-row.active:hover, +.ngx-datatable.material.single-selection .datatable-body-row.active:hover .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active:hover, +.ngx-datatable.material.multi-selection .datatable-body-row.active:hover .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active:hover, +.ngx-datatable.material.multi-click-selection .datatable-body-row.active:hover .datatable-row-group { + background-color: $datatable_background_color_hover; + color: #FFF; +} + +.ngx-datatable.material.single-selection .datatable-body-row.active:focus, +.ngx-datatable.material.single-selection .datatable-body-row.active:focus .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active:focus, +.ngx-datatable.material.multi-selection .datatable-body-row.active:focus .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active:focus, +.ngx-datatable.material.multi-click-selection .datatable-body-row.active:focus .datatable-row-group { + background-color: $datatable_background_color_focus; + color: #0d0d0d; +} + +.domibusLink { + color: #03A9F4;//map-get($mat-blue, A200); +} + +.searchArea { + margin: 20px 0 0 0; + display:block; + a { + @extend .domibusLink; + vertical-align: bottom; + margin-left: 10px; + color: #03A9F4; + } +} + diff --git a/smp-angular/src/tsconfig.app.json b/smp-angular/src/tsconfig.app.json new file mode 100644 index 000000000..5e2507db5 --- /dev/null +++ b/smp-angular/src/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "module": "es2015", + "baseUrl": "", + "types": [] + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] +} diff --git a/smp-angular/src/tsconfig.spec.json b/smp-angular/src/tsconfig.spec.json new file mode 100644 index 000000000..510e3f1fd --- /dev/null +++ b/smp-angular/src/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "module": "commonjs", + "target": "es5", + "baseUrl": "", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/smp-angular/src/typings.d.ts b/smp-angular/src/typings.d.ts new file mode 100644 index 000000000..ef5c7bd62 --- /dev/null +++ b/smp-angular/src/typings.d.ts @@ -0,0 +1,5 @@ +/* SystemJS module definition */ +declare var module: NodeModule; +interface NodeModule { + id: string; +} diff --git a/smp-angular/tsconfig.json b/smp-angular/tsconfig.json new file mode 100644 index 000000000..a35a8ee3a --- /dev/null +++ b/smp-angular/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "baseUrl": "src", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es5", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2016", + "dom" + ] + } +} diff --git a/smp-angular/tslint.json b/smp-angular/tslint.json new file mode 100644 index 000000000..9113f1368 --- /dev/null +++ b/smp-angular/tslint.json @@ -0,0 +1,116 @@ +{ + "rulesDirectory": [ + "node_modules/codelyzer" + ], + "rules": { + "callable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "eofline": true, + "forin": true, + "import-blacklist": [true, "rxjs"], + "import-spacing": true, + "indent": [ + true, + "spaces" + ], + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + "static-before-instance", + "variables-before-functions" + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-empty-interface": true, + "no-eval": true, + "no-inferrable-types": [true, "ignore-params"], + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "typeof-compare": true, + "unified-signatures": true, + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ], + + "directive-selector": [true, "attribute", "app", "camelCase"], + "component-selector": [true, "element", "app", "kebab-case"], + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true, + "no-access-missing-member": true, + "templates-use-public": true, + "invoke-injectable": true + } +} -- GitLab