ps-toolkit-ui 1.20.91 → 1.21.32
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/fesm2022/ps-toolkit-ui.mjs +9415 -0
- package/fesm2022/ps-toolkit-ui.mjs.map +1 -0
- package/package.json +16 -12
- package/types/ps-toolkit-ui.d.ts +1671 -0
- package/bundles/ps-toolkit-ui.umd.js +0 -10321
- package/bundles/ps-toolkit-ui.umd.js.map +0 -1
- package/bundles/ps-toolkit-ui.umd.min.js +0 -2
- package/bundles/ps-toolkit-ui.umd.min.js.map +0 -1
- package/esm2015/lib/classes/addModal.class.js +0 -36
- package/esm2015/lib/classes/chart.class.js +0 -165
- package/esm2015/lib/classes/currentDataClass.js +0 -17
- package/esm2015/lib/classes/enum.class.js +0 -253
- package/esm2015/lib/classes/excel.class.js +0 -56
- package/esm2015/lib/classes/form.class.js +0 -667
- package/esm2015/lib/classes/header.class.js +0 -16
- package/esm2015/lib/classes/helper.class.js +0 -650
- package/esm2015/lib/classes/lang.class.js +0 -35
- package/esm2015/lib/classes/login.class.js +0 -29
- package/esm2015/lib/classes/modal.class.js +0 -49
- package/esm2015/lib/classes/permission.class.js +0 -63
- package/esm2015/lib/classes/request.class.js +0 -155
- package/esm2015/lib/classes/safehtml.class.js +0 -17
- package/esm2015/lib/classes/safestyle.class.js +0 -17
- package/esm2015/lib/classes/sidebar.class.js +0 -16
- package/esm2015/lib/classes/steps.class.js +0 -45
- package/esm2015/lib/classes/string.class.js +0 -251
- package/esm2015/lib/classes/table.class.js +0 -593
- package/esm2015/lib/components/accordion/accordion.component.js +0 -45
- package/esm2015/lib/components/alert/alert.component.js +0 -39
- package/esm2015/lib/components/base.component.js +0 -54
- package/esm2015/lib/components/calendar/calendar.component.js +0 -98
- package/esm2015/lib/components/chart/chart.component.js +0 -17
- package/esm2015/lib/components/clock/clock.component.js +0 -33
- package/esm2015/lib/components/confirm/confirm.component.js +0 -50
- package/esm2015/lib/components/error/error.component.js +0 -26
- package/esm2015/lib/components/footer/footer.component.js +0 -23
- package/esm2015/lib/components/form/bank-card/form.bank-card.component.js +0 -200
- package/esm2015/lib/components/form/button/form.button.component.js +0 -68
- package/esm2015/lib/components/form/checkbox/form.checkbox.component.js +0 -67
- package/esm2015/lib/components/form/ckeditor/form.ckeditor.component.js +0 -90
- package/esm2015/lib/components/form/date/form.date.component.js +0 -314
- package/esm2015/lib/components/form/datetime/form.datetime.component.js +0 -106
- package/esm2015/lib/components/form/file/form.file.component.js +0 -124
- package/esm2015/lib/components/form/finger/form.finger.component.js +0 -140
- package/esm2015/lib/components/form/hidden/form.hidden.component.js +0 -31
- package/esm2015/lib/components/form/icon/form.icon.component.js +0 -84
- package/esm2015/lib/components/form/index/form.component.js +0 -51
- package/esm2015/lib/components/form/label/form.label.component.js +0 -32
- package/esm2015/lib/components/form/plaque/form.plaque.component.js +0 -258
- package/esm2015/lib/components/form/plaque/select/form.plaque.select.component.js +0 -468
- package/esm2015/lib/components/form/radio/form.radio.component.js +0 -82
- package/esm2015/lib/components/form/select/form.select.component.js +0 -452
- package/esm2015/lib/components/form/select/item/form.select.item.component.js +0 -27
- package/esm2015/lib/components/form/slide/form.slide.component.js +0 -84
- package/esm2015/lib/components/form/star/form.star.component.js +0 -66
- package/esm2015/lib/components/form/table/form.table.component.js +0 -96
- package/esm2015/lib/components/form/tag/form.tag.component.js +0 -100
- package/esm2015/lib/components/form/textarea/form.textarea.component.js +0 -83
- package/esm2015/lib/components/form/textbox/form.textbox.component.js +0 -227
- package/esm2015/lib/components/form/time/form.time.component.js +0 -149
- package/esm2015/lib/components/form/toggle/form.toggle.component.js +0 -72
- package/esm2015/lib/components/form/tree/form.tree.component.js +0 -157
- package/esm2015/lib/components/form/tree/item/form.tree.item.component.js +0 -50
- package/esm2015/lib/components/form/uploader/form.uploader.component.js +0 -159
- package/esm2015/lib/components/form/vehicle/form.vehicle.component.js +0 -104
- package/esm2015/lib/components/form/vehicle/search/form.vehicle.search.component.js +0 -237
- package/esm2015/lib/components/header/header.component.js +0 -28
- package/esm2015/lib/components/header/sub/sub.header.component.js +0 -14
- package/esm2015/lib/components/layout/layout.component.js +0 -18
- package/esm2015/lib/components/loading/loading.component.js +0 -22
- package/esm2015/lib/components/login/login.component.js +0 -159
- package/esm2015/lib/components/modal/modal.component.js +0 -25
- package/esm2015/lib/components/notfound/notfound.component.js +0 -29
- package/esm2015/lib/components/notification/notification.component.js +0 -14
- package/esm2015/lib/components/sidebar/item/sidebar.item.component.js +0 -55
- package/esm2015/lib/components/sidebar/sidebar.component.js +0 -98
- package/esm2015/lib/components/steps/steps.component.js +0 -88
- package/esm2015/lib/components/table/loading/table.loading.component.js +0 -17
- package/esm2015/lib/components/table/pagination/table.pagination.component.js +0 -84
- package/esm2015/lib/components/table/row/table.row.component.js +0 -450
- package/esm2015/lib/components/table/table.component.js +0 -240
- package/esm2015/lib/components/tooltip/tooltip.component.js +0 -19
- package/esm2015/lib/ps-toolkit-ui.module.js +0 -105
- package/esm2015/lib/services/config.service.js +0 -14
- package/esm2015/lib/services/sidebar.service.js +0 -21
- package/esm2015/ps-toolkit-ui.js +0 -21
- package/esm2015/public-api.js +0 -64
- package/fesm2015/ps-toolkit-ui.js +0 -8926
- package/fesm2015/ps-toolkit-ui.js.map +0 -1
- package/lib/classes/addModal.class.d.ts +0 -14
- package/lib/classes/chart.class.d.ts +0 -15
- package/lib/classes/currentDataClass.d.ts +0 -10
- package/lib/classes/enum.class.d.ts +0 -221
- package/lib/classes/excel.class.d.ts +0 -8
- package/lib/classes/form.class.d.ts +0 -193
- package/lib/classes/header.class.d.ts +0 -8
- package/lib/classes/helper.class.d.ts +0 -50
- package/lib/classes/lang.class.d.ts +0 -5
- package/lib/classes/login.class.d.ts +0 -21
- package/lib/classes/modal.class.d.ts +0 -19
- package/lib/classes/permission.class.d.ts +0 -35
- package/lib/classes/request.class.d.ts +0 -10
- package/lib/classes/safehtml.class.d.ts +0 -7
- package/lib/classes/safestyle.class.d.ts +0 -7
- package/lib/classes/sidebar.class.d.ts +0 -14
- package/lib/classes/steps.class.d.ts +0 -31
- package/lib/classes/string.class.d.ts +0 -249
- package/lib/classes/table.class.d.ts +0 -88
- package/lib/components/accordion/accordion.component.d.ts +0 -7
- package/lib/components/alert/alert.component.d.ts +0 -10
- package/lib/components/base.component.d.ts +0 -17
- package/lib/components/calendar/calendar.component.d.ts +0 -26
- package/lib/components/chart/chart.component.d.ts +0 -5
- package/lib/components/clock/clock.component.d.ts +0 -11
- package/lib/components/confirm/confirm.component.d.ts +0 -14
- package/lib/components/error/error.component.d.ts +0 -7
- package/lib/components/footer/footer.component.d.ts +0 -6
- package/lib/components/form/bank-card/form.bank-card.component.d.ts +0 -28
- package/lib/components/form/button/form.button.component.d.ts +0 -15
- package/lib/components/form/checkbox/form.checkbox.component.d.ts +0 -14
- package/lib/components/form/ckeditor/form.ckeditor.component.d.ts +0 -14
- package/lib/components/form/date/form.date.component.d.ts +0 -45
- package/lib/components/form/datetime/form.datetime.component.d.ts +0 -13
- package/lib/components/form/file/form.file.component.d.ts +0 -18
- package/lib/components/form/finger/form.finger.component.d.ts +0 -15
- package/lib/components/form/hidden/form.hidden.component.d.ts +0 -7
- package/lib/components/form/icon/form.icon.component.d.ts +0 -16
- package/lib/components/form/index/form.component.d.ts +0 -10
- package/lib/components/form/label/form.label.component.d.ts +0 -8
- package/lib/components/form/plaque/form.plaque.component.d.ts +0 -21
- package/lib/components/form/plaque/select/form.plaque.select.component.d.ts +0 -38
- package/lib/components/form/radio/form.radio.component.d.ts +0 -13
- package/lib/components/form/select/form.select.component.d.ts +0 -45
- package/lib/components/form/select/item/form.select.item.component.d.ts +0 -12
- package/lib/components/form/slide/form.slide.component.d.ts +0 -13
- package/lib/components/form/star/form.star.component.d.ts +0 -13
- package/lib/components/form/table/form.table.component.d.ts +0 -9
- package/lib/components/form/tag/form.tag.component.d.ts +0 -16
- package/lib/components/form/textarea/form.textarea.component.d.ts +0 -13
- package/lib/components/form/textbox/form.textbox.component.d.ts +0 -20
- package/lib/components/form/time/form.time.component.d.ts +0 -25
- package/lib/components/form/toggle/form.toggle.component.d.ts +0 -13
- package/lib/components/form/tree/form.tree.component.d.ts +0 -21
- package/lib/components/form/tree/item/form.tree.item.component.d.ts +0 -19
- package/lib/components/form/uploader/form.uploader.component.d.ts +0 -21
- package/lib/components/form/vehicle/form.vehicle.component.d.ts +0 -18
- package/lib/components/form/vehicle/search/form.vehicle.search.component.d.ts +0 -22
- package/lib/components/header/header.component.d.ts +0 -10
- package/lib/components/header/sub/sub.header.component.d.ts +0 -3
- package/lib/components/layout/layout.component.d.ts +0 -7
- package/lib/components/loading/loading.component.d.ts +0 -5
- package/lib/components/login/login.component.d.ts +0 -15
- package/lib/components/modal/modal.component.d.ts +0 -9
- package/lib/components/notfound/notfound.component.d.ts +0 -8
- package/lib/components/notification/notification.component.d.ts +0 -3
- package/lib/components/sidebar/item/sidebar.item.component.d.ts +0 -14
- package/lib/components/sidebar/sidebar.component.d.ts +0 -22
- package/lib/components/steps/steps.component.d.ts +0 -16
- package/lib/components/table/loading/table.loading.component.d.ts +0 -5
- package/lib/components/table/pagination/table.pagination.component.d.ts +0 -15
- package/lib/components/table/row/table.row.component.d.ts +0 -44
- package/lib/components/table/table.component.d.ts +0 -43
- package/lib/components/tooltip/tooltip.component.d.ts +0 -5
- package/lib/ps-toolkit-ui.module.d.ts +0 -4
- package/lib/services/config.service.d.ts +0 -6
- package/lib/services/sidebar.service.d.ts +0 -9
- package/ps-toolkit-ui.d.ts +0 -20
- package/ps-toolkit-ui.metadata.json +0 -1
- package/public-api.d.ts +0 -60
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import * as $ from 'jquery';
|
|
3
|
-
import { InputError, InputType } from '../../../classes/enum.class';
|
|
4
|
-
export class FormTreeComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.changeIndex = new EventEmitter();
|
|
7
|
-
}
|
|
8
|
-
ngOnInit() {
|
|
9
|
-
this.inp.load();
|
|
10
|
-
this.inp.focus = () => {
|
|
11
|
-
this.onFocusIn();
|
|
12
|
-
};
|
|
13
|
-
this.inp.isValid = () => {
|
|
14
|
-
this.inp.error = null;
|
|
15
|
-
if (this.inp.required && this.getSelected().length === 0) {
|
|
16
|
-
this.inp.error = InputError.Required;
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
return true;
|
|
20
|
-
};
|
|
21
|
-
this.inp.data = () => {
|
|
22
|
-
return this.getSelected();
|
|
23
|
-
};
|
|
24
|
-
this.inp.setValue = (v) => {
|
|
25
|
-
this.setValue(v.map(String));
|
|
26
|
-
};
|
|
27
|
-
this.inp.clear = () => {
|
|
28
|
-
this.inp.error = null;
|
|
29
|
-
this.inp.setValue([], false);
|
|
30
|
-
};
|
|
31
|
-
if (this.inp.default != null) {
|
|
32
|
-
this.inp.setValue(this.inp.default, false);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
onClick() {
|
|
36
|
-
this.onFocusIn();
|
|
37
|
-
}
|
|
38
|
-
onKeyDown(e) {
|
|
39
|
-
const code = e.keyCode || e.which;
|
|
40
|
-
if (code === 9 || code === 13) {
|
|
41
|
-
e.preventDefault();
|
|
42
|
-
this.changeIndex.emit(e.shiftKey ? 'ShiftTab' : 'Tab');
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
onFocusIn() {
|
|
46
|
-
$(this.inputBase.nativeElement).focus();
|
|
47
|
-
}
|
|
48
|
-
getSelected() {
|
|
49
|
-
let l = [];
|
|
50
|
-
for (const f of this.inp.rows) {
|
|
51
|
-
l = l.concat(this.getRowSelected(f));
|
|
52
|
-
}
|
|
53
|
-
return l;
|
|
54
|
-
}
|
|
55
|
-
getRowSelected(ch) {
|
|
56
|
-
let l = [];
|
|
57
|
-
if (ch.selected && (!this.inp.onlyChild || ch.children.length === 0 || this.inp.type === InputType.TreeRadio)) {
|
|
58
|
-
l.push(ch.value);
|
|
59
|
-
}
|
|
60
|
-
ch.children.forEach((c) => {
|
|
61
|
-
const rs = this.getRowSelected(c);
|
|
62
|
-
l = l.concat(rs);
|
|
63
|
-
});
|
|
64
|
-
return l;
|
|
65
|
-
}
|
|
66
|
-
setValue(ids, rows = this.inp.rows) {
|
|
67
|
-
for (const r of rows) {
|
|
68
|
-
r.selected = ids.includes(r.value);
|
|
69
|
-
if (this.inp.onlyChild) {
|
|
70
|
-
if (r.selected) {
|
|
71
|
-
this.checkParent(r.parent);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
this.setValue(ids, r.children);
|
|
75
|
-
}
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
toggle(row) {
|
|
79
|
-
if (row.selected) {
|
|
80
|
-
this.unCheck(row);
|
|
81
|
-
if (this.inp.onlyChild && this.inp.type === InputType.Tree) {
|
|
82
|
-
this.unCheckParent(row.parent);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.check(row);
|
|
87
|
-
if (this.inp.onlyChild && this.inp.type === InputType.Tree) {
|
|
88
|
-
this.checkParent(row.parent);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (this.inp.onChange) {
|
|
92
|
-
this.inp.onChange(this.inp);
|
|
93
|
-
}
|
|
94
|
-
this.inp.error = null;
|
|
95
|
-
}
|
|
96
|
-
check(c) {
|
|
97
|
-
if (this.inp.type === InputType.Tree) {
|
|
98
|
-
c.selected = true;
|
|
99
|
-
if (this.inp.onlyChild) {
|
|
100
|
-
this.checkChildren(c);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
this.inp.clear();
|
|
105
|
-
c.selected = true;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
unCheck(c) {
|
|
109
|
-
c.selected = false;
|
|
110
|
-
if (this.inp.onlyChild) {
|
|
111
|
-
c.children.forEach((ch) => {
|
|
112
|
-
this.unCheck(ch);
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
checkChildren(c) {
|
|
117
|
-
c.children.forEach((ch) => {
|
|
118
|
-
this.check(ch);
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
checkParent(p) {
|
|
122
|
-
if (p) {
|
|
123
|
-
if (p.children.filter(x => !x.selected).length > 0) {
|
|
124
|
-
p.selected = null;
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
p.selected = true;
|
|
128
|
-
}
|
|
129
|
-
this.checkParent(p.parent);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
unCheckParent(p) {
|
|
133
|
-
if (p) {
|
|
134
|
-
if (p.children.filter(x => x.selected || x.selected == null).length > 0) {
|
|
135
|
-
p.selected = null;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
p.selected = false;
|
|
139
|
-
}
|
|
140
|
-
this.unCheckParent(p.parent);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
FormTreeComponent.decorators = [
|
|
145
|
-
{ type: Component, args: [{
|
|
146
|
-
selector: 'lib-form-tree',
|
|
147
|
-
template: "<div #inputDiv [id]=\"inp.id + 'TreeInput'\" [className]=\"'form-input-con tree w-100' + (inp.error == null ? '' : ' error') + (inp.disabled ? ' disabled' : '') + ' ' + inp.class\">\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 #inputBase type=\"checkbox\" class=\"input-base\" (keydown)=\"onKeyDown($event)\" (focusin)=\"onFocusIn()\">\r\n <div [className]=\"(inp.loading ? 'o-h ' : '') + 'control'\">\r\n <i *ngIf=\"inp.icon != null || inp.loading\" #inputIcon [className]=\"(inp.loading ? 'fad fa-spin fa-spinner' : inp.icon) + ' icon'\"></i>\r\n <i *ngIf=\"inp.withClear && getSelected().length != 0\" (click)=\"inp.clear()\" class=\"fad fa-times clear-icon\">{{inp.value}}</i>\r\n <lib-form-tree-item [level]=\"0\" [index]=\"i\" (toggle)=\"toggle($event)\" [item]=\"item\" [tree]=\"inp\" [base]=\"true\" *ngFor=\"let item of inp.rows; let i = index\"></lib-form-tree-item>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
148
|
-
styles: [".form-input-con.tree{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;padding:0 15px;position:relative}.form-input-con.tree .form-input{float:right;position:relative;width:100%}.form-input-con.tree .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.tree.error .form-input .label{color:var(--red);font-size:10px}.form-input-con.tree .form-input .label .required-icon{color:var(--red);font-size:9px;height:20px;line-height:20px;text-align:center;width:20px}.form-input-con.tree .form-input>.control{background-color:#fff;border:var(--border-input);border-radius:var(--border-radius-base);float:right;max-height:400px;min-height:35px;overflow-x:hidden;overflow-y:auto;padding:10px;position:relative;width:100%}.form-input-con.tree.without-border .form-input>.control{border:unset}.form-input-con.tree:not(.without-border) .form-input .input-base:focus+.control,.form-input-con.tree:not(.without-border) .form-input:hover .control{border:var(--border-input-dark)}.form-input-con.tree.error .form-input .input-base:focus+.control,.form-input-con.tree.error .form-input:hover .control{border:var(--border-input-red-dark)}.form-input-con.tree .form-input .input-base{cursor:pointer;height:0;opacity:0;position:absolute;right:50%;top:50%;width:0;z-index:1}.form-input-con.tree .form-input i.icon{color:var(--primary);cursor:default;left:0;z-index:1}.form-input-con.tree .form-input i.clear-icon,.form-input-con.tree .form-input i.icon{font-size:14px;height:35px;line-height:35px;position:absolute;text-align:center;top:0;transition:all .35s ease-in-out;width:35px}.form-input-con.tree .form-input i.clear-icon{color:var(--red);cursor:pointer;right:0;z-index:3}.form-input-con.tree.error .form-input>.control{border:var(--border-input-red)}.form-input-con.tree.error .form-input i.icon{color:var(--red)}"]
|
|
149
|
-
},] }
|
|
150
|
-
];
|
|
151
|
-
FormTreeComponent.ctorParameters = () => [];
|
|
152
|
-
FormTreeComponent.propDecorators = {
|
|
153
|
-
inp: [{ type: Input }],
|
|
154
|
-
changeIndex: [{ type: Output }],
|
|
155
|
-
inputBase: [{ type: ViewChild, args: ['inputBase',] }]
|
|
156
|
-
};
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS50cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Qc1Rvb2xraXQvVUkvcHJvamVjdHMvcHMtdG9vbGtpdC11aS9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9mb3JtL3RyZWUvZm9ybS50cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBT2xFLE1BQU0sT0FBTyxpQkFBaUI7SUFNNUI7UUFGQSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFHekMsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLElB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QUMsTUFBTSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLENBQWU7UUFDM0IsSUFBSSxDQUFDLEVBQUM7WUFDSixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ3RFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ25CO2lCQUFJO2dCQUNILENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDOzs7WUFqSkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixtbUNBQXlDOzthQUUxQzs7OztrQkFFRSxLQUFLOzBCQUVMLE1BQU07d0JBRU4sU0FBUyxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IHtJbnB1dENsYXNzLCBUcmVlUm93Q2xhc3N9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS5jbGFzcyc7XHJcbmltcG9ydCB7SW5wdXRFcnJvciwgSW5wdXRUeXBlfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2VudW0uY2xhc3MnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS50cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb3JtLnRyZWUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBASW5wdXQoKVxyXG4gIGlucDogSW5wdXRDbGFzcztcclxuICBAT3V0cHV0KClcclxuICBjaGFuZ2VJbmRleCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZScpIGlucHV0QmFzZTogRWxlbWVudFJlZjtcclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wLmxvYWQoKTtcclxuICAgIHRoaXMuaW5wLmZvY3VzID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uRm9jdXNJbigpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmlzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5wLmVycm9yID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuaW5wLnJlcXVpcmVkICYmIHRoaXMuZ2V0U2VsZWN0ZWQoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmlucC5lcnJvciA9IElucHV0RXJyb3IuUmVxdWlyZWQ7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmRhdGEgPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkKCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnAuc2V0VmFsdWUgPSAodikgPT4ge1xyXG4gICAgICB0aGlzLnNldFZhbHVlKHYubWFwKFN0cmluZykpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmNsZWFyID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5wLnNldFZhbHVlKFtdLCBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuaW5wLmRlZmF1bHQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuaW5wLnNldFZhbHVlKHRoaXMuaW5wLmRlZmF1bHQsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2soKTogdm9pZHtcclxuICAgIHRoaXMub25Gb2N1c0luKCk7XHJcbiAgfVxyXG4gIG9uS2V5RG93bihlKTogdm9pZHtcclxuICAgIGNvbnN0IGNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcclxuICAgIGlmIChjb2RlID09PSA5IHx8IGNvZGUgPT09IDEzKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VJbmRleC5lbWl0KGUuc2hpZnRLZXkgPyAnU2hpZnRUYWInIDogJ1RhYicpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkZvY3VzSW4oKTogdm9pZHtcclxuICAgICQodGhpcy5pbnB1dEJhc2UubmF0aXZlRWxlbWVudCkuZm9jdXMoKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWQoKTogYW55W117XHJcbiAgICBsZXQgbCA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuaW5wLnJvd3Mpe1xyXG4gICAgICBsID0gbC5jb25jYXQodGhpcy5nZXRSb3dTZWxlY3RlZChmKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbDtcclxuICB9XHJcbiAgZ2V0Um93U2VsZWN0ZWQoY2g6IFRyZWVSb3dDbGFzcyk6IGFueVtde1xyXG4gICAgbGV0IGwgPSBbXTtcclxuICAgIGlmIChjaC5zZWxlY3RlZCAmJiAoIXRoaXMuaW5wLm9ubHlDaGlsZCB8fCBjaC5jaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgdGhpcy5pbnAudHlwZSA9PT0gSW5wdXRUeXBlLlRyZWVSYWRpbykpe1xyXG4gICAgICBsLnB1c2goY2gudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2guY2hpbGRyZW4uZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICBjb25zdCBycyA9IHRoaXMuZ2V0Um93U2VsZWN0ZWQoYyk7XHJcbiAgICAgIGwgPSBsLmNvbmNhdChycyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBsO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUoaWRzLCByb3dzID0gdGhpcy5pbnAucm93cyk6IGJvb2xlYW57XHJcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm93cyl7XHJcbiAgICAgIHIuc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoci52YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLmlucC5vbmx5Q2hpbGQpe1xyXG4gICAgICAgIGlmIChyLnNlbGVjdGVkKXtcclxuICAgICAgICAgIHRoaXMuY2hlY2tQYXJlbnQoci5wYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldFZhbHVlKGlkcywgci5jaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgdG9nZ2xlKHJvdzogVHJlZVJvd0NsYXNzKTogdm9pZCB7XHJcbiAgICBpZiAocm93LnNlbGVjdGVkKXtcclxuICAgICAgdGhpcy51bkNoZWNrKHJvdyk7XHJcbiAgICAgIGlmICh0aGlzLmlucC5vbmx5Q2hpbGQgJiYgdGhpcy5pbnAudHlwZSA9PT0gSW5wdXRUeXBlLlRyZWUpe1xyXG4gICAgICAgIHRoaXMudW5DaGVja1BhcmVudChyb3cucGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuY2hlY2socm93KTtcclxuICAgICAgaWYgKHRoaXMuaW5wLm9ubHlDaGlsZCAmJiB0aGlzLmlucC50eXBlID09PSBJbnB1dFR5cGUuVHJlZSl7XHJcbiAgICAgICAgdGhpcy5jaGVja1BhcmVudChyb3cucGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaW5wLm9uQ2hhbmdlKXtcclxuICAgICAgdGhpcy5pbnAub25DaGFuZ2UodGhpcy5pbnApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnAuZXJyb3IgPSBudWxsO1xyXG4gIH1cclxuICBjaGVjayhjOiBUcmVlUm93Q2xhc3MpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucC50eXBlID09PSBJbnB1dFR5cGUuVHJlZSkge1xyXG4gICAgICBjLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuaW5wLm9ubHlDaGlsZCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDaGlsZHJlbihjKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnAuY2xlYXIoKTtcclxuICAgICAgYy5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVuQ2hlY2soYzogVHJlZVJvd0NsYXNzKTogdm9pZCB7XHJcbiAgICBjLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pbnAub25seUNoaWxkKSB7XHJcbiAgICAgIGMuY2hpbGRyZW4uZm9yRWFjaCgoY2gpID0+IHtcclxuICAgICAgICB0aGlzLnVuQ2hlY2soY2gpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tDaGlsZHJlbihjOiBUcmVlUm93Q2xhc3MpOiB2b2lke1xyXG4gICAgYy5jaGlsZHJlbi5mb3JFYWNoKChjaCkgPT4ge1xyXG4gICAgICB0aGlzLmNoZWNrKGNoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBjaGVja1BhcmVudChwOiBUcmVlUm93Q2xhc3MpOiB2b2lke1xyXG4gICAgaWYgKHApe1xyXG4gICAgICBpZiAocC5jaGlsZHJlbi5maWx0ZXIoeCA9PiAheC5zZWxlY3RlZCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgcC5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHAuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hlY2tQYXJlbnQocC5wYXJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICB1bkNoZWNrUGFyZW50KHA6IFRyZWVSb3dDbGFzcyk6IHZvaWR7XHJcbiAgICBpZiAocCl7XHJcbiAgICAgIGlmIChwLmNoaWxkcmVuLmZpbHRlcih4ID0+IHguc2VsZWN0ZWQgfHwgeC5zZWxlY3RlZCA9PSBudWxsKS5sZW5ndGggPiAwKXtcclxuICAgICAgICBwLnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudW5DaGVja1BhcmVudChwLnBhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import * as $ from 'jquery';
|
|
3
|
-
import { InputType } from '../../../../classes/enum.class';
|
|
4
|
-
export class FormTreeItemComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.parent = null;
|
|
7
|
-
this.toggle = new EventEmitter();
|
|
8
|
-
}
|
|
9
|
-
get type() { return InputType; }
|
|
10
|
-
ngOnInit() {
|
|
11
|
-
this.item.parent = this.parent;
|
|
12
|
-
}
|
|
13
|
-
openClose(e) {
|
|
14
|
-
const ch = $(e.target).closest('.row-item').find(' > .children');
|
|
15
|
-
const oc = $(e.target).closest('.row-item').find(' > .open-close');
|
|
16
|
-
if (ch.hasClass('open')) {
|
|
17
|
-
ch.removeClass('open');
|
|
18
|
-
ch.stop().slideUp();
|
|
19
|
-
oc.removeClass('fa-caret-down').addClass('fa-caret-left');
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
ch.addClass('open');
|
|
23
|
-
ch.stop().slideDown();
|
|
24
|
-
oc.addClass('fa-caret-down').removeClass('fa-caret-left');
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
onClick() {
|
|
28
|
-
this.toggle.emit(this.item);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
FormTreeItemComponent.decorators = [
|
|
32
|
-
{ type: Component, args: [{
|
|
33
|
-
selector: 'lib-form-tree-item',
|
|
34
|
-
template: "<div [className]=\"(item.selected ? 'selected ' : item.selected == null ? 'null ' : '') + 'row-item'\">\r\n <div (click)=\"onClick()\" [className]=\"'checkbox' + (this.tree.type === type.TreeRadio ? ' radio' : '')\">{{tree.l(item.name)}}</div>\r\n <i *ngIf=\"item.children.length > 0\" (click)=\"openClose($event)\" [className]=\"(index == 0 && level == 0 ? 'fad fa-caret-down ' : 'fad fa-caret-left ') + 'open-close'\"></i>\r\n <div [className]=\"(index == 0 && level == 0 ? 'open ' : '') + 'children'\" [style]=\"index == 0 && level == 0 ? {display: 'block'} : {}\" *ngIf=\"item.children.length > 0\">\r\n <div class=\"items rightline\">\r\n <lib-form-tree-item [level]=\"level + 1\" (toggle)=\"toggle.emit($event)\" [index]=\"i\" [item]=\"child\" [parent]=\"item\" [tree]=\"tree\" *ngFor=\"let child of item.children; let i = index\"></lib-form-tree-item>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
35
|
-
styles: [".row-item{float:left;position:relative;text-align:center;width:90%}.row-item .content{background-color:rgba(11,72,107,.06666666666666667);border-radius:var(--border-radius-base);cursor:pointer;float:right;width:100%}.row-item .open-close{cursor:pointer;font-size:20px;height:40px;line-height:38px;position:absolute;right:-25px;text-align:center;width:15px}.row-item .content.parent,.row-item .content:hover{background-color:rgba(11,72,107,.13333333333333333)}.row-item .content.parent:hover{background-color:rgba(11,72,107,.26666666666666666)}.row-item .children{display:none;padding:10px;position:relative}.row-item .children,.row-item .children .items{float:left;width:100%}.row-item .children>.line{height:calc(100% - 30px);right:20px;top:15px;width:2px}.row-item .children .row-item>.line,.row-item .children>.line{background-color:rgba(11,72,107,.13333333333333333);position:absolute}.row-item .children .row-item>.line{height:2px;right:-35px;top:17px;width:10px}.row-item .checkbox{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;align-items:center;cursor:pointer;display:flex;float:right;font-size:11px;justify-content:center;line-height:20px;min-height:40px;padding:5px 30px;position:relative;text-align:center;width:100%;z-index:2}.row-item .control{cursor:pointer;height:0;opacity:0;position:absolute;right:50%;top:50%;width:0;z-index:1}.row-item>.checkbox:before{content:\"\\f0c8\";font-family:Font Awesome\\ 5 Pro;font-size:18px;font-weight:400;height:40px;line-height:40px;position:absolute;right:0;top:0;width:30px}.row-item>.checkbox.radio:before{content:\"\\f111\"}.row-item.selected>.checkbox:before{animation:pop .18s ease-in;color:var(--green);content:\"\\f14a\";font-weight:900}.row-item.selected>.checkbox.radio:before{content:\"\\f192\"}.row-item.null>.checkbox:before{animation:pop .18s ease-in;color:var(--green);content:\"\\f146\";font-weight:900}.row-item:after{background-image:linear-gradient(90deg,transparent,rgba(50,50,50,.25),transparent);border:0;bottom:-1px;content:\"\";float:right;height:1px;position:absolute;right:0;width:100%}::ng-deep lib-form-tree-item:last-of-type>.row-item:after{display:none}"]
|
|
36
|
-
},] }
|
|
37
|
-
];
|
|
38
|
-
FormTreeItemComponent.ctorParameters = () => [];
|
|
39
|
-
FormTreeItemComponent.propDecorators = {
|
|
40
|
-
item: [{ type: Input }],
|
|
41
|
-
level: [{ type: Input }],
|
|
42
|
-
index: [{ type: Input }],
|
|
43
|
-
tree: [{ type: Input }],
|
|
44
|
-
parent: [{ type: Input }],
|
|
45
|
-
base: [{ type: Input }],
|
|
46
|
-
toggle: [{ type: Output }],
|
|
47
|
-
inputDiv: [{ type: ViewChild, args: ['inputDiv',] }],
|
|
48
|
-
inputBase: [{ type: ViewChild, args: ['inputBase',] }]
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS50cmVlLml0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1BzVG9vbGtpdC9VSS9wcm9qZWN0cy9wcy10b29sa2l0LXVpL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2Zvcm0vdHJlZS9pdGVtL2Zvcm0udHJlZS5pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBZ0IsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBT3pELE1BQU0sT0FBTyxxQkFBcUI7SUFrQmhDO1FBUkEsV0FBTSxHQUFpQixJQUFJLENBQUM7UUFJNUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO0lBSzFDLENBQUM7SUFGRCxJQUFJLElBQUksS0FBdUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBR2xELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxTQUFTLENBQUMsQ0FBQztRQUNULE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDM0Q7YUFBTTtZQUNMLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7O1lBNUNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5Qix5NUJBQThDOzthQUUvQzs7OzttQkFFRSxLQUFLO29CQUVMLEtBQUs7b0JBRUwsS0FBSzttQkFFTCxLQUFLO3FCQUVMLEtBQUs7bUJBRUwsS0FBSztxQkFFTCxNQUFNO3VCQUVOLFNBQVMsU0FBQyxVQUFVO3dCQUNwQixTQUFTLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCB7SW5wdXRDbGFzcywgVHJlZVJvd0NsYXNzfSBmcm9tICcuLi8uLi8uLi8uLi9jbGFzc2VzL2Zvcm0uY2xhc3MnO1xyXG5pbXBvcnQge0lucHV0VHlwZX0gZnJvbSAnLi4vLi4vLi4vLi4vY2xhc3Nlcy9lbnVtLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZvcm0tdHJlZS1pdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS50cmVlLml0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0udHJlZS5pdGVtLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybVRyZWVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0e1xyXG4gIEBJbnB1dCgpXHJcbiAgaXRlbTogVHJlZVJvd0NsYXNzO1xyXG4gIEBJbnB1dCgpXHJcbiAgbGV2ZWw6IG51bWJlcjtcclxuICBASW5wdXQoKVxyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgQElucHV0KClcclxuICB0cmVlOiBJbnB1dENsYXNzO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFyZW50OiBUcmVlUm93Q2xhc3MgPSBudWxsO1xyXG4gIEBJbnB1dCgpXHJcbiAgYmFzZTogYm9vbGVhbjtcclxuICBAT3V0cHV0KClcclxuICB0b2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVSb3dDbGFzcz4oKTtcclxuICBAVmlld0NoaWxkKCdpbnB1dERpdicpIGlucHV0RGl2OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZScpIGlucHV0QmFzZTogRWxlbWVudFJlZjtcclxuICBnZXQgdHlwZSgpOiB0eXBlb2YgSW5wdXRUeXBlIHsgcmV0dXJuIElucHV0VHlwZTsgfVxyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWR7XHJcbiAgICB0aGlzLml0ZW0ucGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcbiAgfVxyXG4gIG9wZW5DbG9zZShlKTogdm9pZCB7XHJcbiAgICBjb25zdCBjaCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5yb3ctaXRlbScpLmZpbmQoJyA+IC5jaGlsZHJlbicpO1xyXG4gICAgY29uc3Qgb2MgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcucm93LWl0ZW0nKS5maW5kKCcgPiAub3Blbi1jbG9zZScpO1xyXG4gICAgaWYgKGNoLmhhc0NsYXNzKCdvcGVuJykpIHtcclxuICAgICAgY2gucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcclxuICAgICAgY2guc3RvcCgpLnNsaWRlVXAoKTtcclxuICAgICAgb2MucmVtb3ZlQ2xhc3MoJ2ZhLWNhcmV0LWRvd24nKS5hZGRDbGFzcygnZmEtY2FyZXQtbGVmdCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2guYWRkQ2xhc3MoJ29wZW4nKTtcclxuICAgICAgY2guc3RvcCgpLnNsaWRlRG93bigpO1xyXG4gICAgICBvYy5hZGRDbGFzcygnZmEtY2FyZXQtZG93bicpLnJlbW92ZUNsYXNzKCdmYS1jYXJldC1sZWZ0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b2dnbGUuZW1pdCh0aGlzLml0ZW0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import * as $ from 'jquery';
|
|
3
|
-
import { InputClass } from '../../../classes/form.class';
|
|
4
|
-
import { FileIcons, InputError, InputType } from '../../../classes/enum.class';
|
|
5
|
-
import { HelperClass } from '../../../classes/helper.class';
|
|
6
|
-
export class FormUploaderComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.changeIndex = new EventEmitter();
|
|
9
|
-
this.id = HelperClass.random(10);
|
|
10
|
-
}
|
|
11
|
-
get fileIcons() { return FileIcons; }
|
|
12
|
-
ngOnInit() {
|
|
13
|
-
this.inp.setValue = (v) => {
|
|
14
|
-
this.inp.value = v != null && v instanceof Array && v.every(i => typeof i === 'string') ? v.map(f => {
|
|
15
|
-
var _a, _b;
|
|
16
|
-
const typ = (_a = FileIcons[f.split('.').at(-1)]) !== null && _a !== void 0 ? _a : FileIcons.file;
|
|
17
|
-
const icon = (_b = FileIcons[f.split('.').at(-1)]) !== null && _b !== void 0 ? _b : FileIcons.file;
|
|
18
|
-
const close = new InputClass(this.inp.environment, this.inp.l, null, 'fas fa-times', InputType.Icon, 'red h-15');
|
|
19
|
-
close.onClick = () => {
|
|
20
|
-
this.inp.value = this.inp.value.filter(x => x.file !== f);
|
|
21
|
-
};
|
|
22
|
-
return {
|
|
23
|
-
type: typ,
|
|
24
|
-
icon,
|
|
25
|
-
url: this.inp.environment.url + f,
|
|
26
|
-
close,
|
|
27
|
-
file: f
|
|
28
|
-
};
|
|
29
|
-
}) : [];
|
|
30
|
-
};
|
|
31
|
-
this.inp.isValid = () => {
|
|
32
|
-
this.inp.error = null;
|
|
33
|
-
if (this.inp.required && (this.inp.value == null || this.inp.value.length === 0)) {
|
|
34
|
-
this.inp.error = InputError.Required;
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
if (!this.inp.required && (this.inp.value == null || this.inp.value.length === 0)) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
if (this.inp.allowed != null && this.inp.value != null &&
|
|
41
|
-
!this.inp.value.some(x => !this.inp.allowed.includes(x.type))) {
|
|
42
|
-
this.inp.error = InputError.NotAllowed;
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
if (this.inp.maxLength !== -1 && this.inp.value != null &&
|
|
46
|
-
this.inp.value.map(x => x.size > this.inp.maxLength * 1024).filter(x => x).length > 0) {
|
|
47
|
-
this.inp.error = InputError.MaxContent;
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return true;
|
|
51
|
-
};
|
|
52
|
-
this.inp.clear = () => {
|
|
53
|
-
this.inp.error = null;
|
|
54
|
-
this.inp.setValue(this.inp.default, false);
|
|
55
|
-
};
|
|
56
|
-
this.inp.data = () => {
|
|
57
|
-
const result = {};
|
|
58
|
-
result[this.inp.name] = this.inp.name;
|
|
59
|
-
if (this.inp.value != null && this.inp.value instanceof Array) {
|
|
60
|
-
result[this.inp.name + 'Files'] = this.inp.value.filter(x => typeof x.file !== 'string').map(x => x.file);
|
|
61
|
-
result[this.inp.name + 'Urls'] = this.inp.value.filter(x => typeof x.file === 'string').map(x => x.file);
|
|
62
|
-
return result;
|
|
63
|
-
}
|
|
64
|
-
return result;
|
|
65
|
-
};
|
|
66
|
-
this.inp.focus = () => {
|
|
67
|
-
this.onClick();
|
|
68
|
-
};
|
|
69
|
-
this.inp.setValue(this.inp.default, false);
|
|
70
|
-
}
|
|
71
|
-
getPdfImage(file) {
|
|
72
|
-
return new Promise((resolve, reject) => {
|
|
73
|
-
const reader = new FileReader();
|
|
74
|
-
reader.readAsDataURL(file);
|
|
75
|
-
reader.onload = () => {
|
|
76
|
-
const i = new Image();
|
|
77
|
-
i.src = window.URL.createObjectURL(file);
|
|
78
|
-
i.onload = () => {
|
|
79
|
-
let w = i.width;
|
|
80
|
-
let h = i.height;
|
|
81
|
-
if (w > 200) {
|
|
82
|
-
h = (200 * h) / w;
|
|
83
|
-
w = 200;
|
|
84
|
-
}
|
|
85
|
-
if (h > 287) {
|
|
86
|
-
w = (287 * w) / h;
|
|
87
|
-
h = 287;
|
|
88
|
-
}
|
|
89
|
-
resolve({ base64: reader.result.toString(), w, h });
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
reader.onerror = error => reject(error);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
onClick() {
|
|
96
|
-
$(this.inputBase.nativeElement).focus();
|
|
97
|
-
}
|
|
98
|
-
onChange(e) {
|
|
99
|
-
var _a, _b;
|
|
100
|
-
this.inp.error = null;
|
|
101
|
-
for (const f of e.target.files) {
|
|
102
|
-
const close = new InputClass(this.inp.environment, this.inp.l, null, 'fas fa-times', InputType.Icon, 'red h-15');
|
|
103
|
-
close.onClick = () => {
|
|
104
|
-
this.inp.value = this.inp.value.filter(x => x.file !== f);
|
|
105
|
-
};
|
|
106
|
-
const reader = new FileReader();
|
|
107
|
-
reader.readAsDataURL(f);
|
|
108
|
-
const typ = (_a = FileIcons[f.name.split('.').at(-1)]) !== null && _a !== void 0 ? _a : FileIcons.file;
|
|
109
|
-
const icon = (_b = FileIcons[f.name.split('.').at(-1)]) !== null && _b !== void 0 ? _b : FileIcons.file;
|
|
110
|
-
reader.onload = (oFREvent) => {
|
|
111
|
-
this.inp.value.push({
|
|
112
|
-
type: typ,
|
|
113
|
-
icon,
|
|
114
|
-
url: oFREvent.target.result,
|
|
115
|
-
close,
|
|
116
|
-
file: f
|
|
117
|
-
});
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
this.changeIndex.emit('Tab');
|
|
121
|
-
}
|
|
122
|
-
onKeyDown(e) {
|
|
123
|
-
const code = e.keyCode || e.which;
|
|
124
|
-
if (code === 9 || code === 13) {
|
|
125
|
-
e.preventDefault();
|
|
126
|
-
this.changeIndex.emit(e.shiftKey ? 'ShiftTab' : 'Tab');
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
onFocusIn() {
|
|
130
|
-
$(this.inputBase.nativeElement).focus();
|
|
131
|
-
}
|
|
132
|
-
title() {
|
|
133
|
-
if (this.inp.value == null || (this.inp.value instanceof Array && this.inp.value.length === 0)) {
|
|
134
|
-
return this.inp.l('FileNotSelected');
|
|
135
|
-
}
|
|
136
|
-
const t = typeof this.inp.value === 'string' ? this.inp.value : this.inp.value.map(x => typeof x === 'string' ? x : x.name).join(', ');
|
|
137
|
-
const l = typeof this.inp.value === 'string' ? 1 : this.inp.value.length;
|
|
138
|
-
return this.inp.l('FileSelected', [l, t]);
|
|
139
|
-
}
|
|
140
|
-
openFile(f) {
|
|
141
|
-
window.open(f.url, '_blank');
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
FormUploaderComponent.decorators = [
|
|
145
|
-
{ type: Component, args: [{
|
|
146
|
-
selector: 'lib-form-uploader',
|
|
147
|
-
template: "<div #inputDiv [id]=\"id + 'FileInput'\" [className]=\"'form-input-con uploader w-100' + (inp.error == null ? '' : ' error') + (inp.value != null && inp.value != '' ? ' has-value' : '') + ' ' + inp.class\">\r\n <div class=\"form-input\">\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]=\"id + 'FileInputBase'\" multiple (change)=\"onChange($event)\">\r\n <input #inputBase type=\"checkbox\" class=\"input-base\" (keydown)=\"onKeyDown($event)\" (focusin)=\"onFocusIn()\">\r\n <div class=\"control\">\r\n <label class=\"click\" (click)=\"onClick()\" [for]=\"id + 'FileInputBase'\"></label>\r\n <i *ngIf=\"inp.icon != null || inp.loading\" [className]=\"(inp.loading ? 'fad fa-spin fa-spinner' : inp.icon) + ' icon'\"></i>\r\n <div class=\"empty\" *ngIf=\"inp.value == null || inp.value.length == 0\">\r\n <div class=\"title\"><div class=\"w-100\" [innerHTML]=\"inp.l('UploaderTitle')\"></div></div>\r\n <div class=\"allowed\" *ngIf=\"inp.allowed != null\">({{inp.allowed.join(', ')}})</div>\r\n <div class=\"max-length\" *ngIf=\"inp.maxLength > -1\">({{inp.l('UploaderMaxLength', inp.maxLength / 1024)}})</div>\r\n </div>\r\n <div class=\"files\" *ngIf=\"inp.value != null && inp.value.length > 0\">\r\n <div class=\"file\" *ngFor=\"let f of inp.value\">\r\n <div class=\"info\">\r\n <label class=\"click\" (click)=\"openFile(f)\"></label>\r\n <div class=\"close\">\r\n <lib-form-icon [inp]=\"f.close\"></lib-form-icon>\r\n </div>\r\n <img *ngIf=\"f.type == fileIcons.jpeg || f.type == fileIcons.jpg || f.type == fileIcons.png\" [src]=\"f.url\" alt=\"\"/>\r\n <i *ngIf=\"f.type != fileIcons.jpeg && f.type != fileIcons.jpg && f.type != fileIcons.png\" [class]=\"f.icon + ' file-icon'\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
148
|
-
styles: [".form-input-con.uploader{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;padding:0 15px;position:relative}.form-input-con.uploader .form-input{float:right;position:relative;width:100%}.form-input-con.uploader .form-input .control .click{cursor:pointer;height:100%;position:absolute;right:0;top:0;width:100%;z-index:3}.form-input-con.uploader .form-input .input-base,.form-input-con.uploader .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.uploader .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.uploader .form-input .label .required-icon{color:var(--red);font-size:9px;height:20px;line-height:20px;text-align:center;width:20px}.form-input-con.uploader .form-input .control{background-color:#fff;border:var(--border-input);border-radius:var(--border-radius-base);float:left;padding:3px 35px;position:relative;text-align:center;width:100%;z-index:2}.form-input-con.uploader .form-input .control .empty{align-items:center;display:flex;flex-direction:column;float:right;height:77px;justify-content:center;width:100%}.form-input-con.uploader .form-input .control .empty .title{align-items:center;display:flex;float:right;font-size:11px;height:37px;justify-content:center;line-height:14px;width:100%}.form-input-con.uploader .form-input .control .empty .allowed{direction:ltr;float:right;font-size:10px;font-weight:var(--font-light);height:25px;line-height:10px;width:100%}.form-input-con.uploader .form-input .control .empty .max-length{float:right;font-size:9px;line-height:15px;width:100%}.form-input-con.uploader .form-input .control .files{align-items:center;display:flex;flex-flow:wrap;float:right;justify-content:center;width:100%}.form-input-con.uploader .form-input .control .files .file{float:right;height:77px;padding:5px;width:77px}.form-input-con.uploader .form-input .control .files .file .info{align-items:center;border:var(--border-input);border-radius:var(--border-radius-base);display:flex;float:right;height:100%;justify-content:center;padding:5px;position:relative;text-align:center;width:100%}.form-input-con.uploader .form-input .control .files .file .info:hover{border:var(--border-input-dark)}.form-input-con.uploader .form-input .control .files .file .info img{height:100%}.form-input-con.uploader .form-input .control .files .file .info .close{height:15px;position:absolute;right:0;top:0;width:15px;z-index:5}.form-input-con.uploader .form-input .control .files .file .info .file-icon{float:right;font-size:35px;text-align:center;width:100%}.form-input-con.uploader .form-input .control .files .file .info .close:hover{color:var(--red-dark)}.form-input-con.uploader .form-input .control:hover,.form-input-con.uploader .form-input .input-base:focus+.control{border:var(--border-input-dark);outline:none}.form-input-con.uploader .form-input .control i.icon{color:var(--primary);font-size:13px;height:35px;left:0;line-height:35px;position:absolute;text-align:center;top:0;width:35px;z-index:2}.form-input-con.uploader.error .form-input .control{border:var(--border-input-red)}.form-input-con.uploader.error .form-input .label{color:var(--red);font-size:10px}.form-input-con.uploader.error .form-input .control,.form-input-con.uploader.error .form-input .control i.icon{color:var(--red)}.form-input-con.uploader.h-35{height:35px}.form-input-con.uploader.has-value.h-35 .form-input .control{direction:ltr;font-size:9px;height:35px}.form-input-con.uploader.h-35 .form-input .button,.form-input-con.uploader.h-35 .form-input .control i.icon{height:35px;line-height:35px}.form-input-con.uploader.h-30{height:30px}.form-input-con.uploader.h-30 .form-input .control{direction:ltr;font-size:9px;height:30px;line-height:30px}.form-input-con.uploader.h-30 .form-input .button,.form-input-con.uploader.h-30 .form-input .control i.icon{height:30px;line-height:30px}"]
|
|
149
|
-
},] }
|
|
150
|
-
];
|
|
151
|
-
FormUploaderComponent.ctorParameters = () => [];
|
|
152
|
-
FormUploaderComponent.propDecorators = {
|
|
153
|
-
inp: [{ type: Input }],
|
|
154
|
-
changeIndex: [{ type: Output }],
|
|
155
|
-
inputDiv: [{ type: ViewChild, args: ['inputDiv',] }],
|
|
156
|
-
inputBaseFile: [{ type: ViewChild, args: ['inputBaseFile',] }],
|
|
157
|
-
inputBase: [{ type: ViewChild, args: ['inputBase',] }]
|
|
158
|
-
};
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHNUb29sa2l0L1VJL3Byb2plY3RzL3BzLXRvb2xraXQtdWkvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybS91cGxvYWRlci9mb3JtLnVwbG9hZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTzFELE1BQU0sT0FBTyxxQkFBcUI7SUFVaEM7UUFOQSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFPdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFIRCxJQUFJLFNBQVMsS0FBdUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBS3ZELFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUFDO0lBQ0QsUUFBUSxDQUFDLENBQU07UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7O1lBbkpGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QiwrakVBQTZDOzthQUU5Qzs7OztrQkFFRSxLQUFLOzBCQUVMLE1BQU07dUJBRU4sU0FBUyxTQUFDLFVBQVU7NEJBQ3BCLFNBQVMsU0FBQyxlQUFlO3dCQUN6QixTQUFTLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgeyBJbnB1dENsYXNzIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLmNsYXNzJztcclxuaW1wb3J0IHtGaWxlSWNvbnMsIElucHV0RXJyb3IsIElucHV0VHlwZX0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9lbnVtLmNsYXNzJztcclxuaW1wb3J0IHtIZWxwZXJDbGFzc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9oZWxwZXIuY2xhc3MnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0udXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0udXBsb2FkZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtVXBsb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XHJcbiAgQElucHV0KClcclxuICBpbnA6IElucHV0Q2xhc3M7XHJcbiAgQE91dHB1dCgpXHJcbiAgY2hhbmdlSW5kZXggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAVmlld0NoaWxkKCdpbnB1dERpdicpIGlucHV0RGl2OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZUZpbGUnKSBpbnB1dEJhc2VGaWxlOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0QmFzZScpIGlucHV0QmFzZTogRWxlbWVudFJlZjtcclxuICBpZDogc3RyaW5nO1xyXG4gIGdldCBmaWxlSWNvbnMoKTogdHlwZW9mIEZpbGVJY29ucyB7IHJldHVybiBGaWxlSWNvbnM7IH1cclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgdGhpcy5pZCA9IEhlbHBlckNsYXNzLnJhbmRvbSgxMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wLnNldFZhbHVlID0gKHYpID0+IHtcclxuICAgICAgdGhpcy5pbnAudmFsdWUgPSB2ICE9IG51bGwgJiYgdiBpbnN0YW5jZW9mIEFycmF5ICYmIHYuZXZlcnkoaSA9PiB0eXBlb2YgaSA9PT0gJ3N0cmluZycpID8gdi5tYXAoZiA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwOiBGaWxlSWNvbnMgPSBGaWxlSWNvbnNbZi5zcGxpdCgnLicpLmF0KC0xKV0gPz8gRmlsZUljb25zLmZpbGU7XHJcbiAgICAgICAgY29uc3QgaWNvbjogc3RyaW5nID0gRmlsZUljb25zW2Yuc3BsaXQoJy4nKS5hdCgtMSldID8/IEZpbGVJY29ucy5maWxlO1xyXG4gICAgICAgIGNvbnN0IGNsb3NlID0gbmV3IElucHV0Q2xhc3ModGhpcy5pbnAuZW52aXJvbm1lbnQsIHRoaXMuaW5wLmwsIG51bGwsICdmYXMgZmEtdGltZXMnLCBJbnB1dFR5cGUuSWNvbiwgJ3JlZCBoLTE1Jyk7XHJcbiAgICAgICAgY2xvc2Uub25DbGljayA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5wLnZhbHVlID0gdGhpcy5pbnAudmFsdWUuZmlsdGVyKHggPT4geC5maWxlICE9PSBmKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0eXBlOiB0eXAsXHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdXJsOiB0aGlzLmlucC5lbnZpcm9ubWVudC51cmwgKyBmLFxyXG4gICAgICAgICAgY2xvc2UsXHJcbiAgICAgICAgICBmaWxlOiBmXHJcbiAgICAgICAgfTtcclxuICAgICAgfSkgOiBbXTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5pc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLmlucC5yZXF1aXJlZCAmJiAodGhpcy5pbnAudmFsdWUgPT0gbnVsbCB8fCB0aGlzLmlucC52YWx1ZS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgdGhpcy5pbnAuZXJyb3IgPSBJbnB1dEVycm9yLlJlcXVpcmVkO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaW5wLnJlcXVpcmVkICYmICh0aGlzLmlucC52YWx1ZSA9PSBudWxsIHx8IHRoaXMuaW5wLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbnAuYWxsb3dlZCAhPSBudWxsICYmIHRoaXMuaW5wLnZhbHVlICE9IG51bGwgJiZcclxuICAgICAgICAhdGhpcy5pbnAudmFsdWUuc29tZSh4ID0+ICF0aGlzLmlucC5hbGxvd2VkLmluY2x1ZGVzKHgudHlwZSkpKSB7XHJcbiAgICAgICAgdGhpcy5pbnAuZXJyb3IgPSBJbnB1dEVycm9yLk5vdEFsbG93ZWQ7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlucC5tYXhMZW5ndGggIT09IC0xICYmIHRoaXMuaW5wLnZhbHVlICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLmlucC52YWx1ZS5tYXAoeCA9PiB4LnNpemUgPiB0aGlzLmlucC5tYXhMZW5ndGggKiAxMDI0KS5maWx0ZXIoeCA9PiB4KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5pbnAuZXJyb3IgPSBJbnB1dEVycm9yLk1heENvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLmNsZWFyID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5wLnNldFZhbHVlKHRoaXMuaW5wLmRlZmF1bHQsIGZhbHNlKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5kYXRhID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgICAgcmVzdWx0W3RoaXMuaW5wLm5hbWVdID0gdGhpcy5pbnAubmFtZTtcclxuICAgICAgaWYgKHRoaXMuaW5wLnZhbHVlICE9IG51bGwgJiYgdGhpcy5pbnAudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHJlc3VsdFt0aGlzLmlucC5uYW1lICsgJ0ZpbGVzJ10gPSB0aGlzLmlucC52YWx1ZS5maWx0ZXIoeCA9PiB0eXBlb2YgeC5maWxlICE9PSAnc3RyaW5nJykubWFwKHggPT4geC5maWxlKTtcclxuICAgICAgICByZXN1bHRbdGhpcy5pbnAubmFtZSArICdVcmxzJ10gPSB0aGlzLmlucC52YWx1ZS5maWx0ZXIoeCA9PiB0eXBlb2YgeC5maWxlID09PSAnc3RyaW5nJykubWFwKHggPT4geC5maWxlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnAuZm9jdXMgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMub25DbGljaygpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW5wLnNldFZhbHVlKHRoaXMuaW5wLmRlZmF1bHQsIGZhbHNlKTtcclxuICB9XHJcbiAgZ2V0UGRmSW1hZ2UoZmlsZSk6IGFueXtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGkgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgICAgIGkub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHcgPSBpLndpZHRoO1xyXG4gICAgICAgICAgbGV0IGggPSBpLmhlaWdodDtcclxuICAgICAgICAgIGlmICh3ID4gMjAwKXtcclxuICAgICAgICAgICAgaCA9ICgyMDAgKiBoKSAvIHc7XHJcbiAgICAgICAgICAgIHcgPSAyMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaCA+IDI4Nyl7XHJcbiAgICAgICAgICAgIHcgPSAoMjg3ICogdykgLyBoO1xyXG4gICAgICAgICAgICBoID0gMjg3O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZSh7YmFzZTY0OiByZWFkZXIucmVzdWx0LnRvU3RyaW5nKCksIHcsIGh9KTtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb25DbGljaygpOiB2b2lke1xyXG4gICAgJCh0aGlzLmlucHV0QmFzZS5uYXRpdmVFbGVtZW50KS5mb2N1cygpO1xyXG4gIH1cclxuICBvbkNoYW5nZShlKTogdm9pZHtcclxuICAgIHRoaXMuaW5wLmVycm9yID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgZiBvZiBlLnRhcmdldC5maWxlcyl7XHJcbiAgICAgIGNvbnN0IGNsb3NlID0gbmV3IElucHV0Q2xhc3ModGhpcy5pbnAuZW52aXJvbm1lbnQsIHRoaXMuaW5wLmwsIG51bGwsICdmYXMgZmEtdGltZXMnLCBJbnB1dFR5cGUuSWNvbiwgJ3JlZCBoLTE1Jyk7XHJcbiAgICAgIGNsb3NlLm9uQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbnAudmFsdWUgPSB0aGlzLmlucC52YWx1ZS5maWx0ZXIoeCA9PiB4LmZpbGUgIT09IGYpO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmKTtcclxuICAgICAgY29uc3QgdHlwOiBGaWxlSWNvbnMgPSBGaWxlSWNvbnNbZi5uYW1lLnNwbGl0KCcuJykuYXQoLTEpXSA/PyBGaWxlSWNvbnMuZmlsZTtcclxuICAgICAgY29uc3QgaWNvbjogc3RyaW5nID0gRmlsZUljb25zW2YubmFtZS5zcGxpdCgnLicpLmF0KC0xKV0gPz8gRmlsZUljb25zLmZpbGU7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAob0ZSRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmlucC52YWx1ZS5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6IHR5cCxcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB1cmw6IG9GUkV2ZW50LnRhcmdldC5yZXN1bHQsXHJcbiAgICAgICAgICBjbG9zZSxcclxuICAgICAgICAgIGZpbGU6IGZcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlSW5kZXguZW1pdCgnVGFiJyk7XHJcbiAgfVxyXG4gIG9uS2V5RG93bihlKTogdm9pZHtcclxuICAgIGNvbnN0IGNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcclxuICAgIGlmIChjb2RlID09PSA5IHx8IGNvZGUgPT09IDEzKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VJbmRleC5lbWl0KGUuc2hpZnRLZXkgPyAnU2hpZnRUYWInIDogJ1RhYicpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkZvY3VzSW4oKTogdm9pZHtcclxuICAgICQodGhpcy5pbnB1dEJhc2UubmF0aXZlRWxlbWVudCkuZm9jdXMoKTtcclxuICB9XHJcbiAgdGl0bGUoKTogc3RyaW5ne1xyXG4gICAgaWYgKHRoaXMuaW5wLnZhbHVlID09IG51bGwgfHwgKHRoaXMuaW5wLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdGhpcy5pbnAudmFsdWUubGVuZ3RoID09PSAwKSl7XHJcbiAgICAgIHJldHVybiB0aGlzLmlucC5sKCdGaWxlTm90U2VsZWN0ZWQnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHQgPSB0eXBlb2YgdGhpcy5pbnAudmFsdWUgPT09ICdzdHJpbmcnID8gdGhpcy5pbnAudmFsdWUgOiB0aGlzLmlucC52YWx1ZS5tYXAoeCA9PiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgPyB4IDogeC5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgY29uc3QgbCA9IHR5cGVvZiB0aGlzLmlucC52YWx1ZSA9PT0gJ3N0cmluZycgPyAxIDogdGhpcy5pbnAudmFsdWUubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHRoaXMuaW5wLmwoJ0ZpbGVTZWxlY3RlZCcsIFtsLCB0XSk7XHJcbiAgfVxyXG4gIG9wZW5GaWxlKGY6IGFueSk6IHZvaWR7XHJcbiAgICB3aW5kb3cub3BlbihmLnVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { InputClass } from '../../../classes/form.class';
|
|
3
|
-
import { InputError, InputType, VehicleType } from '../../../classes/enum.class';
|
|
4
|
-
export class FormVehicleComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.changeIndex = new EventEmitter();
|
|
7
|
-
this.type = VehicleType.Car;
|
|
8
|
-
}
|
|
9
|
-
get vehicleType() { return VehicleType; }
|
|
10
|
-
ngOnInit() {
|
|
11
|
-
this.type = this.inp.rows.find(_ => true);
|
|
12
|
-
this.car = new InputClass(this.inp.environment, this.inp.l, this.inp.name + 'Item', 'fa-user', InputType.Plaque, 'plaque-inp', null, this.inp.required);
|
|
13
|
-
this.carF = new InputClass(this.inp.environment, this.inp.l, this.inp.name + 'Item', 'fa-earth-asia', InputType.PlaqueF, 'plaque-inp', null, this.inp.required);
|
|
14
|
-
this.carG = new InputClass(this.inp.environment, this.inp.l, this.inp.name + 'Item', 'fa-globe', InputType.PlaqueG, 'plaque-inp', null, this.inp.required);
|
|
15
|
-
this.motor = new InputClass(this.inp.environment, this.inp.l, this.inp.name + 'Item', 'fa-motorcycle', InputType.PlaqueM, 'plaque-inp', null, this.inp.required);
|
|
16
|
-
this.car.displayLabel = this.carF.displayLabel = this.carG.displayLabel = this.motor.displayLabel = false;
|
|
17
|
-
this.car.disabled = this.carF.disabled = this.carG.disabled = this.motor.disabled = this.inp.disabled;
|
|
18
|
-
this.inp.setValue = (v) => {
|
|
19
|
-
if (v != null && v.Value !== null) {
|
|
20
|
-
this.changeType(v.Type);
|
|
21
|
-
setTimeout(() => {
|
|
22
|
-
if (v.Type === VehicleType.Motorcycle) {
|
|
23
|
-
this.motor.setValue(v.Value, false);
|
|
24
|
-
}
|
|
25
|
-
else if (v.Type === VehicleType.CarF) {
|
|
26
|
-
this.carF.setValue(v.Value, false);
|
|
27
|
-
}
|
|
28
|
-
else if (v.Type === VehicleType.Car) {
|
|
29
|
-
this.car.setValue(v.Value, false);
|
|
30
|
-
}
|
|
31
|
-
else if (v.Type === VehicleType.CarG) {
|
|
32
|
-
this.carG.setValue(v.Value, false);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
this.inp.focus = () => {
|
|
38
|
-
this.onFocusIn();
|
|
39
|
-
};
|
|
40
|
-
this.inp.isValid = () => {
|
|
41
|
-
this.inp.error = null;
|
|
42
|
-
if (this.inp.required && this.type === VehicleType.Car && !this.car.isValid()) {
|
|
43
|
-
this.inp.error = InputError.Required;
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
if (this.inp.required && this.type === VehicleType.Motorcycle && !this.motor.isValid()) {
|
|
47
|
-
this.inp.error = InputError.Required;
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
if (this.inp.required && this.type === VehicleType.CarF && !this.carF.isValid()) {
|
|
51
|
-
this.inp.error = InputError.Required;
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
if (this.inp.required && this.type === VehicleType.CarG && !this.carG.isValid()) {
|
|
55
|
-
this.inp.error = InputError.Required;
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
return true;
|
|
59
|
-
};
|
|
60
|
-
this.inp.clear = () => {
|
|
61
|
-
this.inp.error = null;
|
|
62
|
-
this.inp.setValue(null, false);
|
|
63
|
-
this.changeType(this.inp.rows.find(_ => true));
|
|
64
|
-
this.car.clear();
|
|
65
|
-
this.motor.clear();
|
|
66
|
-
this.carF.clear();
|
|
67
|
-
this.carG.clear();
|
|
68
|
-
};
|
|
69
|
-
this.inp.data = () => {
|
|
70
|
-
const d = { Type: this.type };
|
|
71
|
-
d[this.inp.name] = this.type === VehicleType.Car ? this.car.data() :
|
|
72
|
-
this.type === VehicleType.Motorcycle ? this.motor.data() :
|
|
73
|
-
this.type === VehicleType.CarF ? this.carF.data() :
|
|
74
|
-
this.type === VehicleType.CarG ? this.carG.data() : null;
|
|
75
|
-
return d;
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
changeType(t) {
|
|
79
|
-
this.type = t;
|
|
80
|
-
if (this.inp.onChange) {
|
|
81
|
-
this.inp.onChange(t);
|
|
82
|
-
}
|
|
83
|
-
this.onFocusIn();
|
|
84
|
-
}
|
|
85
|
-
onFocusIn() {
|
|
86
|
-
setTimeout(() => {
|
|
87
|
-
$('#' + this.inp.id + 'VehicleInput #Part1TextInput .control').focus();
|
|
88
|
-
}, 100);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
FormVehicleComponent.decorators = [
|
|
92
|
-
{ type: Component, args: [{
|
|
93
|
-
selector: 'lib-form-vehicle',
|
|
94
|
-
template: "<div #inputDiv [id]=\"inp.id + 'VehicleInput'\" [style]=\"inp.style\" [className]=\"inp.class + (inp.error == null ? '' : ' error') + (inp.disabled || inp.loading ? ' disabled' : '') + (inp.icon != null ? '' : ' without-icon') + ' form-input-con w-100 vehicle'\">\r\n <div class=\"form-input\">\r\n <div class=\"disable-con\"></div>\r\n <div class=\"label\">\r\n <i *ngIf=\"inp.required\" class=\"f-r fas fa-star-of-life required-icon\"></i>\r\n <span *ngIf=\"inp.rows.length == 1\">{{inp.l('Plaque')}}</span>\r\n <i *ngIf=\"inp.rows.length > 1 && inp.rows.includes(vehicleType.Car)\" [className]=\"(type === vehicleType.Car ? 'active ' : '') + 'change-type-btn fas fa-car'\" (click)=\"changeType(vehicleType.Car)\"></i>\r\n <i *ngIf=\"inp.rows.length > 1 && inp.rows.includes(vehicleType.CarF)\" [className]=\"(type === vehicleType.CarF ? 'active ' : '') + 'change-type-btn fas fa-earth-asia'\" (click)=\"changeType(vehicleType.CarF)\"></i>\r\n <i *ngIf=\"inp.rows.length > 1 && inp.rows.includes(vehicleType.CarG)\" [className]=\"(type === vehicleType.CarG ? 'active ' : '') + 'change-type-btn fas fa-globe'\" (click)=\"changeType(vehicleType.CarG)\"></i>\r\n <i *ngIf=\"inp.rows.length > 1 && inp.rows.includes(vehicleType.Motorcycle)\" [className]=\"(type === vehicleType.Motorcycle ? 'active ' : '') + 'change-type-btn fas fa-motorcycle'\" (click)=\"changeType(vehicleType.Motorcycle)\"></i>\r\n </div>\r\n <div class=\"w-100 p-r\">\r\n <lib-form-plaque (changeIndex)=\"changeIndex.emit($event)\" [inp]=\"car\" *ngIf=\"type === vehicleType.Car\"></lib-form-plaque>\r\n <lib-form-plaque (changeIndex)=\"changeIndex.emit($event)\" [inp]=\"carF\" *ngIf=\"type === vehicleType.CarF\"></lib-form-plaque>\r\n <lib-form-plaque (changeIndex)=\"changeIndex.emit($event)\" [inp]=\"carG\" *ngIf=\"type === vehicleType.CarG\"></lib-form-plaque>\r\n <lib-form-plaque (changeIndex)=\"changeIndex.emit($event)\" [inp]=\"motor\" *ngIf=\"type === vehicleType.Motorcycle\"></lib-form-plaque>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
95
|
-
styles: [".form-input-con.vehicle{align-items:center;display:flex;float:right;justify-content:center;position:relative}.form-input-con.vehicle .form-input{float:right;position:relative;width:198px}.form-input-con.vehicle .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.vehicle.error .form-input .label{color:var(--red);font-size:10px}.form-input-con.vehicle .form-input .label .required-icon{color:var(--red);font-size:9px;height:20px;line-height:20px;text-align:center;width:20px}.form-input-con.vehicle .form-input .label .change-type-btn{cursor:pointer;float:right;font-size:16px;height:20px;line-height:20px;text-align:center;width:30px}.form-input-con.vehicle .form-input .label .change-type-btn.fa-user{font-size:14px;line-height:18px}.form-input-con.vehicle .form-input .label .change-type-btn.active,.form-input-con.vehicle .form-input .label .change-type-btn:hover{color:var(--primary)}.form-input-con.vehicle .form-input .control{background-color:#fff;background-image:none;border:none;border-radius:var(--border-radius-base);box-shadow:0 1px 3px 0 rgba(0,0,0,.4);color:var(--black);display:block;font-size:11px;height:35px;padding:5px 35px;position:relative;text-align:center;width:100%;z-index:2}.form-input-con.vehicle .form-input .control:focus,.form-input-con.vehicle .form-input:hover .control{box-shadow:0 1px 5px 0 rgba(0,0,0,.7)}.form-input-con.vehicle .form-input span.icon{bottom:0;color:var(--primary);cursor:text;font-size:14px;height:35px;left:0;line-height:38px;position:absolute;text-align:center;transition:all .35s ease-in-out;width:35px;z-index:2}.form-input-con.vehicle .form-input span.icon.button{background-color:var(--base);border-radius:var(--border-radius-base) 0 0 var(--border-radius-base);color:#fff;cursor:pointer}.form-input-con.vehicle .form-input span.icon.button:hover{background-color:var(--base-dark)}.form-input-con.vehicle .form-input span.icon.button.blue{background-color:var(--blue)}.form-input-con.vehicle .form-input span.icon.button.blue:hover{background-color:var(--blue-dark)}.form-input-con.vehicle .form-input span.icon.button.green{background-color:var(--green)}.form-input-con.vehicle .form-input span.icon.button.green:hover{background-color:var(--green-dark)}.form-input-con.vehicle .form-input span.icon.button.red{background-color:var(--red)}.form-input-con.vehicle .form-input span.icon.button.red:hover{background-color:var(--red-dark)}.form-input-con.vehicle .form-input span.icon.button.yellow{background-color:var(--yellow)}.form-input-con.vehicle .form-input span.icon.button.yellow:hover{background-color:var(--yellow-dark)}.form-input-con.vehicle .form-input .disable-con{display:none}.form-input-con.vehicle.disabled .form-input{-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;box-shadow:unset;cursor:default}.form-input-con.vehicle.disabled .form-input .disable-con{display:block;height:100%;position:absolute;right:0;top:0;width:100%;z-index:5}.form-input-con.vehicle.display .form-input .label{display:none}.form-input-con.vehicle.display .form-input .disable-con{display:block;height:100%;position:absolute;right:0;top:0;width:100%;z-index:5}.form-input-con.vehicle.error .form-input .control{box-shadow:0 1px 3px 0 var(--red)}.form-input-con.vehicle.error .form-input .control,.form-input-con.vehicle.error .form-input span.icon{color:var(--red-light)}.form-input-con.vehicle .form-input .progress{background-color:var(--primary);border-radius:var(--border-radius-base);bottom:0;height:3px;line-height:3px;position:absolute;right:0;transition:width .5s ease-in-out;width:100%;z-index:2}.form-input-con.vehicle.without-icon .form-input .control{padding:5px 10px}.form-input-con.vehicle.h-50 .form-input .control{height:50px}.form-input-con.vehicle.h-50 .form-input span.icon{height:50px;line-height:50px}.form-input-con.vehicle.h-45 .form-input .control{height:45px}.form-input-con.vehicle.h-45 .form-input span.icon{height:45px;line-height:45px}.form-input-con.vehicle.h-30 .form-input .control{font-size:10px;height:30px;padding:0}.form-input-con.vehicle.h-30 .form-input span.icon{height:30px;line-height:30px}.form-input-con.vehicle.h-35 .form-input{height:35px}.form-input-con.vehicle.h-35 .form-input .control{height:35px;padding:0 35px}.form-input-con.vehicle.h-35 .form-input span.icon{height:35px;line-height:35px}.form-input-con.vehicle.h-25 .form-input .control{height:25px;padding:0}.form-input-con.vehicle.h-25 .form-input span.icon{height:25px;line-height:25px}.form-input-con.vehicle.table-search .form-input{float:right;margin-right:10%;margin-top:4px;width:80%}.form-input-con.vehicle.h-22 .form-input .control{height:22px;padding:0}.form-input-con.vehicle.h-22 .form-input span.icon{height:22px;line-height:22px}.form-input-con.vehicle.plaque-part-1 .form-input{float:left;padding:0!important;width:35px!important}.form-input-con.vehicle.plaque-part-1 .form-input.plaque-part-m{width:49px!important}.form-input-con.vehicle.plaque-part-3 .form-input{float:left;padding:0!important;width:49px!important}.form-input-con.vehicle.plaque-part-3 .form-input.plaque-part-m{width:69px!important}.form-input-con.vehicle.plaque-part-4 .form-input{float:left;margin-top:10px;padding:0!important;width:34px!important}.form-input-con.vehicle.plaque-part-4 .form-input .control{height:25px!important}.form-input-con.vehicle.plaque-part-4 .form-input.plaque-part-m{display:none!important}.form-input-con.vehicle.bank-card-part-item .form-input{float:left;padding:0!important;width:25%}.form-input-con.vehicle.bank-card-part-item .form-input:not(.bank-card-part-4):after{content:\"\\f068\";font-family:Font Awesome\\ 5 Free;font-size:6px;font-weight:900;height:20px;line-height:20px;position:absolute;right:-10px;text-align:center;top:calc(50% - 10px);width:20px}.form-input-con.vehicle.bank-card-part-item .form-input .control{background-color:initial!important;box-shadow:unset!important;font-size:13px!important;padding:0!important}"]
|
|
96
|
-
},] }
|
|
97
|
-
];
|
|
98
|
-
FormVehicleComponent.ctorParameters = () => [];
|
|
99
|
-
FormVehicleComponent.propDecorators = {
|
|
100
|
-
inp: [{ type: Input }],
|
|
101
|
-
changeIndex: [{ type: Output }],
|
|
102
|
-
inputDiv: [{ type: ViewChild, args: ['inputDiv',] }]
|
|
103
|
-
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS52ZWhpY2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Qc1Rvb2xraXQvVUkvcHJvamVjdHMvcHMtdG9vbGtpdC11aS9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9mb3JtL3ZlaGljbGUvZm9ybS52ZWhpY2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFPL0UsTUFBTSxPQUFPLG9CQUFvQjtJQVkvQjtRQVJBLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFRcEMsQ0FBQztJQUZELElBQUksV0FBVyxLQUF5QixPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFHN0QsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQ2hGLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFDakYsZUFBZSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUNqRixVQUFVLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQ2xGLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDdEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUM7Z0JBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFDO3dCQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNyQzt5QkFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksRUFBRTt3QkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDcEM7eUJBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUM7d0JBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQ25DO3lCQUFLLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFDO3dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNwQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUNqRCxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxVQUFVLENBQUMsQ0FBYztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUM7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFFbkIsQ0FBQztJQUNELFNBQVM7UUFDUCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyx1Q0FBdUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7OztZQXBHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsNmlFQUE0Qzs7YUFFN0M7Ozs7a0JBRUUsS0FBSzswQkFFTCxNQUFNO3VCQU9OLFNBQVMsU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0lucHV0Q2xhc3N9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS5jbGFzcyc7XHJcbmltcG9ydCB7SW5wdXRFcnJvciwgSW5wdXRUeXBlLCBWZWhpY2xlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9lbnVtLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZvcm0tdmVoaWNsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0udmVoaWNsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS52ZWhpY2xlLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybVZlaGljbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5wOiBJbnB1dENsYXNzO1xyXG4gIEBPdXRwdXQoKVxyXG4gIGNoYW5nZUluZGV4ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgdHlwZTogVmVoaWNsZVR5cGUgPSBWZWhpY2xlVHlwZS5DYXI7XHJcbiAgY2FyOiBJbnB1dENsYXNzO1xyXG4gIGNhckY6IElucHV0Q2xhc3M7XHJcbiAgY2FyRzogSW5wdXRDbGFzcztcclxuICBtb3RvcjogSW5wdXRDbGFzcztcclxuICBAVmlld0NoaWxkKCdpbnB1dERpdicpIGlucHV0RGl2OiBFbGVtZW50UmVmO1xyXG4gIGdldCB2ZWhpY2xlVHlwZSgpOiB0eXBlb2YgVmVoaWNsZVR5cGUgeyByZXR1cm4gVmVoaWNsZVR5cGU7IH1cclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudHlwZSA9IHRoaXMuaW5wLnJvd3MuZmluZChfID0+IHRydWUpO1xyXG4gICAgdGhpcy5jYXIgPSBuZXcgSW5wdXRDbGFzcyh0aGlzLmlucC5lbnZpcm9ubWVudCwgdGhpcy5pbnAubCwgdGhpcy5pbnAubmFtZSArICdJdGVtJyxcclxuICAgICAgJ2ZhLXVzZXInLCBJbnB1dFR5cGUuUGxhcXVlLCAncGxhcXVlLWlucCcsIG51bGwsIHRoaXMuaW5wLnJlcXVpcmVkKTtcclxuICAgIHRoaXMuY2FyRiA9IG5ldyBJbnB1dENsYXNzKHRoaXMuaW5wLmVudmlyb25tZW50LCB0aGlzLmlucC5sLCB0aGlzLmlucC5uYW1lICsgJ0l0ZW0nLFxyXG4gICAgICAnZmEtZWFydGgtYXNpYScsIElucHV0VHlwZS5QbGFxdWVGLCAncGxhcXVlLWlucCcsIG51bGwsIHRoaXMuaW5wLnJlcXVpcmVkKTtcclxuICAgIHRoaXMuY2FyRyA9IG5ldyBJbnB1dENsYXNzKHRoaXMuaW5wLmVudmlyb25tZW50LCB0aGlzLmlucC5sLCB0aGlzLmlucC5uYW1lICsgJ0l0ZW0nLFxyXG4gICAgICAnZmEtZ2xvYmUnLCBJbnB1dFR5cGUuUGxhcXVlRywgJ3BsYXF1ZS1pbnAnLCBudWxsLCB0aGlzLmlucC5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLm1vdG9yID0gbmV3IElucHV0Q2xhc3ModGhpcy5pbnAuZW52aXJvbm1lbnQsIHRoaXMuaW5wLmwsIHRoaXMuaW5wLm5hbWUgKyAnSXRlbScsXHJcbiAgICAgICdmYS1tb3RvcmN5Y2xlJywgSW5wdXRUeXBlLlBsYXF1ZU0sICdwbGFxdWUtaW5wJywgbnVsbCwgdGhpcy5pbnAucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5jYXIuZGlzcGxheUxhYmVsID0gdGhpcy5jYXJGLmRpc3BsYXlMYWJlbCA9IHRoaXMuY2FyRy5kaXNwbGF5TGFiZWwgPSB0aGlzLm1vdG9yLmRpc3BsYXlMYWJlbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYXIuZGlzYWJsZWQgPSB0aGlzLmNhckYuZGlzYWJsZWQgPSB0aGlzLmNhckcuZGlzYWJsZWQgPSB0aGlzLm1vdG9yLmRpc2FibGVkID0gdGhpcy5pbnAuZGlzYWJsZWQ7XHJcbiAgICB0aGlzLmlucC5zZXRWYWx1ZSA9ICh2KSA9PiB7XHJcbiAgICAgIGlmICh2ICE9IG51bGwgJiYgdi5WYWx1ZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUeXBlKHYuVHlwZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodi5UeXBlID09PSBWZWhpY2xlVHlwZS5Nb3RvcmN5Y2xlKXtcclxuICAgICAgICAgICAgdGhpcy5tb3Rvci5zZXRWYWx1ZSh2LlZhbHVlLCBmYWxzZSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHYuVHlwZSA9PT0gVmVoaWNsZVR5cGUuQ2FyRikge1xyXG4gICAgICAgICAgICB0aGlzLmNhckYuc2V0VmFsdWUodi5WYWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgfWVsc2UgaWYgKHYuVHlwZSA9PT0gVmVoaWNsZVR5cGUuQ2FyKXtcclxuICAgICAgICAgICAgdGhpcy5jYXIuc2V0VmFsdWUodi5WYWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgfWVsc2UgaWYgKHYuVHlwZSA9PT0gVmVoaWNsZVR5cGUuQ2FyRyl7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyRy5zZXRWYWx1ZSh2LlZhbHVlLCBmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5mb2N1cyA9ICgpID0+IHtcclxuICAgICAgdGhpcy5vbkZvY3VzSW4oKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5pc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucC5lcnJvciA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLmlucC5yZXF1aXJlZCAmJiB0aGlzLnR5cGUgPT09IFZlaGljbGVUeXBlLkNhciAmJiAhdGhpcy5jYXIuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5pbnAuZXJyb3IgPSBJbnB1dEVycm9yLlJlcXVpcmVkO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbnAucmVxdWlyZWQgJiYgdGhpcy50eXBlID09PSBWZWhpY2xlVHlwZS5Nb3RvcmN5Y2xlICYmICF0aGlzLm1vdG9yLmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMuaW5wLmVycm9yID0gSW5wdXRFcnJvci5SZXF1aXJlZDtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5wLnJlcXVpcmVkICYmIHRoaXMudHlwZSA9PT0gVmVoaWNsZVR5cGUuQ2FyRiAmJiAhdGhpcy5jYXJGLmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMuaW5wLmVycm9yID0gSW5wdXRFcnJvci5SZXF1aXJlZDtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5wLnJlcXVpcmVkICYmIHRoaXMudHlwZSA9PT0gVmVoaWNsZVR5cGUuQ2FyRyAmJiAhdGhpcy5jYXJHLmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMuaW5wLmVycm9yID0gSW5wdXRFcnJvci5SZXF1aXJlZDtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnAuY2xlYXIgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5wLmVycm9yID0gbnVsbDtcclxuICAgICAgdGhpcy5pbnAuc2V0VmFsdWUobnVsbCwgZmFsc2UpO1xyXG4gICAgICB0aGlzLmNoYW5nZVR5cGUodGhpcy5pbnAucm93cy5maW5kKF8gPT4gdHJ1ZSkpO1xyXG4gICAgICB0aGlzLmNhci5jbGVhcigpO1xyXG4gICAgICB0aGlzLm1vdG9yLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuY2FyRi5jbGVhcigpO1xyXG4gICAgICB0aGlzLmNhckcuY2xlYXIoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlucC5kYXRhID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBkID0ge1R5cGU6IHRoaXMudHlwZX07XHJcbiAgICAgIGRbdGhpcy5pbnAubmFtZV0gPSB0aGlzLnR5cGUgPT09IFZlaGljbGVUeXBlLkNhciA/IHRoaXMuY2FyLmRhdGEoKSA6XHJcbiAgICAgICAgdGhpcy50eXBlID09PSBWZWhpY2xlVHlwZS5Nb3RvcmN5Y2xlID8gdGhpcy5tb3Rvci5kYXRhKCkgOlxyXG4gICAgICAgICAgdGhpcy50eXBlID09PSBWZWhpY2xlVHlwZS5DYXJGID8gdGhpcy5jYXJGLmRhdGEoKSA6XHJcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gVmVoaWNsZVR5cGUuQ2FyRyA/IHRoaXMuY2FyRy5kYXRhKCkgOiBudWxsO1xyXG4gICAgICByZXR1cm4gZDtcclxuICAgIH07XHJcbiAgfVxyXG4gIGNoYW5nZVR5cGUodDogVmVoaWNsZVR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMudHlwZSA9IHQ7XHJcbiAgICBpZiAodGhpcy5pbnAub25DaGFuZ2Upe1xyXG4gICAgICB0aGlzLmlucC5vbkNoYW5nZSh0KTtcclxuICAgIH1cclxuICAgIHRoaXMub25Gb2N1c0luKCk7XHJcblxyXG4gIH1cclxuICBvbkZvY3VzSW4oKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgJCgnIycgKyB0aGlzLmlucC5pZCArICdWZWhpY2xlSW5wdXQgI1BhcnQxVGV4dElucHV0IC5jb250cm9sJykuZm9jdXMoKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|