ps-toolkit-ui 0.0.1
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.
- package/README.md +24 -0
- package/bundles/ps-toolkit-ui.umd.js +7344 -0
- package/bundles/ps-toolkit-ui.umd.js.map +1 -0
- package/bundles/ps-toolkit-ui.umd.min.js +2 -0
- package/bundles/ps-toolkit-ui.umd.min.js.map +1 -0
- package/esm2015/lib/classes/enum.class.js +162 -0
- package/esm2015/lib/classes/form.class.js +467 -0
- package/esm2015/lib/classes/helper.class.js +275 -0
- package/esm2015/lib/classes/lang.class.js +32 -0
- package/esm2015/lib/classes/login.class.js +22 -0
- package/esm2015/lib/classes/modal.class.js +52 -0
- package/esm2015/lib/classes/permission.class.js +29 -0
- package/esm2015/lib/classes/request.class.js +255 -0
- package/esm2015/lib/classes/safestyle.class.js +15 -0
- package/esm2015/lib/classes/sidebar.class.js +14 -0
- package/esm2015/lib/classes/steps.class.js +20 -0
- package/esm2015/lib/classes/string.class.js +203 -0
- package/esm2015/lib/classes/table.class.js +278 -0
- package/esm2015/lib/components/accordion/accordion.component.js +45 -0
- package/esm2015/lib/components/alert/alert.component.js +41 -0
- package/esm2015/lib/components/base.component.js +55 -0
- package/esm2015/lib/components/confirm/confirm.component.js +50 -0
- package/esm2015/lib/components/footer/footer.component.js +23 -0
- package/esm2015/lib/components/form/bank-card/form.bank-card.component.js +148 -0
- package/esm2015/lib/components/form/button/form.button.component.js +68 -0
- package/esm2015/lib/components/form/car/form.car.component.js +84 -0
- package/esm2015/lib/components/form/car/search/form.car.search.component.js +173 -0
- package/esm2015/lib/components/form/checkbox/form.checkbox.component.js +66 -0
- package/esm2015/lib/components/form/date/form.date.component.js +256 -0
- package/esm2015/lib/components/form/datetime/form.datetime.component.js +104 -0
- package/esm2015/lib/components/form/file/form.file.component.js +133 -0
- package/esm2015/lib/components/form/finger/form.finger.component.js +138 -0
- package/esm2015/lib/components/form/icon/form.icon.component.js +76 -0
- package/esm2015/lib/components/form/index/form.component.js +48 -0
- package/esm2015/lib/components/form/label/form.label.component.js +31 -0
- package/esm2015/lib/components/form/plaque/form.plaque.component.js +176 -0
- package/esm2015/lib/components/form/plaque/select/form.plaque.select.component.js +390 -0
- package/esm2015/lib/components/form/radio/form.radio.component.js +79 -0
- package/esm2015/lib/components/form/select/form.select.component.js +369 -0
- package/esm2015/lib/components/form/select/item/form.select.item.component.js +43 -0
- package/esm2015/lib/components/form/table/form.table.component.js +98 -0
- package/esm2015/lib/components/form/textarea/form.textarea.component.js +78 -0
- package/esm2015/lib/components/form/textbox/form.textbox.component.js +186 -0
- package/esm2015/lib/components/form/time/form.time.component.js +145 -0
- package/esm2015/lib/components/form/tree/form.tree.component.js +93 -0
- package/esm2015/lib/components/form/tree/item/form.tree.item.component.js +48 -0
- package/esm2015/lib/components/header/header.component.js +28 -0
- package/esm2015/lib/components/header/sub/sub.header.component.js +14 -0
- package/esm2015/lib/components/layout/layout.component.js +23 -0
- package/esm2015/lib/components/loading/loading.component.js +22 -0
- package/esm2015/lib/components/login/login.component.js +145 -0
- package/esm2015/lib/components/modal/modal.component.js +25 -0
- package/esm2015/lib/components/notfound/notfound.component.js +29 -0
- package/esm2015/lib/components/notification/notification.component.js +14 -0
- package/esm2015/lib/components/sidebar/item/sidebar.item.component.js +53 -0
- package/esm2015/lib/components/sidebar/sidebar.component.js +65 -0
- package/esm2015/lib/components/steps/steps.component.js +51 -0
- package/esm2015/lib/components/table/loading/table.loading.component.js +17 -0
- package/esm2015/lib/components/table/pagination/table.pagination.component.js +84 -0
- package/esm2015/lib/components/table/report/table.report.component.js +245 -0
- package/esm2015/lib/components/table/row/table.row.component.js +274 -0
- package/esm2015/lib/components/table/table.component.js +207 -0
- package/esm2015/lib/components/tooltip/tooltip.component.js +19 -0
- package/esm2015/lib/ps-toolkit-ui.module.js +89 -0
- package/esm2015/lib/services/config.service.js +14 -0
- package/esm2015/ps-toolkit-ui.js +16 -0
- package/esm2015/public-api.js +52 -0
- package/fesm2015/ps-toolkit-ui.js +6277 -0
- package/fesm2015/ps-toolkit-ui.js.map +1 -0
- package/lib/classes/enum.class.d.ts +137 -0
- package/lib/classes/form.class.d.ts +173 -0
- package/lib/classes/helper.class.d.ts +26 -0
- package/lib/classes/lang.class.d.ts +5 -0
- package/lib/classes/login.class.d.ts +17 -0
- package/lib/classes/modal.class.d.ts +19 -0
- package/lib/classes/permission.class.d.ts +19 -0
- package/lib/classes/request.class.d.ts +12 -0
- package/lib/classes/safestyle.class.d.ts +7 -0
- package/lib/classes/sidebar.class.d.ts +11 -0
- package/lib/classes/steps.class.d.ts +17 -0
- package/lib/classes/string.class.d.ts +201 -0
- package/lib/classes/table.class.d.ts +67 -0
- package/lib/components/accordion/accordion.component.d.ts +7 -0
- package/lib/components/alert/alert.component.d.ts +10 -0
- package/lib/components/base.component.d.ts +12 -0
- package/lib/components/confirm/confirm.component.d.ts +14 -0
- package/lib/components/footer/footer.component.d.ts +6 -0
- package/lib/components/form/bank-card/form.bank-card.component.d.ts +22 -0
- package/lib/components/form/button/form.button.component.d.ts +15 -0
- package/lib/components/form/car/form.car.component.d.ts +16 -0
- package/lib/components/form/car/search/form.car.search.component.d.ts +18 -0
- package/lib/components/form/checkbox/form.checkbox.component.d.ts +14 -0
- package/lib/components/form/date/form.date.component.d.ts +41 -0
- package/lib/components/form/datetime/form.datetime.component.d.ts +13 -0
- package/lib/components/form/file/form.file.component.d.ts +17 -0
- package/lib/components/form/finger/form.finger.component.d.ts +15 -0
- package/lib/components/form/icon/form.icon.component.d.ts +15 -0
- package/lib/components/form/index/form.component.d.ts +10 -0
- package/lib/components/form/label/form.label.component.d.ts +8 -0
- package/lib/components/form/plaque/form.plaque.component.d.ts +22 -0
- package/lib/components/form/plaque/select/form.plaque.select.component.d.ts +36 -0
- package/lib/components/form/radio/form.radio.component.d.ts +13 -0
- package/lib/components/form/select/form.select.component.d.ts +39 -0
- package/lib/components/form/select/item/form.select.item.component.d.ts +12 -0
- package/lib/components/form/table/form.table.component.d.ts +9 -0
- package/lib/components/form/textarea/form.textarea.component.d.ts +13 -0
- package/lib/components/form/textbox/form.textbox.component.d.ts +20 -0
- package/lib/components/form/time/form.time.component.d.ts +25 -0
- package/lib/components/form/tree/form.tree.component.d.ts +16 -0
- package/lib/components/form/tree/item/form.tree.item.component.d.ts +17 -0
- package/lib/components/header/header.component.d.ts +7 -0
- package/lib/components/header/sub/sub.header.component.d.ts +3 -0
- package/lib/components/layout/layout.component.d.ts +6 -0
- package/lib/components/loading/loading.component.d.ts +5 -0
- package/lib/components/login/login.component.d.ts +13 -0
- package/lib/components/modal/modal.component.d.ts +9 -0
- package/lib/components/notfound/notfound.component.d.ts +7 -0
- package/lib/components/notification/notification.component.d.ts +3 -0
- package/lib/components/sidebar/item/sidebar.item.component.d.ts +14 -0
- package/lib/components/sidebar/sidebar.component.d.ts +18 -0
- package/lib/components/steps/steps.component.d.ts +10 -0
- package/lib/components/table/loading/table.loading.component.d.ts +5 -0
- package/lib/components/table/pagination/table.pagination.component.d.ts +15 -0
- package/lib/components/table/report/table.report.component.d.ts +34 -0
- package/lib/components/table/row/table.row.component.d.ts +36 -0
- package/lib/components/table/table.component.d.ts +39 -0
- package/lib/components/tooltip/tooltip.component.d.ts +5 -0
- package/lib/ps-toolkit-ui.module.d.ts +4 -0
- package/lib/services/config.service.d.ts +6 -0
- package/package.json +22 -0
- package/ps-toolkit-ui.d.ts +15 -0
- package/ps-toolkit-ui.metadata.json +1 -0
- package/public-api.d.ts +48 -0
- package/src/assets/fonts/Vazir.eot +0 -0
- package/src/assets/fonts/Vazir.ttf +0 -0
- package/src/assets/fonts/Vazir.woff +0 -0
- package/src/assets/fonts/Vazir.woff2 +0 -0
- package/src/assets/fonts/VazirBlack.eot +0 -0
- package/src/assets/fonts/VazirBlack.ttf +0 -0
- package/src/assets/fonts/VazirBlack.woff +0 -0
- package/src/assets/fonts/VazirBlack.woff2 +0 -0
- package/src/assets/fonts/VazirBold.eot +0 -0
- package/src/assets/fonts/VazirBold.ttf +0 -0
- package/src/assets/fonts/VazirBold.woff +0 -0
- package/src/assets/fonts/VazirBold.woff2 +0 -0
- package/src/assets/fonts/VazirLight.eot +0 -0
- package/src/assets/fonts/VazirLight.ttf +0 -0
- package/src/assets/fonts/VazirLight.woff +0 -0
- package/src/assets/fonts/VazirLight.woff2 +0 -0
- package/src/assets/fonts/VazirMedium.eot +0 -0
- package/src/assets/fonts/VazirMedium.ttf +0 -0
- package/src/assets/fonts/VazirMedium.woff +0 -0
- package/src/assets/fonts/VazirMedium.woff2 +0 -0
- package/src/assets/fonts/VazirThin.eot +0 -0
- package/src/assets/fonts/VazirThin.ttf +0 -0
- package/src/assets/fonts/VazirThin.woff +0 -0
- package/src/assets/fonts/VazirThin.woff2 +0 -0
- package/src/assets/images/partsilicon.png +0 -0
- package/src/assets/images/plaque.png +0 -0
- package/src/assets/images/plaque_m.png +0 -0
- package/src/assets/scripts/base.js +26 -0
- package/src/assets/styles/base.css +259 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as $ from 'jquery';
|
|
3
|
+
import { InputError } from '../../../classes/enum.class';
|
|
4
|
+
export class FormFileComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.changeIndex = new EventEmitter();
|
|
7
|
+
}
|
|
8
|
+
ngOnInit() {
|
|
9
|
+
this.inp.setValue = (v) => {
|
|
10
|
+
this.inp.value = v;
|
|
11
|
+
};
|
|
12
|
+
this.inp.isValid = () => {
|
|
13
|
+
this.inp.error = null;
|
|
14
|
+
if (this.inp.required && !this.inp.value) {
|
|
15
|
+
this.inp.error = InputError.Required;
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (!this.inp.required && !this.inp.value) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if (this.inp.allowed != null && this.inp.value != null && typeof this.inp.value !== 'string' &&
|
|
22
|
+
this.inp.value.map(x => this.inp.allowed.includes(x.name.split('.').pop().toLowerCase())).filter(x => !x).length > 0) {
|
|
23
|
+
this.inp.error = InputError.NotAllowed;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (this.inp.maxLength !== -1 && this.inp.value != null && typeof this.inp.value !== 'string' &&
|
|
27
|
+
this.inp.value.map(x => x.size > this.inp.maxLength * 1024).filter(x => x).length > 0) {
|
|
28
|
+
this.inp.error = InputError.MaxContent;
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
this.inp.clear = () => {
|
|
34
|
+
this.inp.error = null;
|
|
35
|
+
this.inp.value = this.inp.default;
|
|
36
|
+
};
|
|
37
|
+
this.inp.data = () => {
|
|
38
|
+
if (this.inp.value && typeof this.inp.value !== 'string') {
|
|
39
|
+
if (!this.inp.exportPdf) {
|
|
40
|
+
return this.inp.value;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// const doc = new jsPDF();
|
|
44
|
+
// let y = 5;
|
|
45
|
+
// for (const img of this.inp.value) {
|
|
46
|
+
// const i = await this.getPdfImage(img);
|
|
47
|
+
// if (y + i.h > 287) {
|
|
48
|
+
// doc.addPage();
|
|
49
|
+
// y = 5;
|
|
50
|
+
// }
|
|
51
|
+
// doc.addImage(i.base64, 'JPEG', 5, y, i.w, i.h);
|
|
52
|
+
// y += i.h + 5;
|
|
53
|
+
// }
|
|
54
|
+
// return doc.output('blob');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
this.inp.focus = () => {
|
|
60
|
+
this.onClick();
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
getPdfImage(file) {
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
const reader = new FileReader();
|
|
66
|
+
reader.readAsDataURL(file);
|
|
67
|
+
reader.onload = () => {
|
|
68
|
+
const i = new Image();
|
|
69
|
+
i.src = window.URL.createObjectURL(file);
|
|
70
|
+
i.onload = () => {
|
|
71
|
+
let w = i.width;
|
|
72
|
+
let h = i.height;
|
|
73
|
+
if (w > 200) {
|
|
74
|
+
h = (200 * h) / w;
|
|
75
|
+
w = 200;
|
|
76
|
+
}
|
|
77
|
+
if (h > 287) {
|
|
78
|
+
w = (287 * w) / h;
|
|
79
|
+
h = 287;
|
|
80
|
+
}
|
|
81
|
+
resolve({ base64: reader.result.toString(), w, h });
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
reader.onerror = error => reject(error);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
onClick() {
|
|
88
|
+
$(this.inputBase.nativeElement).focus();
|
|
89
|
+
}
|
|
90
|
+
onChange(e) {
|
|
91
|
+
this.inp.error = null;
|
|
92
|
+
const v = [];
|
|
93
|
+
for (const f of e.target.files) {
|
|
94
|
+
v.push(f);
|
|
95
|
+
}
|
|
96
|
+
this.inp.value = v;
|
|
97
|
+
this.changeIndex.emit('Tab');
|
|
98
|
+
}
|
|
99
|
+
onKeyDown(e) {
|
|
100
|
+
const code = e.keyCode || e.which;
|
|
101
|
+
if (code === 9 || code === 13) {
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
this.changeIndex.emit(e.shiftKey ? 'ShiftTab' : 'Tab');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
onFocusIn() {
|
|
107
|
+
$(this.inputBase.nativeElement).focus();
|
|
108
|
+
}
|
|
109
|
+
title() {
|
|
110
|
+
if (this.inp.value == null) {
|
|
111
|
+
return this.inp.l('FileNotSelected');
|
|
112
|
+
}
|
|
113
|
+
const t = typeof this.inp.value === 'string' ? this.inp.value : this.inp.value.map(x => x.name).join(', ');
|
|
114
|
+
const l = typeof this.inp.value === 'string' ? 1 : this.inp.value.length;
|
|
115
|
+
return this.inp.l('FileSelected', [l, t]);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
FormFileComponent.decorators = [
|
|
119
|
+
{ type: Component, args: [{
|
|
120
|
+
selector: 'lib-form-file',
|
|
121
|
+
template: "<label #inputDiv [id]=\"inp.name + 'Input'\" [for]=\"inp.name + 'InputFile'\" [className]=\"inp.class + (inp.error == null ? '' : ' error') + (inp.value != null && inp.value != '' ? ' has-value' : '') + ' form-input-con file'\">\r\n <div class=\"form-input\" (click)=\"onClick()\">\r\n <div *ngIf=\"inp.displayLabel\" class=\"label\"><i *ngIf=\"inp.required\" class=\"fas fa-star-of-life required-icon\"></i>{{inp.getLabel()}}</div>\r\n <input #inputBaseFile class=\"input-base-file\" type=\"file\" [id]=\"inp.name + 'InputFile'\" [multiple]=\"inp.multiple\" (change)=\"onChange($event)\">\r\n <input #inputBase type=\"text\" class=\"input-base\" (keydown)=\"onKeyDown($event)\" (focusin)=\"onFocusIn()\">\r\n <div class=\"control\">\r\n <div class=\"title\">{{title()}}</div>\r\n <div class=\"button\">{{inp.multiple ? inp.l(\"ChooseFiles\") : inp.l(\"ChooseFile\")}}</div>\r\n </div>\r\n <i *ngIf=\"inp.icon != null || inp.loading\" #inputIcon [className]=\"(inp.loading ? 'fad fa-spin fa-spinner' : inp.icon) + ' icon'\"></i>\r\n </div>\r\n</label>\r\n",
|
|
122
|
+
styles: [".form-input-con.file{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;padding:0 15px}.form-input-con.file,.form-input-con.file .form-input{float:right;position:relative;width:100%}.form-input-con.file .form-input .input-base,.form-input-con.file .form-input .input-base-file{cursor:pointer;height:0;opacity:0;position:absolute;right:50%;top:50%;width:0;z-index:1}.form-input-con.file .form-input .control{background-color:#fff;border:var(--border-input);border-radius:5px;float:left;font-size:11px;height:35px;line-height:35px;overflow:hidden;padding:0 135px 0 35px;position:relative;text-align:center;text-overflow:ellipsis;white-space:nowrap;width:100%;z-index:2}.form-input-con.file .form-input .control .title{float:right;width:100%}.form-input-con.file .form-input .control:hover,.form-input-con.file .form-input .input-base:focus+.control{border:var(--border-input-dark);outline:none}.form-input-con.file.error .form-input .control{border:var(--border-input-red)}.form-input-con.file.error .form-input .control,.form-input-con.file.error .form-input span.icon{color:var(--red)}.form-input-con.file .form-input .button:hover,.form-input-con.file .form-input .control:hover .button,.form-input-con.file .form-input .input-base:focus+.control .button{background-color:var(--green-dark)}.form-input-con.file .form-input i.icon{bottom:0;color:var(--icon);font-size:13px;height:35px;left:0;line-height:35px;position:absolute;text-align:center;width:35px;z-index:2}.form-input-con.file .form-input .label{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:default;direction:rtl;float:right;font-size:12px;height:20px;line-height:20px;margin-bottom:3px;padding:0 10px;text-align:right;width:100%}.form-input-con.file .form-input .label .required-icon{color:var(--red);font-size:9px;height:20px;line-height:20px;text-align:center;width:20px}.form-input-con.file .form-input .button{background-color:var(--green);border-radius:0 5px 5px 0;bottom:0;color:#fff;font-size:10px;height:35px;line-height:35px;position:absolute;right:0;text-align:center;width:100px;z-index:2}.form-input-con.file.h-35{height:35px}.form-input-con.file.has-value.h-35 .form-input .control{direction:ltr;font-size:9px;height:35px}.form-input-con.file.h-35 .form-input .button,.form-input-con.file.h-35 .form-input i.icon{height:35px;line-height:35px}.form-input-con.file.h-30{height:30px}.form-input-con.file.h-30 .form-input .control{direction:ltr;font-size:9px;height:30px;line-height:30px}.form-input-con.file.h-30 .form-input .button,.form-input-con.file.h-30 .form-input i.icon{height:30px;line-height:30px}"]
|
|
123
|
+
},] }
|
|
124
|
+
];
|
|
125
|
+
FormFileComponent.ctorParameters = () => [];
|
|
126
|
+
FormFileComponent.propDecorators = {
|
|
127
|
+
inp: [{ type: Input }],
|
|
128
|
+
changeIndex: [{ type: Output }],
|
|
129
|
+
inputDiv: [{ type: ViewChild, args: ['inputDiv',] }],
|
|
130
|
+
inputBaseFile: [{ type: ViewChild, args: ['inputBaseFile',] }],
|
|
131
|
+
inputBase: [{ type: ViewChild, args: ['inputBase',] }]
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Qcm9qZWN0cy9Qc1Rvb2xraXQvVUkvcHJvamVjdHMvcHMtdG9vbGtpdC11aS9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9mb3JtL2ZpbGUvZm9ybS5maWxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBZ0IsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBT3ZELE1BQU0sT0FBTyxpQkFBaUI7SUFRNUI7UUFKQSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFLekMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO2dCQUN6QyxP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RSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0csTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7O1lBM0hGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIseWtDQUF5Qzs7YUFFMUM7Ozs7a0JBRUUsS0FBSzswQkFFTCxNQUFNO3VCQUVOLFNBQVMsU0FBQyxVQUFVOzRCQUNwQixTQUFTLFNBQUMsZUFBZTt3QkFDekIsU0FBUyxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQge0lucHV0Q2xhc3N9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS5jbGFzcyc7XHJcbmltcG9ydCB7SW5wdXRFcnJvcn0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9lbnVtLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZvcm0tZmlsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uZmlsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5maWxlLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XHJcbiAgQElucHV0KClcclxuICBpbnA6IElucHV0Q2xhc3M7XHJcbiAgQE91dHB1dCgpXHJcbiAgY2hhbmdlSW5kZXggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAVmlld0NoaWxkKCdpbnB1dERpdicpIGlucHV0RGl2OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZUZpbGUnKSBpbnB1dEJhc2VGaWxlOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZScpIGlucHV0QmFzZTogRWxlbWVudFJlZjtcclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucC5zZXRWYWx1ZSA9ICh2KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5wLnZhbHVlID0gdjtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5pc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLmlucC5yZXF1aXJlZCAmJiAhdGhpcy5pbnAudmFsdWUpIHtcclxuICAgICAgICB0aGlzLmlucC5lcnJvciA9IElucHV0RXJyb3IuUmVxdWlyZWQ7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5pbnAucmVxdWlyZWQgJiYgIXRoaXMuaW5wLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5wLmFsbG93ZWQgIT0gbnVsbCAmJiB0aGlzLmlucC52YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmlucC52YWx1ZSAhPT0gJ3N0cmluZycgJiZcclxuICAgICAgICB0aGlzLmlucC52YWx1ZS5tYXAoeCA9PiB0aGlzLmlucC5hbGxvd2VkLmluY2x1ZGVzKHgubmFtZS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkpKS5maWx0ZXIoeCA9PiAheCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuaW5wLmVycm9yID0gSW5wdXRFcnJvci5Ob3RBbGxvd2VkO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbnAubWF4TGVuZ3RoICE9PSAtMSAmJiB0aGlzLmlucC52YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLmlucC52YWx1ZSAhPT0gJ3N0cmluZycgJiZcclxuICAgICAgICB0aGlzLmlucC52YWx1ZS5tYXAoeCA9PiB4LnNpemUgPiB0aGlzLmlucC5tYXhMZW5ndGggKiAxMDI0KS5maWx0ZXIoeCA9PiB4KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5pbnAuZXJyb3IgPSBJbnB1dEVycm9yLk1heENvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmNsZWFyID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5wLnZhbHVlID0gdGhpcy5pbnAuZGVmYXVsdDtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5kYXRhID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pbnAudmFsdWUgJiYgdHlwZW9mIHRoaXMuaW5wLnZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnAuZXhwb3J0UGRmKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnAudmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNvbnN0IGRvYyA9IG5ldyBqc1BERigpO1xyXG4gICAgICAgICAgLy8gbGV0IHkgPSA1O1xyXG4gICAgICAgICAgLy8gZm9yIChjb25zdCBpbWcgb2YgdGhpcy5pbnAudmFsdWUpIHtcclxuICAgICAgICAgIC8vICAgY29uc3QgaSA9IGF3YWl0IHRoaXMuZ2V0UGRmSW1hZ2UoaW1nKTtcclxuICAgICAgICAgIC8vICAgaWYgKHkgKyBpLmggPiAyODcpIHtcclxuICAgICAgICAgIC8vICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICAgICAgLy8gICAgIHkgPSA1O1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIGRvYy5hZGRJbWFnZShpLmJhc2U2NCwgJ0pQRUcnLCA1LCB5LCBpLncsIGkuaCk7XHJcbiAgICAgICAgICAvLyAgIHkgKz0gaS5oICsgNTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIHJldHVybiBkb2Mub3V0cHV0KCdibG9iJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmZvY3VzID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2xpY2soKTtcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldFBkZkltYWdlKGZpbGUpOiBhbnl7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBpID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaS5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgICAgICBpLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGxldCB3ID0gaS53aWR0aDtcclxuICAgICAgICAgIGxldCBoID0gaS5oZWlnaHQ7XHJcbiAgICAgICAgICBpZiAodyA+IDIwMCl7XHJcbiAgICAgICAgICAgIGggPSAoMjAwICogaCkgLyB3O1xyXG4gICAgICAgICAgICB3ID0gMjAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGggPiAyODcpe1xyXG4gICAgICAgICAgICB3ID0gKDI4NyAqIHcpIC8gaDtcclxuICAgICAgICAgICAgaCA9IDI4NztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUoe2Jhc2U2NDogcmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCB3LCBofSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG9uQ2xpY2soKTogdm9pZHtcclxuICAgICQodGhpcy5pbnB1dEJhc2UubmF0aXZlRWxlbWVudCkuZm9jdXMoKTtcclxuICB9XHJcbiAgb25DaGFuZ2UoZSk6IHZvaWR7XHJcbiAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICBjb25zdCB2ID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGYgb2YgZS50YXJnZXQuZmlsZXMpe1xyXG4gICAgICB2LnB1c2goZik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucC52YWx1ZSA9IHY7XHJcbiAgICB0aGlzLmNoYW5nZUluZGV4LmVtaXQoJ1RhYicpO1xyXG4gIH1cclxuICBvbktleURvd24oZSk6IHZvaWR7XHJcbiAgICBjb25zdCBjb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XHJcbiAgICBpZiAoY29kZSA9PT0gOSB8fCBjb2RlID09PSAxMykge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlSW5kZXguZW1pdChlLnNoaWZ0S2V5ID8gJ1NoaWZ0VGFiJyA6ICdUYWInKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25Gb2N1c0luKCk6IHZvaWR7XHJcbiAgICAkKHRoaXMuaW5wdXRCYXNlLm5hdGl2ZUVsZW1lbnQpLmZvY3VzKCk7XHJcbiAgfVxyXG4gIHRpdGxlKCk6IHN0cmluZ3tcclxuICAgIGlmICh0aGlzLmlucC52YWx1ZSA9PSBudWxsKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5wLmwoJ0ZpbGVOb3RTZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdCA9IHR5cGVvZiB0aGlzLmlucC52YWx1ZSA9PT0gJ3N0cmluZycgPyB0aGlzLmlucC52YWx1ZSA6IHRoaXMuaW5wLnZhbHVlLm1hcCh4ID0+IHgubmFtZSkuam9pbignLCAnKTtcclxuICAgIGNvbnN0IGwgPSB0eXBlb2YgdGhpcy5pbnAudmFsdWUgPT09ICdzdHJpbmcnID8gMSA6IHRoaXMuaW5wLnZhbHVlLmxlbmd0aDtcclxuICAgIHJldHVybiB0aGlzLmlucC5sKCdGaWxlU2VsZWN0ZWQnLCBbbCwgdF0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { InputError } from '../../../classes/enum.class';
|
|
3
|
+
import { HelperClass } from '../../../classes/helper.class';
|
|
4
|
+
export class FormFingerComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.changeIndex = new EventEmitter();
|
|
7
|
+
this.wsRegister = null;
|
|
8
|
+
}
|
|
9
|
+
ngOnInit() {
|
|
10
|
+
this.inp.setValue = (v) => {
|
|
11
|
+
this.inp.value = v != null ? v : {
|
|
12
|
+
R1: null,
|
|
13
|
+
R2: null,
|
|
14
|
+
R3: null,
|
|
15
|
+
R4: null,
|
|
16
|
+
R5: null,
|
|
17
|
+
L1: null,
|
|
18
|
+
L2: null,
|
|
19
|
+
L3: null,
|
|
20
|
+
L4: null,
|
|
21
|
+
L5: null,
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
this.inp.focus = () => {
|
|
25
|
+
this.onFocusIn();
|
|
26
|
+
};
|
|
27
|
+
this.inp.isValid = () => {
|
|
28
|
+
this.inp.error = null;
|
|
29
|
+
if (this.inp.required && !this.inp.value) {
|
|
30
|
+
this.inp.error = InputError.Required;
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (!this.inp.required && !this.inp.value) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
};
|
|
38
|
+
this.inp.clear = () => {
|
|
39
|
+
this.inp.error = null;
|
|
40
|
+
this.inp.setValue(null, false);
|
|
41
|
+
};
|
|
42
|
+
this.inp.data = () => {
|
|
43
|
+
if (this.inp.value === null) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const d = new FormData();
|
|
47
|
+
for (const [key, value] of Object.entries(this.inp.value)) {
|
|
48
|
+
if (value != null && value !== 'Loading') {
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
d.append(key, value.Hash.toString());
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
d.append(key + 'Image', value.Image.toString());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return d;
|
|
56
|
+
};
|
|
57
|
+
this.inp.setValue(null, false);
|
|
58
|
+
}
|
|
59
|
+
onClick() {
|
|
60
|
+
this.onFocusIn();
|
|
61
|
+
}
|
|
62
|
+
onFocusIn() {
|
|
63
|
+
this.inputBase.nativeElement.focus();
|
|
64
|
+
}
|
|
65
|
+
onKeyDown(e) {
|
|
66
|
+
const code = e.keyCode || e.which;
|
|
67
|
+
if (code === 9 || code === 13) {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
this.changeIndex.emit(e.shiftKey ? 'ShiftTab' : 'Tab');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
addRemoveFinger(f) {
|
|
73
|
+
const fv = this.inp.value[f];
|
|
74
|
+
if (fv === 'Loading') {
|
|
75
|
+
if (this.wsRegister != null) {
|
|
76
|
+
this.wsRegister.close();
|
|
77
|
+
this.wsRegister = null;
|
|
78
|
+
}
|
|
79
|
+
this.inp.value[f] = null;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.inp.value.R1 = this.inp.value.R1 === 'Loading' ? null : this.inp.value.R1;
|
|
83
|
+
this.inp.value.R2 = this.inp.value.R2 === 'Loading' ? null : this.inp.value.R2;
|
|
84
|
+
this.inp.value.R3 = this.inp.value.R3 === 'Loading' ? null : this.inp.value.R3;
|
|
85
|
+
this.inp.value.R4 = this.inp.value.R4 === 'Loading' ? null : this.inp.value.R4;
|
|
86
|
+
this.inp.value.R5 = this.inp.value.R5 === 'Loading' ? null : this.inp.value.R5;
|
|
87
|
+
this.inp.value.L1 = this.inp.value.L1 === 'Loading' ? null : this.inp.value.L1;
|
|
88
|
+
this.inp.value.L2 = this.inp.value.L2 === 'Loading' ? null : this.inp.value.L2;
|
|
89
|
+
this.inp.value.L3 = this.inp.value.L3 === 'Loading' ? null : this.inp.value.L3;
|
|
90
|
+
this.inp.value.L4 = this.inp.value.L4 === 'Loading' ? null : this.inp.value.L4;
|
|
91
|
+
this.inp.value.L5 = this.inp.value.L5 === 'Loading' ? null : this.inp.value.L5;
|
|
92
|
+
if (fv != null) {
|
|
93
|
+
this.inp.value[f] = null;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.wsRegister = new WebSocket('ws://localhost:7890/Register');
|
|
97
|
+
this.wsRegister.onopen = () => {
|
|
98
|
+
this.inp.value[f] = 'Loading';
|
|
99
|
+
};
|
|
100
|
+
this.wsRegister.onmessage = (evt) => {
|
|
101
|
+
console.log(evt.data);
|
|
102
|
+
if (evt.data === 'Exist') {
|
|
103
|
+
this.inp.value[f] = null;
|
|
104
|
+
HelperClass.addNotification(this.inp.l('FingerprintExist'));
|
|
105
|
+
}
|
|
106
|
+
else if (evt.data.startsWith('Error')) {
|
|
107
|
+
this.inp.value[f] = null;
|
|
108
|
+
HelperClass.addNotification(evt.data);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.inp.value[f] = JSON.parse(evt.data);
|
|
112
|
+
}
|
|
113
|
+
this.wsRegister.close();
|
|
114
|
+
this.wsRegister = null;
|
|
115
|
+
};
|
|
116
|
+
this.wsRegister.onclose = () => {
|
|
117
|
+
};
|
|
118
|
+
this.wsRegister.onerror = () => {
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
FormFingerComponent.decorators = [
|
|
125
|
+
{ type: Component, args: [{
|
|
126
|
+
selector: 'lib-form-finger',
|
|
127
|
+
template: "<div #inputDiv [id]=\"inp.name + 'Input'\" [className]=\"inp.class + ' form-input finger' + (inp.error == null ? '' : ' error') + (inp.disabled ? ' disabled' : '')\">\r\n <div class=\"form-input-flex\">\r\n <div class=\"form-input-con\" (click)=\"onClick()\">\r\n <div *ngIf=\"inp.displayLabel\" class=\"label\"><i *ngIf=\"inp.required\" class=\"fas fa-star-of-life required-icon\"></i>{{inp.getLabel()}}</div>\r\n <input #inputBase type=\"checkbox\" class=\"input-base\" (keydown)=\"onKeyDown($event)\" (focusin)=\"onFocusIn()\">\r\n <div class=\"control\">\r\n <i *ngIf=\"inp.icon != null || inp.loading\" #inputIcon [className]=\"(inp.loading ? 'fa-spin fa-spinner ' : inp.icon) + (inp.icon.includes('far') ? '' : ' fas') + ' icon'\"></i>\r\n <div class=\"fingers\">\r\n <div class=\"hand-con right\">\r\n <i class=\"fas fa-hand-paper hand fa-flip-horizontal\"></i>\r\n <div (click)=\"addRemoveFinger('R1')\" [className]=\"(inp.value.R1 == 'Loading' ? 'loading ' : (inp.value.R1 == null ? '' : 'remove ')) + 'btn-f f1'\">\r\n <i [className]=\"(inp.value.R1 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.R1 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.R1 && inp.value.R1.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.R1.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('R2')\" [className]=\"(inp.value.R2 == 'Loading' ? 'loading ' : (inp.value.R2 == null ? '' : 'remove ')) + 'btn-f f2'\">\r\n <i [className]=\"(inp.value.R2 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.R2 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.R2 && inp.value.R2.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.R2.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('R3')\" [className]=\"(inp.value.R3 == 'Loading' ? 'loading ' : (inp.value.R3 == null ? '' : 'remove ')) + 'btn-f f3'\">\r\n <i [className]=\"(inp.value.R3 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.R3 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.R3 && inp.value.R3.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.R3.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('R4')\" [className]=\"(inp.value.R4 == 'Loading' ? 'loading ' : (inp.value.R4 == null ? '' : 'remove ')) + 'btn-f f4'\">\r\n <i [className]=\"(inp.value.R4 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.R4 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.R4 && inp.value.R4.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.R4.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('R5')\" [className]=\"(inp.value.R5 == 'Loading' ? 'loading ' : (inp.value.R5 == null ? '' : 'remove ')) + 'btn-f f5'\">\r\n <i [className]=\"(inp.value.R5 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.R5 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.R5 && inp.value.R5.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.R5.Image + '\\')'}\"></div>\r\n </div>\r\n </div>\r\n <div class=\"hand-con left\">\r\n <i class=\"fas hand fa-hand-paper\"></i>\r\n <div (click)=\"addRemoveFinger('L1')\" [className]=\"(inp.value.L1 == 'Loading' ? 'loading ' : (inp.value.L1 == null ? '' : 'remove ')) + 'btn-f f1'\">\r\n <i [className]=\"(inp.value.L1 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.L1 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.L1 && inp.value.L1.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.L1.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('L2')\" [className]=\"(inp.value.L2 == 'Loading' ? 'loading ' : (inp.value.L2 == null ? '' : 'remove ')) + 'btn-f f2'\">\r\n <i [className]=\"(inp.value.L2 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.L2 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.L2 && inp.value.L2.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.L2.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('L3')\" [className]=\"(inp.value.L3 == 'Loading' ? 'loading ' : (inp.value.L3 == null ? '' : 'remove ')) + 'btn-f f3'\">\r\n <i [className]=\"(inp.value.L3 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.L3 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.L3 && inp.value.L3.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.L3.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('L4')\" [className]=\"(inp.value.L4 == 'Loading' ? 'loading ' : (inp.value.L4 == null ? '' : 'remove ')) + 'btn-f f4'\">\r\n <i [className]=\"(inp.value.L4 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.L4 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.L4 && inp.value.L4.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.L4.Image + '\\')'}\"></div>\r\n </div>\r\n <div (click)=\"addRemoveFinger('L5')\" [className]=\"(inp.value.L5 == 'Loading' ? 'loading ' : (inp.value.L5 == null ? '' : 'remove ')) + 'btn-f f5'\">\r\n <i [className]=\"(inp.value.L5 == 'Loading' ? 'fa-spin fa-spinner ' : (inp.value.L5 == null ? 'fa-plus ' : 'fa-minus ')) + 'fas'\"></i>\r\n <div class=\"img\" *ngIf=\"inp.value.L5 && inp.value.L5.Image\" [style]=\"{backgroundImage: 'url(\\'data:image/png;base64,' + inp.value.L5.Image + '\\')'}\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
128
|
+
styles: [".form-input.finger{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;float:right;padding:0 8px;position:relative;width:100%}.form-input.finger .form-input-flex{align-items:center;display:flex;float:right;justify-content:center;width:100%}.form-input.finger .form-input-flex .form-input-con{float:right;width:250px}.form-input.finger .form-input-flex .form-input-con .label{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:default;direction:rtl;float:right;font-size:12px;height:20px;line-height:20px;margin-bottom:3px;padding:0 10px;text-align:right;width:100%}.form-input.finger .form-input-flex .form-input-con.error .label{color:var(--red);font-size:10px}.form-input.finger .form-input-flex .form-input-con .label .required-icon{color:var(--red);font-size:9px;height:20px;line-height:20px;text-align:center;width:20px}.form-input.finger .form-input-flex .form-input-con>.control{background-color:#fff;border-radius:5px;box-shadow:0 1px 3px 0 rgba(0,0,0,.4);float:right;min-height:35px;position:relative;width:100%}.form-input.finger .form-input-flex .form-input-con .input-base{cursor:pointer;height:0;opacity:0;position:absolute;right:50%;top:50%;width:0;z-index:1}.form-input.finger .form-input-flex .form-input-con .input-base:focus+.control,.form-input.finger .form-input-flex .form-input-con:hover .control{box-shadow:0 1px 5px 0 rgba(0,0,0,.7)}.form-input.finger .form-input-flex .form-input-con i.icon{color:var(--yellow);cursor:default;font-size:14px;height:35px;left:0;line-height:35px;position:absolute;text-align:center;top:0;transition:all .35s ease-in-out;width:35px;z-index:1}.form-input.finger .form-input-flex .form-input-con.error>.control{box-shadow:0 1px 3px 0 var(--red)}.form-input.finger .form-input-flex .form-input-con.error i.icon{color:var(--red-cc)}.form-input.finger .form-input-flex .form-input-con>.control .fingers{float:right;position:relative;width:100%}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con{float:right;position:relative;width:50%}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .hand{float:right;font-size:100px;height:160px;line-height:160px;padding-right:10px;position:relative;text-align:right;width:100%}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f{align-items:center;background-color:var(--green);border-radius:50%;color:#fff;cursor:pointer;display:flex;font-size:12px;height:17px;justify-content:center;position:absolute;text-align:center;width:17px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f:hover{background-color:var(--green-dark)}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f.remove{background-color:var(--red)}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f.remove:hover{background-color:var(--red-dark)}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f.loading,.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f.loading:hover{background-color:var(--yellow)}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.right .btn-f.f1{right:26px;top:79px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.right .btn-f.f2{right:47px;top:37px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.right .btn-f.f3{right:64px;top:29px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.right .btn-f.f4{right:82px;top:37px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.right .btn-f.f5{right:99px;top:54px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.left .btn-f.f1{left:26px;top:79px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.left .btn-f.f2{left:47px;top:37px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.left .btn-f.f3{left:64px;top:29px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.left .btn-f.f4{left:82px;top:37px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con.left .btn-f.f5{left:99px;top:54px}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f .img{background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:5px;bottom:20px;box-shadow:var(--box-shadow);display:none;height:100px;position:absolute;right:-29px;width:75px;z-index:1}.form-input.finger .form-input-flex .form-input-con>.control .fingers .hand-con .btn-f.remove:hover .img{display:block}"]
|
|
129
|
+
},] }
|
|
130
|
+
];
|
|
131
|
+
FormFingerComponent.propDecorators = {
|
|
132
|
+
inp: [{ type: Input }],
|
|
133
|
+
changeIndex: [{ type: Output }],
|
|
134
|
+
inputBase: [{ type: ViewChild, args: ['inputBase',] }],
|
|
135
|
+
inputDiv: [{ type: ViewChild, args: ['inputDiv',] }],
|
|
136
|
+
inputLabel: [{ type: ViewChild, args: ['inputLabel',] }]
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5maW5nZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1Byb2plY3RzL1BzVG9vbGtpdC9VSS9wcm9qZWN0cy9wcy10b29sa2l0LXVpL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2Zvcm0vZmluZ2VyL2Zvcm0uZmluZ2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTzFELE1BQU0sT0FBTyxtQkFBbUI7SUFMaEM7UUFTRSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFJekMsZUFBVSxHQUFHLElBQUksQ0FBQztJQWdIcEIsQ0FBQztJQS9HQyxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsSUFBSTthQUNULENBQUM7UUFDSixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFH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SUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDeEI7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDMUI7YUFBSTtZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUM7Z0JBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO29CQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBQzt3QkFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUN6QixXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztxQkFDN0Q7eUJBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQzt3QkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUN6QixXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDdkM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzFDO29CQUNELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixDQUFDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUMvQixDQUFDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUMvQixDQUFDLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQzs7O1lBNUhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQix3dU1BQTJDOzthQUU1Qzs7O2tCQUVFLEtBQUs7MEJBRUwsTUFBTTt3QkFFTixTQUFTLFNBQUMsV0FBVzt1QkFDckIsU0FBUyxTQUFDLFVBQVU7eUJBQ3BCLFNBQVMsU0FBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0lucHV0Q2xhc3N9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS5jbGFzcyc7XHJcbmltcG9ydCB7SW5wdXRFcnJvcn0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9lbnVtLmNsYXNzJztcclxuaW1wb3J0IHtIZWxwZXJDbGFzc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9oZWxwZXIuY2xhc3MnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS1maW5nZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmZpbmdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5maW5nZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRmluZ2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKVxyXG4gIGlucDogSW5wdXRDbGFzcztcclxuICBAT3V0cHV0KClcclxuICBjaGFuZ2VJbmRleCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZScpIGlucHV0QmFzZTogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dERpdicpIGlucHV0RGl2OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0TGFiZWwnKSBpbnB1dExhYmVsOiBFbGVtZW50UmVmO1xyXG4gIHdzUmVnaXN0ZXIgPSBudWxsO1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnAuc2V0VmFsdWUgPSAodikgPT4ge1xyXG4gICAgICB0aGlzLmlucC52YWx1ZSA9IHYgIT0gbnVsbCA/IHYgOiB7XHJcbiAgICAgICAgUjE6IG51bGwsXHJcbiAgICAgICAgUjI6IG51bGwsXHJcbiAgICAgICAgUjM6IG51bGwsXHJcbiAgICAgICAgUjQ6IG51bGwsXHJcbiAgICAgICAgUjU6IG51bGwsXHJcbiAgICAgICAgTDE6IG51bGwsXHJcbiAgICAgICAgTDI6IG51bGwsXHJcbiAgICAgICAgTDM6IG51bGwsXHJcbiAgICAgICAgTDQ6IG51bGwsXHJcbiAgICAgICAgTDU6IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnAuZm9jdXMgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMub25Gb2N1c0luKCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnAuaXNWYWxpZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5pbnAuZXJyb3IgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5pbnAucmVxdWlyZWQgJiYgIXRoaXMuaW5wLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pbnAuZXJyb3IgPSBJbnB1dEVycm9yLlJlcXVpcmVkO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaW5wLnJlcXVpcmVkICYmICF0aGlzLmlucC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmNsZWFyID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5wLnNldFZhbHVlKG51bGwsIGZhbHNlKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5kYXRhID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pbnAudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5wLnZhbHVlKSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnTG9hZGluZycpe1xyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgZC5hcHBlbmQoa2V5LCB2YWx1ZS5IYXNoLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgZC5hcHBlbmQoa2V5ICsgJ0ltYWdlJywgdmFsdWUuSW1hZ2UudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLnNldFZhbHVlKG51bGwsIGZhbHNlKTtcclxuICB9XHJcbiAgb25DbGljaygpOiB2b2lke1xyXG4gICAgdGhpcy5vbkZvY3VzSW4oKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXNJbigpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXRCYXNlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcbiAgb25LZXlEb3duKGUpOiB2b2lke1xyXG4gICAgY29uc3QgY29kZSA9IGUua2V5Q29kZSB8fCBlLndoaWNoO1xyXG4gICAgaWYgKGNvZGUgPT09IDkgfHwgY29kZSA9PT0gMTMpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLmNoYW5nZUluZGV4LmVtaXQoZS5zaGlmdEtleSA/ICdTaGlmdFRhYicgOiAnVGFiJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFJlbW92ZUZpbmdlcihmOiBzdHJpbmcpOiB2b2lke1xyXG4gICAgY29uc3QgZnYgPSB0aGlzLmlucC52YWx1ZVtmXTtcclxuICAgIGlmIChmdiA9PT0gJ0xvYWRpbmcnKSB7XHJcbiAgICAgIGlmICh0aGlzLndzUmVnaXN0ZXIgIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy53c1JlZ2lzdGVyLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy53c1JlZ2lzdGVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucC52YWx1ZVtmXSA9IG51bGw7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5pbnAudmFsdWUuUjEgPSB0aGlzLmlucC52YWx1ZS5SMSA9PT0gJ0xvYWRpbmcnID8gbnVsbCA6IHRoaXMuaW5wLnZhbHVlLlIxO1xyXG4gICAgICB0aGlzLmlucC52YWx1ZS5SMiA9IHRoaXMuaW5wLnZhbHVlLlIyID09PSAnTG9hZGluZycgPyBudWxsIDogdGhpcy5pbnAudmFsdWUuUjI7XHJcbiAgICAgIHRoaXMuaW5wLnZhbHVlLlIzID0gdGhpcy5pbnAudmFsdWUuUjMgPT09ICdMb2FkaW5nJyA/IG51bGwgOiB0aGlzLmlucC52YWx1ZS5SMztcclxuICAgICAgdGhpcy5pbnAudmFsdWUuUjQgPSB0aGlzLmlucC52YWx1ZS5SNCA9PT0gJ0xvYWRpbmcnID8gbnVsbCA6IHRoaXMuaW5wLnZhbHVlLlI0O1xyXG4gICAgICB0aGlzLmlucC52YWx1ZS5SNSA9IHRoaXMuaW5wLnZhbHVlLlI1ID09PSAnTG9hZGluZycgPyBudWxsIDogdGhpcy5pbnAudmFsdWUuUjU7XHJcbiAgICAgIHRoaXMuaW5wLnZhbHVlLkwxID0gdGhpcy5pbnAudmFsdWUuTDEgPT09ICdMb2FkaW5nJyA/IG51bGwgOiB0aGlzLmlucC52YWx1ZS5MMTtcclxuICAgICAgdGhpcy5pbnAudmFsdWUuTDIgPSB0aGlzLmlucC52YWx1ZS5MMiA9PT0gJ0xvYWRpbmcnID8gbnVsbCA6IHRoaXMuaW5wLnZhbHVlLkwyO1xyXG4gICAgICB0aGlzLmlucC52YWx1ZS5MMyA9IHRoaXMuaW5wLnZhbHVlLkwzID09PSAnTG9hZGluZycgPyBudWxsIDogdGhpcy5pbnAudmFsdWUuTDM7XHJcbiAgICAgIHRoaXMuaW5wLnZhbHVlLkw0ID0gdGhpcy5pbnAudmFsdWUuTDQgPT09ICdMb2FkaW5nJyA/IG51bGwgOiB0aGlzLmlucC52YWx1ZS5MNDtcclxuICAgICAgdGhpcy5pbnAudmFsdWUuTDUgPSB0aGlzLmlucC52YWx1ZS5MNSA9PT0gJ0xvYWRpbmcnID8gbnVsbCA6IHRoaXMuaW5wLnZhbHVlLkw1O1xyXG4gICAgICBpZiAoZnYgIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5pbnAudmFsdWVbZl0gPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMud3NSZWdpc3RlciA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vbG9jYWxob3N0Ojc4OTAvUmVnaXN0ZXInKTtcclxuICAgICAgICB0aGlzLndzUmVnaXN0ZXIub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbnAudmFsdWVbZl0gPSAnTG9hZGluZyc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLndzUmVnaXN0ZXIub25tZXNzYWdlID0gKGV2dCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXZ0LmRhdGEpO1xyXG4gICAgICAgICAgaWYgKGV2dC5kYXRhID09PSAnRXhpc3QnKXtcclxuICAgICAgICAgICAgdGhpcy5pbnAudmFsdWVbZl0gPSBudWxsO1xyXG4gICAgICAgICAgICBIZWxwZXJDbGFzcy5hZGROb3RpZmljYXRpb24odGhpcy5pbnAubCgnRmluZ2VycHJpbnRFeGlzdCcpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmRhdGEuc3RhcnRzV2l0aCgnRXJyb3InKSl7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wLnZhbHVlW2ZdID0gbnVsbDtcclxuICAgICAgICAgICAgSGVscGVyQ2xhc3MuYWRkTm90aWZpY2F0aW9uKGV2dC5kYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wLnZhbHVlW2ZdID0gSlNPTi5wYXJzZShldnQuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLndzUmVnaXN0ZXIuY2xvc2UoKTtcclxuICAgICAgICAgIHRoaXMud3NSZWdpc3RlciA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLndzUmVnaXN0ZXIub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMud3NSZWdpc3Rlci5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as $ from 'jquery';
|
|
3
|
+
export class FormIconComponent {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.changeIndex = new EventEmitter();
|
|
6
|
+
}
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
this.inp.setValue = (v) => {
|
|
9
|
+
};
|
|
10
|
+
this.inp.isValid = () => {
|
|
11
|
+
return true;
|
|
12
|
+
};
|
|
13
|
+
this.inp.focus = () => {
|
|
14
|
+
this.onFocusIn();
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
onFocusIn() {
|
|
18
|
+
$(this.inputBase.nativeElement).focus();
|
|
19
|
+
}
|
|
20
|
+
onClick(e) {
|
|
21
|
+
if (e.screenX && e.screenX !== 0 && e.screenY && e.screenY !== 0) {
|
|
22
|
+
this.mouseClick();
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.codeClick();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
mouseClick() {
|
|
29
|
+
this.onFocusIn();
|
|
30
|
+
if (this.inp.modal) {
|
|
31
|
+
if (this.inp.row) {
|
|
32
|
+
this.inp.modal.relatedId = this.inp.row.Id;
|
|
33
|
+
}
|
|
34
|
+
this.inp.modal.show();
|
|
35
|
+
if (this.inp.modal.form) {
|
|
36
|
+
this.inp.modal.form.onSuccessBase = () => {
|
|
37
|
+
this.inp.modal.hide();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (!this.inp.loading && this.inp.onClick != null) {
|
|
42
|
+
this.inp.onClick(this.inp);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
codeClick() {
|
|
46
|
+
this.onFocusIn();
|
|
47
|
+
}
|
|
48
|
+
onKeyDown(e) {
|
|
49
|
+
const code = e.keyCode || e.which;
|
|
50
|
+
if (code === 9) {
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
this.changeIndex.emit(e.shiftKey ? 'ShiftTab' : 'Tab');
|
|
53
|
+
}
|
|
54
|
+
if (code === 13) {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
if (!this.inp.loading && this.inp.onClick != null) {
|
|
57
|
+
this.inp.onClick(this.inp);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
FormIconComponent.decorators = [
|
|
63
|
+
{ type: Component, args: [{
|
|
64
|
+
selector: 'lib-form-icon',
|
|
65
|
+
template: "<div *ngIf=\"inp.url == null\" #inputDiv [id]=\"inp.name + 'Input'\" (click)=\"onClick($event)\" [className]=\"inp.class + ' form-input icon'\" [style]=\"inp.style\">\r\n <lib-tooltip [text]=\"inp.l(inp.name)\"></lib-tooltip>\r\n <input #inputBase type=\"button\" class=\"input-base\" (keydown)=\"onKeyDown($event)\" (focusin)=\"onFocusIn()\">\r\n <div class=\"icon-con\">\r\n <i *ngIf=\"inp.icon != null\" #inputIcon [className]=\"(inp.loading ? 'fad fa-spin fa-spinner' : inp.icon) + ' icon'\"></i>\r\n </div>\r\n</div>\r\n<a *ngIf=\"inp.url != null\" [target]=\"inp.urlNewTab ? '_blank' : ''\" [routerLink]=\"inp.url\" #inputDiv [id]=\"inp.name + 'Input'\" (click)=\"onClick($event)\" [className]=\"inp.class + ' form-input icon'\" [style]=\"inp.style\">\r\n <lib-tooltip [text]=\"inp.l(inp.name)\"></lib-tooltip>\r\n <input #inputBase type=\"button\" class=\"input-base\" (keydown)=\"onKeyDown($event)\" (focusin)=\"onFocusIn()\">\r\n <div class=\"icon-con\">\r\n <i *ngIf=\"inp.icon != null\" #inputIcon [className]=\"(inp.loading ? 'fad fa-spin fa-spinner' : inp.icon) + ' icon'\"></i>\r\n </div>\r\n</a>\r\n",
|
|
66
|
+
styles: [".form-input.icon{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;float:right;height:30px;position:relative;width:30px;z-index:1}.form-input.icon .input-base{height:0;opacity:0;position:absolute;right:50%;top:50%;width:0;z-index:0}.form-input.icon .icon-con{border-radius:5px;float:right;height:100%;position:absolute;right:0;top:0;width:100%}.form-input.icon .icon-con i.icon{color:var(--black-88);float:right;font-size:18px;height:30px;line-height:20px;padding:5px;text-align:center;width:30px}.form-input.icon .input-base:focus+.icon-con,.form-input.icon:hover .icon-con{background-color:var(--black-22)}.form-input.icon .input-base:focus+.icon-con .icon,.form-input.icon:hover .icon-con i.icon{color:var(--black-99)}.form-input.icon.red .input-base:focus+.icon-con,.form-input.icon.red:hover .icon-con{background-color:var(--red-22)}.form-input.icon.red .input-base:focus+.icon-con .icon,.form-input.icon.red:hover .icon-con i.icon{color:var(--red)}.form-input.icon.blue .input-base:focus+.icon-con,.form-input.icon.blue:hover .icon-con{background-color:var(--blue-22)}.form-input.icon.blue .input-base:focus+.icon-con .icon,.form-input.icon.blue:hover .icon-con i.icon{color:var(--blue)}.form-input.icon.green .input-base:focus+.icon-con,.form-input.icon.green:hover .icon-con{background-color:var(--green-22)}.form-input.icon.green .input-base:focus+.icon-con .icon,.form-input.icon.green:hover .icon-con i.icon{color:var(--green)}.form-input.icon.yellow .input-base:focus+.icon-con,.form-input.icon.yellow:hover .icon-con{background-color:var(--icon-22)}.form-input.icon.yellow .input-base:focus+.icon-con .icon,.form-input.icon.yellow:hover .icon-con i.icon{color:var(--icon)}.form-input.icon.h-20{height:20px;width:20px}.form-input.icon.h-20 .icon-con i.icon{font-size:16px;height:20px;line-height:18px;width:20px}.form-input.icon.h-25{height:25px;width:25px}.form-input.icon.h-25 .icon-con i.icon{font-size:15px;height:25px;line-height:15px;width:25px}"]
|
|
67
|
+
},] }
|
|
68
|
+
];
|
|
69
|
+
FormIconComponent.ctorParameters = () => [];
|
|
70
|
+
FormIconComponent.propDecorators = {
|
|
71
|
+
inp: [{ type: Input }],
|
|
72
|
+
changeIndex: [{ type: Output }],
|
|
73
|
+
inputDiv: [{ type: ViewChild, args: ['inputDiv',] }],
|
|
74
|
+
inputBase: [{ type: ViewChild, args: ['inputBase',] }]
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5pY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Qcm9qZWN0cy9Qc1Rvb2xraXQvVUkvcHJvamVjdHMvcHMtdG9vbGtpdC11aS9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9mb3JtL2ljb24vZm9ybS5pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBZ0IsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFRNUIsTUFBTSxPQUFPLGlCQUFpQjtJQU81QjtRQUhBLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUl6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDMUIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsU0FBUztRQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjthQUFJO1lBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQztZQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO2dCQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7YUFDNUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBQztnQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUM7YUFDSDtTQUNGO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksRUFBQztZQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBQ0QsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsU0FBUyxDQUFDLENBQUM7UUFDVCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEQ7UUFDRCxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDZixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksRUFBQztnQkFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDOzs7WUFuRUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixvbkNBQXlDOzthQUUxQzs7OztrQkFFRSxLQUFLOzBCQUVMLE1BQU07dUJBRU4sU0FBUyxTQUFDLFVBQVU7d0JBQ3BCLFNBQVMsU0FBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IHtJbnB1dENsYXNzfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0uY2xhc3MnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS1pY29uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5pY29uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmljb24uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtSWNvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBASW5wdXQoKVxyXG4gIGlucDogSW5wdXRDbGFzcztcclxuICBAT3V0cHV0KClcclxuICBjaGFuZ2VJbmRleCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RGl2JykgaW5wdXREaXY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRCYXNlJykgaW5wdXRCYXNlOiBFbGVtZW50UmVmO1xyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wLnNldFZhbHVlID0gKHYpID0+IHtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5pc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5mb2N1cyA9ICgpID0+IHtcclxuICAgICAgdGhpcy5vbkZvY3VzSW4oKTtcclxuICAgIH07XHJcbiAgfVxyXG4gIG9uRm9jdXNJbigpOiB2b2lke1xyXG4gICAgJCh0aGlzLmlucHV0QmFzZS5uYXRpdmVFbGVtZW50KS5mb2N1cygpO1xyXG4gIH1cclxuICBvbkNsaWNrKGUpOiB2b2lke1xyXG4gICAgaWYgKGUuc2NyZWVuWCAmJiBlLnNjcmVlblggIT09IDAgJiYgZS5zY3JlZW5ZICYmIGUuc2NyZWVuWSAhPT0gMCkge1xyXG4gICAgICB0aGlzLm1vdXNlQ2xpY2soKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmNvZGVDbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBtb3VzZUNsaWNrKCk6IHZvaWR7XHJcbiAgICB0aGlzLm9uRm9jdXNJbigpO1xyXG4gICAgaWYgKHRoaXMuaW5wLm1vZGFsKXtcclxuICAgICAgaWYgKHRoaXMuaW5wLnJvdyl7XHJcbiAgICAgICAgdGhpcy5pbnAubW9kYWwucmVsYXRlZElkID0gdGhpcy5pbnAucm93LklkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5wLm1vZGFsLnNob3coKTtcclxuICAgICAgaWYgKHRoaXMuaW5wLm1vZGFsLmZvcm0pe1xyXG4gICAgICAgIHRoaXMuaW5wLm1vZGFsLmZvcm0ub25TdWNjZXNzQmFzZSA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5wLm1vZGFsLmhpZGUoKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaW5wLmxvYWRpbmcgJiYgdGhpcy5pbnAub25DbGljayAhPSBudWxsKXtcclxuICAgICAgdGhpcy5pbnAub25DbGljayh0aGlzLmlucCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvZGVDbGljaygpOiB2b2lke1xyXG4gICAgdGhpcy5vbkZvY3VzSW4oKTtcclxuICB9XHJcbiAgb25LZXlEb3duKGUpOiB2b2lke1xyXG4gICAgY29uc3QgY29kZSA9IGUua2V5Q29kZSB8fCBlLndoaWNoO1xyXG4gICAgaWYgKGNvZGUgPT09IDkpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLmNoYW5nZUluZGV4LmVtaXQoZS5zaGlmdEtleSA/ICdTaGlmdFRhYicgOiAnVGFiJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29kZSA9PT0gMTMpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoIXRoaXMuaW5wLmxvYWRpbmcgJiYgdGhpcy5pbnAub25DbGljayAhPSBudWxsKXtcclxuICAgICAgICB0aGlzLmlucC5vbkNsaWNrKHRoaXMuaW5wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { InputType } from '../../../classes/enum.class';
|
|
3
|
+
export class FormComponent {
|
|
4
|
+
constructor() {
|
|
5
|
+
}
|
|
6
|
+
get type() { return InputType; }
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
}
|
|
9
|
+
changeIndex(index, action) {
|
|
10
|
+
const n = action === 'ShiftTab' || action === 'ShiftEnter' ? -1 : 1;
|
|
11
|
+
const lastInp = this.form.inputs.map(x => x.type !== InputType.Submit && x.type !== InputType.Button &&
|
|
12
|
+
x.type !== InputType.Label && x.type !== InputType.Hidden && !x.disabled && x.visible).lastIndexOf(true);
|
|
13
|
+
if (index === lastInp && action === 'Enter') {
|
|
14
|
+
const submit = this.form.inputs.findIndex(x => x.type === InputType.Submit);
|
|
15
|
+
if (submit !== -1) {
|
|
16
|
+
this.form.submit();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let next = index + n;
|
|
21
|
+
while (next >= 0 && next < this.form.inputs.length && (this.form.inputs[next].disabled || !this.form.inputs[next].visible
|
|
22
|
+
|| this.form.inputs[next].type === InputType.Label || this.form.inputs[next].type === InputType.Hidden)) {
|
|
23
|
+
next = next + n;
|
|
24
|
+
}
|
|
25
|
+
if (next >= 0 && next < this.form.inputs.length) {
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
this.form.inputs[next].focus(true);
|
|
28
|
+
}, 1);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
this.form.inputs[index].focusOut();
|
|
33
|
+
}, 1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
FormComponent.decorators = [
|
|
38
|
+
{ type: Component, args: [{
|
|
39
|
+
selector: 'lib-form',
|
|
40
|
+
template: "<form [style]=\"form.style\" *ngIf=\"form\" [id]=\"form.id + 'Form'\" [className]=\"'form' + (form.class ? ' ' + form.class : '')\">\r\n <div *ngIf=\"form.displayLabel\" [className]=\"(form.subName ? '' : 'underline ') + 'title'\">{{this.form.l(this.form.name)}}</div>\r\n <div *ngIf=\"form.displayLabel && form.subName\" class=\"sub-title underline\">{{this.form.l(this.form.subName)}}</div>\r\n <div *ngIf=\"form.loading\" class=\"loading\">\r\n <div class=\"text\" [innerHTML]=\"form.l('LoadingTable', 'Processing')\"></div>\r\n </div>\r\n <div *ngIf=\"!form.permission\" class=\"loading\">\r\n <div class=\"text\"><i class=\"fas fa-shield-alt icon\"></i>{{ form.l(\"PermissionDenied\") }}</div>\r\n </div>\r\n <div class=\"inputs\">\r\n <span *ngFor=\"let inp of form.inputs; let i = index\">\r\n <lib-form-textbox (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && (inp.type == type.Text || inp.type == type.Password || inp.type == type.Mobile || inp.type == type.Phone || inp.type == type.Email || inp.type == type.NationalCode || inp.type == type.Number || inp.type == type.Url || inp.type == type.PostalCode || inp.type == type.Price || inp.type == type.Sheba)\" [inp]=\"inp\"></lib-form-textbox>\r\n <lib-form-textarea (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.TextArea\" [inp]=\"inp\"></lib-form-textarea>\r\n <lib-form-checkbox (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.Check\" [inp]=\"inp\"></lib-form-checkbox>\r\n <lib-form-select [inForm]=\"true\" (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && (inp.type == type.Select || inp.type == type.SelectSearch || inp.type == type.SelectAutoComplete)\" [inp]=\"inp\"></lib-form-select>\r\n <lib-form-date [inForm]=\"true\" (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.Date\" [inp]=\"inp\"></lib-form-date>\r\n <lib-form-time [inForm]=\"true\" (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.Time\" [inp]=\"inp\"></lib-form-time>\r\n <lib-form-datetime [inForm]=\"true\" (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.DateTime\" [inp]=\"inp\"></lib-form-datetime>\r\n <lib-form-label *ngIf=\"inp.visible && inp.type == type.Label\" [inp]=\"inp\"></lib-form-label>\r\n <lib-form-file (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.File\" [inp]=\"inp\"></lib-form-file>\r\n <lib-form-button (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && (inp.type == type.Button || inp.type == type.Submit)\" [inp]=\"inp\"></lib-form-button>\r\n <lib-form-icon (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.Icon\" [inp]=\"inp\"></lib-form-icon>\r\n <lib-form-radio (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.Radio\" [inp]=\"inp\"></lib-form-radio>\r\n <lib-form-tree (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.Tree\" [inp]=\"inp\"></lib-form-tree>\r\n <lib-form-plaque (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && (inp.type == type.Plaque || inp.type == type.PlaqueM)\" [inp]=\"inp\"></lib-form-plaque>\r\n <lib-form-plaque-select (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && (inp.type == type.SelectAutoCompletePlaque || inp.type == type.SelectAutoCompletePlaqueM)\" [inp]=\"inp\"></lib-form-plaque-select>\r\n <lib-form-bank-card (changeIndex)=\"changeIndex(i, $event)\" *ngIf=\"inp.visible && inp.type == type.BankCard\" [inp]=\"inp\"></lib-form-bank-card>\r\n <lib-form-table *ngIf=\"inp.visible && inp.type == type.Table\" [inp]=\"inp\"></lib-form-table>\r\n </span>\r\n </div>\r\n</form>\r\n",
|
|
41
|
+
styles: [".form{border-radius:5px;float:right;padding:20px;position:relative;width:100%}.form>.title{font-family:VazirBold;font-size:16px;height:40px}.form>.sub-title,.form>.title{float:right;line-height:30px;margin-bottom:10px;position:relative;text-align:right;width:100%}.form>.sub-title{color:var(--black-88);font-family:VazirLight;font-size:12px;height:30px}.form .loading{background-color:#fff;border-radius:5px;height:100%;right:0;top:0;z-index:4}.form .loading,.form .loading .text{position:absolute;text-align:center;width:100%}.form .loading .text{font-family:VazirBold;height:35px;line-height:35px;top:calc(50% - 20px)}::ng-deep .form .loading .icon{font-size:20px!important;line-height:30px;margin-left:5px;position:relative;top:5px}.form-buttons,.form-error{float:right;width:100%}.form-error{color:var(--red-cc);font-size:11px;height:15px;line-height:8px;margin-top:10px;padding:0 10px;position:relative;text-align:center}.form-error .message{float:left;width:calc(100% - 40px)}.form-error .icon{float:right;height:20px;line-height:6px;right:0;top:0;width:40px}.form .inputs{margin:0 -15px}"]
|
|
42
|
+
},] }
|
|
43
|
+
];
|
|
44
|
+
FormComponent.ctorParameters = () => [];
|
|
45
|
+
FormComponent.propDecorators = {
|
|
46
|
+
form: [{ type: Input }]
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvamVjdHMvUHNUb29sa2l0L1VJL3Byb2plY3RzL3BzLXRvb2xraXQtdWkvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybS9pbmRleC9mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFPdEQsTUFBTSxPQUFPLGFBQWE7SUFJeEI7SUFDQSxDQUFDO0lBRkQsSUFBSSxJQUFJLEtBQXVCLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQztJQUdsRCxRQUFRO0lBQ1IsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUN2QixNQUFNLENBQUMsR0FBRyxNQUFNLEtBQUssVUFBVSxJQUFJLE1BQU0sS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQzdELENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0csSUFBSSxLQUFLLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7WUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUM7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25CLE9BQU87YUFDUjtTQUNGO1FBQ0QsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87ZUFDcEgsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBQztZQUN4RyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNqQjtRQUNELElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFDO1lBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQUk7WUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0gsQ0FBQzs7O1lBdkNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsdXhIQUFvQzs7YUFFckM7Ozs7bUJBRUUsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQ2xhc3N9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS5jbGFzcyc7XHJcbmltcG9ydCB7SW5wdXRUeXBlfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2VudW0uY2xhc3MnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0e1xyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybTogRm9ybUNsYXNzO1xyXG4gIGdldCB0eXBlKCk6IHR5cGVvZiBJbnB1dFR5cGUgeyByZXR1cm4gSW5wdXRUeXBlOyB9XHJcbiAgY29uc3RydWN0b3IoKXtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZHtcclxuICB9XHJcbiAgY2hhbmdlSW5kZXgoaW5kZXgsIGFjdGlvbik6IHZvaWR7XHJcbiAgICBjb25zdCBuID0gYWN0aW9uID09PSAnU2hpZnRUYWInIHx8IGFjdGlvbiA9PT0gJ1NoaWZ0RW50ZXInID8gLTEgOiAxO1xyXG4gICAgY29uc3QgbGFzdElucCA9IHRoaXMuZm9ybS5pbnB1dHMubWFwKFxyXG4gICAgICB4ID0+IHgudHlwZSAhPT0gSW5wdXRUeXBlLlN1Ym1pdCAmJiB4LnR5cGUgIT09IElucHV0VHlwZS5CdXR0b24gJiZcclxuICAgICAgICB4LnR5cGUgIT09IElucHV0VHlwZS5MYWJlbCAmJiB4LnR5cGUgIT09IElucHV0VHlwZS5IaWRkZW4gJiYgIXguZGlzYWJsZWQgJiYgeC52aXNpYmxlKS5sYXN0SW5kZXhPZih0cnVlKTtcclxuICAgIGlmIChpbmRleCA9PT0gbGFzdElucCAmJiBhY3Rpb24gPT09ICdFbnRlcicpIHtcclxuICAgICAgY29uc3Qgc3VibWl0ID0gdGhpcy5mb3JtLmlucHV0cy5maW5kSW5kZXgoeCA9PiB4LnR5cGUgPT09IElucHV0VHlwZS5TdWJtaXQpO1xyXG4gICAgICBpZiAoc3VibWl0ICE9PSAtMSl7XHJcbiAgICAgICAgdGhpcy5mb3JtLnN1Ym1pdCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG5leHQgPSBpbmRleCArIG47XHJcbiAgICB3aGlsZSAobmV4dCA+PSAwICYmIG5leHQgPCB0aGlzLmZvcm0uaW5wdXRzLmxlbmd0aCAmJiAodGhpcy5mb3JtLmlucHV0c1tuZXh0XS5kaXNhYmxlZCB8fCAhdGhpcy5mb3JtLmlucHV0c1tuZXh0XS52aXNpYmxlXHJcbiAgICAgIHx8IHRoaXMuZm9ybS5pbnB1dHNbbmV4dF0udHlwZSA9PT0gSW5wdXRUeXBlLkxhYmVsIHx8IHRoaXMuZm9ybS5pbnB1dHNbbmV4dF0udHlwZSA9PT0gSW5wdXRUeXBlLkhpZGRlbikpe1xyXG4gICAgICBuZXh0ID0gbmV4dCArIG47XHJcbiAgICB9XHJcbiAgICBpZiAobmV4dCA+PSAwICYmIG5leHQgPCB0aGlzLmZvcm0uaW5wdXRzLmxlbmd0aCl7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS5pbnB1dHNbbmV4dF0uZm9jdXModHJ1ZSk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS5pbnB1dHNbaW5kZXhdLmZvY3VzT3V0KCk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
export class FormLabelComponent {
|
|
3
|
+
constructor() {
|
|
4
|
+
}
|
|
5
|
+
ngOnInit() {
|
|
6
|
+
this.inp.setValue = (v) => {
|
|
7
|
+
};
|
|
8
|
+
this.inp.isValid = () => {
|
|
9
|
+
return true;
|
|
10
|
+
};
|
|
11
|
+
this.inp.clear = () => {
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
onClick() {
|
|
15
|
+
if (this.inp.onClick) {
|
|
16
|
+
this.inp.onClick(this.inp);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
FormLabelComponent.decorators = [
|
|
21
|
+
{ type: Component, args: [{
|
|
22
|
+
selector: 'lib-form-label',
|
|
23
|
+
template: "<div [id]=\"inp.name + 'Input'\" (click)=\"onClick()\" #inputDiv [className]=\"inp.class + ' form-input label'\" [innerHTML]=\"inp.l(inp.value)\">\r\n</div>\r\n",
|
|
24
|
+
styles: [".form-input.label{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:default;float:right;font-size:12px;line-height:30px;padding:0 15px;position:relative;text-align:center;width:100%}.form-input.label.underline{margin:20px 15px;width:calc(100% - 30px)}.form-input.label.form-group-title{margin:0 15px 10px;width:calc(100% - 30px)}.form-input.label.space{margin:10px 15px;width:calc(100% - 30px)}.form-input.label.h-58{height:58px;line-height:58px}.form-input.label.h-45{height:45px;line-height:45px}.form-input.label.h-30{height:30px;line-height:30px}.form-input.label.h-25{height:25px;line-height:25px}"]
|
|
25
|
+
},] }
|
|
26
|
+
];
|
|
27
|
+
FormLabelComponent.ctorParameters = () => [];
|
|
28
|
+
FormLabelComponent.propDecorators = {
|
|
29
|
+
inp: [{ type: Input }]
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5sYWJlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvamVjdHMvUHNUb29sa2l0L1VJL3Byb2plY3RzL3BzLXRvb2xraXQtdWkvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybS9sYWJlbC9mb3JtLmxhYmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQVF2RCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCO0lBQ0EsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzFCLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUN0QixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7O1lBeEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQiw0S0FBMEM7O2FBRTNDOzs7O2tCQUVFLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SW5wdXRDbGFzc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZvcm0tbGFiZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmxhYmVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmxhYmVsLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUxhYmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0e1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5wOiBJbnB1dENsYXNzO1xyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wLnNldFZhbHVlID0gKHYpID0+IHtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5pc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5jbGVhciA9ICgpID0+IHtcclxuICAgIH07XHJcbiAgfVxyXG4gIG9uQ2xpY2soKTogdm9pZHtcclxuICAgIGlmICh0aGlzLmlucC5vbkNsaWNrKXtcclxuICAgICAgdGhpcy5pbnAub25DbGljayh0aGlzLmlucCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|