@solidev/data 0.4.8 → 0.5.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/fesm2022/solidev-data.mjs +181 -157
- package/fesm2022/solidev-data.mjs.map +1 -1
- package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +2 -2
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +7 -1
- package/package.json +5 -7
- package/esm2022/lib/auth/auth-interceptor.service.mjs +0 -113
- package/esm2022/lib/auth/auth.service.mjs +0 -216
- package/esm2022/lib/auth/jwt.mjs +0 -21
- package/esm2022/lib/data/data-backend.mjs +0 -162
- package/esm2022/lib/data/data-collection.mjs +0 -125
- package/esm2022/lib/data/data-collection.mock.mjs +0 -39
- package/esm2022/lib/data/data-model.mjs +0 -291
- package/esm2022/lib/data/data-parameters.mjs +0 -34
- package/esm2022/lib/data/data-query.mjs +0 -154
- package/esm2022/lib/data/data-query.mock.mjs +0 -46
- package/esm2022/lib/data/fields/base.mjs +0 -144
- package/esm2022/lib/data/fields/boolean.mjs +0 -38
- package/esm2022/lib/data/fields/computed.mjs +0 -10
- package/esm2022/lib/data/fields/datetime.mjs +0 -167
- package/esm2022/lib/data/fields/index.mjs +0 -8
- package/esm2022/lib/data/fields/numbers.mjs +0 -38
- package/esm2022/lib/data/fields/primaryfield.mjs +0 -9
- package/esm2022/lib/data/fields/relations.mjs +0 -53
- package/esm2022/lib/data/fields/stringfields.mjs +0 -71
- package/esm2022/lib/dispedit/choice.pipe.mjs +0 -79
- package/esm2022/lib/dispedit/dispedit/dispedit.component.mjs +0 -480
- package/esm2022/lib/dispedit/dispedit/dispedit.constants.mjs +0 -2
- package/esm2022/lib/dispedit/factor.pipe.mjs +0 -81
- package/esm2022/lib/dispedit/factorc.pipe.mjs +0 -99
- package/esm2022/lib/dispedit/fkselect/fkselect.component.mjs +0 -139
- package/esm2022/lib/dispedit/flags/flags.component.mjs +0 -137
- package/esm2022/lib/dispedit/m2mselect/m2mselect.component.mjs +0 -312
- package/esm2022/lib/dispedit/richedit/richedit.component.mjs +0 -126
- package/esm2022/lib/dispedit/sdelete/sdelete.component.mjs +0 -103
- package/esm2022/lib/messages/message-zone/message-zone.component.mjs +0 -53
- package/esm2022/lib/messages/message.service.mjs +0 -151
- package/esm2022/lib/modellist/model-list-fields/model-list-field-header/messages.mjs +0 -2
- package/esm2022/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +0 -61
- package/esm2022/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +0 -64
- package/esm2022/lib/modellist/model-list-fields/model-list-fields.mjs +0 -273
- package/esm2022/lib/modellist/model-list-filters/filters/filtertypes.mjs +0 -3
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +0 -109
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +0 -28
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +0 -29
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +0 -9
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +0 -40
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +0 -14
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +0 -40
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +0 -14
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +0 -21
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +0 -14
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +0 -49
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +0 -23
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +0 -24
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +0 -63
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +0 -16
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +0 -46
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +0 -49
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +0 -56
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +0 -40
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +0 -51
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +0 -21
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +0 -40
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +0 -17
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +0 -174
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +0 -18
- package/esm2022/lib/modellist/model-list-filters/model-list-filter-group.mjs +0 -19
- package/esm2022/lib/modellist/model-list-filters/model-list-filter.mjs +0 -157
- package/esm2022/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +0 -50
- package/esm2022/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +0 -51
- package/esm2022/lib/modellist/model-list-filters/model-list-filters.mjs +0 -134
- package/esm2022/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +0 -69
- package/esm2022/lib/modellist/model-list-paginator/model-list-paginator.mjs +0 -47
- package/esm2022/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +0 -49
- package/esm2022/lib/modellist/model-list-sorter/model-list-sorter.mjs +0 -116
- package/esm2022/lib/modellist/model-list.service.mjs +0 -168
- package/esm2022/lib/routing/breadcrumb/breadcrumb.component.mjs +0 -138
- package/esm2022/lib/routing/routing.mjs +0 -57
- package/esm2022/lib/updates/update/update.component.mjs +0 -17
- package/esm2022/lib/updates/update.service.mjs +0 -58
- package/esm2022/lib/uploader/index.mjs +0 -6
- package/esm2022/lib/uploader/interfaces.mjs +0 -8
- package/esm2022/lib/uploader/ng-file-drop.directive.mjs +0 -81
- package/esm2022/lib/uploader/ng-file-select.directive.mjs +0 -51
- package/esm2022/lib/uploader/ngx-uploader.class.mjs +0 -308
- package/esm2022/lib/uploader/ngx-uploader.module.mjs +0 -17
- package/esm2022/lib/utils/slugify.mjs +0 -16
- package/esm2022/lib/utils/tab-memory.service.mjs +0 -80
- package/esm2022/lib/utils/template.mjs +0 -72
- package/esm2022/public-api.mjs +0 -56
- package/esm2022/solidev-data.mjs +0 -5
- package/solidev-data-0.4.8.tgz +0 -0
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
import { Component, DestroyRef, EventEmitter, inject, Input, Output, } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR, ReactiveFormsModule, UntypedFormControl, } from '@angular/forms';
|
|
3
|
-
import { debounceTime, distinctUntilChanged, firstValueFrom, } from 'rxjs';
|
|
4
|
-
import { switchMap } from 'rxjs/operators';
|
|
5
|
-
import { CommonModule } from '@angular/common';
|
|
6
|
-
import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
|
|
7
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common";
|
|
10
|
-
import * as i2 from "@angular/forms";
|
|
11
|
-
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
-
export class M2mselectComponent {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.edit = false;
|
|
15
|
-
this.pks = [];
|
|
16
|
-
this.disabled = false;
|
|
17
|
-
this.filter = {};
|
|
18
|
-
this.mode = 'auto';
|
|
19
|
-
this.search = 'search';
|
|
20
|
-
// Display
|
|
21
|
-
this.label = '';
|
|
22
|
-
this.placeholder = '';
|
|
23
|
-
this.emptyLabel = '';
|
|
24
|
-
this.inputClasses = [];
|
|
25
|
-
// Outputs
|
|
26
|
-
this.added = new EventEmitter();
|
|
27
|
-
this.removed = new EventEmitter();
|
|
28
|
-
this.cancelled = new EventEmitter();
|
|
29
|
-
this.cleared = new EventEmitter();
|
|
30
|
-
this.detailsChanged = new EventEmitter();
|
|
31
|
-
this.changed = new EventEmitter();
|
|
32
|
-
this.searchFn = this._search.bind(this);
|
|
33
|
-
this.displayFn = this._display.bind(this);
|
|
34
|
-
this.touched = false;
|
|
35
|
-
this.destroy$ = inject(DestroyRef);
|
|
36
|
-
/**
|
|
37
|
-
* Control value accessor onChange dummy callback;
|
|
38
|
-
* @param fks
|
|
39
|
-
*/
|
|
40
|
-
this.onChange = (fks) => { };
|
|
41
|
-
/**
|
|
42
|
-
* Control value accessor onTouched dummy callback;
|
|
43
|
-
*/
|
|
44
|
-
this.onTouched = () => { };
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* OnChange register from controlValueAccessor
|
|
48
|
-
* @param onChange callback
|
|
49
|
-
*/
|
|
50
|
-
registerOnChange(onChange) {
|
|
51
|
-
this.onChange = onChange;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* OnTouched register from controlValueAccessor
|
|
55
|
-
* @param onTouched callback
|
|
56
|
-
*/
|
|
57
|
-
registerOnTouched(onTouched) {
|
|
58
|
-
this.onTouched = onTouched;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* OnInit :
|
|
62
|
-
* - ensures queryset is available
|
|
63
|
-
* - creates form control for input
|
|
64
|
-
* - creates display function
|
|
65
|
-
* - ensure values are set from any source
|
|
66
|
-
*/
|
|
67
|
-
ngOnInit() {
|
|
68
|
-
// Create queryset if not given
|
|
69
|
-
// queryset is create through model
|
|
70
|
-
if (!this.queryset && this.collection) {
|
|
71
|
-
this.queryset = this.collection.queryset();
|
|
72
|
-
}
|
|
73
|
-
else if (!this.queryset && this.model && this.model._collection) {
|
|
74
|
-
this.collection = this.model._collection;
|
|
75
|
-
this.queryset = this.collection.queryset();
|
|
76
|
-
}
|
|
77
|
-
if (!this.queryset) {
|
|
78
|
-
throw Error('queryset is mandatory for m2m select');
|
|
79
|
-
}
|
|
80
|
-
// Create form control for typeahead and subscribe for changes
|
|
81
|
-
this.fc = new UntypedFormControl('');
|
|
82
|
-
this.fc.valueChanges
|
|
83
|
-
.pipe(takeUntilDestroyed(this.destroy$), distinctUntilChanged())
|
|
84
|
-
.subscribe((value) => {
|
|
85
|
-
if (value) {
|
|
86
|
-
this.onAdd(value);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
// Set display function
|
|
90
|
-
if (this.display) {
|
|
91
|
-
if (this.display && typeof this.display === 'string') {
|
|
92
|
-
this._tpl = (model) => `${model[this.display]}`;
|
|
93
|
-
}
|
|
94
|
-
else if (this.display && typeof this.display === 'function') {
|
|
95
|
-
this._tpl = this.display.bind(this);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
this._tpl = (model) => `${model['name'] ||
|
|
100
|
-
model['title'] ||
|
|
101
|
-
model['id']}`;
|
|
102
|
-
}
|
|
103
|
-
// Get values from model if not already given
|
|
104
|
-
// TODO: check if this is necessary
|
|
105
|
-
if (!this.values && this.model && this.field) {
|
|
106
|
-
this.values = this.model[this.field + '_details'];
|
|
107
|
-
}
|
|
108
|
-
if (this.values === undefined) {
|
|
109
|
-
console.error('no values available for ', this.model, this.field);
|
|
110
|
-
throw Error('no values available');
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Remove a value.
|
|
115
|
-
* Emits detailsChanged, changed and removed signals.
|
|
116
|
-
* @param i instance to be removed
|
|
117
|
-
*/
|
|
118
|
-
onRemove(i) {
|
|
119
|
-
if (!this.disabled) {
|
|
120
|
-
this.markAsTouched();
|
|
121
|
-
const ps = this.pks.indexOf(i.id);
|
|
122
|
-
this.pks.splice(ps, 1);
|
|
123
|
-
this.values.splice(ps, 1);
|
|
124
|
-
this.detailsChanged.emit(this.values);
|
|
125
|
-
this.changed.emit(this.pks);
|
|
126
|
-
this.removed.emit(i);
|
|
127
|
-
this.onChange(this.pks);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Add a value.
|
|
132
|
-
* Emits detailsChanged, changed and added signals.
|
|
133
|
-
* @param i instance to be added.
|
|
134
|
-
*/
|
|
135
|
-
onAdd(i) {
|
|
136
|
-
if (!this.disabled) {
|
|
137
|
-
this.markAsTouched();
|
|
138
|
-
this.pks.push(i.id);
|
|
139
|
-
this.values.push(i);
|
|
140
|
-
this.detailsChanged.emit(this.values);
|
|
141
|
-
this.changed.emit(this.pks);
|
|
142
|
-
this.added.emit(i);
|
|
143
|
-
this.onChange(this.pks);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Clear all values.
|
|
148
|
-
* Emits detailsChanged, changed and cleared signals.
|
|
149
|
-
*/
|
|
150
|
-
onClear() {
|
|
151
|
-
if (!this.disabled) {
|
|
152
|
-
this.markAsTouched();
|
|
153
|
-
this.pks = [];
|
|
154
|
-
this.values = [];
|
|
155
|
-
this.detailsChanged.emit(this.values);
|
|
156
|
-
this.changed.emit(this.pks);
|
|
157
|
-
this.cleared.emit();
|
|
158
|
-
this.onChange(this.pks);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Write value from controlValueAccessor.
|
|
163
|
-
* @param pks
|
|
164
|
-
*/
|
|
165
|
-
async writeValue(pks) {
|
|
166
|
-
this.pks = pks;
|
|
167
|
-
await this._getDisplayValues(pks);
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Mark as touched.
|
|
171
|
-
*/
|
|
172
|
-
markAsTouched() {
|
|
173
|
-
if (!this.touched) {
|
|
174
|
-
this.onTouched();
|
|
175
|
-
this.touched = true;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Mark as disabled.
|
|
180
|
-
* @param disabled
|
|
181
|
-
*/
|
|
182
|
-
setDisabledState(disabled) {
|
|
183
|
-
this.disabled = disabled;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Retrieve display values for current set of pks.
|
|
187
|
-
* Eventually fetches items from collection.
|
|
188
|
-
* Emits detailsChanged signal.
|
|
189
|
-
* @param pks list of current pks.
|
|
190
|
-
* @private
|
|
191
|
-
*/
|
|
192
|
-
async _getDisplayValues(pks = []) {
|
|
193
|
-
const values = [];
|
|
194
|
-
for (const k of pks) {
|
|
195
|
-
let found = false;
|
|
196
|
-
for (let v of this.values) {
|
|
197
|
-
if (v.id == k) {
|
|
198
|
-
values.push(v);
|
|
199
|
-
found = true;
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
if (!found) {
|
|
204
|
-
if (this.collection) {
|
|
205
|
-
values.push(await firstValueFrom(this.collection.fetch(k)));
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
values.push({ id: k, _display: 'Unknown' });
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
this.values = values;
|
|
213
|
-
this.detailsChanged.next(this.values);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Display function. Uses descfield or desc tpl (lodash template using model fields).
|
|
217
|
-
*/
|
|
218
|
-
_display(x) {
|
|
219
|
-
if (x) {
|
|
220
|
-
if (x._display) {
|
|
221
|
-
if (x._display instanceof Function) {
|
|
222
|
-
return x._display();
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
return x._display;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
if (this._tpl) {
|
|
229
|
-
return this._tpl(x);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return '';
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Search function.
|
|
236
|
-
* @param text$
|
|
237
|
-
* @private
|
|
238
|
-
*/
|
|
239
|
-
_search(text$) {
|
|
240
|
-
return text$.pipe(takeUntilDestroyed(this.destroy$), debounceTime(750), distinctUntilChanged(), switchMap((term) => {
|
|
241
|
-
const f = {};
|
|
242
|
-
for (const k of Object.keys(this.filter)) {
|
|
243
|
-
if (this.filter[k] !== null || this.filter[k] !== undefined) {
|
|
244
|
-
f[k] = this.filter[k];
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
f[this.search] = term;
|
|
248
|
-
const qs = this.queryset;
|
|
249
|
-
qs.filter(f, true);
|
|
250
|
-
return qs.get();
|
|
251
|
-
}));
|
|
252
|
-
}
|
|
253
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: M2mselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
254
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: M2mselectComponent, isStandalone: true, selector: "data-m2mselect", inputs: { model: "model", field: "field", edit: "edit", values: "values", queryset: "queryset", collection: "collection", filter: "filter", mode: "mode", display: "display", search: "search", label: "label", placeholder: "placeholder", emptyLabel: "emptyLabel", inputClasses: "inputClasses" }, outputs: { added: "added", removed: "removed", cancelled: "cancelled", cleared: "cleared", detailsChanged: "detailsChanged", changed: "changed" }, providers: [
|
|
255
|
-
{
|
|
256
|
-
provide: NG_VALUE_ACCESSOR,
|
|
257
|
-
multi: true,
|
|
258
|
-
useExisting: M2mselectComponent,
|
|
259
|
-
},
|
|
260
|
-
], ngImport: i0, template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i3.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "selectOnExact", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }] }); }
|
|
261
|
-
}
|
|
262
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: M2mselectComponent, decorators: [{
|
|
263
|
-
type: Component,
|
|
264
|
-
args: [{ selector: 'data-m2mselect', providers: [
|
|
265
|
-
{
|
|
266
|
-
provide: NG_VALUE_ACCESSOR,
|
|
267
|
-
multi: true,
|
|
268
|
-
useExisting: M2mselectComponent,
|
|
269
|
-
},
|
|
270
|
-
], standalone: true, imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule], template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>" }]
|
|
271
|
-
}], propDecorators: { model: [{
|
|
272
|
-
type: Input
|
|
273
|
-
}], field: [{
|
|
274
|
-
type: Input
|
|
275
|
-
}], edit: [{
|
|
276
|
-
type: Input
|
|
277
|
-
}], values: [{
|
|
278
|
-
type: Input
|
|
279
|
-
}], queryset: [{
|
|
280
|
-
type: Input
|
|
281
|
-
}], collection: [{
|
|
282
|
-
type: Input
|
|
283
|
-
}], filter: [{
|
|
284
|
-
type: Input
|
|
285
|
-
}], mode: [{
|
|
286
|
-
type: Input
|
|
287
|
-
}], display: [{
|
|
288
|
-
type: Input
|
|
289
|
-
}], search: [{
|
|
290
|
-
type: Input
|
|
291
|
-
}], label: [{
|
|
292
|
-
type: Input
|
|
293
|
-
}], placeholder: [{
|
|
294
|
-
type: Input
|
|
295
|
-
}], emptyLabel: [{
|
|
296
|
-
type: Input
|
|
297
|
-
}], inputClasses: [{
|
|
298
|
-
type: Input
|
|
299
|
-
}], added: [{
|
|
300
|
-
type: Output
|
|
301
|
-
}], removed: [{
|
|
302
|
-
type: Output
|
|
303
|
-
}], cancelled: [{
|
|
304
|
-
type: Output
|
|
305
|
-
}], cleared: [{
|
|
306
|
-
type: Output
|
|
307
|
-
}], detailsChanged: [{
|
|
308
|
-
type: Output
|
|
309
|
-
}], changed: [{
|
|
310
|
-
type: Output
|
|
311
|
-
}] } });
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibTJtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kaXNwZWRpdC9tMm1zZWxlY3QvbTJtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kaXNwZWRpdC9tMm1zZWxlY3QvbTJtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixrQkFBa0IsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixjQUFjLEdBRWYsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQWdCaEUsTUFBTSxPQUFPLGtCQUFrQjtJQWQvQjtRQW9Ca0IsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUd0QixRQUFHLEdBQWEsRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFJUixXQUFNLEdBQWUsRUFBRSxDQUFDO1FBQ3hCLFNBQUksR0FBdUMsTUFBTSxDQUFDO1FBRWxELFdBQU0sR0FBRyxRQUFRLENBQUM7UUFDbEMsVUFBVTtRQUNNLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxn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LGtCQUFrQjtrQkFkOUIsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLG9CQUFvQjt5QkFDaEM7cUJBQ0YsY0FDVyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUM7OEJBTWhELEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUVVLE1BQU07c0JBQXJCLEtBQUs7Z0JBSVUsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBRVUsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFFVyxLQUFLO3NCQUFyQixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU07Z0JBQ1UsU0FBUztzQkFBekIsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQUNVLGNBQWM7c0JBQTlCLE1BQU07Z0JBQ1UsT0FBTztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJEYXRhLCBRdWVyeXNldCB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1xdWVyeSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBPYnNlcnZhYmxlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRwbEZ1biB9IGZyb20gJy4uL2Zrc2VsZWN0L2Zrc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nYlR5cGVhaGVhZE1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS1tMm1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbTJtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbTJtc2VsZWN0LmNvbXBvbmVudC5zYXNzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogTTJtc2VsZWN0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE5nYlR5cGVhaGVhZE1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE0ybXNlbGVjdENvbXBvbmVudDxUIGV4dGVuZHMgRGF0YU1vZGVsLCBSIGV4dGVuZHMgRGF0YU1vZGVsPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8gTW9kZWwgZmllbGQgdmFsdWUgJiB1cGRhdGUgZGF0YVxuICBASW5wdXQoKSBwdWJsaWMgbW9kZWw/OiBUO1xuICBASW5wdXQoKSBwdWJsaWMgZmllbGQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBlZGl0ID0gZmFsc2U7XG4gIC8vIFJhdyB2YWx1ZVxuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVzITogUltdO1xuICBwdWJsaWMgcGtzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLy8gRmsgZmllbGRzLCBlaXRoZXIgbW9kZWwgLyBxdWVyeXNldCAvIGNvbGxlY3Rpb24gbXVzdCBiZSBnaXZlblxuICBASW5wdXQoKSBwdWJsaWMgcXVlcnlzZXQ/OiBRdWVyeXNldDxSPjtcbiAgQElucHV0KCkgcHVibGljIGNvbGxlY3Rpb24/OiBDb2xsZWN0aW9uPFI+O1xuICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyOiBGaWx0ZXJEYXRhID0ge307XG4gIEBJbnB1dCgpIHB1YmxpYyBtb2RlOiAnYXV0b2NvbXBsZXRlJyB8ICdzZWxlY3QnIHwgJ2F1dG8nID0gJ2F1dG8nO1xuICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheT86IHN0cmluZyB8IFRwbEZ1bjxSPjtcbiAgQElucHV0KCkgcHVibGljIHNlYXJjaCA9ICdzZWFyY2gnO1xuICAvLyBEaXNwbGF5XG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGVtcHR5TGFiZWwgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGlucHV0Q2xhc3Nlczogc3RyaW5nW10gfCBzdHJpbmcgPSBbXTtcbiAgLy8gT3V0cHV0c1xuICBAT3V0cHV0KCkgcHVibGljIGFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFI+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGNsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZGV0YWlsc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJbXT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXJbXT4oKTtcblxuICBwdWJsaWMgZmMhOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBzZWFyY2hGbiA9IHRoaXMuX3NlYXJjaC5iaW5kKHRoaXMpO1xuICBwdWJsaWMgZGlzcGxheUZuID0gdGhpcy5fZGlzcGxheS5iaW5kKHRoaXMpO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdHBsITogVHBsRnVuPFI+O1xuICBwcml2YXRlIGRlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAvKipcbiAgICogQ29udHJvbCB2YWx1ZSBhY2Nlc3NvciBvbkNoYW5nZSBkdW1teSBjYWxsYmFjaztcbiAgICogQHBhcmFtIGZrc1xuICAgKi9cbiAgcHVibGljIG9uQ2hhbmdlID0gKGZrczogbnVtYmVyW10pID0+IHt9O1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHZhbHVlIGFjY2Vzc29yIG9uVG91Y2hlZCBkdW1teSBjYWxsYmFjaztcbiAgICovXG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAvKipcbiAgICogT25DaGFuZ2UgcmVnaXN0ZXIgZnJvbSBjb250cm9sVmFsdWVBY2Nlc3NvclxuICAgKiBAcGFyYW0gb25DaGFuZ2UgY2FsbGJhY2tcbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPblRvdWNoZWQgcmVnaXN0ZXIgZnJvbSBjb250cm9sVmFsdWVBY2Nlc3NvclxuICAgKiBAcGFyYW0gb25Ub3VjaGVkIGNhbGxiYWNrXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uSW5pdCA6XG4gICAqIC0gZW5zdXJlcyBxdWVyeXNldCBpcyBhdmFpbGFibGVcbiAgICogLSBjcmVhdGVzIGZvcm0gY29udHJvbCBmb3IgaW5wdXRcbiAgICogLSBjcmVhdGVzIGRpc3BsYXkgZnVuY3Rpb25cbiAgICogLSBlbnN1cmUgdmFsdWVzIGFyZSBzZXQgZnJvbSBhbnkgc291cmNlXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQ3JlYXRlIHF1ZXJ5c2V0IGlmIG5vdCBnaXZlblxuICAgIC8vIHF1ZXJ5c2V0IGlzIGNyZWF0ZSB0aHJvdWdoIG1vZGVsXG4gICAgaWYgKCF0aGlzLnF1ZXJ5c2V0ICYmIHRoaXMuY29sbGVjdGlvbikge1xuICAgICAgdGhpcy5xdWVyeXNldCA9IHRoaXMuY29sbGVjdGlvbi5xdWVyeXNldCgpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucXVlcnlzZXQgJiYgdGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLl9jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLm1vZGVsLl9jb2xsZWN0aW9uO1xuICAgICAgdGhpcy5xdWVyeXNldCA9IHRoaXMuY29sbGVjdGlvbi5xdWVyeXNldCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucXVlcnlzZXQpIHtcbiAgICAgIHRocm93IEVycm9yKCdxdWVyeXNldCBpcyBtYW5kYXRvcnkgZm9yIG0ybSBzZWxlY3QnKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbCBmb3IgdHlwZWFoZWFkIGFuZCBzdWJzY3JpYmUgZm9yIGNoYW5nZXNcbiAgICB0aGlzLmZjID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyk7XG4gICAgdGhpcy5mYy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kkKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25BZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAvLyBTZXQgZGlzcGxheSBmdW5jdGlvblxuICAgIGlmICh0aGlzLmRpc3BsYXkpIHtcbiAgICAgIGlmICh0aGlzLmRpc3BsYXkgJiYgdHlwZW9mIHRoaXMuZGlzcGxheSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5fdHBsID0gKG1vZGVsOiBSKSA9PiBgJHsobW9kZWwgYXMgYW55KVt0aGlzLmRpc3BsYXkgYXMgc3RyaW5nXX1gO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRpc3BsYXkgJiYgdHlwZW9mIHRoaXMuZGlzcGxheSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLl90cGwgPSB0aGlzLmRpc3BsYXkuYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHBsID0gKG1vZGVsOiBSKSA9PlxuICAgICAgICBgJHtcbiAgICAgICAgICAobW9kZWwgYXMgYW55KVsnbmFtZSddIHx8XG4gICAgICAgICAgKG1vZGVsIGFzIGFueSlbJ3RpdGxlJ10gfHxcbiAgICAgICAgICAobW9kZWwgYXMgYW55KVsnaWQnXVxuICAgICAgICB9YDtcbiAgICB9XG4gICAgLy8gR2V0IHZhbHVlcyBmcm9tIG1vZGVsIGlmIG5vdCBhbHJlYWR5IGdpdmVuXG4gICAgLy8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBuZWNlc3NhcnlcbiAgICBpZiAoIXRoaXMudmFsdWVzICYmIHRoaXMubW9kZWwgJiYgdGhpcy5maWVsZCkge1xuICAgICAgdGhpcy52YWx1ZXMgPSAodGhpcy5tb2RlbCBhcyBhbnkpW3RoaXMuZmllbGQgKyAnX2RldGFpbHMnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ25vIHZhbHVlcyBhdmFpbGFibGUgZm9yICcsIHRoaXMubW9kZWwsIHRoaXMuZmllbGQpO1xuICAgICAgdGhyb3cgRXJyb3IoJ25vIHZhbHVlcyBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgdmFsdWUuXG4gICAqIEVtaXRzIGRldGFpbHNDaGFuZ2VkLCBjaGFuZ2VkIGFuZCByZW1vdmVkIHNpZ25hbHMuXG4gICAqIEBwYXJhbSBpIGluc3RhbmNlIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyBvblJlbW92ZShpOiBSKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnN0IHBzID0gdGhpcy5wa3MuaW5kZXhPZihpLmlkKTtcbiAgICAgIHRoaXMucGtzLnNwbGljZShwcywgMSk7XG4gICAgICB0aGlzLnZhbHVlcy5zcGxpY2UocHMsIDEpO1xuICAgICAgdGhpcy5kZXRhaWxzQ2hhbmdlZC5lbWl0KHRoaXMudmFsdWVzKTtcbiAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KHRoaXMucGtzKTtcbiAgICAgIHRoaXMucmVtb3ZlZC5lbWl0KGkpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnBrcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHZhbHVlLlxuICAgKiBFbWl0cyBkZXRhaWxzQ2hhbmdlZCwgY2hhbmdlZCBhbmQgYWRkZWQgc2lnbmFscy5cbiAgICogQHBhcmFtIGkgaW5zdGFuY2UgdG8gYmUgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgb25BZGQoaTogUikge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLnBrcy5wdXNoKGkuaWQpO1xuICAgICAgdGhpcy52YWx1ZXMucHVzaChpKTtcbiAgICAgIHRoaXMuZGV0YWlsc0NoYW5nZWQuZW1pdCh0aGlzLnZhbHVlcyk7XG4gICAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLnBrcyk7XG4gICAgICB0aGlzLmFkZGVkLmVtaXQoaSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucGtzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHZhbHVlcy5cbiAgICogRW1pdHMgZGV0YWlsc0NoYW5nZWQsIGNoYW5nZWQgYW5kIGNsZWFyZWQgc2lnbmFscy5cbiAgICovXG4gIHB1YmxpYyBvbkNsZWFyKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLnBrcyA9IFtdO1xuICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuZGV0YWlsc0NoYW5nZWQuZW1pdCh0aGlzLnZhbHVlcyk7XG4gICAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLnBrcyk7XG4gICAgICB0aGlzLmNsZWFyZWQuZW1pdCgpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnBrcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHZhbHVlIGZyb20gY29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBwYXJhbSBwa3NcbiAgICovXG4gIGFzeW5jIHdyaXRlVmFsdWUocGtzOiBudW1iZXJbXSkge1xuICAgIHRoaXMucGtzID0gcGtzO1xuICAgIGF3YWl0IHRoaXMuX2dldERpc3BsYXlWYWx1ZXMocGtzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIGFzIHRvdWNoZWQuXG4gICAqL1xuICBwdWJsaWMgbWFya0FzVG91Y2hlZCgpIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgYXMgZGlzYWJsZWQuXG4gICAqIEBwYXJhbSBkaXNhYmxlZFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkaXNwbGF5IHZhbHVlcyBmb3IgY3VycmVudCBzZXQgb2YgcGtzLlxuICAgKiBFdmVudHVhbGx5IGZldGNoZXMgaXRlbXMgZnJvbSBjb2xsZWN0aW9uLlxuICAgKiBFbWl0cyBkZXRhaWxzQ2hhbmdlZCBzaWduYWwuXG4gICAqIEBwYXJhbSBwa3MgbGlzdCBvZiBjdXJyZW50IHBrcy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2dldERpc3BsYXlWYWx1ZXMocGtzOiBudW1iZXJbXSA9IFtdKSB7XG4gICAgY29uc3QgdmFsdWVzOiBSW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgcGtzKSB7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IHYgb2YgdGhpcy52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHYuaWQgPT0gaykge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uKSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5jb2xsZWN0aW9uLmZldGNoKGspKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goeyBpZDogaywgX2Rpc3BsYXk6ICdVbmtub3duJyB9IGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgdGhpcy5kZXRhaWxzQ2hhbmdlZC5uZXh0KHRoaXMudmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGZ1bmN0aW9uLiBVc2VzIGRlc2NmaWVsZCBvciBkZXNjIHRwbCAobG9kYXNoIHRlbXBsYXRlIHVzaW5nIG1vZGVsIGZpZWxkcykuXG4gICAqL1xuICBwcml2YXRlIF9kaXNwbGF5KHg6IGFueSk6IGFueSB7XG4gICAgaWYgKHgpIHtcbiAgICAgIGlmICh4Ll9kaXNwbGF5KSB7XG4gICAgICAgIGlmICh4Ll9kaXNwbGF5IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4geC5fZGlzcGxheSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB4Ll9kaXNwbGF5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdHBsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cGwoeCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB0ZXh0JFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2VhcmNoKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0ZXh0JC5waXBlKFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSQpLFxuICAgICAgZGVib3VuY2VUaW1lKDc1MCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKCh0ZXJtKSA9PiB7XG4gICAgICAgIGNvbnN0IGY6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5maWx0ZXIpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsdGVyW2tdICE9PSBudWxsIHx8IHRoaXMuZmlsdGVyW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZba10gPSB0aGlzLmZpbHRlcltrXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZlt0aGlzLnNlYXJjaF0gPSB0ZXJtO1xuICAgICAgICBjb25zdCBxcyA9IHRoaXMucXVlcnlzZXQgYXMgUXVlcnlzZXQ8YW55PjtcbiAgICAgICAgcXMuZmlsdGVyKGYsIHRydWUpO1xuICAgICAgICByZXR1cm4gcXMuZ2V0KCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iLCJcbjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gIDxsYWJlbCAqbmdJZj1cImxhYmVsXCI+e3tsYWJlbH19PC9sYWJlbD5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2Zvcm1Db250cm9sXT1cImZjXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW25nYlR5cGVhaGVhZF09XCJzZWFyY2hGblwiIFtlZGl0YWJsZV09XCJmYWxzZVwiIFtmb2N1c0ZpcnN0XT1cInRydWVcIiBbaW5wdXRGb3JtYXR0ZXJdPVwiZGlzcGxheUZuXCIgW3Jlc3VsdEZvcm1hdHRlcl09XCJkaXNwbGF5Rm5cIiAoa2V5dXAuZXNjYXBlKT1cImNhbmNlbGxlZC5lbWl0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2ggZmxvYXQtZW5kIHBvaW50ZXJcIiAoY2xpY2spPVwiY2xlYXJlZC5lbWl0KClcIj48L2k+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpIG9mIHZhbHVlc1wiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2ggbXMtMiBmbG9hdC1lbmRcIiAoY2xpY2spPVwib25SZW1vdmUoaSlcIj48L2k+e3tkaXNwbGF5Rm4oaSl9fTwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { Editor, NgxEditorModule } from 'ngx-editor';
|
|
4
|
-
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { firstValueFrom } from 'rxjs';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common";
|
|
8
|
-
import * as i2 from "ngx-editor";
|
|
9
|
-
import * as i3 from "@angular/forms";
|
|
10
|
-
export const RichEditToolbars = {
|
|
11
|
-
default: [
|
|
12
|
-
['bold', 'italic'],
|
|
13
|
-
['underline', 'strike'],
|
|
14
|
-
['code', 'blockquote'],
|
|
15
|
-
['ordered_list', 'bullet_list'],
|
|
16
|
-
[{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],
|
|
17
|
-
['link'],
|
|
18
|
-
['text_color', 'background_color'],
|
|
19
|
-
['align_left', 'align_center', 'align_right', 'align_justify'],
|
|
20
|
-
],
|
|
21
|
-
light: [
|
|
22
|
-
['bold', 'italic', 'underline'],
|
|
23
|
-
['ordered_list', 'bullet_list'],
|
|
24
|
-
['text_color'],
|
|
25
|
-
['align_left', 'align_center', 'align_right', 'align_justify'],
|
|
26
|
-
],
|
|
27
|
-
none: [],
|
|
28
|
-
};
|
|
29
|
-
export class RicheditComponent {
|
|
30
|
-
constructor() {
|
|
31
|
-
this.editable = true;
|
|
32
|
-
this.edit = true;
|
|
33
|
-
this.mode = 'dd';
|
|
34
|
-
/** Hide label (for inline forms) */
|
|
35
|
-
this.hideLabel = false;
|
|
36
|
-
/** Hide button (for changed usage) */
|
|
37
|
-
this.hideButton = false;
|
|
38
|
-
/** Toolbar mode */
|
|
39
|
-
this.toolbar = 'default';
|
|
40
|
-
this.changed = new EventEmitter();
|
|
41
|
-
this.html = '';
|
|
42
|
-
}
|
|
43
|
-
ngOnInit() {
|
|
44
|
-
this.editor = new Editor();
|
|
45
|
-
if (this.toolbar === 'light' || this.toolbar === 'default') {
|
|
46
|
-
this.realToolbar = RichEditToolbars[this.toolbar];
|
|
47
|
-
}
|
|
48
|
-
else if (this.toolbar === 'none') {
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
this.realToolbar = this.toolbar;
|
|
52
|
-
}
|
|
53
|
-
if (!this.fc) {
|
|
54
|
-
this.fc = new FormControl('');
|
|
55
|
-
if (this.model && this.field) {
|
|
56
|
-
this.manager = this.model.FM(this.field);
|
|
57
|
-
this.required = this.manager?.required || false;
|
|
58
|
-
this.fc.setValue(this.model[this.field] || '', {
|
|
59
|
-
emitEvent: false,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
if (this.edit) {
|
|
63
|
-
this.fc.enable();
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.fc.disable();
|
|
67
|
-
}
|
|
68
|
-
this.fc.valueChanges.subscribe((v) => this.changed.emit(v));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// make sure to destory the editor
|
|
72
|
-
ngOnDestroy() {
|
|
73
|
-
this.editor.destroy();
|
|
74
|
-
}
|
|
75
|
-
toggleEdit() {
|
|
76
|
-
if (this.editable) {
|
|
77
|
-
if (this.edit) {
|
|
78
|
-
this.fc.disable();
|
|
79
|
-
this.edit = false;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.fc.enable();
|
|
83
|
-
this.edit = true;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
this.fc.disable();
|
|
88
|
-
this.edit = false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async save() {
|
|
92
|
-
if (this.model && this.field) {
|
|
93
|
-
this.model.setFV(this.field, this.fc.value);
|
|
94
|
-
if (this.mode === 'dd') {
|
|
95
|
-
await firstValueFrom(this.model.update([this.field], { updateModel: true }));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: RicheditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
100
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: RicheditComponent, isStandalone: true, selector: "data-richedit", inputs: { model: "model", field: "field", editable: "editable", edit: "edit", mode: "mode", hideLabel: "hideLabel", hideButton: "hideButton", fc: "fc", toolbar: "toolbar" }, outputs: { changed: "changed" }, ngImport: i0, template: "\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\" *ngIf=\"edit && toolbar!=='none'\"></ngx-editor-menu>\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" *ngIf=\"edit && !hideButton\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgxEditorModule }, { kind: "component", type: i2.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i2.MenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
|
|
101
|
-
}
|
|
102
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: RicheditComponent, decorators: [{
|
|
103
|
-
type: Component,
|
|
104
|
-
args: [{ selector: 'data-richedit', standalone: true, imports: [CommonModule, NgxEditorModule, ReactiveFormsModule], template: "\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\" *ngIf=\"edit && toolbar!=='none'\"></ngx-editor-menu>\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" *ngIf=\"edit && !hideButton\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>" }]
|
|
105
|
-
}], propDecorators: { model: [{
|
|
106
|
-
type: Input
|
|
107
|
-
}], field: [{
|
|
108
|
-
type: Input
|
|
109
|
-
}], editable: [{
|
|
110
|
-
type: Input
|
|
111
|
-
}], edit: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], mode: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], hideLabel: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], hideButton: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], fc: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}], toolbar: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], changed: [{
|
|
124
|
-
type: Output
|
|
125
|
-
}] } });
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaGVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2Rpc3BlZGl0L3JpY2hlZGl0L3JpY2hlZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kaXNwZWRpdC9yaWNoZWRpdC9yaWNoZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBVyxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFFdEMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlDO0lBQzVELE9BQU8sRUFBRTtRQUNQLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNsQixDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7UUFDdkIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO1FBQ3RCLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQztRQUMvQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25ELENBQUMsTUFBTSxDQUFDO1FBQ1IsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUM7UUFDbEMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLENB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QVU7c0JBQXpCLEtBQUs7Z0JBRVUsRUFBRTtzQkFBakIsS0FBSztnQkFFVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNXLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVkaXRvciwgTmd4RWRpdG9yTW9kdWxlLCBUb29sYmFyIH0gZnJvbSAnbmd4LWVkaXRvcic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGFNb2RlbCB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1tb2RlbCc7XG5pbXBvcnQgeyBCYXNlRmllbGRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vZGF0YS9maWVsZHMvYmFzZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgUmljaEVkaXRUb29sYmFyczogeyBbaW5kZXg6IHN0cmluZ106IFRvb2xiYXIgfSA9IHtcbiAgZGVmYXVsdDogW1xuICAgIFsnYm9sZCcsICdpdGFsaWMnXSxcbiAgICBbJ3VuZGVybGluZScsICdzdHJpa2UnXSxcbiAgICBbJ2NvZGUnLCAnYmxvY2txdW90ZSddLFxuICAgIFsnb3JkZXJlZF9saXN0JywgJ2J1bGxldF9saXN0J10sXG4gICAgW3sgaGVhZGluZzogWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNiddIH1dLFxuICAgIFsnbGluayddLFxuICAgIFsndGV4dF9jb2xvcicsICdiYWNrZ3JvdW5kX2NvbG9yJ10sXG4gICAgWydhbGlnbl9sZWZ0JywgJ2FsaWduX2NlbnRlcicsICdhbGlnbl9yaWdodCcsICdhbGlnbl9qdXN0aWZ5J10sXG4gIF0sXG4gIGxpZ2h0OiBbXG4gICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcbiAgICBbJ29yZGVyZWRfbGlzdCcsICdidWxsZXRfbGlzdCddLFxuICAgIFsndGV4dF9jb2xvciddLFxuICAgIFsnYWxpZ25fbGVmdCcsICdhbGlnbl9jZW50ZXInLCAnYWxpZ25fcmlnaHQnLCAnYWxpZ25fanVzdGlmeSddLFxuICBdLFxuICBub25lOiBbXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtcmljaGVkaXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ3hFZGl0b3JNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vcmljaGVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yaWNoZWRpdC5jb21wb25lbnQuc2FzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSaWNoZWRpdENvbXBvbmVudDxGVCwgVCBleHRlbmRzIERhdGFNb2RlbD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSBwdWJsaWMgbW9kZWw/OiBUO1xuICBASW5wdXQoKSBwdWJsaWMgZmllbGQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBlZGl0OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIG1vZGU6ICdkZCcgfCAnaW5saW5lJyB8ICdmb3JtJyA9ICdkZCc7XG4gIC8qKiBIaWRlIGxhYmVsIChmb3IgaW5saW5lIGZvcm1zKSAqL1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZUxhYmVsOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBIaWRlIGJ1dHRvbiAoZm9yIGNoYW5nZWQgdXNhZ2UpICovXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBGb3JtIGNvbnRyb2wsIGZyb20gb3V0c2lkZSBvciBjcmVhdGVkICovXG4gIEBJbnB1dCgpIHB1YmxpYyBmYyE6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICAvKiogVG9vbGJhciBtb2RlICovXG4gIEBJbnB1dCgpIHB1YmxpYyB0b29sYmFyOiAnbm9uZScgfCAnZGVmYXVsdCcgfCAnbGlnaHQnIHwgVG9vbGJhciA9ICdkZWZhdWx0JztcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudWxsPigpO1xuICAvKiogRmllbGQgbWFuYWdlciAqL1xuICBwdWJsaWMgbWFuYWdlcj86IEJhc2VGaWVsZE1hbmFnZXI8RlQ+O1xuICAvKiogQ29tcHV0ZWQgcmVxdWlyZWQgKi9cbiAgcHVibGljIHJlcXVpcmVkITogYm9vbGVhbjtcbiAgcHVibGljIGVkaXRvciE6IEVkaXRvcjtcbiAgcHVibGljIGh0bWwgPSAnJztcbiAgcHVibGljIHJlYWxUb29sYmFyITogVG9vbGJhcjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3IoKTtcbiAgICBpZiAodGhpcy50b29sYmFyID09PSAnbGlnaHQnIHx8IHRoaXMudG9vbGJhciA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICB0aGlzLnJlYWxUb29sYmFyID0gUmljaEVkaXRUb29sYmFyc1t0aGlzLnRvb2xiYXJdO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b29sYmFyID09PSAnbm9uZScpIHtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWFsVG9vbGJhciA9IHRoaXMudG9vbGJhciBhcyBUb29sYmFyO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmMpIHtcbiAgICAgIHRoaXMuZmMgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJyk7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLmZpZWxkKSB7XG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMubW9kZWwuRk0odGhpcy5maWVsZCk7XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLm1hbmFnZXI/LnJlcXVpcmVkIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmZjLnNldFZhbHVlKCh0aGlzLm1vZGVsIGFzIGFueSlbdGhpcy5maWVsZF0gfHwgJycsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgICAgdGhpcy5mYy5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmMuZGlzYWJsZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5mYy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmNoYW5nZWQuZW1pdCh2KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHRvIGRlc3RvcnkgdGhlIGVkaXRvclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gIH1cblxuICB0b2dnbGVFZGl0KCkge1xuICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICAgIHRoaXMuZmMuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmVkaXQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmMuZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmMuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5maWVsZCkge1xuICAgICAgdGhpcy5tb2RlbC5zZXRGVih0aGlzLmZpZWxkLCB0aGlzLmZjLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdkZCcpIHtcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5tb2RlbC51cGRhdGUoW3RoaXMuZmllbGRdLCB7IHVwZGF0ZU1vZGVsOiB0cnVlIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcbjxuZy10ZW1wbGF0ZSAjZWRpdG9yVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJOZ3hFZGl0b3JfX1dyYXBwZXJcIj5cbiAgICA8bmd4LWVkaXRvci1tZW51IFtlZGl0b3JdPVwiZWRpdG9yXCIgW3Rvb2xiYXJdPVwicmVhbFRvb2xiYXJcIiAqbmdJZj1cImVkaXQgJmFtcDsmYW1wOyB0b29sYmFyIT09J25vbmUnXCI+PC9uZ3gtZWRpdG9yLW1lbnU+XG4gICAgPG5neC1lZGl0b3IgW2VkaXRvcl09XCJlZGl0b3JcIiBbZm9ybUNvbnRyb2xdPVwiZmNcIiBbcGxhY2Vob2xkZXJdPVwiJydcIj48L25neC1lZGl0b3I+XG4gIDwvZGl2PlxuICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSB3LTEwMCBtdC0xXCIgKm5nSWY9XCJlZGl0ICZhbXA7JmFtcDsgIWhpZGVCdXR0b25cIiAoY2xpY2spPVwic2F2ZSgpXCI+PGkgY2xhc3M9XCJiaSBiaS1zYXZlIG1lLTJcIj48L2k+RW5yZWdpc3RyZXI8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RpdGxlVHBsPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuPCEtLSBEZCBkaXNwbGF5LS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwibW9kZT09PSdkZCdcIj5cbiAgPGR0IFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiICpuZ0lmPVwiIWhpZGVMYWJlbFwiPjxzcGFuIGNsYXNzPVwiZWRpdGFibGVcIiAoY2xpY2spPVwidG9nZ2xlRWRpdCgpXCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpdGxlVHBsXCI+PC9uZy1jb250YWluZXI+PC9zcGFuPjwvZHQ+XG4gIDxkZCBbY2xhc3MubWItMF09XCJoaWRlTGFiZWxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZWRpdG9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kZD5cbjwvbmctY29udGFpbmVyPlxuPCEtLSBJbmxpbmUgZGlzcGxheS0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGU9PT0naW5saW5lJ1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVMYWJlbFwiPlxuICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZVRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbGFiZWw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZWRpdG9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPCEtLSBGb3JtIGRpc3BsYXktLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlPT09J2Zvcm0nXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUxhYmVsXCI+XG4gICAgPGxhYmVsIFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpdGxlVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9sYWJlbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlZGl0b3JUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+Il19
|