@osovitny/anatoly 2.0.22 → 2.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/bundles/osovitny-anatoly.umd.js +1077 -347
  2. package/bundles/osovitny-anatoly.umd.js.map +1 -1
  3. package/bundles/osovitny-anatoly.umd.min.js +2 -3
  4. package/bundles/osovitny-anatoly.umd.min.js.map +1 -1
  5. package/esm2015/lib/core/alerts.js +52 -52
  6. package/esm2015/lib/core/consts/index.js +2 -1
  7. package/esm2015/lib/core/consts/urls.js +22 -0
  8. package/esm2015/lib/core/convert.js +31 -0
  9. package/esm2015/lib/core/core.module.js +7 -3
  10. package/esm2015/lib/core/index.js +5 -5
  11. package/esm2015/lib/core/localization/index.js +26 -0
  12. package/esm2015/lib/core/localization/localization.module.js +41 -0
  13. package/esm2015/lib/core/localization/localization.service.js +115 -0
  14. package/esm2015/lib/core/localization/localizationSettings.module.js +70 -0
  15. package/esm2015/lib/core/localization/localize.pipe.js +65 -0
  16. package/esm2015/lib/core/notifications/alerts.js +107 -0
  17. package/esm2015/lib/core/notifications/interfaces/notification.js +19 -0
  18. package/esm2015/lib/core/notifications/services/notification-service.js +230 -0
  19. package/esm2015/lib/core/subs.js +1 -1
  20. package/esm2015/lib/core/utils.js +47 -14
  21. package/esm2015/lib/data/base/base-api.service.js +26 -30
  22. package/esm2015/lib/data/consts.js +24 -0
  23. package/esm2015/lib/data/data.module.js +16 -5
  24. package/esm2015/lib/data/index.js +6 -6
  25. package/esm2015/lib/data/services/billing-api.service.js +4 -5
  26. package/esm2015/lib/ui/index.js +4 -4
  27. package/esm2015/lib/ui/ui.module.js +25 -25
  28. package/esm2015/lib/ui/validation/form-validation-summary.component.js +64 -0
  29. package/esm2015/lib/ui/validation/item-validation-summary.component.js +38 -0
  30. package/esm2015/lib/ui/validation/validation-summary.component.js +117 -0
  31. package/esm2015/public-api.js +6 -1
  32. package/fesm2015/osovitny-anatoly.js +1027 -305
  33. package/fesm2015/osovitny-anatoly.js.map +1 -1
  34. package/lib/core/consts/index.d.ts +1 -0
  35. package/lib/core/consts/urls.d.ts +3 -0
  36. package/lib/core/convert.d.ts +7 -0
  37. package/lib/core/index.d.ts +4 -4
  38. package/lib/core/localization/index.d.ts +4 -0
  39. package/lib/core/localization/localization.module.d.ts +2 -0
  40. package/lib/core/localization/localization.service.d.ts +18 -0
  41. package/lib/core/localization/localizationSettings.module.d.ts +10 -0
  42. package/lib/core/localization/localize.pipe.d.ts +7 -0
  43. package/lib/core/notifications/alerts.d.ts +9 -0
  44. package/lib/core/notifications/interfaces/notification.d.ts +10 -0
  45. package/lib/core/notifications/services/notification-service.d.ts +22 -0
  46. package/lib/core/subs.d.ts +1 -1
  47. package/lib/core/utils.d.ts +4 -0
  48. package/lib/data/base/base-api.service.d.ts +2 -3
  49. package/lib/data/consts.d.ts +4 -0
  50. package/lib/data/data.module.d.ts +1 -0
  51. package/lib/data/index.d.ts +5 -5
  52. package/lib/ui/index.d.ts +3 -3
  53. package/lib/ui/ui.module.d.ts +2 -2
  54. package/lib/ui/{components/validation → validation}/validation-summary.component.d.ts +1 -1
  55. package/osovitny-anatoly.metadata.json +1 -1
  56. package/package.json +1 -1
  57. package/public-api.d.ts +5 -0
  58. package/esm2015/lib/ui/components/validation/form-validation-summary.component.js +0 -64
  59. package/esm2015/lib/ui/components/validation/item-validation-summary.component.js +0 -38
  60. package/esm2015/lib/ui/components/validation/validation-summary.component.js +0 -117
  61. /package/lib/ui/{components/validation → validation}/form-validation-summary.component.d.ts +0 -0
  62. /package/lib/ui/{components/validation → validation}/item-validation-summary.component.d.ts +0 -0
@@ -0,0 +1,18 @@
1
+ import { TranslateService } from '@ngx-translate/core';
2
+ export declare class LocalizationService {
3
+ private translate;
4
+ dateFnsLocale: any;
5
+ constructor(translate: TranslateService);
6
+ private format;
7
+ configureTranslationSettings(translate: TranslateService): string;
8
+ getBrowserLanguage(): string;
9
+ getDatefnsLocale(): any;
10
+ setDefaultLanguage(lang: string): void;
11
+ setSupportedLanguages(languages: string[]): void;
12
+ updateLanguage(language: string): void;
13
+ getLocalizedValue(key: string, params?: any[]): string;
14
+ getLocalizedDate(key: string): string;
15
+ getLocalizedDateTime(key: string): string;
16
+ getLocalizedDistanceToNowInWords(date: string): string;
17
+ getLocalizedDistanceInWords(endedDate: string, startedDate: string): string;
18
+ }
@@ -0,0 +1,10 @@
1
+ import { Injector } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
4
+ import { TranslateHttpLoader } from '@ngx-translate/http-loader';
5
+ import { LocalizationService } from './localization.service';
6
+ export declare function customTranslateLoaderFactory(http: HttpClient): TranslateHttpLoader;
7
+ export declare function localizationInitializerFactory(translate: TranslateService, localizationService: LocalizationService, injector: Injector): () => Promise<any>;
8
+ export declare const TranslateModuleAtRoot: import("@angular/core").ModuleWithProviders<TranslateModule>;
9
+ export declare class LocalizationSettingsModule {
10
+ }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { LocalizationService } from './localization.service';
3
+ export declare class LocalizePipe implements PipeTransform {
4
+ private localizeService;
5
+ constructor(localizeService: LocalizationService);
6
+ transform(inputData: string, type: string, param2: string): string;
7
+ }
@@ -0,0 +1,9 @@
1
+ export declare class Alerts {
2
+ static success(text?: any, params?: any[], title?: any, successAction?: any): void;
3
+ static info(text: any, params?: any[], title?: any): void;
4
+ static warning(text: any, params?: any[], title?: any): void;
5
+ static error(text?: any, params?: any[], title?: any): void;
6
+ static cancel(text?: any, params?: any[], title?: any): void;
7
+ static notImplemented(): void;
8
+ static areYouSure(text: any, title?: any, confirmButtonText?: any, cancelButtonText?: any, successAction?: any, cancelAction?: any): void;
9
+ }
@@ -0,0 +1,10 @@
1
+ export interface INotification {
2
+ id?: string;
3
+ isNew: boolean;
4
+ isSession: boolean;
5
+ text?: string;
6
+ type?: string;
7
+ component?: string;
8
+ operation?: string;
9
+ createdDate?: string;
10
+ }
@@ -0,0 +1,22 @@
1
+ import { ToastrService } from 'ngx-toastr';
2
+ import { INotification } from '../interfaces/notification';
3
+ export declare class NotificationService {
4
+ private toastrService;
5
+ private _sessionNotifications;
6
+ private _serverNotifications;
7
+ readonly sessionNotifications$: import("rxjs").Observable<INotification[]>;
8
+ readonly serverNotifications$: import("rxjs").Observable<INotification[]>;
9
+ constructor(toastrService: ToastrService);
10
+ private addSessionNotification;
11
+ private addSessionNotificationToList;
12
+ removeNotification(id: string, isSession: boolean): void;
13
+ success(text?: any, params?: any[], title?: any, createSessionNotification?: boolean): void;
14
+ info(text: any, params?: any[], title?: any): void;
15
+ warning(text: any, params?: any[], title?: any): void;
16
+ error(text?: any, params?: any[], title?: any, createSessionNotification?: boolean): void;
17
+ cancel(text?: any, params?: any[], title?: any): void;
18
+ get sessionNotifications(): INotification[];
19
+ set sessionNotifications(val: INotification[]);
20
+ get serverNotifications(): INotification[];
21
+ set serverNotifications(val: INotification[]);
22
+ }
@@ -1,4 +1,4 @@
1
- import { Subscription } from "rxjs";
1
+ import { Subscription } from 'rxjs';
2
2
  export declare class Subs {
3
3
  private subs;
4
4
  constructor();
@@ -1,6 +1,10 @@
1
+ import { LocalizationService } from './localization/localization.service';
1
2
  export declare class Utils {
2
3
  static getValueByNameInQS(name: any): string;
3
4
  static getValueByName(url: any, name: any): string;
4
5
  static copyToClipBoard(event: any, val: string): void;
5
6
  static downloadFile(name: string, url: string): void;
7
+ static get localizationService(): LocalizationService;
8
+ static getLocalizedValue(key: string, params?: any[], defaultKey?: string): string;
9
+ static downloadBlobFile(value: Blob, fileName: string): void;
6
10
  }
@@ -1,5 +1,5 @@
1
- import { HttpClient } from "@angular/common/http";
2
- import { Observable } from "rxjs";
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
3
  export declare class BaseApiService {
4
4
  protected http: HttpClient;
5
5
  protected baseUrl: string;
@@ -12,5 +12,4 @@ export declare class BaseApiService {
12
12
  getById<T>(id: any): Observable<T>;
13
13
  getAll<T>(data?: any): Observable<T[]>;
14
14
  getJsonFile(fileName: string, jsonUrl?: string, jsonVersion?: string): Observable<any[]>;
15
- getNewGuid(): Observable<string>;
16
15
  }
@@ -0,0 +1,4 @@
1
+ export declare const consts: {
2
+ billingApiPath: string;
3
+ notificationsApiPath: string;
4
+ };
@@ -1,2 +1,3 @@
1
1
  export declare class AnatolyDataModule {
2
+ constructor(parentModule: AnatolyDataModule);
2
3
  }
@@ -1,5 +1,5 @@
1
- export * from "./base/base-api.service";
2
- export * from "./base/grid/base-grid-read.service";
3
- export * from "./base/grid/base-grid-edit.service";
4
- export * from "./services/billing-api.service";
5
- export { AnatolyDataModule } from "./data.module";
1
+ export * from './base/base-api.service';
2
+ export * from './base/grid/base-grid-read.service';
3
+ export * from './base/grid/base-grid-edit.service';
4
+ export * from './services/billing-api.service';
5
+ export { AnatolyDataModule } from './data.module';
package/lib/ui/index.d.ts CHANGED
@@ -7,9 +7,9 @@ export * from "./components/identity/signup-button.component";
7
7
  export * from "./components/content-header/content-header.component";
8
8
  export * from "./components/html-editor/html-editor.component";
9
9
  export * from "./components/html-editor/forms-html-editor.component";
10
- export * from "./components/validation/validation-summary.component";
11
- export * from "./components/validation/form-validation-summary.component";
12
- export * from "./components/validation/item-validation-summary.component";
10
+ export * from "./validation/validation-summary.component";
11
+ export * from "./validation/form-validation-summary.component";
12
+ export * from "./validation/item-validation-summary.component";
13
13
  export * from "./components/base.component";
14
14
  export * from "./components/base-edit.component";
15
15
  export * from "./directives/native-element.directive";
@@ -1,5 +1,5 @@
1
- import { ModuleWithProviders } from "@angular/core";
2
- import { FroalaEditorModule, FroalaViewModule } from "angular-froala-wysiwyg";
1
+ import { ModuleWithProviders } from '@angular/core';
2
+ import { FroalaEditorModule, FroalaViewModule } from 'angular-froala-wysiwyg';
3
3
  export declare const FroalaEditorModuleWithProviders: ModuleWithProviders<FroalaEditorModule>;
4
4
  export declare const FroalaViewModuleWithProviders: ModuleWithProviders<FroalaViewModule>;
5
5
  export declare class AnatolyUIModule {
@@ -1,4 +1,4 @@
1
- import { BaseEditComponent } from "../base-edit.component";
1
+ import { BaseEditComponent } from "../components/base-edit.component";
2
2
  export declare class ValidationSummaryComponent extends BaseEditComponent {
3
3
  constructor();
4
4
  getFormValidationMessages(): string[];
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"exports":[{"from":"./lib/components/billing/buyaccess-button.component"},{"from":"./lib/components/billing/subscribe-plan-button.component"},{"from":"./lib/components/billing/upgrade-plan-button.component"},{"from":"./lib/components/identity/signin-button.component"},{"from":"./lib/components/identity/signout-button.component"},{"from":"./lib/components/identity/signup-button.component"},{"from":"./lib/components/content-header/content-header.component"},{"from":"./lib/components/html-editor/html-editor.component"},{"from":"./lib/components/html-editor/forms-html-editor.component"},{"from":"./lib/components/validation/validation-summary.component"},{"from":"./lib/components/validation/form-validation-summary.component"},{"from":"./lib/components/validation/item-validation-summary.component"},{"from":"./lib/components/base.component"},{"from":"./lib/components/base-edit.component"},{"from":"./lib/directives/native-element.directive"},{"export":[{"name":"ContextInitState","as":"ContextInitState"},{"name":"AppCoreSettings","as":"AppCoreSettings"}],"from":"./lib/consts"},{"export":[{"name":"throwIfAlreadyLoaded","as":"throwIfAlreadyLoaded"}],"from":"./lib/guards/once-import.guard"},{"export":[{"name":"AnatolyCoreModule","as":"AnatolyCoreModule"}],"from":"./lib/core.module"},{"export":[{"name":"AnatolyDataModule","as":"AnatolyDataModule"}],"from":"./lib/data.module"},{"export":[{"name":"AnatolyUIModule","as":"AnatolyUIModule"}],"from":"./lib/ui.module"}],"metadata":{},"origins":{},"importAs":"@osovitny/anatoly"}
1
+ {"__symbolic":"module","version":4,"exports":[{"from":"./lib/core/localization.service"},{"from":"./lib/components/billing/subscribe-plan-button.component"},{"from":"./lib/components/billing/upgrade-plan-button.component"},{"from":"./lib/components/identity/signin-button.component"},{"from":"./lib/components/identity/signout-button.component"},{"from":"./lib/components/identity/signup-button.component"},{"from":"./lib/components/content-header/content-header.component"},{"from":"./lib/components/html-editor/html-editor.component"},{"from":"./lib/components/html-editor/forms-html-editor.component"},{"from":"./lib/validation/validation-summary.component"},{"from":"./lib/validation/form-validation-summary.component"},{"from":"./lib/validation/item-validation-summary.component"},{"from":"./lib/components/base.component"},{"from":"./lib/components/base-edit.component"},{"from":"./lib/directives/native-element.directive"},{"export":[{"name":"ContextInitState","as":"ContextInitState"},{"name":"AppCoreSettings","as":"AppCoreSettings"}],"from":"./lib/consts"},{"export":[{"name":"throwIfAlreadyLoaded","as":"throwIfAlreadyLoaded"}],"from":"./lib/guards/once-import.guard"},{"export":[{"name":"AnatolyCoreModule","as":"AnatolyCoreModule"}],"from":"./lib/core.module"},{"export":[{"name":"AnatolyDataModule","as":"AnatolyDataModule"}],"from":"./lib/data.module"},{"export":[{"name":"AnatolyUIModule","as":"AnatolyUIModule"}],"from":"./lib/ui.module"},{"export":[{"name":"LocalizePipe","as":"LocalizePipe"}],"from":"./lib/core/localize.pipe"},{"export":[{"name":"LocalizationModule","as":"LocalizationModule"}],"from":"./lib/core/localization.module"},{"export":[{"name":"LocalizationSettingsModule","as":"LocalizationSettingsModule"}],"from":"./lib/core/localizationSettings.module"}],"metadata":{"Alerts":{"__symbolic":"class","members":{}},"Utils":{"__symbolic":"class","members":{},"statics":{"getValueByNameInQS":{"__symbolic":"function","parameters":["name"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Utils"},"member":"getValueByName"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"location"},"member":"search"},{"__symbolic":"reference","name":"name"}]}},"localizationService":{"__symbolic":"error","message":"Variable not initialized","line":62,"character":13}}},"Subs":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor"}],"add":[{"__symbolic":"method"}],"unsubscribe":[{"__symbolic":"method"}]}},"Guid":{"__symbolic":"class","members":{},"statics":{"newGuid":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"uuid","name":"v4","line":23,"character":11}}}}}},"origins":{"Alerts":"./lib/core/notifications/alerts","Utils":"./lib/core/utils","Subs":"./lib/core/subs","Guid":"./lib/core/guid"},"importAs":"@osovitny/anatoly"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osovitny/anatoly",
3
- "version": "2.0.22",
3
+ "version": "2.0.25",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "10.0.0",
6
6
  "@angular/core": "10.0.0"
package/public-api.d.ts CHANGED
@@ -1,3 +1,8 @@
1
1
  export * from "./lib/core";
2
2
  export * from "./lib/data";
3
3
  export * from "./lib/ui";
4
+ export * from './lib/core/localization/';
5
+ export { Alerts } from './lib/core/notifications/alerts';
6
+ export { Guid } from './lib/core/guid';
7
+ export { Subs } from './lib/core/subs';
8
+ export { Utils } from './lib/core/utils';
@@ -1,64 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny
8
- Anatoly Osovitny
9
-
10
- Created:
11
- 7 Dec 2017
12
-
13
- Version:
14
- 1.0
15
-
16
- Copyright (c) 2016-2020 Osovitny Inc. All rights reserved.
17
- </file>
18
- */
19
- // Node
20
- import { Component, Input } from "@angular/core";
21
- import { ValidationSummaryComponent } from "./validation-summary.component";
22
- export class FormValidationSummaryComponent extends ValidationSummaryComponent {
23
- constructor() {
24
- super();
25
- this.visible = false;
26
- this.customerrors = [];
27
- /*
28
- 0 - only FormValidation messages
29
- 1 - only Custom messages
30
- 2 - all
31
- */
32
- this.viewtype = 0;
33
- }
34
- getErrors() {
35
- if (this.viewtype == 1) {
36
- return this.customerrors;
37
- }
38
- let formValidationMessages = this.getFormValidationMessages();
39
- if (this.viewtype == 0) {
40
- return formValidationMessages;
41
- }
42
- var messages = [];
43
- if (formValidationMessages.length > 0) {
44
- messages.push(...formValidationMessages);
45
- }
46
- if (this.customerrors.length > 0) {
47
- messages.push(...this.customerrors);
48
- }
49
- return messages;
50
- }
51
- }
52
- FormValidationSummaryComponent.decorators = [
53
- { type: Component, args: [{
54
- selector: "anatoly-form-validation-summary",
55
- template: "<div class=\"callout callout-danger\" *ngIf=\"visible\">\r\n <h6 class=\"box-title\">There are problems with the form</h6>\r\n <ul>\r\n <li *ngFor=\"let error of getErrors()\"><span>{{error}}</span></li>\r\n </ul>\r\n</div>\r\n\r\n"
56
- },] }
57
- ];
58
- FormValidationSummaryComponent.ctorParameters = () => [];
59
- FormValidationSummaryComponent.propDecorators = {
60
- visible: [{ type: Input }],
61
- customerrors: [{ type: Input }],
62
- viewtype: [{ type: Input }]
63
- };
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2NvbXBvbmVudHMvdmFsaWRhdGlvbi9mb3JtLXZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBRUYsT0FBTztBQUNQLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTTVFLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSwwQkFBMEI7SUFXNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQVhELFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FBYSxFQUFFLENBQUM7UUFFckM7Ozs7VUFJRTtRQUNPLGFBQVEsR0FBVyxDQUFDLENBQUM7SUFJOUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQjtRQUVELElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPLHNCQUFzQixDQUFDO1NBQy9CO1FBRUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7WUF2Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQ0FBaUM7Z0JBQzNDLHlQQUF1RDthQUN4RDs7OztzQkFFRSxLQUFLOzJCQUNMLEtBQUs7dUJBT0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnlcclxuICAgIEFuYXRvbHkgT3Nvdml0bnlcclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDcgRGVjIDIwMTdcclxuXHJcbiAgVmVyc2lvbjpcclxuICAgIDEuMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vIE5vZGVcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IH0gZnJvbSBcIi4vdmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYW5hdG9seS1mb3JtLXZhbGlkYXRpb24tc3VtbWFyeVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZm9ybS12YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50Lmh0bWxcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1WYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudCBleHRlbmRzIFZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VzdG9tZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvKlxyXG4gICAgMCAtIG9ubHkgRm9ybVZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgIDEgLSBvbmx5IEN1c3RvbSBtZXNzYWdlc1xyXG4gICAgMiAtIGFsbFxyXG4gICovIFxyXG4gIEBJbnB1dCgpIHZpZXd0eXBlOiBudW1iZXIgPSAwOyBcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JzKCkge1xyXG4gICAgaWYgKHRoaXMudmlld3R5cGUgPT0gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21lcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZvcm1WYWxpZGF0aW9uTWVzc2FnZXMgPSB0aGlzLmdldEZvcm1WYWxpZGF0aW9uTWVzc2FnZXMoKTtcclxuICAgIGlmICh0aGlzLnZpZXd0eXBlID09IDApIHtcclxuICAgICAgcmV0dXJuIGZvcm1WYWxpZGF0aW9uTWVzc2FnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoZm9ybVZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG1lc3NhZ2VzLnB1c2goLi4uZm9ybVZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3VzdG9tZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbWVzc2FnZXMucHVzaCguLi50aGlzLmN1c3RvbWVycm9ycyk7XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,38 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny
8
- Anatoly Osovitny
9
-
10
- Created:
11
- 6 Dec 2017
12
-
13
- Version:
14
- 1.0
15
-
16
- Copyright (c) 2016-2020 Osovitny Inc. All rights reserved.
17
- </file>
18
- */
19
- // Node
20
- import { Component, Input } from "@angular/core";
21
- import { ValidationSummaryComponent } from "./validation-summary.component";
22
- export class ItemValidationSummaryComponent extends ValidationSummaryComponent {
23
- constructor() {
24
- super();
25
- }
26
- }
27
- ItemValidationSummaryComponent.decorators = [
28
- { type: Component, args: [{
29
- selector: "anatoly-item-validation-summary",
30
- template: "<ul class=\"list-unstyled\" *ngIf=\"isControlInvalid(controlName)\">\r\n <li *ngFor=\"let error of getValidationMessages(formGroup.get(controlName), controlTitle)\">\r\n <span class=\"help-block\">{{ error }}</span>\r\n </li>\r\n</ul>\r\n\r\n"
31
- },] }
32
- ];
33
- ItemValidationSummaryComponent.ctorParameters = () => [];
34
- ItemValidationSummaryComponent.propDecorators = {
35
- controlName: [{ type: Input }],
36
- controlTitle: [{ type: Input }]
37
- };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2NvbXBvbmVudHMvdmFsaWRhdGlvbi9pdGVtLXZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBRUYsT0FBTztBQUNQLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTTVFLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSwwQkFBMEI7SUFJNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7OztZQVZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUNBQWlDO2dCQUMzQyxtUUFBdUQ7YUFDeEQ7Ozs7MEJBRUUsS0FBSzsyQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueVxyXG4gICAgQW5hdG9seSBPc292aXRueVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgNiBEZWMgMjAxN1xyXG5cclxuICBWZXJzaW9uOlxyXG4gICAgMS4wXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy8gTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvblN1bW1hcnlDb21wb25lbnQgfSBmcm9tIFwiLi92YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9pdGVtLXZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQuaHRtbFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbVZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IGV4dGVuZHMgVmFsaWRhdGlvblN1bW1hcnlDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,117 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny
8
- Anatoly Osovitny
9
-
10
- Created:
11
- 8 Dec 2017
12
-
13
- Version:
14
- 1.0
15
-
16
- Copyright (c) 2016-2020 Osovitny Inc. All rights reserved.
17
- </file>
18
- */
19
- //Custom
20
- import { BaseEditComponent } from "../base-edit.component";
21
- export class ValidationSummaryComponent extends BaseEditComponent {
22
- constructor() {
23
- super();
24
- }
25
- getFormValidationMessages() {
26
- let messages = [];
27
- Object.keys(this.formGroup.controls).forEach(k => {
28
- var control = this.formGroup.controls[k];
29
- if (control.controls != null) {
30
- Object.keys(control.controls).forEach(k => {
31
- var child = control.controls[k];
32
- this.getValidationMessages(child, this.getControlName(child, k)).forEach(m => messages.push(m));
33
- });
34
- }
35
- else {
36
- this.getValidationMessages(control, this.getControlName(control, k)).forEach(m => messages.push(m));
37
- }
38
- });
39
- return messages;
40
- }
41
- getValidationMessages(state, thingName) {
42
- let thing = state.path || thingName;
43
- let messages = [];
44
- if (state.errors) {
45
- for (let errorName in state.errors) {
46
- if (state.errors.hasOwnProperty(errorName)) {
47
- switch (errorName) {
48
- case 'required':
49
- messages.push(`${thing} is required`);
50
- break;
51
- case 'minlength':
52
- messages.push(`${thing} must be at least ${state.errors["minlength"].requiredLength} characters`);
53
- break;
54
- case 'pattern':
55
- messages.push(`${thing} contains illegal characters`);
56
- break;
57
- case 'format':
58
- messages.push(`${thing} format mismatch`);
59
- break;
60
- case 'maxlength':
61
- messages.push(`${thing} must have maximum ${state.errors["maxlength"].requiredLength} characters`);
62
- break;
63
- case 'specialcharacters':
64
- messages.push(`${thing} contains special characters`);
65
- break;
66
- }
67
- }
68
- }
69
- }
70
- return messages;
71
- }
72
- /**
73
- * Get Control Name
74
- * @param control
75
- * @param thingName
76
- */
77
- getControlName(control, thingName) {
78
- let value = this.getControlTitle(control);
79
- return value ? value : thingName;
80
- }
81
- /**
82
- * Retrieve tilte of control
83
- * @param control
84
- */
85
- getControlTitle(control) {
86
- if (control === null || control === void 0 ? void 0 : control.nativeElement) {
87
- let controlTitle = this.getTitleAttribute(control.nativeElement);
88
- if (controlTitle) {
89
- return controlTitle;
90
- }
91
- }
92
- return undefined;
93
- }
94
- /**
95
- * Return title attribute of form control
96
- */
97
- getTitleAttribute(nativeElement) {
98
- var _a, _b, _c, _d, _e, _f;
99
- let title;
100
- switch (nativeElement.tagName) {
101
- // For Kendo time and date picker element title is assigned to the 4th child control.
102
- case "KENDO-TIMEPICKER":
103
- case "KENDO-DATEPICKER":
104
- title = (_d = (_c = (_b = (_a = nativeElement.children[0]) === null || _a === void 0 ? void 0 : _a.children[0]) === null || _b === void 0 ? void 0 : _b.children[0]) === null || _c === void 0 ? void 0 : _c.children[0]) === null || _d === void 0 ? void 0 : _d.getAttribute('title');
105
- break;
106
- // For Kendo numaric element title is assigned to the 2nd child control.
107
- case "KENDO-NUMERICTEXTBOX":
108
- title = (_f = (_e = nativeElement.children[0]) === null || _e === void 0 ? void 0 : _e.children[0]) === null || _f === void 0 ? void 0 : _f.getAttribute('title');
109
- break;
110
- default:
111
- title = nativeElement.getAttribute('title');
112
- break;
113
- }
114
- return title;
115
- }
116
- }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi91aS9jb21wb25lbnRzL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUFLRixRQUFRO0FBQ1IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGlCQUFpQjtJQUMvRDtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFFNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6QyxJQUFnQixPQUFRLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBYSxPQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNyRCxJQUFJLEtBQUssR0FBZSxPQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRyxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckc7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFVLEVBQUUsU0FBa0I7UUFDbEQsSUFBSSxLQUFLLEdBQVcsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUM7UUFDNUMsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNoQixLQUFLLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzFDLFFBQVEsU0FBUyxFQUFFO3dCQUNqQixLQUFLLFVBQVU7NEJBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssY0FBYyxDQUFDLENBQUM7NEJBQ3RDLE1BQU07d0JBRVIsS0FBSyxXQUFXOzRCQUNkLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLHFCQUFxQixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsYUFBYSxDQUFDLENBQUM7NEJBQ2xHLE1BQU07d0JBRVIsS0FBSyxTQUFTOzRCQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLDhCQUE4QixDQUFDLENBQUM7NEJBQ3RELE1BQU07d0JBRVIsS0FBSyxRQUFROzRCQUNYLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLGtCQUFrQixDQUFDLENBQUM7NEJBQzFDLE1BQU07d0JBRVIsS0FBSyxXQUFXOzRCQUNkLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLHNCQUFzQixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsYUFBYSxDQUFDLENBQUM7NEJBQ25HLE1BQU07d0JBRVIsS0FBSyxtQkFBbUI7NEJBQ3RCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLDhCQUE4QixDQUFDLENBQUM7NEJBQ3RELE1BQU07cUJBQ1Q7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O01BSUU7SUFDRixjQUFjLENBQUMsT0FBWSxFQUFFLFNBQWtCO1FBQzdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsT0FBWTtRQUMxQixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLEVBQUU7WUFDMUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRSxJQUFJLFlBQVksRUFBRTtnQkFDaEIsT0FBTyxZQUFZLENBQUM7YUFDckI7U0FDRjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLGFBQThCOztRQUM5QyxJQUFJLEtBQWEsQ0FBQztRQUVsQixRQUFRLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDN0IscUZBQXFGO1lBQ3JGLEtBQUssa0JBQWtCLENBQUM7WUFDeEIsS0FBSyxrQkFBa0I7Z0JBQ3JCLEtBQUssMkJBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSxDQUFDLENBQUMsMkNBQUcsUUFBUSxDQUFDLENBQUMsMkNBQUcsUUFBUSxDQUFDLENBQUMsMkNBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRyxNQUFNO1lBRVIsd0VBQXdFO1lBQ3hFLEtBQUssc0JBQXNCO2dCQUN6QixLQUFLLGVBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSxDQUFDLENBQUMsMkNBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RSxNQUFNO1lBRVI7Z0JBQ0UsS0FBSyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLE1BQU07U0FDVDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueVxyXG4gICAgQW5hdG9seSBPc292aXRueVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgOCBEZWMgMjAxN1xyXG5cclxuICBWZXJzaW9uOlxyXG4gICAgMS4wXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy8gTm9kZVxyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vQ3VzdG9tXHJcbmltcG9ydCB7IEJhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Jhc2UtZWRpdC5jb21wb25lbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudCBleHRlbmRzIEJhc2VFZGl0Q29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtVmFsaWRhdGlvbk1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrID0+IHtcclxuICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trXTtcclxuXHJcbiAgICAgIGlmICgoPEZvcm1Hcm91cD5jb250cm9sKS5jb250cm9scyAhPSBudWxsKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoKDxGb3JtR3JvdXA+Y29udHJvbCkuY29udHJvbHMpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgICB2YXIgY2hpbGQgPSAoPEZvcm1Hcm91cD5jb250cm9sKS5jb250cm9sc1trXTtcclxuICAgICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKGNoaWxkLCB0aGlzLmdldENvbnRyb2xOYW1lKGNoaWxkLCBrKSkuZm9yRWFjaChtID0+IG1lc3NhZ2VzLnB1c2gobSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKGNvbnRyb2wsIHRoaXMuZ2V0Q29udHJvbE5hbWUoY29udHJvbCwgaykpLmZvckVhY2gobSA9PiBtZXNzYWdlcy5wdXNoKG0pKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKHN0YXRlOiBhbnksIHRoaW5nTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IHRoaW5nOiBzdHJpbmcgPSBzdGF0ZS5wYXRoIHx8IHRoaW5nTmFtZTtcclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAoc3RhdGUuZXJyb3JzKSB7XHJcbiAgICAgIGZvciAobGV0IGVycm9yTmFtZSBpbiBzdGF0ZS5lcnJvcnMpIHtcclxuICAgICAgICBpZiAoc3RhdGUuZXJyb3JzLmhhc093blByb3BlcnR5KGVycm9yTmFtZSkpIHtcclxuICAgICAgICAgIHN3aXRjaCAoZXJyb3JOYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBpcyByZXF1aXJlZGApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBtdXN0IGJlIGF0IGxlYXN0ICR7c3RhdGUuZXJyb3JzW1wibWlubGVuZ3RoXCJdLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnNgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm1hdCc6XHJcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGluZ30gZm9ybWF0IG1pc21hdGNoYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goYCR7dGhpbmd9IG11c3QgaGF2ZSBtYXhpbXVtICR7c3RhdGUuZXJyb3JzW1wibWF4bGVuZ3RoXCJdLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdzcGVjaWFsY2hhcmFjdGVycyc6XHJcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGluZ30gY29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgQ29udHJvbCBOYW1lXHJcbiAgKiBAcGFyYW0gY29udHJvbCBcclxuICAqIEBwYXJhbSB0aGluZ05hbWUgXHJcbiAgKi9cclxuICBnZXRDb250cm9sTmFtZShjb250cm9sOiBhbnksIHRoaW5nTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRDb250cm9sVGl0bGUoY29udHJvbCk7XHJcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IHRoaW5nTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRpbHRlIG9mIGNvbnRyb2wgXHJcbiAgICogQHBhcmFtIGNvbnRyb2wgXHJcbiAgICovXHJcbiAgZ2V0Q29udHJvbFRpdGxlKGNvbnRyb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29udHJvbD8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBsZXQgY29udHJvbFRpdGxlID0gdGhpcy5nZXRUaXRsZUF0dHJpYnV0ZShjb250cm9sLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICBpZiAoY29udHJvbFRpdGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGl0bGUgYXR0cmlidXRlIG9mIGZvcm0gY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFRpdGxlQXR0cmlidXRlKG5hdGl2ZUVsZW1lbnQ6IEhUTUxGb3JtRWxlbWVudCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGU6IHN0cmluZztcclxuXHJcbiAgICBzd2l0Y2ggKG5hdGl2ZUVsZW1lbnQudGFnTmFtZSkge1xyXG4gICAgICAvLyBGb3IgS2VuZG8gdGltZSBhbmQgZGF0ZSBwaWNrZXIgZWxlbWVudCB0aXRsZSBpcyBhc3NpZ25lZCB0byB0aGUgNHRoIGNoaWxkIGNvbnRyb2wuXHJcbiAgICAgIGNhc2UgXCJLRU5ETy1USU1FUElDS0VSXCI6XHJcbiAgICAgIGNhc2UgXCJLRU5ETy1EQVRFUElDS0VSXCI6XHJcbiAgICAgICAgdGl0bGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uY2hpbGRyZW5bMF0/LmNoaWxkcmVuWzBdPy5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyBGb3IgS2VuZG8gbnVtYXJpYyBlbGVtZW50IHRpdGxlIGlzIGFzc2lnbmVkIHRvIHRoZSAybmQgY2hpbGQgY29udHJvbC5cclxuICAgICAgY2FzZSBcIktFTkRPLU5VTUVSSUNURVhUQk9YXCI6XHJcbiAgICAgICAgdGl0bGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aXRsZSA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aXRsZTtcclxuICB9XHJcbn1cclxuIl19