@gloww/gloww 0.9.0-beta.6 → 0.9.0-beta.60
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/esm2020/lib/Components/auto-complete/auto-complete.component.mjs +151 -0
- package/esm2020/lib/Components/code-editor/code-editor.component.mjs +110 -12
- package/esm2020/lib/Components/datetime/datetime.component.mjs +84 -0
- package/esm2020/lib/Components/display-objects/display-objects.component.mjs +179 -58
- package/esm2020/lib/Components/download-progress/download-progress.component.mjs +4 -6
- package/esm2020/lib/Components/dummy/dummy.component.mjs +14 -0
- package/esm2020/lib/Components/folders/file-edit/file-edit.component.mjs +28 -9
- package/esm2020/lib/Components/menu-list-item/menu-list-item.component.mjs +40 -34
- package/esm2020/lib/Components/select/select.component.mjs +123 -0
- package/esm2020/lib/Components/upload-file/upload-file.component.mjs +12 -4
- package/esm2020/lib/Guards/has-unsaved-data.guard.mjs +29 -0
- package/esm2020/lib/Guards/ihas-unsaved-data.mjs +2 -0
- package/esm2020/lib/Helpers/gloww-validators.mjs +116 -0
- package/esm2020/lib/Models/nav-item.mjs +1 -1
- package/esm2020/lib/Services/folder.service.mjs +5 -1
- package/esm2020/lib/Services/gloww.service.mjs +26 -9
- package/esm2020/lib/Services/snippets.service.mjs +25 -0
- package/esm2020/lib/gloww.module.mjs +70 -9
- package/esm2020/public-api.mjs +9 -1
- package/fesm2015/gloww-gloww.mjs +976 -145
- package/fesm2015/gloww-gloww.mjs.map +1 -1
- package/fesm2020/gloww-gloww.mjs +953 -142
- package/fesm2020/gloww-gloww.mjs.map +1 -1
- package/gloww.theme.scss +158 -0
- package/lib/Components/auto-complete/auto-complete.component.d.ts +39 -0
- package/lib/Components/code-editor/code-editor.component.d.ts +32 -3
- package/lib/Components/datetime/datetime.component.d.ts +22 -0
- package/lib/Components/display-objects/display-objects.component.d.ts +18 -9
- package/lib/Components/dummy/dummy.component.d.ts +8 -0
- package/lib/Components/folders/file-edit/file-edit.component.d.ts +7 -0
- package/lib/Components/menu-list-item/menu-list-item.component.d.ts +11 -3
- package/lib/Components/select/select.component.d.ts +33 -0
- package/lib/Guards/has-unsaved-data.guard.d.ts +8 -0
- package/lib/Guards/ihas-unsaved-data.d.ts +3 -0
- package/lib/Helpers/gloww-validators.d.ts +39 -0
- package/lib/Models/nav-item.d.ts +2 -1
- package/lib/Services/folder.service.d.ts +1 -0
- package/lib/Services/gloww.service.d.ts +5 -0
- package/lib/Services/snippets.service.d.ts +16 -0
- package/lib/gloww.module.d.ts +35 -18
- package/package.json +6 -2
- package/public-api.d.ts +8 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { catchError, debounceTime, distinctUntilChanged, filter, map, switchMap, tap } from 'rxjs/operators';
|
|
2
|
+
import { Component, Input, Inject, forwardRef, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { of } from 'rxjs';
|
|
5
|
+
import { TranslateDefaultParser } from '@ngx-translate/core';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "@angular/material/form-field";
|
|
9
|
+
import * as i3 from "@angular/material/autocomplete";
|
|
10
|
+
import * as i4 from "@angular/material/core";
|
|
11
|
+
import * as i5 from "@angular/material/input";
|
|
12
|
+
import * as i6 from "@angular/common";
|
|
13
|
+
export class AutoCompleteComponent {
|
|
14
|
+
constructor(glowwService, formBuilder, ref) {
|
|
15
|
+
this.formBuilder = formBuilder;
|
|
16
|
+
this.ref = ref;
|
|
17
|
+
this._value = null;
|
|
18
|
+
this.objectName = null;
|
|
19
|
+
this.searchField = null;
|
|
20
|
+
this.returnField = null;
|
|
21
|
+
this.displayField = null;
|
|
22
|
+
this.displayExpr = null;
|
|
23
|
+
this.displayFct = null;
|
|
24
|
+
this.placeHolder = null;
|
|
25
|
+
this.data = null;
|
|
26
|
+
this.onChange = () => { };
|
|
27
|
+
this.onTouched = () => { };
|
|
28
|
+
this.items = [];
|
|
29
|
+
this.parser = new TranslateDefaultParser();
|
|
30
|
+
this.options = []; //Observable<unknown>;
|
|
31
|
+
this.propagateChange = (_) => { };
|
|
32
|
+
this.glowwService = glowwService;
|
|
33
|
+
this.resultCtrl = new FormControl();
|
|
34
|
+
this.form = this.formBuilder.group({
|
|
35
|
+
__result: this.resultCtrl
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
ngAfterViewInit() {
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
//debugger;
|
|
42
|
+
this.searchRequest = this.glowwService[`search${this.objectName}`];
|
|
43
|
+
this.resultCtrl.valueChanges.pipe(filter(res => res != null && res.length > 2), distinctUntilChanged(), debounceTime(250), tap(() => { this.error = ""; this.options = []; }), switchMap(searchStr => {
|
|
44
|
+
let searchObj = {};
|
|
45
|
+
if (this.data) {
|
|
46
|
+
Object.keys(this.data).forEach(k => {
|
|
47
|
+
searchObj[k] = this.data[k];
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
searchObj[this.searchField] = searchStr;
|
|
51
|
+
return this.searchRequest.call(this.glowwService, searchObj).pipe(map(res => res), catchError(err => {
|
|
52
|
+
this.error = err.message;
|
|
53
|
+
this.ref.markForCheck();
|
|
54
|
+
return of([]);
|
|
55
|
+
}));
|
|
56
|
+
})).subscribe({
|
|
57
|
+
next: (data) => {
|
|
58
|
+
this.options = data;
|
|
59
|
+
this.ref.markForCheck();
|
|
60
|
+
},
|
|
61
|
+
error: (error) => { this.error = error; }
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
writeValue(val) {
|
|
65
|
+
val && this.form.setValue({ __result: val }, { emitEvent: false });
|
|
66
|
+
}
|
|
67
|
+
registerOnChange(fn) {
|
|
68
|
+
this.onChange = fn;
|
|
69
|
+
this.form.valueChanges.subscribe(data => {
|
|
70
|
+
if (this.returnField) {
|
|
71
|
+
this.onChange(this.form.value.__result[this.returnField]);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.onChange(this.form.value.__result);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
registerOnTouched(fn) {
|
|
79
|
+
this.onTouched = fn;
|
|
80
|
+
}
|
|
81
|
+
setDisabledState(isDisabled) {
|
|
82
|
+
const status = isDisabled ? 'disable' : 'enable';
|
|
83
|
+
//TODO
|
|
84
|
+
}
|
|
85
|
+
displayObj(item) {
|
|
86
|
+
if (!item)
|
|
87
|
+
return null;
|
|
88
|
+
console.log("displayOf");
|
|
89
|
+
if (this.displayField) {
|
|
90
|
+
return item[this.displayField];
|
|
91
|
+
}
|
|
92
|
+
else if (this.displayExpr) {
|
|
93
|
+
return this.parser.interpolate(this.displayExpr.replace(/\\\{/g, "{").replace(/\\\}/g, "}"), item);
|
|
94
|
+
//return '?1' + this.parser.interpolate("{{Name}}", { Name: "test" }) + '?2' + this.parser.interpolate("{{Name}}", item)+'?3'+this.parser.interpolate(this.displayExpr.replace(/\\\{/g,"{").replace(/\\\}/g,"}"), item) +'?4'+ item;
|
|
95
|
+
}
|
|
96
|
+
else if (this.displayFct) {
|
|
97
|
+
return this.displayFct(item);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: 'glowwService' }, { token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
+
AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AutoCompleteComponent, selector: "gloww-auto-complete", inputs: { _value: ["value", "_value"], objectName: "objectName", searchField: "searchField", returnField: "returnField", displayField: "displayField", displayExpr: "displayExpr", displayFct: "displayFct", placeHolder: "placeHolder", data: "data", searchRequest: "searchRequest" }, providers: [
|
|
103
|
+
{
|
|
104
|
+
provide: NG_VALUE_ACCESSOR,
|
|
105
|
+
multi: true,
|
|
106
|
+
useExisting: forwardRef(() => AutoCompleteComponent)
|
|
107
|
+
}
|
|
108
|
+
], ngImport: i0, template: "<div [formGroup]=\"form\" style=\"width:100%\" class=\"mainDiv\">\r\n <div style=\"color:red\">{{error}}</div>\r\n <mat-form-field style=\"width:100%\" class=\"autocff\">\r\n <input type=\"text\" matInput formControlName=\"__result\" [matAutocomplete]=\"auto\" [placeholder]=\"placeHolder\">\r\n </mat-form-field>\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayObj.bind(this)\">\r\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">\r\n {{displayObj(option)}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n</div>", styles: [""], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AutoCompleteComponent, decorators: [{
|
|
110
|
+
type: Component,
|
|
111
|
+
args: [{ selector: 'gloww-auto-complete', encapsulation: ViewEncapsulation.None, providers: [
|
|
112
|
+
{
|
|
113
|
+
provide: NG_VALUE_ACCESSOR,
|
|
114
|
+
multi: true,
|
|
115
|
+
useExisting: forwardRef(() => AutoCompleteComponent)
|
|
116
|
+
}
|
|
117
|
+
], template: "<div [formGroup]=\"form\" style=\"width:100%\" class=\"mainDiv\">\r\n <div style=\"color:red\">{{error}}</div>\r\n <mat-form-field style=\"width:100%\" class=\"autocff\">\r\n <input type=\"text\" matInput formControlName=\"__result\" [matAutocomplete]=\"auto\" [placeholder]=\"placeHolder\">\r\n </mat-form-field>\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayObj.bind(this)\">\r\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">\r\n {{displayObj(option)}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n</div>", styles: [""] }]
|
|
118
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
119
|
+
type: Inject,
|
|
120
|
+
args: ['glowwService']
|
|
121
|
+
}] }, { type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _value: [{
|
|
122
|
+
type: Input,
|
|
123
|
+
args: ['value']
|
|
124
|
+
}], objectName: [{
|
|
125
|
+
type: Input,
|
|
126
|
+
args: ['objectName']
|
|
127
|
+
}], searchField: [{
|
|
128
|
+
type: Input,
|
|
129
|
+
args: ['searchField']
|
|
130
|
+
}], returnField: [{
|
|
131
|
+
type: Input,
|
|
132
|
+
args: ['returnField']
|
|
133
|
+
}], displayField: [{
|
|
134
|
+
type: Input,
|
|
135
|
+
args: ['displayField']
|
|
136
|
+
}], displayExpr: [{
|
|
137
|
+
type: Input,
|
|
138
|
+
args: ['displayExpr']
|
|
139
|
+
}], displayFct: [{
|
|
140
|
+
type: Input,
|
|
141
|
+
args: ['displayFct']
|
|
142
|
+
}], placeHolder: [{
|
|
143
|
+
type: Input,
|
|
144
|
+
args: ['placeHolder']
|
|
145
|
+
}], data: [{
|
|
146
|
+
type: Input,
|
|
147
|
+
args: ['data']
|
|
148
|
+
}], searchRequest: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}] } });
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nbG93dy9zcmMvbGliL0NvbXBvbmVudHMvYXV0by1jb21wbGV0ZS9hdXRvLWNvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9hdXRvLWNvbXBsZXRlL2F1dG8tY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWlCLE1BQU0sRUFBcUIsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xJLE9BQU8sRUFBcUMsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUcsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFlN0QsTUFBTSxPQUFPLHFCQUFxQjtJQXNCaEMsWUFBb0MsWUFBaUIsRUFBVSxXQUF3QixFQUFVLEdBQXNCO1FBQXhELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQnZHLFdBQU0sR0FBUSxJQUFJLENBQUM7UUFDZCxlQUFVLEdBQVEsSUFBSSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQVEsSUFBSSxDQUFDO1FBQzFCLGdCQUFXLEdBQVEsSUFB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QkFBaEMsS0FBSzt1QkFBQyxhQUFhO2dCQUNMLElBQUk7c0JBQWxCLEtBQUs7dUJBQUMsTUFBTTtnQkFNSixhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEFmdGVyVmlld0luaXQsIEluamVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIGZvcndhcmRSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZURlZmF1bHRQYXJzZXIgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ2xvd3ctYXV0by1jb21wbGV0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG8tY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2F1dG8tY29tcGxldGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9Db21wbGV0ZUNvbXBvbmVudClcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvQ29tcGxldGVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoJ3ZhbHVlJykgX3ZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgnb2JqZWN0TmFtZScpIG9iamVjdE5hbWU6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCdzZWFyY2hGaWVsZCcpIHNlYXJjaEZpZWxkOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgncmV0dXJuRmllbGQnKSByZXR1cm5GaWVsZDogYW55ID0gbnVsbDtcclxuICBASW5wdXQoJ2Rpc3BsYXlGaWVsZCcpIGRpc3BsYXlGaWVsZDogYW55ID0gbnVsbDtcclxuICBASW5wdXQoJ2Rpc3BsYXlFeHByJykgZGlzcGxheUV4cHI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCdkaXNwbGF5RmN0JykgZGlzcGxheUZjdDogYW55ID0gbnVsbDtcclxuICBASW5wdXQoJ3BsYWNlSG9sZGVyJykgcGxhY2VIb2xkZXI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCdkYXRhJykgZGF0YTogYW55ID0gbnVsbDtcclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xyXG4gIHB1YmxpYyBpdGVtczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgZXJyb3I6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgc2VhcmNoUmVxdWVzdDogKG9iaj86IGFueSkgPT4gT2JzZXJ2YWJsZTxbXT47XHJcblxyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZ2xvd3dTZXJ2aWNlOiBhbnk7XHJcbiAgcmVzdWx0Q3RybDogRm9ybUNvbnRyb2w7XHJcbiAgcHVibGljIHBhcnNlciA9IG5ldyBUcmFuc2xhdGVEZWZhdWx0UGFyc2VyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2dsb3d3U2VydmljZScpIGdsb3d3U2VydmljZTogYW55LCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICB0aGlzLmdsb3d3U2VydmljZSA9IGdsb3d3U2VydmljZTtcclxuICAgIHRoaXMucmVzdWx0Q3RybCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIF9fcmVzdWx0OiB0aGlzLnJlc3VsdEN0cmxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcHRpb25zOiBhbnlbXSA9IFtdOy8vT2JzZXJ2YWJsZTx1bmtub3duPjtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vZGVidWdnZXI7XHJcbiAgICB0aGlzLnNlYXJjaFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgc2VhcmNoJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB0aGlzLnJlc3VsdEN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIGZpbHRlcihyZXMgPT4gcmVzICE9IG51bGwgJiYgcmVzLmxlbmd0aCA+IDIpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcclxuICAgICAgdGFwKCgpID0+IHsgdGhpcy5lcnJvciA9IFwiXCI7IHRoaXMub3B0aW9ucyA9IFtdOyB9KSxcclxuICAgICAgc3dpdGNoTWFwKHNlYXJjaFN0ciA9PiB7XHJcbiAgICAgICAgbGV0IHNlYXJjaE9iaiA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkuZm9yRWFjaChrID0+IHtcclxuICAgICAgICAgICAgc2VhcmNoT2JqW2tdID0gdGhpcy5kYXRhW2tdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlYXJjaE9ialt0aGlzLnNlYXJjaEZpZWxkXSA9IHNlYXJjaFN0cjtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hSZXF1ZXN0LmNhbGwodGhpcy5nbG93d1NlcnZpY2UsIHNlYXJjaE9iaikucGlwZShcclxuICAgICAgICAgIG1hcChyZXMgPT4gcmVzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4geyB0aGlzLmVycm9yID0gZXJyb3IgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHdyaXRlVmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcclxuICAgIHZhbCAmJiB0aGlzLmZvcm0uc2V0VmFsdWUoeyBfX3Jlc3VsdDogdmFsIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJldHVybkZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmZvcm0udmFsdWUuX19yZXN1bHRbdGhpcy5yZXR1cm5GaWVsZF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5mb3JtLnZhbHVlLl9fcmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGF0dXMgPSBpc0Rpc2FibGVkID8gJ2Rpc2FibGUnIDogJ2VuYWJsZSc7XHJcbiAgICAvL1RPRE9cclxuICB9XHJcblxyXG4gIGRpc3BsYXlPYmooaXRlbSkge1xyXG4gICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnNvbGUubG9nKFwiZGlzcGxheU9mXCIpO1xyXG4gICAgaWYgKHRoaXMuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgIHJldHVybiBpdGVtW3RoaXMuZGlzcGxheUZpZWxkXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kaXNwbGF5RXhwcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZXIuaW50ZXJwb2xhdGUodGhpcy5kaXNwbGF5RXhwci5yZXBsYWNlKC9cXFxcXFx7L2csIFwie1wiKS5yZXBsYWNlKC9cXFxcXFx9L2csIFwifVwiKSwgaXRlbSk7XHJcbiAgICAgIC8vcmV0dXJuICc/MScgKyB0aGlzLnBhcnNlci5pbnRlcnBvbGF0ZShcInt7TmFtZX19XCIsIHsgTmFtZTogXCJ0ZXN0XCIgfSkgKyAnPzInICsgdGhpcy5wYXJzZXIuaW50ZXJwb2xhdGUoXCJ7e05hbWV9fVwiLCBpdGVtKSsnPzMnK3RoaXMucGFyc2VyLmludGVycG9sYXRlKHRoaXMuZGlzcGxheUV4cHIucmVwbGFjZSgvXFxcXFxcey9nLFwie1wiKS5yZXBsYWNlKC9cXFxcXFx9L2csXCJ9XCIpLCBpdGVtKSArJz80JysgaXRlbTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kaXNwbGF5RmN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlGY3QoaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIHN0eWxlPVwid2lkdGg6MTAwJVwiIGNsYXNzPVwibWFpbkRpdlwiPlxyXG4gICAgPGRpdiBzdHlsZT1cImNvbG9yOnJlZFwiPnt7ZXJyb3J9fTwvZGl2PlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6MTAwJVwiIGNsYXNzPVwiYXV0b2NmZlwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIl9fcmVzdWx0XCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheU9iai5iaW5kKHRoaXMpXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICB7e2Rpc3BsYXlPYmoob3B0aW9uKX19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG48L2Rpdj4iXX0=
|
|
@@ -1,13 +1,51 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { CodemirrorComponent } from '@ctrl/ngx-codemirror';
|
|
4
|
+
import prettier from 'node_modules/prettier/esm/standalone.mjs';
|
|
5
|
+
import parserTypescript from 'node_modules/prettier/esm/parser-typescript.mjs';
|
|
6
|
+
import parserBabel from 'node_modules/prettier/esm/parser-babel.mjs';
|
|
3
7
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "
|
|
5
|
-
import * as i2 from "
|
|
8
|
+
import * as i1 from "./../../Services/snippets.service";
|
|
9
|
+
import * as i2 from "../../Services/gloww.service";
|
|
10
|
+
import * as i3 from "@angular/material/select";
|
|
11
|
+
import * as i4 from "@angular/material/core";
|
|
12
|
+
import * as i5 from "@angular/material/button";
|
|
13
|
+
import * as i6 from "@ctrl/ngx-codemirror";
|
|
14
|
+
import * as i7 from "@angular/flex-layout/flex";
|
|
15
|
+
import * as i8 from "@angular/material/form-field";
|
|
16
|
+
import * as i9 from "@angular/common";
|
|
17
|
+
import * as i10 from "@angular/forms";
|
|
6
18
|
export class CodeEditorComponent {
|
|
7
|
-
constructor() {
|
|
19
|
+
constructor(snippetsService, glowwService) {
|
|
20
|
+
this.snippetsService = snippetsService;
|
|
21
|
+
this.glowwService = glowwService;
|
|
8
22
|
this._value = null;
|
|
23
|
+
this.display = null;
|
|
24
|
+
this.mode = "text/typescript";
|
|
25
|
+
this.formatterOptions = { useTabs: true, printWidth: 160 };
|
|
9
26
|
this.onChange = () => { };
|
|
10
27
|
this.onTouched = () => { };
|
|
28
|
+
this.resizable = true;
|
|
29
|
+
this.doc = null;
|
|
30
|
+
this.extraKeys = {
|
|
31
|
+
"Alt-K": function (cm) { alert('Alt-K'); cm.blockComment(cm.doc.getCursor('from'), cm.doc.getCursor('to')); /*cm.toggleComment();*/ },
|
|
32
|
+
"Shift-Alt-K": "toggleComment",
|
|
33
|
+
"Alt-N": this.autoFormatSelection.bind(this)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
ngAfterViewInit() {
|
|
37
|
+
console.log(this.codeMirrorComponent);
|
|
38
|
+
console.log(this.codeMirrorComponent.codeMirror);
|
|
39
|
+
this.doc = this.codeMirrorComponent.codeMirror?.getDoc();
|
|
40
|
+
console.log(this.doc);
|
|
41
|
+
if (this.snippetsPath) {
|
|
42
|
+
this.snippetsService.getSnippets(this.snippetsPath.replace("/assets/", this.glowwService.baseHref + "/assets/")).subscribe((snippets) => {
|
|
43
|
+
if (!this.snippets) {
|
|
44
|
+
this.snippets = [];
|
|
45
|
+
}
|
|
46
|
+
snippets.forEach((snippet) => this.snippets.push(snippet));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
11
49
|
}
|
|
12
50
|
get value() {
|
|
13
51
|
return this._value;
|
|
@@ -18,7 +56,9 @@ export class CodeEditorComponent {
|
|
|
18
56
|
this.onTouched();
|
|
19
57
|
}
|
|
20
58
|
writeValue(obj) {
|
|
21
|
-
|
|
59
|
+
alert(obj);
|
|
60
|
+
alert(typeof (obj));
|
|
61
|
+
if (typeof (obj) === 'object' && obj != null) {
|
|
22
62
|
this.value = JSON.stringify(obj);
|
|
23
63
|
}
|
|
24
64
|
else {
|
|
@@ -34,26 +74,84 @@ export class CodeEditorComponent {
|
|
|
34
74
|
setDisabledState(isDisabled) {
|
|
35
75
|
//throw new Error('Method not implemented.');
|
|
36
76
|
}
|
|
77
|
+
insert() {
|
|
78
|
+
this.doc = this.codeMirrorComponent.codeMirror?.getDoc();
|
|
79
|
+
var cursor = this.doc.getCursor();
|
|
80
|
+
if (this.currentSnippet.code) {
|
|
81
|
+
this.doc.replaceRange(this.currentSnippet.code, cursor);
|
|
82
|
+
}
|
|
83
|
+
if (this.currentSnippet.externfile) {
|
|
84
|
+
this.snippetsService.getSnippetCode(this.currentSnippet.externfile).subscribe((code) => this.doc.replaceRange(code, cursor));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
getSelectedRange(doc) {
|
|
88
|
+
return { from: doc.getCursor('from'), to: doc.getCursor('to') };
|
|
89
|
+
}
|
|
90
|
+
getFormatter() {
|
|
91
|
+
if (this.formatter)
|
|
92
|
+
return this.formatter;
|
|
93
|
+
if (this.mode.match(/typescript/)) {
|
|
94
|
+
return "typescript";
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
autoFormatSelection(cm) {
|
|
99
|
+
try {
|
|
100
|
+
const formatter = this.getFormatter();
|
|
101
|
+
if (!formatter) {
|
|
102
|
+
alert("no formatter defined for this code");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
let options = { ...this.formatterOptions };
|
|
106
|
+
options.parser = formatter;
|
|
107
|
+
options.plugins = [parserTypescript, parserBabel];
|
|
108
|
+
cm.doc.setValue(prettier.format(cm.doc.getValue(), options));
|
|
109
|
+
}
|
|
110
|
+
catch (ex) {
|
|
111
|
+
alert(`Unable to format this code, check Syntax`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
37
114
|
}
|
|
38
|
-
CodeEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CodeEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
-
CodeEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CodeEditorComponent, selector: "gloww-code-editor", inputs: { _value: ["value", "_value"] }, providers: [
|
|
115
|
+
CodeEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CodeEditorComponent, deps: [{ token: i1.SnippetsService }, { token: i2.GlowwService }], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
CodeEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CodeEditorComponent, selector: "gloww-code-editor", inputs: { _value: ["value", "_value"], display: "display", mode: "mode", formatter: "formatter", formatterOptions: "formatterOptions", snippets: "snippets", snippetsPath: "snippetsPath" }, providers: [
|
|
40
117
|
{
|
|
41
118
|
provide: NG_VALUE_ACCESSOR,
|
|
42
119
|
multi: true,
|
|
43
120
|
useExisting: CodeEditorComponent
|
|
44
121
|
}
|
|
45
|
-
], ngImport: i0, template: "<ngx-codemirror [(ngModel)]=\"value\" [options]=\"{lineNumbers: true,theme: 'eclipse', indentWithTabs:true,indentUnit: 4,matchBrackets: true, mode:
|
|
122
|
+
], viewQueries: [{ propertyName: "codeMirrorComponent", first: true, predicate: CodemirrorComponent, descendants: true }], ngImport: i0, template: "<div fxLayout=\"column\" fxFill fxLayoutAlign=\"strech\" class=\"mainDiv\">\r\n <mat-label>{{display}}</mat-label>\r\n <div *ngIf=\"snippets?.length\" fxLayout=\"row\">\r\n <mat-select [(ngModel)]=\"currentSnippet\" fxFlex>\r\n <mat-option *ngFor=\"let snippet of snippets\" [value]=\"snippet\">{{snippet.name}}</mat-option>\r\n </mat-select>\r\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"insert()\">Insert</button>\r\n </div>\r\n\r\n <ngx-codemirror [(ngModel)]=\"value\" [options]=\"{lineNumbers: true,theme: 'eclipse', indentWithTabs:true,indentUnit: 4,matchBrackets: true, mode: mode, fixedGutter:false, extraKeys: extraKeys}\" style=\"width:100%\">\r\n </ngx-codemirror>\r\n</div>", styles: [".CodeMirror{resize:both;padding:0;margin:0}.sameSize{padding:0;margin:0;border:1px solid}\n"], components: [{ type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.CodemirrorComponent, selector: "ngx-codemirror", inputs: ["className", "name", "autoFocus", "options", "preserveScrollPosition"], outputs: ["cursorActivity", "focusChange", "scroll", "drop"] }], directives: [{ type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i7.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8.MatLabel, selector: "mat-label" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
46
123
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CodeEditorComponent, decorators: [{
|
|
47
124
|
type: Component,
|
|
48
|
-
args: [{ selector: 'gloww-code-editor', providers: [
|
|
125
|
+
args: [{ selector: 'gloww-code-editor', encapsulation: ViewEncapsulation.None, providers: [
|
|
49
126
|
{
|
|
50
127
|
provide: NG_VALUE_ACCESSOR,
|
|
51
128
|
multi: true,
|
|
52
129
|
useExisting: CodeEditorComponent
|
|
53
130
|
}
|
|
54
|
-
], template: "<ngx-codemirror [(ngModel)]=\"value\" [options]=\"{lineNumbers: true,theme: 'eclipse', indentWithTabs:true,indentUnit: 4,matchBrackets: true, mode:
|
|
55
|
-
}], ctorParameters: function () { return []; }, propDecorators: { _value: [{
|
|
131
|
+
], template: "<div fxLayout=\"column\" fxFill fxLayoutAlign=\"strech\" class=\"mainDiv\">\r\n <mat-label>{{display}}</mat-label>\r\n <div *ngIf=\"snippets?.length\" fxLayout=\"row\">\r\n <mat-select [(ngModel)]=\"currentSnippet\" fxFlex>\r\n <mat-option *ngFor=\"let snippet of snippets\" [value]=\"snippet\">{{snippet.name}}</mat-option>\r\n </mat-select>\r\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"insert()\">Insert</button>\r\n </div>\r\n\r\n <ngx-codemirror [(ngModel)]=\"value\" [options]=\"{lineNumbers: true,theme: 'eclipse', indentWithTabs:true,indentUnit: 4,matchBrackets: true, mode: mode, fixedGutter:false, extraKeys: extraKeys}\" style=\"width:100%\">\r\n </ngx-codemirror>\r\n</div>", styles: [".CodeMirror{resize:both;padding:0;margin:0}.sameSize{padding:0;margin:0;border:1px solid}\n"] }]
|
|
132
|
+
}], ctorParameters: function () { return [{ type: i1.SnippetsService }, { type: i2.GlowwService }]; }, propDecorators: { _value: [{
|
|
56
133
|
type: Input,
|
|
57
134
|
args: ['value']
|
|
135
|
+
}], display: [{
|
|
136
|
+
type: Input,
|
|
137
|
+
args: ['display']
|
|
138
|
+
}], mode: [{
|
|
139
|
+
type: Input,
|
|
140
|
+
args: ['mode']
|
|
141
|
+
}], formatter: [{
|
|
142
|
+
type: Input,
|
|
143
|
+
args: ['formatter']
|
|
144
|
+
}], formatterOptions: [{
|
|
145
|
+
type: Input,
|
|
146
|
+
args: ['formatterOptions']
|
|
147
|
+
}], snippets: [{
|
|
148
|
+
type: Input,
|
|
149
|
+
args: ['snippets']
|
|
150
|
+
}], snippetsPath: [{
|
|
151
|
+
type: Input,
|
|
152
|
+
args: ['snippetsPath']
|
|
153
|
+
}], codeMirrorComponent: [{
|
|
154
|
+
type: ViewChild,
|
|
155
|
+
args: [CodemirrorComponent]
|
|
58
156
|
}] } });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2xvd3cvc3JjL2xpYi9Db21wb25lbnRzL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFjekUsTUFBTSxPQUFPLG1CQUFtQjtJQUs5QjtRQUpnQixXQUFNLEdBQVEsSUFBSSxDQUFDO1FBQ25DLGFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUIsY0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVYLENBQUM7SUFHakIsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHO1FBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLDZDQUE2QztJQUMvQyxDQUFDOztnSEFoQ1UsbUJBQW1CO29HQUFuQixtQkFBbUIscUZBUm5CO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLG1CQUFtQjtTQUNqQztLQUNGLDBCQ2JILHVOQUVBOzJGRGFhLG1CQUFtQjtrQkFaL0IsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGOzBFQUdlLE1BQU07c0JBQXJCLEtBQUs7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2dsb3d3LWNvZGUtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29kZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29kZUVkaXRvckNvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCd2YWx1ZScpIF92YWx1ZTogYW55ID0gbnVsbDtcclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuXHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbCkge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIChvYmopID09PSAnb2JqZWN0Jykge1xyXG4gICAgICB0aGlzLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZ3gtY29kZW1pcnJvciBbKG5nTW9kZWwpXT1cInZhbHVlXCIgW29wdGlvbnNdPVwie2xpbmVOdW1iZXJzOiB0cnVlLHRoZW1lOiAnZWNsaXBzZScsIGluZGVudFdpdGhUYWJzOnRydWUsaW5kZW50VW5pdDogNCxtYXRjaEJyYWNrZXRzOiB0cnVlLCBtb2RlOiAndGV4dC90eXBlc2NyaXB0JywgZml4ZWRHdXR0ZXI6ZmFsc2V9XCI+XHJcbjwvbmd4LWNvZGVtaXJyb3I+XHJcbiJdfQ==
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2xvd3cvc3JjL2xpYi9Db21wb25lbnRzL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUczRCxPQUFPLFFBQVEsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRSxPQUFPLGdCQUFnQixNQUFNLGlEQUFpRCxDQUFBO0FBQzlFLE9BQU8sV0FBVyxNQUFNLDRDQUE0QyxDQUFBOzs7Ozs7Ozs7Ozs7QUFlcEUsTUFBTSxPQUFPLG1CQUFtQjtJQXNCOUIsWUFBb0IsZUFBZ0MsRUFBVSxZQUEwQjtRQUFwRSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXJCeEUsV0FBTSxHQUFRLElBQUksQ0FBQztRQUNqQixZQUFPLEdBQVcsSUFBSSxDQUFDO1FBQzFCLFNBQUksR0FBUSxpQkFBaUIsQ0FBQztRQUVsQixxQkFBZ0IsR0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBS3ZGLGFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUIsY0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMz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ZXRzU2VydmljZSB9IGZyb20gJy4vLi4vLi4vU2VydmljZXMvc25pcHBldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvZGVtaXJyb3JDb21wb25lbnQgfSBmcm9tICdAY3RybC9uZ3gtY29kZW1pcnJvcic7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IHsgR2xvd3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2VydmljZXMvZ2xvd3cuc2VydmljZSc7XHJcbmltcG9ydCBwcmV0dGllciBmcm9tICdub2RlX21vZHVsZXMvcHJldHRpZXIvZXNtL3N0YW5kYWxvbmUubWpzJztcclxuaW1wb3J0IHBhcnNlclR5cGVzY3JpcHQgZnJvbSAnbm9kZV9tb2R1bGVzL3ByZXR0aWVyL2VzbS9wYXJzZXItdHlwZXNjcmlwdC5tanMnXHJcbmltcG9ydCBwYXJzZXJCYWJlbCBmcm9tICdub2RlX21vZHVsZXMvcHJldHRpZXIvZXNtL3BhcnNlci1iYWJlbC5tanMnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2dsb3d3LWNvZGUtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29kZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29kZUVkaXRvckNvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCd2YWx1ZScpIF92YWx1ZTogYW55ID0gbnVsbDtcclxuICBASW5wdXQoJ2Rpc3BsYXknKSBkaXNwbGF5OiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgnbW9kZScpIG1vZGU6IGFueSA9IFwidGV4dC90eXBlc2NyaXB0XCI7XHJcbiAgQElucHV0KCdmb3JtYXR0ZXInKSBmb3JtYXR0ZXI/OiBzdHJpbmc7XHJcbiAgQElucHV0KCdmb3JtYXR0ZXJPcHRpb25zJykgZm9ybWF0dGVyT3B0aW9ucz86IGFueSA9IHsgdXNlVGFiczogdHJ1ZSwgcHJpbnRXaWR0aDogMTYwIH07XHJcbiAgQElucHV0KCdzbmlwcGV0cycpIHNuaXBwZXRzPzogU25pcHBldFtdO1xyXG4gIEBJbnB1dCgnc25pcHBldHNQYXRoJykgc25pcHBldHNQYXRoPzogc3RyaW5nO1xyXG4gIEBWaWV3Q2hpbGQoQ29kZW1pcnJvckNvbXBvbmVudCkgY29kZU1pcnJvckNvbXBvbmVudDogQ29kZW1pcnJvckNvbXBvbmVudDtcclxuXHJcbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcclxuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcclxuICByZXNpemFibGUgPSB0cnVlO1xyXG5cclxuICBjdXJyZW50U25pcHBldD86IFNuaXBwZXQ7XHJcbiAgZG9jOiBhbnkgPSBudWxsO1xyXG4gIGV4dHJhS2V5cyA9IHtcclxuICAgIFwiQWx0LUtcIjogZnVuY3Rpb24oY20pIHsgYWxlcnQoJ0FsdC1LJyk7IGNtLmJsb2NrQ29tbWVudChjbS5kb2MuZ2V0Q3Vyc29yKCdmcm9tJyksIGNtLmRvYy5nZXRDdXJzb3IoJ3RvJykpOy8qY20udG9nZ2xlQ29tbWVudCgpOyovIH0sXHJcbiAgICBcIlNoaWZ0LUFsdC1LXCI6IFwidG9nZ2xlQ29tbWVudFwiLFxyXG4gICAgXCJBbHQtTlwiOiB0aGlzLmF1dG9Gb3JtYXRTZWxlY3Rpb24uYmluZCh0aGlzKVxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc25pcHBldHNTZXJ2aWNlOiBTbmlwcGV0c1NlcnZpY2UsIHByaXZhdGUgZ2xvd3dTZXJ2aWNlOiBHbG93d1NlcnZpY2UpIHtcclxuXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY29kZU1pcnJvckNvbXBvbmVudCk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNvZGVNaXJyb3JDb21wb25lbnQuY29kZU1pcnJvcik7XHJcbiAgICB0aGlzLmRvYyA9IHRoaXMuY29kZU1pcnJvckNvbXBvbmVudC5jb2RlTWlycm9yPy5nZXREb2MoKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZG9jKTtcclxuICAgIGlmICh0aGlzLnNuaXBwZXRzUGF0aCkge1xyXG4gICAgICB0aGlzLnNuaXBwZXRzU2VydmljZS5nZXRTbmlwcGV0cyh0aGlzLnNuaXBwZXRzUGF0aC5yZXBsYWNlKFwiL2Fzc2V0cy9cIiwgdGhpcy5nbG93d1NlcnZpY2UuYmFzZUhyZWYgKyBcIi9hc3NldHMvXCIpKS5zdWJzY3JpYmUoKHNuaXBwZXRzKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNuaXBwZXRzKSB7XHJcbiAgICAgICAgICB0aGlzLnNuaXBwZXRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNuaXBwZXRzLmZvckVhY2goKHNuaXBwZXQpID0+IHRoaXMuc25pcHBldHMucHVzaChzbmlwcGV0KSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgYWxlcnQob2JqKTtcclxuICAgIGFsZXJ0KHR5cGVvZiAob2JqKSk7XHJcbiAgICBpZiAodHlwZW9mIChvYmopID09PSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgaW5zZXJ0KCkge1xyXG4gICAgdGhpcy5kb2MgPSB0aGlzLmNvZGVNaXJyb3JDb21wb25lbnQuY29kZU1pcnJvcj8uZ2V0RG9jKCk7XHJcbiAgICB2YXIgY3Vyc29yID0gdGhpcy5kb2MuZ2V0Q3Vyc29yKCk7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50U25pcHBldC5jb2RlKSB7XHJcbiAgICAgIHRoaXMuZG9jLnJlcGxhY2VSYW5nZSh0aGlzLmN1cnJlbnRTbmlwcGV0LmNvZGUsIGN1cnNvcik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jdXJyZW50U25pcHBldC5leHRlcm5maWxlKSB7XHJcbiAgICAgIHRoaXMuc25pcHBldHNTZXJ2aWNlLmdldFNuaXBwZXRDb2RlKHRoaXMuY3VycmVudFNuaXBwZXQuZXh0ZXJuZmlsZSkuc3Vic2NyaWJlKChjb2RlKSA9PiB0aGlzLmRvYy5yZXBsYWNlUmFuZ2UoY29kZSwgY3Vyc29yKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJhbmdlKGRvYykge1xyXG4gICAgcmV0dXJuIHsgZnJvbTogZG9jLmdldEN1cnNvcignZnJvbScpLCB0bzogZG9jLmdldEN1cnNvcigndG8nKSB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybWF0dGVyKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5mb3JtYXR0ZXIpIHJldHVybiB0aGlzLmZvcm1hdHRlcjtcclxuICAgIGlmICh0aGlzLm1vZGUubWF0Y2goL3R5cGVzY3JpcHQvKSkgeyByZXR1cm4gXCJ0eXBlc2NyaXB0XCI7IH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIGF1dG9Gb3JtYXRTZWxlY3Rpb24oY20pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuZ2V0Rm9ybWF0dGVyKCk7XHJcbiAgICAgIGlmICghZm9ybWF0dGVyKSB7XHJcbiAgICAgICAgYWxlcnQoXCJubyBmb3JtYXR0ZXIgZGVmaW5lZCBmb3IgdGhpcyBjb2RlXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgb3B0aW9uczogYW55ID0geyAuLi50aGlzLmZvcm1hdHRlck9wdGlvbnMgfTtcclxuICAgICAgb3B0aW9ucy5wYXJzZXIgPSBmb3JtYXR0ZXI7XHJcbiAgICAgIG9wdGlvbnMucGx1Z2lucyA9IFtwYXJzZXJUeXBlc2NyaXB0LCBwYXJzZXJCYWJlbF1cclxuXHJcbiAgICAgIGNtLmRvYy5zZXRWYWx1ZShwcmV0dGllci5mb3JtYXQoY20uZG9jLmdldFZhbHVlKCksIG9wdGlvbnMpKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGFsZXJ0KGBVbmFibGUgdG8gZm9ybWF0IHRoaXMgY29kZSwgY2hlY2sgU3ludGF4YCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGwgZnhMYXlvdXRBbGlnbj1cInN0cmVjaFwiIGNsYXNzPVwibWFpbkRpdlwiPlxyXG4gICAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG4gICAgPGRpdiAqbmdJZj1cInNuaXBwZXRzPy5sZW5ndGhcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiY3VycmVudFNuaXBwZXRcIiBmeEZsZXg+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzbmlwcGV0IG9mIHNuaXBwZXRzXCIgW3ZhbHVlXT1cInNuaXBwZXRcIj57e3NuaXBwZXQubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydCgpXCI+SW5zZXJ0PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmd4LWNvZGVtaXJyb3IgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtvcHRpb25zXT1cIntsaW5lTnVtYmVyczogdHJ1ZSx0aGVtZTogJ2VjbGlwc2UnLCBpbmRlbnRXaXRoVGFiczp0cnVlLGluZGVudFVuaXQ6IDQsbWF0Y2hCcmFja2V0czogdHJ1ZSwgbW9kZTogbW9kZSwgZml4ZWRHdXR0ZXI6ZmFsc2UsIGV4dHJhS2V5czogZXh0cmFLZXlzfVwiIHN0eWxlPVwid2lkdGg6MTAwJVwiPlxyXG4gICAgPC9uZ3gtY29kZW1pcnJvcj5cclxuPC9kaXY+Il19
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import * as moment from 'moment';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/form-field";
|
|
6
|
+
import * as i2 from "@angular/material/datepicker";
|
|
7
|
+
import * as i3 from "@angular-material-components/datetime-picker";
|
|
8
|
+
import * as i4 from "@angular/common";
|
|
9
|
+
import * as i5 from "@angular/material/input";
|
|
10
|
+
import * as i6 from "@angular/forms";
|
|
11
|
+
export class DatetimeComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
this._value = null;
|
|
14
|
+
this.display = null;
|
|
15
|
+
this.placeHolder = null;
|
|
16
|
+
this.mode = 'date';
|
|
17
|
+
this.showSpinners = true;
|
|
18
|
+
this.showSeconds = false;
|
|
19
|
+
this.disableMinute = false;
|
|
20
|
+
this.onChange = () => { };
|
|
21
|
+
this.onTouched = () => { };
|
|
22
|
+
}
|
|
23
|
+
get value() {
|
|
24
|
+
return this._value;
|
|
25
|
+
}
|
|
26
|
+
set value(val) {
|
|
27
|
+
this._value = val;
|
|
28
|
+
let dt = this._value;
|
|
29
|
+
if (typeof (this._value) === 'string') {
|
|
30
|
+
dt = moment(this._value).toISOString();
|
|
31
|
+
}
|
|
32
|
+
this.onChange(dt);
|
|
33
|
+
this.onTouched();
|
|
34
|
+
}
|
|
35
|
+
writeValue(obj) {
|
|
36
|
+
this.value = obj;
|
|
37
|
+
}
|
|
38
|
+
registerOnChange(fn) {
|
|
39
|
+
this.onChange = fn;
|
|
40
|
+
}
|
|
41
|
+
registerOnTouched(fn) {
|
|
42
|
+
this.onTouched = fn;
|
|
43
|
+
}
|
|
44
|
+
setDisabledState(isDisabled) {
|
|
45
|
+
//throw new Error('Method not implemented.');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
DatetimeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DatetimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
49
|
+
DatetimeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DatetimeComponent, selector: "gloww-datetime", inputs: { _value: ["value", "_value"], display: "display", placeHolder: "placeHolder", mode: "mode", showSpinners: "showSpinners", showSeconds: "showSeconds", disableMinute: "disableMinute" }, providers: [
|
|
50
|
+
{
|
|
51
|
+
provide: NG_VALUE_ACCESSOR,
|
|
52
|
+
multi: true,
|
|
53
|
+
useExisting: DatetimeComponent
|
|
54
|
+
}
|
|
55
|
+
], ngImport: i0, template: "<div style=\"width:100%\">\r\n <mat-form-field *ngIf=\"mode==='date'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [placeholder]=\"placeHolder\" [(ngModel)]=\"value\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"mode==='datetime'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [ngxMatDatetimePicker]=\"pickerDT\" [placeholder]=\"placeHolder\" [(ngModel)]=\"value\">\r\n <mat-datepicker-toggle matSuffix [for]=\"$any(pickerDT)\"></mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker #pickerDT [showSpinners]=\"showSpinners\" [showSeconds]=\"showSeconds\" [touchUi]=\"true\" [disableMinute]=\"disableMinute\">\r\n </ngx-mat-datetime-picker>\r\n </mat-form-field>\r\n</div>\r\n", styles: [""], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i3.NgxMatDatetimePicker, selector: "ngx-mat-datetime-picker", inputs: ["calendarHeaderComponent", "startAt", "startView", "defaultColor", "color", "touchUi", "hideTime", "disabled", "panelClass", "dateClass", "opened", "showSpinners", "showSeconds", "stepHour", "stepMinute", "stepSecond", "enableMeridian", "disableMinute", "defaultTime"], outputs: ["yearSelected", "monthSelected", "opened", "closed"], exportAs: ["ngxMatDatetimePicker"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i3.NgxMatDatetimeInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "ngxMatDatetimePickerFilter", "value", "min", "max", "disabled"], outputs: ["dateChange", "dateInput"], exportAs: ["ngxMatDatetimePickerInput"] }] });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DatetimeComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'gloww-datetime', providers: [
|
|
59
|
+
{
|
|
60
|
+
provide: NG_VALUE_ACCESSOR,
|
|
61
|
+
multi: true,
|
|
62
|
+
useExisting: DatetimeComponent
|
|
63
|
+
}
|
|
64
|
+
], template: "<div style=\"width:100%\">\r\n <mat-form-field *ngIf=\"mode==='date'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [placeholder]=\"placeHolder\" [(ngModel)]=\"value\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"mode==='datetime'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [ngxMatDatetimePicker]=\"pickerDT\" [placeholder]=\"placeHolder\" [(ngModel)]=\"value\">\r\n <mat-datepicker-toggle matSuffix [for]=\"$any(pickerDT)\"></mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker #pickerDT [showSpinners]=\"showSpinners\" [showSeconds]=\"showSeconds\" [touchUi]=\"true\" [disableMinute]=\"disableMinute\">\r\n </ngx-mat-datetime-picker>\r\n </mat-form-field>\r\n</div>\r\n", styles: [""] }]
|
|
65
|
+
}], ctorParameters: function () { return []; }, propDecorators: { _value: [{
|
|
66
|
+
type: Input,
|
|
67
|
+
args: ['value']
|
|
68
|
+
}], display: [{
|
|
69
|
+
type: Input,
|
|
70
|
+
args: ['display']
|
|
71
|
+
}], placeHolder: [{
|
|
72
|
+
type: Input,
|
|
73
|
+
args: ['placeHolder']
|
|
74
|
+
}], mode: [{
|
|
75
|
+
type: Input,
|
|
76
|
+
args: ['mode']
|
|
77
|
+
}], showSpinners: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], showSeconds: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], disableMinute: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}] } });
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2xvd3cvc3JjL2xpYi9Db21wb25lbnRzL2RhdGV0aW1lL2RhdGV0aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kYXRldGltZS9kYXRldGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7O0FBY2pDLE1BQU0sT0FBTyxpQkFBaUI7SUFZNUI7UUFYZ0IsV0FBTSxHQUFRLElBQUksQ0FBQztRQUNqQixZQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ2hCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQy9CLFNBQUksR0FBVyxNQUFNLENBQUM7UUFDNUIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFeEMsYUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUdqQixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDckMsRUFBRSxHQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyw2Q0FBNkM7SUFDL0MsQ0FBQzs7OEdBeENVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBPQVJqQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxpQkFBaUI7U0FDL0I7S0FDRiwwQkNkSCxnN0JBZ0JBOzJGREFhLGlCQUFpQjtrQkFaN0IsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLG1CQUFtQjt5QkFDL0I7cUJBQ0Y7MEVBR2UsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPO2dCQUNJLE9BQU87c0JBQXhCLEtBQUs7dUJBQUMsU0FBUztnQkFDTSxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBQ0wsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUNKLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2dsb3d3LWRhdGV0aW1lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGV0aW1lLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogRGF0ZXRpbWVDb21wb25lbnRcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRldGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBASW5wdXQoJ3ZhbHVlJykgX3ZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgnZGlzcGxheScpIGRpc3BsYXk6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCdwbGFjZUhvbGRlcicpIHBsYWNlSG9sZGVyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgnbW9kZScpIG1vZGU6IHN0cmluZyA9ICdkYXRlJztcclxuICBASW5wdXQoKSBzaG93U3Bpbm5lcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dTZWNvbmRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlzYWJsZU1pbnV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuXHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbCkge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICBsZXQgZHQgPSB0aGlzLl92YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgKHRoaXMuX3ZhbHVlKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZHQgPSAobW9tZW50KHRoaXMuX3ZhbHVlKSBhcyBtb21lbnQuTW9tZW50KS50b0lTT1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZShkdCk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJVwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibW9kZT09PSdkYXRlJ1wiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibW9kZT09PSdkYXRldGltZSdcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7ZGlzcGxheX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ3hNYXREYXRldGltZVBpY2tlcl09XCJwaWNrZXJEVFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiIFsobmdNb2RlbCldPVwidmFsdWVcIj5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIiRhbnkocGlja2VyRFQpXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG5neC1tYXQtZGF0ZXRpbWUtcGlja2VyICNwaWNrZXJEVCBbc2hvd1NwaW5uZXJzXT1cInNob3dTcGlubmVyc1wiIFtzaG93U2Vjb25kc109XCJzaG93U2Vjb25kc1wiIFt0b3VjaFVpXT1cInRydWVcIiBbZGlzYWJsZU1pbnV0ZV09XCJkaXNhYmxlTWludXRlXCI+XHJcbiAgICAgICAgPC9uZ3gtbWF0LWRhdGV0aW1lLXBpY2tlcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG4iXX0=
|