@osovitny/anatoly 2.0.21 → 2.0.23

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 (26) hide show
  1. package/bundles/osovitny-anatoly.umd.js +382 -234
  2. package/bundles/osovitny-anatoly.umd.js.map +1 -1
  3. package/bundles/osovitny-anatoly.umd.min.js +2 -2
  4. package/bundles/osovitny-anatoly.umd.min.js.map +1 -1
  5. package/esm2015/lib/core/localization/localization.service.js +115 -0
  6. package/esm2015/lib/core/utils.js +58 -14
  7. package/esm2015/lib/ui/components/html-editor/forms-html-editor.component.js +2 -2
  8. package/esm2015/lib/ui/index.js +4 -4
  9. package/esm2015/lib/ui/ui.module.js +25 -25
  10. package/esm2015/lib/ui/validation/form-validation-summary.component.js +64 -0
  11. package/esm2015/lib/ui/validation/item-validation-summary.component.js +38 -0
  12. package/esm2015/lib/ui/validation/validation-summary.component.js +117 -0
  13. package/fesm2015/osovitny-anatoly.js +328 -183
  14. package/fesm2015/osovitny-anatoly.js.map +1 -1
  15. package/lib/core/localization/localization.service.d.ts +18 -0
  16. package/lib/core/utils.d.ts +9 -0
  17. package/lib/ui/index.d.ts +3 -3
  18. package/lib/ui/ui.module.d.ts +2 -2
  19. package/lib/ui/{components/validation → validation}/validation-summary.component.d.ts +1 -1
  20. package/osovitny-anatoly.metadata.json +1 -1
  21. package/package.json +1 -1
  22. package/esm2015/lib/ui/components/validation/form-validation-summary.component.js +0 -64
  23. package/esm2015/lib/ui/components/validation/item-validation-summary.component.js +0 -38
  24. package/esm2015/lib/ui/components/validation/validation-summary.component.js +0 -117
  25. /package/lib/ui/{components/validation → validation}/form-validation-summary.component.d.ts +0 -0
  26. /package/lib/ui/{components/validation → validation}/item-validation-summary.component.d.ts +0 -0
@@ -0,0 +1,117 @@
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 "../components/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi91aS92YWxpZGF0aW9uL3ZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBS0YsUUFBUTtBQUNSLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxpQkFBaUI7SUFDL0Q7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekMsSUFBZ0IsT0FBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQWEsT0FBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDckQsSUFBSSxLQUFLLEdBQWUsT0FBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEcsQ0FBQyxDQUFDLENBQUM7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Q0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEcsTUFBTTtZQUVSLHdFQUF3RTtZQUN4RSxLQUFLLHNCQUFzQjtnQkFDekIsS0FBSyxlQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFFBQVEsQ0FBQyxDQUFDLDJDQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEUsTUFBTTtZQUVSO2dCQUNFLEtBQUssR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QyxNQUFNO1NBQ1Q7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnlcclxuICAgIEFuYXRvbHkgT3Nvdml0bnlcclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDggRGVjIDIwMTdcclxuXHJcbiAgVmVyc2lvbjpcclxuICAgIDEuMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vIE5vZGVcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG4vL0N1c3RvbVxyXG5pbXBvcnQgeyBCYXNlRWRpdENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL2Jhc2UtZWRpdC5jb21wb25lbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudCBleHRlbmRzIEJhc2VFZGl0Q29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtVmFsaWRhdGlvbk1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrID0+IHtcclxuICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trXTtcclxuXHJcbiAgICAgIGlmICgoPEZvcm1Hcm91cD5jb250cm9sKS5jb250cm9scyAhPSBudWxsKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoKDxGb3JtR3JvdXA+Y29udHJvbCkuY29udHJvbHMpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgICB2YXIgY2hpbGQgPSAoPEZvcm1Hcm91cD5jb250cm9sKS5jb250cm9sc1trXTtcclxuICAgICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKGNoaWxkLCB0aGlzLmdldENvbnRyb2xOYW1lKGNoaWxkLCBrKSkuZm9yRWFjaChtID0+IG1lc3NhZ2VzLnB1c2gobSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKGNvbnRyb2wsIHRoaXMuZ2V0Q29udHJvbE5hbWUoY29udHJvbCwgaykpLmZvckVhY2gobSA9PiBtZXNzYWdlcy5wdXNoKG0pKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKHN0YXRlOiBhbnksIHRoaW5nTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IHRoaW5nOiBzdHJpbmcgPSBzdGF0ZS5wYXRoIHx8IHRoaW5nTmFtZTtcclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAoc3RhdGUuZXJyb3JzKSB7XHJcbiAgICAgIGZvciAobGV0IGVycm9yTmFtZSBpbiBzdGF0ZS5lcnJvcnMpIHtcclxuICAgICAgICBpZiAoc3RhdGUuZXJyb3JzLmhhc093blByb3BlcnR5KGVycm9yTmFtZSkpIHtcclxuICAgICAgICAgIHN3aXRjaCAoZXJyb3JOYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBpcyByZXF1aXJlZGApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBtdXN0IGJlIGF0IGxlYXN0ICR7c3RhdGUuZXJyb3JzW1wibWlubGVuZ3RoXCJdLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnNgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm1hdCc6XHJcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGluZ30gZm9ybWF0IG1pc21hdGNoYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goYCR7dGhpbmd9IG11c3QgaGF2ZSBtYXhpbXVtICR7c3RhdGUuZXJyb3JzW1wibWF4bGVuZ3RoXCJdLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdzcGVjaWFsY2hhcmFjdGVycyc6XHJcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGluZ30gY29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgQ29udHJvbCBOYW1lXHJcbiAgKiBAcGFyYW0gY29udHJvbCBcclxuICAqIEBwYXJhbSB0aGluZ05hbWUgXHJcbiAgKi9cclxuICBnZXRDb250cm9sTmFtZShjb250cm9sOiBhbnksIHRoaW5nTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRDb250cm9sVGl0bGUoY29udHJvbCk7XHJcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IHRoaW5nTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRpbHRlIG9mIGNvbnRyb2wgXHJcbiAgICogQHBhcmFtIGNvbnRyb2wgXHJcbiAgICovXHJcbiAgZ2V0Q29udHJvbFRpdGxlKGNvbnRyb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29udHJvbD8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBsZXQgY29udHJvbFRpdGxlID0gdGhpcy5nZXRUaXRsZUF0dHJpYnV0ZShjb250cm9sLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICBpZiAoY29udHJvbFRpdGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGl0bGUgYXR0cmlidXRlIG9mIGZvcm0gY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFRpdGxlQXR0cmlidXRlKG5hdGl2ZUVsZW1lbnQ6IEhUTUxGb3JtRWxlbWVudCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGU6IHN0cmluZztcclxuXHJcbiAgICBzd2l0Y2ggKG5hdGl2ZUVsZW1lbnQudGFnTmFtZSkge1xyXG4gICAgICAvLyBGb3IgS2VuZG8gdGltZSBhbmQgZGF0ZSBwaWNrZXIgZWxlbWVudCB0aXRsZSBpcyBhc3NpZ25lZCB0byB0aGUgNHRoIGNoaWxkIGNvbnRyb2wuXHJcbiAgICAgIGNhc2UgXCJLRU5ETy1USU1FUElDS0VSXCI6XHJcbiAgICAgIGNhc2UgXCJLRU5ETy1EQVRFUElDS0VSXCI6XHJcbiAgICAgICAgdGl0bGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uY2hpbGRyZW5bMF0/LmNoaWxkcmVuWzBdPy5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyBGb3IgS2VuZG8gbnVtYXJpYyBlbGVtZW50IHRpdGxlIGlzIGFzc2lnbmVkIHRvIHRoZSAybmQgY2hpbGQgY29udHJvbC5cclxuICAgICAgY2FzZSBcIktFTkRPLU5VTUVSSUNURVhUQk9YXCI6XHJcbiAgICAgICAgdGl0bGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aXRsZSA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aXRsZTtcclxuICB9XHJcbn1cclxuIl19