@ohioepa/oepa-ui-lib 1.1.0 → 1.2.0
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/esm2022/lib/account-search-input/account-search-input.component.mjs +3 -3
- package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +3 -3
- package/esm2022/lib/action-btn/action-btn.component.mjs +3 -3
- package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +3 -3
- package/esm2022/lib/address/address.component.mjs +3 -3
- package/esm2022/lib/address/oepa-address.service.mjs +3 -3
- package/esm2022/lib/blank/blank.component.mjs +3 -3
- package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +3 -3
- package/esm2022/lib/comment-modal/comment-modal.component.mjs +3 -3
- package/esm2022/lib/common-forms.module.mjs +9 -36
- package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +3 -3
- package/esm2022/lib/contact/contact.component.mjs +3 -3
- package/esm2022/lib/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +3 -3
- package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +3 -3
- package/esm2022/lib/dual-list-box/array.pipes.mjs +6 -6
- package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +3 -3
- package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +3 -3
- package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +3 -3
- package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +3 -3
- package/esm2022/lib/entity/entity.service.mjs +3 -3
- package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +3 -3
- package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +3 -3
- package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +5 -5
- package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +3 -3
- package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +3 -3
- package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +5 -5
- package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +3 -3
- package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +3 -3
- package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +5 -5
- package/esm2022/lib/file-upload/file-upload.component.mjs +3 -3
- package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +3 -3
- package/esm2022/lib/lynx-image-upload/lynx.service.mjs +3 -3
- package/esm2022/lib/message/message.component.mjs +3 -3
- package/esm2022/lib/message-list/message-list.component.mjs +3 -3
- package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +3 -3
- package/esm2022/lib/notes-modal/notes-modal.component.mjs +3 -3
- package/esm2022/lib/numeric-input/numeric-input.component.mjs +3 -3
- package/esm2022/lib/numeric-input.directive.mjs +3 -3
- package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +3 -3
- package/esm2022/lib/oepa-forms.service.mjs +3 -3
- package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +3 -3
- package/esm2022/lib/parameter/parameter.service.mjs +3 -3
- package/esm2022/lib/params-help-button/params-help-button.component.mjs +3 -3
- package/esm2022/lib/phone-number/phone-number.component.mjs +3 -3
- package/esm2022/lib/pin-modal/oepa-pin.service.mjs +3 -3
- package/esm2022/lib/pin-modal/pin-modal.component.mjs +3 -3
- package/esm2022/lib/select-input/select-input.component.mjs +3 -3
- package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +3 -3
- package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +3 -3
- package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +3 -3
- package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +3 -3
- package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +3 -3
- package/esm2022/lib/table/oepa-table-filtering.directive.mjs +3 -3
- package/esm2022/lib/table/oepa-table-sorting.directive.mjs +3 -3
- package/esm2022/lib/table/p-table/p-table.component.mjs +3 -3
- package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +3 -3
- package/esm2022/lib/table/table-export.service.mjs +3 -3
- package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +3 -3
- package/esm2022/lib/table/table.component.mjs +3 -3
- package/esm2022/lib/table/table.service.mjs +3 -3
- package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +3 -3
- package/esm2022/lib/text-area-input/text-area-input.component.mjs +3 -3
- package/esm2022/lib/text-input/text-input.component.mjs +3 -3
- package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +3 -3
- package/esm2022/lib/timepicker/timepicker.component.mjs +3 -3
- package/esm2022/lib/validation/validation.service.mjs +3 -3
- package/esm2022/lib/yes-no/yes-no.component.mjs +3 -3
- package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +3 -3
- package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +3 -3
- package/esm2022/lib/zip-code/zip-code.component.mjs +3 -3
- package/esm2022/public-api.mjs +1 -28
- package/fesm2022/ohioepa-oepa-ui-lib.mjs +495 -2519
- package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -1
- package/lib/common-forms.module.d.ts +70 -82
- package/ohioepa-oepa-ui-lib-1.2.0.tgz +0 -0
- package/package.json +3 -3
- package/public-api.d.ts +0 -27
- package/esm2022/lib/document/document-editor/document-editor.component.mjs +0 -225
- package/esm2022/lib/document/document-event-entity-type.mjs +0 -7
- package/esm2022/lib/document/document-event-type.mjs +0 -7
- package/esm2022/lib/document/document-event.mjs +0 -2
- package/esm2022/lib/document/document-group/document-group.component.mjs +0 -210
- package/esm2022/lib/document/document-part/document-part.component.mjs +0 -19
- package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +0 -296
- package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +0 -49
- package/esm2022/lib/document/document-section/document-section.component.mjs +0 -226
- package/esm2022/lib/document/document.service.mjs +0 -325
- package/esm2022/lib/document/group-modal/group-modal.component.mjs +0 -46
- package/esm2022/lib/document/part-modal/part-modal.component.mjs +0 -48
- package/esm2022/lib/document/portal-document-class.mjs +0 -2
- package/esm2022/lib/document/portal-document-group.mjs +0 -2
- package/esm2022/lib/document/portal-document-part.mjs +0 -2
- package/esm2022/lib/document/portal-document-placeholder.mjs +0 -2
- package/esm2022/lib/document/portal-document-section.mjs +0 -2
- package/esm2022/lib/document/portal-document-text.mjs +0 -2
- package/esm2022/lib/document/portal-document-type.mjs +0 -2
- package/esm2022/lib/document/portal-document.mjs +0 -2
- package/esm2022/lib/document/portal-email-attachment-type.mjs +0 -2
- package/esm2022/lib/document/portal-email-attachment.mjs +0 -2
- package/esm2022/lib/document/portal-email-filter.mjs +0 -2
- package/esm2022/lib/document/portal-email.mjs +0 -2
- package/esm2022/lib/document/section-modal/section-modal.component.mjs +0 -46
- package/esm2022/lib/esri-map/esri-map.component.mjs +0 -416
- package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +0 -176
- package/lib/document/document-editor/document-editor.component.d.ts +0 -34
- package/lib/document/document-event-entity-type.d.ts +0 -5
- package/lib/document/document-event-type.d.ts +0 -5
- package/lib/document/document-event.d.ts +0 -9
- package/lib/document/document-group/document-group.component.d.ts +0 -38
- package/lib/document/document-part/document-part.component.d.ts +0 -10
- package/lib/document/document-part-editor/document-part-editor.component.d.ts +0 -46
- package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +0 -19
- package/lib/document/document-section/document-section.component.d.ts +0 -37
- package/lib/document/document.service.d.ts +0 -90
- package/lib/document/group-modal/group-modal.component.d.ts +0 -20
- package/lib/document/part-modal/part-modal.component.d.ts +0 -20
- package/lib/document/portal-document-class.d.ts +0 -10
- package/lib/document/portal-document-group.d.ts +0 -15
- package/lib/document/portal-document-part.d.ts +0 -22
- package/lib/document/portal-document-placeholder.d.ts +0 -12
- package/lib/document/portal-document-section.d.ts +0 -13
- package/lib/document/portal-document-text.d.ts +0 -7
- package/lib/document/portal-document-type.d.ts +0 -15
- package/lib/document/portal-document.d.ts +0 -27
- package/lib/document/portal-email-attachment-type.d.ts +0 -6
- package/lib/document/portal-email-attachment.d.ts +0 -12
- package/lib/document/portal-email-filter.d.ts +0 -12
- package/lib/document/portal-email.d.ts +0 -18
- package/lib/document/section-modal/section-modal.component.d.ts +0 -20
- package/lib/esri-map/esri-map.component.d.ts +0 -41
- package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +0 -63
- package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
import * as i2 from "@angular/forms";
|
|
5
|
-
import * as i3 from "ngx-mask";
|
|
6
|
-
import * as i4 from "../esri-map/esri-map.component";
|
|
7
|
-
import * as i5 from "../yes-no/yes-no.component";
|
|
8
|
-
export class OhioLatLongComponent {
|
|
9
|
-
group;
|
|
10
|
-
/** Form validation will be displayed when showValidation is true. */
|
|
11
|
-
showValidation = false;
|
|
12
|
-
latLongCollectionMethods = [];
|
|
13
|
-
OHIO = { latMin: 38, latMax: 42, longMin: -85, longMax: -80 };
|
|
14
|
-
collectionMethods = [];
|
|
15
|
-
isSatelliteView = false;
|
|
16
|
-
coordsOutsideOfOhio = false;
|
|
17
|
-
customPatterns = { '9': { pattern: new RegExp('[-?0-9]') },
|
|
18
|
-
'0': { pattern: new RegExp('[0-9]') } };
|
|
19
|
-
// Set our map properties
|
|
20
|
-
mapCenter = [-82.996822, 39.959011];
|
|
21
|
-
basemapType = 'streets-vector';
|
|
22
|
-
mapZoomLevel = 7;
|
|
23
|
-
// See app.component.html
|
|
24
|
-
mapLoadedEvent(status) {
|
|
25
|
-
console.log('The map loaded: ' + status);
|
|
26
|
-
}
|
|
27
|
-
useDMS = false;
|
|
28
|
-
dmsLat = {
|
|
29
|
-
deg: undefined,
|
|
30
|
-
min: undefined,
|
|
31
|
-
sec: undefined
|
|
32
|
-
};
|
|
33
|
-
dmsLong = {
|
|
34
|
-
deg: undefined,
|
|
35
|
-
min: undefined,
|
|
36
|
-
sec: undefined
|
|
37
|
-
};
|
|
38
|
-
constructor() { }
|
|
39
|
-
ngOnInit() {
|
|
40
|
-
this.updateLatDMSValue(this.group.controls['latDecimal'].value);
|
|
41
|
-
this.updateLonDMSValue(this.group.controls['longDecimal'].value);
|
|
42
|
-
this.group.controls['latDecimal'].valueChanges.subscribe(latDecimal => {
|
|
43
|
-
this.updateLatDMSValue(latDecimal);
|
|
44
|
-
});
|
|
45
|
-
this.group.controls['longDecimal'].valueChanges.subscribe(longDecimal => {
|
|
46
|
-
this.updateLonDMSValue(longDecimal);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
updateLatDMSValue(latDecimal) {
|
|
50
|
-
if (this.isNum(latDecimal)) {
|
|
51
|
-
this.dmsLat = this.decimalToDMS(latDecimal);
|
|
52
|
-
this.group.controls['dmsLat'].get('deg')?.patchValue(this.dmsLat.deg);
|
|
53
|
-
this.group.controls['dmsLat'].get('min')?.patchValue(this.dmsLat.min);
|
|
54
|
-
this.group.controls['dmsLat'].get('sec')?.patchValue(this.dmsLat.sec);
|
|
55
|
-
this.coordsOutsideOfOhio = !this.checkCoordsInOhio(this.group.controls['latDecimal'].value, this.group.controls['longDecimal'].value);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
updateLonDMSValue(longDecimal) {
|
|
59
|
-
if (this.isNum(longDecimal)) {
|
|
60
|
-
this.dmsLong = this.decimalToDMS(longDecimal);
|
|
61
|
-
this.group.controls['dmsLong'].get('deg')?.patchValue(this.dmsLong.deg);
|
|
62
|
-
this.group.controls['dmsLong'].get('min')?.patchValue(this.dmsLong.min);
|
|
63
|
-
this.group.controls['dmsLong'].get('sec')?.patchValue(this.dmsLong.sec);
|
|
64
|
-
this.coordsOutsideOfOhio = !this.checkCoordsInOhio(this.group.controls['latDecimal'].value, this.group.controls['longDecimal'].value);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// default to required if oepaRequired is not specified
|
|
68
|
-
// public isRequired() {
|
|
69
|
-
// // return (this.oepaRequired() !== false);
|
|
70
|
-
// };
|
|
71
|
-
async zoomToCoordinates(latDecimal, longDecimal, facilityMap) {
|
|
72
|
-
facilityMap.resetMap();
|
|
73
|
-
facilityMap.addPoint(latDecimal, longDecimal, 'xxx');
|
|
74
|
-
facilityMap.zoomToFacility(latDecimal, longDecimal);
|
|
75
|
-
console.log(this.group.value);
|
|
76
|
-
}
|
|
77
|
-
convertCoordsToDMS(dmsLatitude, dmsLongitude) {
|
|
78
|
-
if (this.isNum(dmsLatitude.controls['deg'].value) &&
|
|
79
|
-
this.isNum(dmsLatitude.controls['min'].value) &&
|
|
80
|
-
this.isNum(dmsLatitude.controls['sec'].value) &&
|
|
81
|
-
this.isNum(dmsLongitude.controls['deg'].value) &&
|
|
82
|
-
this.isNum(dmsLongitude.controls['min'].value) &&
|
|
83
|
-
this.isNum(dmsLongitude.controls['sec'].value)) {
|
|
84
|
-
var decimalLat;
|
|
85
|
-
var decimalLong;
|
|
86
|
-
var dmsLat = {
|
|
87
|
-
deg: dmsLatitude.controls['deg'].value,
|
|
88
|
-
min: dmsLatitude.controls['min'].value,
|
|
89
|
-
sec: dmsLatitude.controls['sec'].value
|
|
90
|
-
};
|
|
91
|
-
var dmsLong = {
|
|
92
|
-
deg: Number(dmsLongitude.controls['deg'].value) < 0 ? dmsLongitude.controls['deg'].value : -1 * Number(dmsLongitude.controls['deg'].value),
|
|
93
|
-
min: dmsLongitude.controls['min'].value,
|
|
94
|
-
sec: dmsLongitude.controls['sec'].value
|
|
95
|
-
};
|
|
96
|
-
decimalLat = this.dmsToDecimal(dmsLat);
|
|
97
|
-
decimalLong = this.dmsToDecimal(dmsLong);
|
|
98
|
-
this.group.controls['latDecimal'].patchValue(decimalLat);
|
|
99
|
-
this.group.controls['longDecimal'].patchValue(decimalLong);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
dmsToDecimal(dms) {
|
|
103
|
-
if (null != dms.deg && null != dms.min && null != dms.sec) {
|
|
104
|
-
var decimal = undefined;
|
|
105
|
-
var decimalFraction = dms.min / 60.0 + dms.sec / 3600.0;
|
|
106
|
-
decimal = (dms.deg > 0) ? dms.deg + decimalFraction : dms.deg - decimalFraction;
|
|
107
|
-
return decimal.toFixed(6);
|
|
108
|
-
}
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
;
|
|
112
|
-
decimalToDMS(decimal) {
|
|
113
|
-
var dms = {
|
|
114
|
-
deg: undefined,
|
|
115
|
-
min: undefined,
|
|
116
|
-
sec: undefined,
|
|
117
|
-
};
|
|
118
|
-
var absolute = Math.abs(decimal);
|
|
119
|
-
dms.deg = Math.floor(absolute);
|
|
120
|
-
var minsec = (absolute - dms.deg) * 60.0;
|
|
121
|
-
dms.min = Math.floor(minsec);
|
|
122
|
-
dms.sec = Number(((minsec - dms.min) * 60.0).toFixed(6));
|
|
123
|
-
if (dms.sec === 60) {
|
|
124
|
-
dms.min += 1;
|
|
125
|
-
dms.sec = 0;
|
|
126
|
-
}
|
|
127
|
-
if (dms.min === 60) {
|
|
128
|
-
dms.deg += 1;
|
|
129
|
-
dms.min = 0;
|
|
130
|
-
}
|
|
131
|
-
return dms;
|
|
132
|
-
}
|
|
133
|
-
;
|
|
134
|
-
checkCoordsInOhio(latitude, longitude) {
|
|
135
|
-
var coordsInOhio = true;
|
|
136
|
-
try {
|
|
137
|
-
if ((Number(latitude) < this.OHIO.latMin || Number(latitude) > this.OHIO.latMax ||
|
|
138
|
-
Number(longitude) < this.OHIO.longMin || Number(longitude) > this.OHIO.longMax)) {
|
|
139
|
-
coordsInOhio = false;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
catch (e) {
|
|
143
|
-
console.log('ERROR: bad lat/long: ' + latitude + '/' + longitude);
|
|
144
|
-
}
|
|
145
|
-
return coordsInOhio;
|
|
146
|
-
}
|
|
147
|
-
updateCoordinates(coords) {
|
|
148
|
-
this.group.controls['latDecimal'].patchValue(coords.latDecimal);
|
|
149
|
-
this.group.controls['longDecimal'].patchValue(coords.longDecimal);
|
|
150
|
-
}
|
|
151
|
-
isNum(value) {
|
|
152
|
-
if (value && null != value && undefined != value && value != '') {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
getDMSLatFormGroup() {
|
|
158
|
-
return this.group.controls['dmsLat'];
|
|
159
|
-
}
|
|
160
|
-
getDMSLongFormGroup() {
|
|
161
|
-
return this.group.controls['dmsLong'];
|
|
162
|
-
}
|
|
163
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OhioLatLongComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
164
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: OhioLatLongComponent, selector: "oepa-ohio-lat-long", inputs: { group: "group", showValidation: "showValidation", latLongCollectionMethods: "latLongCollectionMethods" }, ngImport: i0, template: "<div [style.pointer-events]=\"group.enabled ? null : 'none'\">\n\n<form [formGroup]=\"group\" novalidate>\n <div class=\"oepa-workflow-component-50\">\n <div class=\"oepa-section-component-body\">\n <div class=\"form-group\">\n <div class=\"alert alert-info\">\n Use the map on the right to set the latitude and longitude values and verify they are correct.\n You may click on the map to choose latitude and longitude coordinates or enter the latitude and longitude\n values in the input fields below.\n Alternately, you may enter an address in the input field at the top of the map to find coordinates by\n address.\n </div>\n </div>\n <div *ngIf=\"useDMS\">\n <button class=\"btn btn-primary\" (click)=\"convertCoordsToDMS(getDMSLatFormGroup(), getDMSLongFormGroup()); useDMS = !useDMS\">Convert\n Coordinates to Decimal Degrees</button>\n <div class=\"row\" formGroupName=\"dmsLat\">\n <div class=\"col-md-12\">\n <label>Latitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"latDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-89\" max=\"89\" ng-blur=\"onLatDMSChange()\" maxlength=\"\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['deg'].hasError('required')\">xxx is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"latMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"latSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\" formGroupName=\"dmsLong\">\n <div class=\"col-md-12\">\n <label>Longitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"longDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-179\" max=\"179\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['deg'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"longMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"longSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!useDMS\">\n <button class=\"btn btn-primary\" (click)=\"useDMS = !useDMS\">Enter Coordinates in Degrees, Minutes, Seconds</button>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Latitude</label>\n <input formControlName=\"latDecimal\" name=\"Latitude\" class=\"form-control\" type=\"text\" placeholder=\"Latitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\" \n [ngClass]=\"{'is-invalid':showValidation && group['controls']['latDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['latDecimal'].hasError('required')\">Latitude is required</small>\n </div>\n <div class=\"form-group\">\n <label>Longitude</label>\n <input formControlName=\"longDecimal\" name=\"Longitude\" class=\"form-control\" type=\"text\" placeholder=\"Longitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['longDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['longDecimal'].hasError('required')\">Longitude is required</small>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"group['controls']['latDecimal'].value !== '' && group['controls']['longDecimal'].value !== ''\">\n <button class=\"btn btn-primary\" (click)=\"zoomToCoordinates(group['controls']['latDecimal'].value,group['controls']['longDecimal'].value, facilityMap)\">Zoom To These Coordinates</button>\n </div>\n\n <div *ngIf=\"latLongCollectionMethods && latLongCollectionMethods.length > 0\" class=\"form-group\">\n <label>Collection Method</label>\n <select class=\"form-select\" id=\"collectionMethodType\" name=\"collectionMethodType\" formControlName=\"collectionMethodType\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['collectionMethodType'].status === 'INVALID'}\">\n <option value=\"\">--Select Collection Method--</option>\n <option *ngFor=\"let n of latLongCollectionMethods\" [ngValue]=\"n.codeValue\">{{n.description}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['collectionMethodType'].hasError('required')\">Collection Method is required</small>\n </div>\n\n <div *ngIf=\"coordsOutsideOfOhio\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"group.get('allowOutsideOfOhio')?.value!=='yes'\">\n The Latitude and Longitude values entered are not within the state of Ohio. Please enter a latitude value\n between 38 and 42 and a\n longitude value between -85 and -80 or indicate below that this location is outside of Ohio.\n </div>\n <div>\n <oepa-yes-no [group]=\"group\" field=\"allowOutsideOfOhio\" id=\"allowOutsideOfOhio\" [showValidation]=\"showValidation\">Is\n this location outside of Ohio?</oepa-yes-no>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"oepa-action-component-50\">\n <div class=\"oepa-section-component-body\">\n <oepa-esri-map\n #facilityMap [center]=\"mapCenter\"\n [basemap]=\"basemapType\"\n [zoom]=\"mapZoomLevel\"\n (mapLoaded)=\"mapLoadedEvent($event)\"\n [currentLatLong]=\"group.value\"\n (onNewCoordinates)=\"updateCoordinates($event)\"\n [showSearch]=\"group.enabled\">\n </oepa-esri-map>\n </div>\n </div>\n\n</form>\n\n</div>", styles: [".oepa-workflow-component-50{float:left;width:50%;overflow-y:auto}.oepa-section-component-body{overflow-y:auto;overflow-x:hidden;box-sizing:border-box;padding:10px}.oepa-action-component-50{width:50%;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "component", type: i4.EsriMapComponent, selector: "oepa-esri-map", inputs: ["currentLatLong", "zoom", "center", "basemap", "showSearch"], outputs: ["mapLoaded", "onNewCoordinates"] }, { kind: "component", type: i5.YesNoComponent, selector: "oepa-yes-no", inputs: ["group", "field", "showValidation", "disabled"] }] });
|
|
165
|
-
}
|
|
166
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OhioLatLongComponent, decorators: [{
|
|
167
|
-
type: Component,
|
|
168
|
-
args: [{ selector: 'oepa-ohio-lat-long', template: "<div [style.pointer-events]=\"group.enabled ? null : 'none'\">\n\n<form [formGroup]=\"group\" novalidate>\n <div class=\"oepa-workflow-component-50\">\n <div class=\"oepa-section-component-body\">\n <div class=\"form-group\">\n <div class=\"alert alert-info\">\n Use the map on the right to set the latitude and longitude values and verify they are correct.\n You may click on the map to choose latitude and longitude coordinates or enter the latitude and longitude\n values in the input fields below.\n Alternately, you may enter an address in the input field at the top of the map to find coordinates by\n address.\n </div>\n </div>\n <div *ngIf=\"useDMS\">\n <button class=\"btn btn-primary\" (click)=\"convertCoordsToDMS(getDMSLatFormGroup(), getDMSLongFormGroup()); useDMS = !useDMS\">Convert\n Coordinates to Decimal Degrees</button>\n <div class=\"row\" formGroupName=\"dmsLat\">\n <div class=\"col-md-12\">\n <label>Latitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"latDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-89\" max=\"89\" ng-blur=\"onLatDMSChange()\" maxlength=\"\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['deg'].hasError('required')\">xxx is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"latMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"latSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLatDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLatFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLatFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\" formGroupName=\"dmsLong\">\n <div class=\"col-md-12\">\n <label>Longitude</label>\n <div class=\"row\">\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"deg\" name=\"longDegrees\" class=\"form-control\" type=\"number\" placeholder=\"Degrees\"\n min=\"-179\" max=\"179\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['deg'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['deg'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"min\" name=\"longMinutes\" class=\"form-control\" type=\"number\" placeholder=\"Minutes\"\n min=\"0\" max=\"59\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['min'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['min'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"form-group\">\n <input formControlName=\"sec\" name=\"longSeconds\" class=\"form-control\" type=\"number\" placeholder=\"Seconds\"\n min=\"0\" max=\"59.999999\" ng-blur=\"onLongDMSChange()\"\n [ngClass]=\"{'is-invalid':showValidation && getDMSLongFormGroup()['controls']['sec'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"getDMSLongFormGroup()['controls']['sec'].hasError('required')\">Primary SIC Code is required</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!useDMS\">\n <button class=\"btn btn-primary\" (click)=\"useDMS = !useDMS\">Enter Coordinates in Degrees, Minutes, Seconds</button>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Latitude</label>\n <input formControlName=\"latDecimal\" name=\"Latitude\" class=\"form-control\" type=\"text\" placeholder=\"Latitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\" \n [ngClass]=\"{'is-invalid':showValidation && group['controls']['latDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['latDecimal'].hasError('required')\">Latitude is required</small>\n </div>\n <div class=\"form-group\">\n <label>Longitude</label>\n <input formControlName=\"longDecimal\" name=\"Longitude\" class=\"form-control\" type=\"text\" placeholder=\"Longitude\"\n ng-blur=\"onLatLongInputChange()\" mask=\"separator.6\" decimalMarker=\".\" [allowNegativeNumbers]=\"true\" [dropSpecialCharacters]=\"false\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['longDecimal'].status === 'INVALID'}\">\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['longDecimal'].hasError('required')\">Longitude is required</small>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"group['controls']['latDecimal'].value !== '' && group['controls']['longDecimal'].value !== ''\">\n <button class=\"btn btn-primary\" (click)=\"zoomToCoordinates(group['controls']['latDecimal'].value,group['controls']['longDecimal'].value, facilityMap)\">Zoom To These Coordinates</button>\n </div>\n\n <div *ngIf=\"latLongCollectionMethods && latLongCollectionMethods.length > 0\" class=\"form-group\">\n <label>Collection Method</label>\n <select class=\"form-select\" id=\"collectionMethodType\" name=\"collectionMethodType\" formControlName=\"collectionMethodType\"\n [ngClass]=\"{'is-invalid':showValidation && group['controls']['collectionMethodType'].status === 'INVALID'}\">\n <option value=\"\">--Select Collection Method--</option>\n <option *ngFor=\"let n of latLongCollectionMethods\" [ngValue]=\"n.codeValue\">{{n.description}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group['controls']['collectionMethodType'].hasError('required')\">Collection Method is required</small>\n </div>\n\n <div *ngIf=\"coordsOutsideOfOhio\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"group.get('allowOutsideOfOhio')?.value!=='yes'\">\n The Latitude and Longitude values entered are not within the state of Ohio. Please enter a latitude value\n between 38 and 42 and a\n longitude value between -85 and -80 or indicate below that this location is outside of Ohio.\n </div>\n <div>\n <oepa-yes-no [group]=\"group\" field=\"allowOutsideOfOhio\" id=\"allowOutsideOfOhio\" [showValidation]=\"showValidation\">Is\n this location outside of Ohio?</oepa-yes-no>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"oepa-action-component-50\">\n <div class=\"oepa-section-component-body\">\n <oepa-esri-map\n #facilityMap [center]=\"mapCenter\"\n [basemap]=\"basemapType\"\n [zoom]=\"mapZoomLevel\"\n (mapLoaded)=\"mapLoadedEvent($event)\"\n [currentLatLong]=\"group.value\"\n (onNewCoordinates)=\"updateCoordinates($event)\"\n [showSearch]=\"group.enabled\">\n </oepa-esri-map>\n </div>\n </div>\n\n</form>\n\n</div>", styles: [".oepa-workflow-component-50{float:left;width:50%;overflow-y:auto}.oepa-section-component-body{overflow-y:auto;overflow-x:hidden;box-sizing:border-box;padding:10px}.oepa-action-component-50{width:50%;overflow-y:auto}\n"] }]
|
|
169
|
-
}], ctorParameters: () => [], propDecorators: { group: [{
|
|
170
|
-
type: Input
|
|
171
|
-
}], showValidation: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], latLongCollectionMethods: [{
|
|
174
|
-
type: Input
|
|
175
|
-
}] } });
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2hpby1sYXQtbG9uZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL29oaW8tbGF0LWxvbmcvb2hpby1sYXQtbG9uZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL29oaW8tbGF0LWxvbmcvb2hpby1sYXQtbG9uZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVd6RCxNQUFNLE9BQU8sb0JBQW9CO0lBRXRCLEtBQUssQ0FBYTtJQUMzQixxRUFBcUU7SUFDNUQsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2Qix3QkFBd0IsR0FBVyxFQUFFLENBQUM7SUFFeEMsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUU5RCxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDdkIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFFNUIsY0FBYyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBQyxFQUFDLENBQUM7SUFFaEUseUJBQXlCO0lBQ3pCLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQixZQUFZLEdBQUcsQ0FBQyxDQUFD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QjtzQkFBaEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTGF0TG9uZyB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgRXNyaU1hcENvbXBvbmVudCB9IGZyb20gJy4uL2VzcmktbWFwL2VzcmktbWFwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29lcGEtb2hpby1sYXQtbG9uZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9vaGlvLWxhdC1sb25nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2hpby1sYXQtbG9uZy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT2hpb0xhdExvbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGdyb3VwITogRm9ybUdyb3VwO1xuICAvKiogRm9ybSB2YWxpZGF0aW9uIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gc2hvd1ZhbGlkYXRpb24gaXMgdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgbGF0TG9uZ0NvbGxlY3Rpb25NZXRob2RzOiBDb2RlW10gPSBbXTtcblxuICBwdWJsaWMgT0hJTyA9IHsgbGF0TWluOiAzOCwgbGF0TWF4OiA0MiwgbG9uZ01pbjogLTg1LCBsb25nTWF4OiAtODAgfTtcblxuICBwdWJsaWMgY29sbGVjdGlvbk1ldGhvZHMgPSBbXTtcbiAgcHVibGljIGlzU2F0ZWxsaXRlVmlldyA9IGZhbHNlO1xuICBwdWJsaWMgY29vcmRzT3V0c2lkZU9mT2hpbyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjdXN0b21QYXR0ZXJucyA9IHsgJzknOiB7IHBhdHRlcm46IG5ldyBSZWdFeHAoJ1stPzAtOV0nKSB9ICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCc6IHsgcGF0dGVybjogbmV3IFJlZ0V4cCgnWzAtOV0nKX19O1xuXG4gIC8vIFNldCBvdXIgbWFwIHByb3BlcnRpZXNcbiAgbWFwQ2VudGVyID0gWy04Mi45OTY4MjIsIDM5Ljk1OTAxMV07XG4gIGJhc2VtYXBUeXBlID0gJ3N0cmVldHMtdmVjdG9yJztcbiAgbWFwWm9vbUxldmVsID0gNztcblxuICAvLyBTZWUgYXBwLmNvbXBvbmVudC5odG1sXG4gIG1hcExvYWRlZEV2ZW50KHN0YXR1czogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKCdUaGUgbWFwIGxvYWRlZDogJyArIHN0YXR1cyk7XG4gIH1cblxuICBwdWJsaWMgdXNlRE1TID0gZmFsc2U7XG4gIHB1YmxpYyBkbXNMYXQ6IHtkZWc6IG51bWJlciB8IHVuZGVmaW5lZCwgbWluOiBudW1iZXIgfCB1bmRlZmluZWQsIHNlYzogbnVtYmVyIHwgdW5kZWZpbmVkfSA9IHtcbiAgICBkZWc6IHVuZGVmaW5lZCxcbiAgICBtaW46IHVuZGVmaW5lZCxcbiAgICBzZWM6IHVuZGVmaW5lZFxuICB9O1xuICBwdWJsaWMgZG1zTG9uZzoge2RlZzogbnVtYmVyIHwgdW5kZWZpbmVkLCBtaW46IG51bWJlciB8IHVuZGVmaW5lZCwgc2VjOiBudW1iZXIgfCB1bmRlZmluZWR9ID0ge1xuICAgIGRlZzogdW5kZWZpbmVkLFxuICAgIG1pbjogdW5kZWZpbmVkLFxuICAgIHNlYzogdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuIFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUxhdERNU1ZhbHVlKHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVMb25ETVNWYWx1ZSh0aGlzLmdyb3VwLmNvbnRyb2xzWydsb25nRGVjaW1hbCddLnZhbHVlKTtcblxuICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGxhdERlY2ltYWwgPT4ge1xuICAgICAgdGhpcy51cGRhdGVMYXRETVNWYWx1ZShsYXREZWNpbWFsKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydsb25nRGVjaW1hbCddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUobG9uZ0RlY2ltYWwgPT4ge1xuICAgICAgdGhpcy51cGRhdGVMb25ETVNWYWx1ZShsb25nRGVjaW1hbCk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVMYXRETVNWYWx1ZShsYXREZWNpbWFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc051bShsYXREZWNpbWFsKSkge1xuICAgICAgdGhpcy5kbXNMYXQgPSB0aGlzLmRlY2ltYWxUb0RNUyhsYXREZWNpbWFsKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xhdCddLmdldCgnZGVnJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMYXQuZGVnKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xhdCddLmdldCgnbWluJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMYXQubWluKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xhdCddLmdldCgnc2VjJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMYXQuc2VjKTtcbiAgICAgIHRoaXMuY29vcmRzT3V0c2lkZU9mT2hpbyA9ICF0aGlzLmNoZWNrQ29vcmRzSW5PaGlvKHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZSwgdGhpcy5ncm91cC5jb250cm9sc1snbG9uZ0RlY2ltYWwnXS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUxvbkRNU1ZhbHVlKGxvbmdEZWNpbWFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc051bShsb25nRGVjaW1hbCkpIHtcbiAgICAgIHRoaXMuZG1zTG9uZyA9IHRoaXMuZGVjaW1hbFRvRE1TKGxvbmdEZWNpbWFsKTtcbiAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xvbmcnXS5nZXQoJ2RlZycpPy5wYXRjaFZhbHVlKHRoaXMuZG1zTG9uZy5kZWcpO1xuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1snZG1zTG9uZyddLmdldCgnbWluJyk/LnBhdGNoVmFsdWUodGhpcy5kbXNMb25nLm1pbik7XG4gICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydkbXNMb25nJ10uZ2V0KCdzZWMnKT8ucGF0Y2hWYWx1ZSh0aGlzLmRtc0xvbmcuc2VjKTtcbiAgICAgIHRoaXMuY29vcmRzT3V0c2lkZU9mT2hpbyA9ICF0aGlzLmNoZWNrQ29vcmRzSW5PaGlvKHRoaXMuZ3JvdXAuY29udHJvbHNbJ2xhdERlY2ltYWwnXS52YWx1ZSwgdGhpcy5ncm91cC5jb250cm9sc1snbG9uZ0RlY2ltYWwnXS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVmYXVsdCB0byByZXF1aXJlZCBpZiBvZXBhUmVxdWlyZWQgaXMgbm90IHNwZWNpZmllZFxuICAvLyBwdWJsaWMgaXNSZXF1aXJlZCgpIHtcbiAgLy8gXHQvLyByZXR1cm4gKHRoaXMub2VwYVJlcXVpcmVkKCkgIT09IGZhbHNlKTtcbiAgLy8gfTtcblxuICBhc3luYyB6b29tVG9Db29yZGluYXRlcyhsYXREZWNpbWFsOiBzdHJpbmcsIGxvbmdEZWNpbWFsOiBzdHJpbmcsIGZhY2lsaXR5TWFwOiBFc3JpTWFwQ29tcG9uZW50KSB7XG4gICAgZmFjaWxpdHlNYXAucmVzZXRNYXAoKTtcbiAgICBmYWNpbGl0eU1hcC5hZGRQb2ludChsYXREZWNpbWFsLCBsb25nRGVjaW1hbCwgJ3h4eCcpO1xuICAgIGZhY2lsaXR5TWFwLnpvb21Ub0ZhY2lsaXR5KGxhdERlY2ltYWwsIGxvbmdEZWNpbWFsKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmdyb3VwLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0Q29vcmRzVG9ETVMoZG1zTGF0aXR1ZGU6IEZvcm1Hcm91cCwgZG1zTG9uZ2l0dWRlOiBGb3JtR3JvdXApIHtcbiAgICBpZiAodGhpcy5pc051bShkbXNMYXRpdHVkZS5jb250cm9sc1snZGVnJ10udmFsdWUpICYmXG4gICAgICAgIHRoaXMuaXNOdW0oZG1zTGF0aXR1ZGUuY29udHJvbHNbJ21pbiddLnZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzTnVtKGRtc0xhdGl0dWRlLmNvbnRyb2xzWydzZWMnXS52YWx1ZSkgJiZcbiAgICAgICAgdGhpcy5pc051bShkbXNMb25naXR1ZGUuY29udHJvbHNbJ2RlZyddLnZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzTnVtKGRtc0xvbmdpdHVkZS5jb250cm9sc1snbWluJ10udmFsdWUpICYmXG4gICAgICAgIHRoaXMuaXNOdW0oZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydzZWMnXS52YWx1ZSkpIHtcbiAgICAgIHZhciBkZWNpbWFsTGF0OiBzdHJpbmc7XG4gICAgICB2YXIgZGVjaW1hbExvbmc6IHN0cmluZztcbiAgICAgIHZhciBkbXNMYXQgPSB7XG4gICAgICAgIGRlZzogZG1zTGF0aXR1ZGUuY29udHJvbHNbJ2RlZyddLnZhbHVlLFxuICAgICAgICBtaW46IGRtc0xhdGl0dWRlLmNvbnRyb2xzWydtaW4nXS52YWx1ZSxcbiAgICAgICAgc2VjOiBkbXNMYXRpdHVkZS5jb250cm9sc1snc2VjJ10udmFsdWVcbiAgICAgIH1cbiAgICAgIHZhciBkbXNMb25nID0geyAvLyBmb3JjZSBsYXQvbG9uZyB0byBiZSBpbiBXZXN0ZXJuIEhlbWlzcGhlcmVcbiAgICAgICAgZGVnOiBOdW1iZXIoZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydkZWcnXS52YWx1ZSkgPCAwID8gZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydkZWcnXS52YWx1ZSA6IC0xICogTnVtYmVyKGRtc0xvbmdpdHVkZS5jb250cm9sc1snZGVnJ10udmFsdWUpLFxuICAgICAgICBtaW46IGRtc0xvbmdpdHVkZS5jb250cm9sc1snbWluJ10udmFsdWUsXG4gICAgICAgIHNlYzogZG1zTG9uZ2l0dWRlLmNvbnRyb2xzWydzZWMnXS52YWx1ZVxuICAgICAgfVxuXG4gICAgICBkZWNpbWFsTGF0ID0gdGhpcy5kbXNUb0RlY2ltYWwoZG1zTGF0KTtcbiAgICAgIGRlY2ltYWxMb25nID0gdGhpcy5kbXNUb0RlY2ltYWwoZG1zTG9uZyk7XG4gIFxuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1snbGF0RGVjaW1hbCddLnBhdGNoVmFsdWUoZGVjaW1hbExhdCk7XG4gICAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydsb25nRGVjaW1hbCddLnBhdGNoVmFsdWUoZGVjaW1hbExvbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkbXNUb0RlY2ltYWwoZG1zOiBhbnkpIHtcbiAgICBpZiAobnVsbCAhPSBkbXMuZGVnICYmIG51bGwgIT0gZG1zLm1pbiAmJiBudWxsICE9IGRtcy5zZWMpIHtcbiAgICAgIHZhciBkZWNpbWFsID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGRlY2ltYWxGcmFjdGlvbiA9IGRtcy5taW4gLyA2MC4wICsgZG1zLnNlYyAvIDM2MDAuMDtcbiAgICAgIGRlY2ltYWwgPSAoZG1zLmRlZyA+IDApID8gZG1zLmRlZyArIGRlY2ltYWxGcmFjdGlvbiA6IGRtcy5kZWcgLSBkZWNpbWFsRnJhY3Rpb247XG4gICAgICByZXR1cm4gZGVjaW1hbC50b0ZpeGVkKDYpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBwdWJsaWMgZGVjaW1hbFRvRE1TKGRlY2ltYWw6YW55KSB7XG4gICAgdmFyIGRtczoge2RlZzogbnVtYmVyIHwgdW5kZWZpbmVkLCBtaW46IG51bWJlciB8IHVuZGVmaW5lZCwgc2VjOiBudW1iZXIgfCB1bmRlZmluZWR9ID0ge1xuICAgICAgZGVnOiB1bmRlZmluZWQsXG4gICAgICBtaW46IHVuZGVmaW5lZCxcbiAgICAgIHNlYzogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgdmFyIGFic29sdXRlID0gTWF0aC5hYnMoZGVjaW1hbCk7XG4gICAgZG1zLmRlZyA9IE1hdGguZmxvb3IoYWJzb2x1dGUpO1xuICAgIHZhciBtaW5zZWMgPSAoYWJzb2x1dGUgLSBkbXMuZGVnKSAqIDYwLjA7XG4gICAgZG1zLm1pbiA9IE1hdGguZmxvb3IobWluc2VjKTtcbiAgICBkbXMuc2VjID0gTnVtYmVyKCgobWluc2VjIC0gZG1zLm1pbikgKiA2MC4wKS50b0ZpeGVkKDYpKTtcbiAgICBpZiAoZG1zLnNlYyA9PT0gNjApIHtcbiAgICAgIGRtcy5taW4gKz0gMTtcbiAgICAgIGRtcy5zZWMgPSAwO1xuICAgIH1cbiAgICBpZiAoZG1zLm1pbiA9PT0gNjApIHtcbiAgICAgIGRtcy5kZWcgKz0gMTtcbiAgICAgIGRtcy5taW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZG1zO1xuICB9O1xuXG4gIHB1YmxpYyBjaGVja0Nvb3Jkc0luT2hpbyhsYXRpdHVkZTogYW55LCBsb25naXR1ZGU6IGFueSkge1xuICAgIHZhciBjb29yZHNJbk9oaW8gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoKE51bWJlcihsYXRpdHVkZSkgPCB0aGlzLk9ISU8ubGF0TWluIHx8IE51bWJlcihsYXRpdHVkZSkgPiB0aGlzLk9ISU8ubGF0TWF4IHx8XG4gICAgICAgIE51bWJlcihsb25naXR1ZGUpIDwgdGhpcy5PSElPLmxvbmdNaW4gfHwgTnVtYmVyKGxvbmdpdHVkZSkgPiB0aGlzLk9ISU8ubG9uZ01heCkpIHtcbiAgICAgICAgY29vcmRzSW5PaGlvID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coJ0VSUk9SOiBiYWQgbGF0L2xvbmc6ICcgKyBsYXRpdHVkZSArICcvJyArIGxvbmdpdHVkZSk7XG4gICAgfVxuICAgIHJldHVybiBjb29yZHNJbk9oaW87XG4gIH1cblxuICB1cGRhdGVDb29yZGluYXRlcyhjb29yZHM6IExhdExvbmcpIHtcbiAgICB0aGlzLmdyb3VwLmNvbnRyb2xzWydsYXREZWNpbWFsJ10ucGF0Y2hWYWx1ZShjb29yZHMubGF0RGVjaW1hbCk7XG4gICAgdGhpcy5ncm91cC5jb250cm9sc1snbG9uZ0RlY2ltYWwnXS5wYXRjaFZhbHVlKGNvb3Jkcy5sb25nRGVjaW1hbCk7XG4gIH1cblxuICBpc051bSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIG51bGwgIT0gdmFsdWUgJiYgdW5kZWZpbmVkICE9IHZhbHVlICYmIHZhbHVlICE9ICcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldERNU0xhdEZvcm1Hcm91cCgpIDogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cC5jb250cm9sc1snZG1zTGF0J10gYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIGdldERNU0xvbmdGb3JtR3JvdXAoKSA6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXAuY29udHJvbHNbJ2Rtc0xvbmcnXSBhcyBGb3JtR3JvdXA7XG4gIH1cblxufVxuIiwiPGRpdiBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiZ3JvdXAuZW5hYmxlZCA/IG51bGwgOiAnbm9uZSdcIj5cblxuPGZvcm0gW2Zvcm1Hcm91cF09XCJncm91cFwiIG5vdmFsaWRhdGU+XG4gIDxkaXYgY2xhc3M9XCJvZXBhLXdvcmtmbG93LWNvbXBvbmVudC01MFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvZXBhLXNlY3Rpb24tY29tcG9uZW50LWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XG4gICAgICAgICAgVXNlIHRoZSBtYXAgb24gdGhlIHJpZ2h0IHRvIHNldCB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSB2YWx1ZXMgYW5kIHZlcmlmeSB0aGV5IGFyZSBjb3JyZWN0LlxuICAgICAgICAgIFlvdSBtYXkgY2xpY2sgb24gdGhlIG1hcCB0byBjaG9vc2UgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBjb29yZGluYXRlcyBvciBlbnRlciB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZVxuICAgICAgICAgIHZhbHVlcyBpbiB0aGUgaW5wdXQgZmllbGRzIGJlbG93LlxuICAgICAgICAgIEFsdGVybmF0ZWx5LCB5b3UgbWF5IGVudGVyIGFuIGFkZHJlc3MgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSB0b3Agb2YgdGhlIG1hcCB0byBmaW5kIGNvb3JkaW5hdGVzIGJ5XG4gICAgICAgICAgYWRkcmVzcy5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJ1c2VETVNcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjb252ZXJ0Q29vcmRzVG9ETVMoZ2V0RE1TTGF0Rm9ybUdyb3VwKCksIGdldERNU0xvbmdGb3JtR3JvdXAoKSk7IHVzZURNUyA9ICF1c2VETVNcIj5Db252ZXJ0XG4gICAgICAgICAgQ29vcmRpbmF0ZXMgdG8gRGVjaW1hbCBEZWdyZWVzPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBmb3JtR3JvdXBOYW1lPVwiZG1zTGF0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGxhYmVsPkxhdGl0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZWdcIiBuYW1lPVwibGF0RGVncmVlc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiRGVncmVlc1wiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIi04OVwiIG1heD1cIjg5XCIgbmctYmx1cj1cIm9uTGF0RE1TQ2hhbmdlKClcIiBtYXhsZW5ndGg9XCJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydkZWcnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydkZWcnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnh4eCBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1pblwiIG5hbWU9XCJsYXRNaW51dGVzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJNaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiIG1heD1cIjU5XCIgbmctYmx1cj1cIm9uTGF0RE1TQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydtaW4nXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldERNU0xhdEZvcm1Hcm91cCgpWydjb250cm9scyddWydtaW4nXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlByaW1hcnkgU0lDIENvZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzZWNcIiBuYW1lPVwibGF0U2Vjb25kc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBtYXg9XCI1OS45OTk5OTlcIiBuZy1ibHVyPVwib25MYXRETVNDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ2V0RE1TTGF0Rm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ3NlYyddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0RE1TTGF0Rm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ3NlYyddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UHJpbWFyeSBTSUMgQ29kZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgZm9ybUdyb3VwTmFtZT1cImRtc0xvbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8bGFiZWw+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZWdcIiBuYW1lPVwibG9uZ0RlZ3JlZXNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIkRlZ3JlZXNcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCItMTc5XCIgbWF4PVwiMTc5XCIgbmctYmx1cj1cIm9uTG9uZ0RNU0NoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBnZXRETVNMb25nRm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ2RlZyddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0RE1TTG9uZ0Zvcm1Hcm91cCgpWydjb250cm9scyddWydkZWcnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlByaW1hcnkgU0lDIENvZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtaW5cIiBuYW1lPVwibG9uZ01pbnV0ZXNcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIk1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCIgbWF4PVwiNTlcIiBuZy1ibHVyPVwib25Mb25nRE1TQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xvbmdGb3JtR3JvdXAoKVsnY29udHJvbHMnXVsnbWluJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRETVNMb25nRm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ21pbiddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UHJpbWFyeSBTSUMgQ29kZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInNlY1wiIG5hbWU9XCJsb25nU2Vjb25kc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBtYXg9XCI1OS45OTk5OTlcIiBuZy1ibHVyPVwib25Mb25nRE1TQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdldERNU0xvbmdGb3JtR3JvdXAoKVsnY29udHJvbHMnXVsnc2VjJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRETVNMb25nRm9ybUdyb3VwKClbJ2NvbnRyb2xzJ11bJ3NlYyddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UHJpbWFyeSBTSUMgQ29kZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIXVzZURNU1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInVzZURNUyA9ICF1c2VETVNcIj5FbnRlciBDb29yZGluYXRlcyBpbiBEZWdyZWVzLCBNaW51dGVzLCBTZWNvbmRzPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWw+TGF0aXR1ZGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibGF0RGVjaW1hbFwiIG5hbWU9XCJMYXRpdHVkZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICBuZy1ibHVyPVwib25MYXRMb25nSW5wdXRDaGFuZ2UoKVwiIG1hc2s9XCJzZXBhcmF0b3IuNlwiIGRlY2ltYWxNYXJrZXI9XCIuXCIgW2FsbG93TmVnYXRpdmVOdW1iZXJzXT1cInRydWVcIiBbZHJvcFNwZWNpYWxDaGFyYWN0ZXJzXT1cImZhbHNlXCIgXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiPlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+TGF0aXR1ZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWw+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImxvbmdEZWNpbWFsXCIgbmFtZT1cIkxvbmdpdHVkZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgbmctYmx1cj1cIm9uTGF0TG9uZ0lucHV0Q2hhbmdlKClcIiBtYXNrPVwic2VwYXJhdG9yLjZcIiBkZWNpbWFsTWFya2VyPVwiLlwiIFthbGxvd05lZ2F0aXZlTnVtYmVyc109XCJ0cnVlXCIgW2Ryb3BTcGVjaWFsQ2hhcmFjdGVyc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cFsnY29udHJvbHMnXVsnbG9uZ0RlY2ltYWwnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXBbJ2NvbnRyb2xzJ11bJ2xvbmdEZWNpbWFsJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5Mb25naXR1ZGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLnZhbHVlICE9PSAnJyAmJiBncm91cFsnY29udHJvbHMnXVsnbG9uZ0RlY2ltYWwnXS52YWx1ZSAhPT0gJydcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJ6b29tVG9Db29yZGluYXRlcyhncm91cFsnY29udHJvbHMnXVsnbGF0RGVjaW1hbCddLnZhbHVlLGdyb3VwWydjb250cm9scyddWydsb25nRGVjaW1hbCddLnZhbHVlLCBmYWNpbGl0eU1hcClcIj5ab29tIFRvIFRoZXNlIENvb3JkaW5hdGVzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImxhdExvbmdDb2xsZWN0aW9uTWV0aG9kcyAmJiBsYXRMb25nQ29sbGVjdGlvbk1ldGhvZHMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+Q29sbGVjdGlvbiBNZXRob2Q8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImNvbGxlY3Rpb25NZXRob2RUeXBlXCIgbmFtZT1cImNvbGxlY3Rpb25NZXRob2RUeXBlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29sbGVjdGlvbk1ldGhvZFR5cGVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXBbJ2NvbnRyb2xzJ11bJ2NvbGxlY3Rpb25NZXRob2RUeXBlJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tU2VsZWN0IENvbGxlY3Rpb24gTWV0aG9kLS08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBuIG9mIGxhdExvbmdDb2xsZWN0aW9uTWV0aG9kc1wiIFtuZ1ZhbHVlXT1cIm4uY29kZVZhbHVlXCI+e3tuLmRlc2NyaXB0aW9ufX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwWydjb250cm9scyddWydjb2xsZWN0aW9uTWV0aG9kVHlwZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+Q29sbGVjdGlvbiBNZXRob2QgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb29yZHNPdXRzaWRlT2ZPaGlvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cImdyb3VwLmdldCgnYWxsb3dPdXRzaWRlT2ZPaGlvJyk/LnZhbHVlIT09J3llcydcIj5cbiAgICAgICAgICBUaGUgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSB2YWx1ZXMgZW50ZXJlZCBhcmUgbm90IHdpdGhpbiB0aGUgc3RhdGUgb2YgT2hpby4gUGxlYXNlIGVudGVyIGEgbGF0aXR1ZGUgdmFsdWVcbiAgICAgICAgICBiZXR3ZWVuIDM4IGFuZCA0MiBhbmQgYVxuICAgICAgICAgIGxvbmdpdHVkZSB2YWx1ZSBiZXR3ZWVuIC04NSBhbmQgLTgwIG9yIGluZGljYXRlIGJlbG93IHRoYXQgdGhpcyBsb2NhdGlvbiBpcyBvdXRzaWRlIG9mIE9oaW8uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxvZXBhLXllcy1ubyBbZ3JvdXBdPVwiZ3JvdXBcIiBmaWVsZD1cImFsbG93T3V0c2lkZU9mT2hpb1wiIGlkPVwiYWxsb3dPdXRzaWRlT2ZPaGlvXCIgW3Nob3dWYWxpZGF0aW9uXT1cInNob3dWYWxpZGF0aW9uXCI+SXNcbiAgICAgICAgICAgIHRoaXMgbG9jYXRpb24gb3V0c2lkZSBvZiBPaGlvPzwvb2VwYS15ZXMtbm8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvZXBhLWFjdGlvbi1jb21wb25lbnQtNTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwib2VwYS1zZWN0aW9uLWNvbXBvbmVudC1ib2R5XCI+XG4gICAgICA8b2VwYS1lc3JpLW1hcFxuICAgICAgICNmYWNpbGl0eU1hcCBbY2VudGVyXT1cIm1hcENlbnRlclwiXG4gICAgICAgW2Jhc2VtYXBdPVwiYmFzZW1hcFR5cGVcIlxuICAgICAgIFt6b29tXT1cIm1hcFpvb21MZXZlbFwiXG4gICAgICAgKG1hcExvYWRlZCk9XCJtYXBMb2FkZWRFdmVudCgkZXZlbnQpXCJcbiAgICAgICBbY3VycmVudExhdExvbmddPVwiZ3JvdXAudmFsdWVcIlxuICAgICAgIChvbk5ld0Nvb3JkaW5hdGVzKT1cInVwZGF0ZUNvb3JkaW5hdGVzKCRldmVudClcIlxuICAgICAgIFtzaG93U2VhcmNoXT1cImdyb3VwLmVuYWJsZWRcIj5cbiAgICAgIDwvb2VwYS1lc3JpLW1hcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZm9ybT5cblxuPC9kaXY+Il19
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { OnInit, AfterViewInit } from '@angular/core';
|
|
2
|
-
import { PortalDocument } from '../portal-document';
|
|
3
|
-
import { PortalDocumentSection } from '../portal-document-section';
|
|
4
|
-
import { DocumentService } from '../document.service';
|
|
5
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
6
|
-
import { ToastrService } from 'ngx-toastr';
|
|
7
|
-
import { TabsetComponent } from 'ngx-bootstrap/tabs';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export declare class DocumentEditorComponent implements OnInit, AfterViewInit {
|
|
10
|
-
private modalService;
|
|
11
|
-
private toastr;
|
|
12
|
-
private documentService;
|
|
13
|
-
document: PortalDocument | undefined;
|
|
14
|
-
allowRemoveSection: boolean;
|
|
15
|
-
showSectionOptions: boolean;
|
|
16
|
-
documentSectionTabs?: TabsetComponent;
|
|
17
|
-
busy: boolean;
|
|
18
|
-
private static selectedTabIndex;
|
|
19
|
-
constructor(modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
|
|
20
|
-
ngOnInit(): void;
|
|
21
|
-
ngAfterViewInit(): void;
|
|
22
|
-
onSectionTabSelect(index: number): void;
|
|
23
|
-
moveSectionUp(section: PortalDocumentSection): void;
|
|
24
|
-
insertAboveSection(section: PortalDocumentSection): void;
|
|
25
|
-
moveSectionDown(section: PortalDocumentSection): void;
|
|
26
|
-
insertBelowSection(section: PortalDocumentSection): void;
|
|
27
|
-
private newSection;
|
|
28
|
-
private insertSection;
|
|
29
|
-
private resequence;
|
|
30
|
-
deleteSection(section: PortalDocumentSection): void;
|
|
31
|
-
editSection(section: PortalDocumentSection): void;
|
|
32
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentEditorComponent, never>;
|
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DocumentEditorComponent, "oepa-document-editor", never, { "document": { "alias": "document"; "required": false; }; "allowRemoveSection": { "alias": "allowRemoveSection"; "required": false; }; "showSectionOptions": { "alias": "showSectionOptions"; "required": false; }; }, {}, never, never, false, never>;
|
|
34
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { DocumentEventEntityType } from "./document-event-entity-type";
|
|
2
|
-
import { DocumentEventType } from "./document-event-type";
|
|
3
|
-
export interface DocumentEvent {
|
|
4
|
-
eventType?: DocumentEventType;
|
|
5
|
-
entityType?: DocumentEventEntityType;
|
|
6
|
-
entityID?: string;
|
|
7
|
-
confirmationMessage?: string;
|
|
8
|
-
entity?: any;
|
|
9
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
|
-
import { PortalDocumentGroup } from '../portal-document-group';
|
|
3
|
-
import { PortalDocumentPart } from '../portal-document-part';
|
|
4
|
-
import { DocumentService } from '../document.service';
|
|
5
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
6
|
-
import { ToastrService } from 'ngx-toastr';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export declare class DocumentGroupComponent implements OnInit {
|
|
9
|
-
private modalService;
|
|
10
|
-
private toastr;
|
|
11
|
-
private documentService;
|
|
12
|
-
group: PortalDocumentGroup;
|
|
13
|
-
onMoveUp: EventEmitter<PortalDocumentGroup>;
|
|
14
|
-
onInsertAbove: EventEmitter<PortalDocumentGroup>;
|
|
15
|
-
onMoveDown: EventEmitter<PortalDocumentGroup>;
|
|
16
|
-
onInsertBelow: EventEmitter<PortalDocumentGroup>;
|
|
17
|
-
onDelete: EventEmitter<PortalDocumentGroup>;
|
|
18
|
-
busy: boolean;
|
|
19
|
-
constructor(modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
|
|
20
|
-
ngOnInit(): void;
|
|
21
|
-
moveUp(): void;
|
|
22
|
-
insertAbove(): void;
|
|
23
|
-
moveDown(): void;
|
|
24
|
-
insertBelow(): void;
|
|
25
|
-
delete(): void;
|
|
26
|
-
movePartUp(part: PortalDocumentPart): void;
|
|
27
|
-
insertAbovePart(part: PortalDocumentPart): void;
|
|
28
|
-
movePartDown(part: PortalDocumentPart): void;
|
|
29
|
-
insertBelowPart(part: PortalDocumentPart): void;
|
|
30
|
-
private newPart;
|
|
31
|
-
private insertPart;
|
|
32
|
-
deletePart(part: PortalDocumentPart): void;
|
|
33
|
-
private doDeletePart;
|
|
34
|
-
private resequence;
|
|
35
|
-
editGroup(group: PortalDocumentGroup): void;
|
|
36
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentGroupComponent, never>;
|
|
37
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DocumentGroupComponent, "oepa-document-group", never, { "group": { "alias": "group"; "required": false; }; }, { "onMoveUp": "onMoveUp"; "onInsertAbove": "onInsertAbove"; "onMoveDown": "onMoveDown"; "onInsertBelow": "onInsertBelow"; "onDelete": "onDelete"; }, never, never, false, never>;
|
|
38
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { PortalDocumentPart } from '../portal-document-part';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class DocumentPartComponent implements OnInit {
|
|
5
|
-
part: PortalDocumentPart;
|
|
6
|
-
constructor();
|
|
7
|
-
ngOnInit(): void;
|
|
8
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentPartComponent, never>;
|
|
9
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DocumentPartComponent, "oepa-document-part", never, { "part": { "alias": "part"; "required": false; }; }, {}, never, never, false, never>;
|
|
10
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
|
-
import { PortalDocumentPart } from '../portal-document-part';
|
|
3
|
-
import { FormGroup, FormBuilder } from '@angular/forms';
|
|
4
|
-
import { DocumentService } from '../document.service';
|
|
5
|
-
import { ToastrService } from 'ngx-toastr';
|
|
6
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
7
|
-
import { SummernoteOptions } from 'ngx-summernote/lib/summernote-options';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export declare class DocumentPartEditorComponent implements OnInit {
|
|
10
|
-
private fb;
|
|
11
|
-
private modalService;
|
|
12
|
-
private toastr;
|
|
13
|
-
documentService: DocumentService;
|
|
14
|
-
part: PortalDocumentPart;
|
|
15
|
-
editing: boolean;
|
|
16
|
-
partChange: EventEmitter<PortalDocumentPart>;
|
|
17
|
-
onMoveUp: EventEmitter<PortalDocumentPart>;
|
|
18
|
-
onInsertAbove: EventEmitter<PortalDocumentPart>;
|
|
19
|
-
onMoveDown: EventEmitter<PortalDocumentPart>;
|
|
20
|
-
onInsertBelow: EventEmitter<PortalDocumentPart>;
|
|
21
|
-
onDelete: EventEmitter<PortalDocumentPart>;
|
|
22
|
-
form: FormGroup;
|
|
23
|
-
config: SummernoteOptions;
|
|
24
|
-
errorMessage: string;
|
|
25
|
-
busy: boolean;
|
|
26
|
-
constructor(fb: FormBuilder, modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
|
|
27
|
-
ngOnInit(): void;
|
|
28
|
-
private createForm;
|
|
29
|
-
private initializePart;
|
|
30
|
-
savePart(): void;
|
|
31
|
-
editPart(part: PortalDocumentPart): void;
|
|
32
|
-
updateDisplay(display: boolean): void;
|
|
33
|
-
moveUp(): void;
|
|
34
|
-
insertAbove(): void;
|
|
35
|
-
moveDown(): void;
|
|
36
|
-
insertBelow(): void;
|
|
37
|
-
delete(): void;
|
|
38
|
-
doCustomAction(): void;
|
|
39
|
-
getConfig(): SummernoteOptions;
|
|
40
|
-
private invokePlaceHolderModal;
|
|
41
|
-
private invokeMonitoringPlaceHolderModal;
|
|
42
|
-
private invokeSchedulePlaceHolderModal;
|
|
43
|
-
private invokeErasePlaceHolder;
|
|
44
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentPartEditorComponent, never>;
|
|
45
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DocumentPartEditorComponent, "oepa-document-part-editor", never, { "part": { "alias": "part"; "required": false; }; "editing": { "alias": "editing"; "required": false; }; }, { "partChange": "partChange"; "onMoveUp": "onMoveUp"; "onInsertAbove": "onInsertAbove"; "onMoveDown": "onMoveDown"; "onInsertBelow": "onInsertBelow"; "onDelete": "onDelete"; }, never, never, false, never>;
|
|
46
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
|
-
import { BsModalRef } from 'ngx-bootstrap/modal';
|
|
3
|
-
import { PortalDocumentPlaceholder } from '../portal-document-placeholder';
|
|
4
|
-
import { FormBuilder, FormGroup } from '@angular/forms';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class DocumentPlaceholderModalComponent implements OnInit {
|
|
7
|
-
private fb;
|
|
8
|
-
private bsModalRef;
|
|
9
|
-
placeholders: PortalDocumentPlaceholder[];
|
|
10
|
-
placeholderSelected: EventEmitter<PortalDocumentPlaceholder>;
|
|
11
|
-
modalForm: FormGroup;
|
|
12
|
-
hasPlaceholderChildren: boolean;
|
|
13
|
-
constructor(fb: FormBuilder, bsModalRef: BsModalRef);
|
|
14
|
-
ngOnInit(): void;
|
|
15
|
-
submit(): void;
|
|
16
|
-
cancel(): void;
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentPlaceholderModalComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DocumentPlaceholderModalComponent, "oepa-document-placeholder-modal", never, { "placeholders": { "alias": "placeholders"; "required": false; }; }, { "placeholderSelected": "placeholderSelected"; }, never, never, false, never>;
|
|
19
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
|
-
import { PortalDocumentSection } from '../portal-document-section';
|
|
3
|
-
import { PortalDocumentGroup } from '../portal-document-group';
|
|
4
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
5
|
-
import { ToastrService } from 'ngx-toastr';
|
|
6
|
-
import { DocumentService } from '../document.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export declare class DocumentSectionComponent implements OnInit {
|
|
9
|
-
private modalService;
|
|
10
|
-
private toastr;
|
|
11
|
-
private documentService;
|
|
12
|
-
section: PortalDocumentSection;
|
|
13
|
-
onMoveUp: EventEmitter<PortalDocumentSection>;
|
|
14
|
-
onInsertAbove: EventEmitter<PortalDocumentSection>;
|
|
15
|
-
onMoveDown: EventEmitter<PortalDocumentSection>;
|
|
16
|
-
onInsertBelow: EventEmitter<PortalDocumentSection>;
|
|
17
|
-
onDelete: EventEmitter<PortalDocumentSection>;
|
|
18
|
-
busy: boolean;
|
|
19
|
-
constructor(modalService: BsModalService, toastr: ToastrService, documentService: DocumentService);
|
|
20
|
-
ngOnInit(): void;
|
|
21
|
-
moveUp(): void;
|
|
22
|
-
insertAbove(): void;
|
|
23
|
-
moveDown(): void;
|
|
24
|
-
insertBelow(): void;
|
|
25
|
-
delete(): void;
|
|
26
|
-
moveGroupUp(group: PortalDocumentGroup): void;
|
|
27
|
-
insertAboveGroup(group: PortalDocumentGroup): void;
|
|
28
|
-
moveGroupDown(group: PortalDocumentGroup): void;
|
|
29
|
-
insertBelowGroup(group: PortalDocumentGroup): void;
|
|
30
|
-
private newGroup;
|
|
31
|
-
private insertGroup;
|
|
32
|
-
private resequence;
|
|
33
|
-
deleteGroup(group: PortalDocumentGroup): void;
|
|
34
|
-
editSection(section: PortalDocumentSection): void;
|
|
35
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentSectionComponent, never>;
|
|
36
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DocumentSectionComponent, "oepa-document-section", never, { "section": { "alias": "section"; "required": false; }; }, { "onMoveUp": "onMoveUp"; "onInsertAbove": "onInsertAbove"; "onMoveDown": "onMoveDown"; "onInsertBelow": "onInsertBelow"; "onDelete": "onDelete"; }, never, never, false, never>;
|
|
37
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { PortalDocumentPlaceholder } from './portal-document-placeholder';
|
|
4
|
-
import { PortalDocumentSection } from './portal-document-section';
|
|
5
|
-
import { PortalDocumentGroup } from './portal-document-group';
|
|
6
|
-
import { PortalDocumentPart } from './portal-document-part';
|
|
7
|
-
import { PortalDocumentText } from './portal-document-text';
|
|
8
|
-
import { PortalDocument } from './portal-document';
|
|
9
|
-
import { PortalDocumentType } from './portal-document-type';
|
|
10
|
-
import { DocumentEvent } from './document-event';
|
|
11
|
-
import { PortalEmailFilter } from './portal-email-filter';
|
|
12
|
-
import { PortalEmail } from './portal-email';
|
|
13
|
-
import { OepaAction } from '../action-btn/oepa-action';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
export declare class DocumentService {
|
|
16
|
-
private http;
|
|
17
|
-
private placeholders;
|
|
18
|
-
private monitoringPlaceholders;
|
|
19
|
-
private monitoringLabel;
|
|
20
|
-
private scheduleLabel;
|
|
21
|
-
private schedulePlaceholders;
|
|
22
|
-
private toolbar;
|
|
23
|
-
private height;
|
|
24
|
-
private tabSize;
|
|
25
|
-
private fontNames;
|
|
26
|
-
private documentIDSubject;
|
|
27
|
-
private selectedSectionNameSubject;
|
|
28
|
-
private documentPartActionSubject;
|
|
29
|
-
private documentPartUpdateSubject;
|
|
30
|
-
private documentEventSubject;
|
|
31
|
-
private overridenEvents;
|
|
32
|
-
private customPartAction;
|
|
33
|
-
constructor(http: HttpClient);
|
|
34
|
-
setPlaceholders(placeholders: PortalDocumentPlaceholder[]): void;
|
|
35
|
-
getPlaceholders(): PortalDocumentPlaceholder[];
|
|
36
|
-
setMonitoringPlaceholders(placeholders: PortalDocumentPlaceholder[], monitoringLabel?: string): void;
|
|
37
|
-
getMonitoringPlaceholders(): PortalDocumentPlaceholder[];
|
|
38
|
-
getMonitoringLabel(): string;
|
|
39
|
-
setSchedulePlaceholders(placeholders: PortalDocumentPlaceholder[], scheduleLabel?: string): void;
|
|
40
|
-
getSchedulePlaceholders(): PortalDocumentPlaceholder[];
|
|
41
|
-
getScheduleLabel(): string;
|
|
42
|
-
setToolbar(toolbar: any): void;
|
|
43
|
-
getToolbar(): any;
|
|
44
|
-
setFontNames(fontNames: string[]): void;
|
|
45
|
-
getFontNames(): string[];
|
|
46
|
-
setHeight(height: number): void;
|
|
47
|
-
getHeight(): number;
|
|
48
|
-
setTabSize(tabSize: number): void;
|
|
49
|
-
getTabSize(): number;
|
|
50
|
-
updateDcoumentID(id: string): void;
|
|
51
|
-
updateSelectedSectionName(name: string | undefined): void;
|
|
52
|
-
overrideEvent(event: DocumentEvent): void;
|
|
53
|
-
removeOverridenEvent(event: DocumentEvent): void;
|
|
54
|
-
isOverriddenEvent(event: DocumentEvent): DocumentEvent | undefined;
|
|
55
|
-
getDocumentIDSubject(): Observable<string>;
|
|
56
|
-
getSelectedSectionName(): Observable<string>;
|
|
57
|
-
getDocumentEventSubject(): Observable<DocumentEvent>;
|
|
58
|
-
retrieveDocumentTemplate(templateID: string): Observable<PortalDocument>;
|
|
59
|
-
cloneDocumentTemplate(template: PortalDocumentType): Observable<string>;
|
|
60
|
-
retrieveDocument(id: string): Observable<PortalDocument>;
|
|
61
|
-
retrieveLegacyDocumentTemplate(id: string): Observable<PortalDocument>;
|
|
62
|
-
retrieveLegacyDocumentForPermit(permitID: string): Observable<PortalDocument>;
|
|
63
|
-
updateDocument(document: PortalDocument): Observable<any>;
|
|
64
|
-
createDocumentSection(section: PortalDocumentSection): Observable<string>;
|
|
65
|
-
updateDocumentSection(section: PortalDocumentSection): Observable<any>;
|
|
66
|
-
deleteDocumentSection(section: PortalDocumentSection): Observable<any>;
|
|
67
|
-
doDeleteDocumentSection(section: PortalDocumentSection): Observable<any>;
|
|
68
|
-
createDocumentGroup(group: PortalDocumentGroup): Observable<string>;
|
|
69
|
-
retrieveDocumentGroup(documentID: string, groupID: string): Observable<PortalDocumentGroup>;
|
|
70
|
-
updateDocumentGroup(group: PortalDocumentGroup): Observable<any>;
|
|
71
|
-
deleteDocumentGroup(group: PortalDocumentGroup): Observable<any>;
|
|
72
|
-
doDeleteDocumentGroup(group: PortalDocumentGroup): Observable<any>;
|
|
73
|
-
createDocumentPart(part: PortalDocumentPart): Observable<string>;
|
|
74
|
-
updateDocumentPart(part: PortalDocumentPart): Observable<any>;
|
|
75
|
-
deleteDocumentPart(part: PortalDocumentPart): Observable<any>;
|
|
76
|
-
updateDocumentText(documentID: string, partID: string, text: PortalDocumentText): Observable<any>;
|
|
77
|
-
retrieveAllDocumentPlaceholders(serviceName: string): Observable<PortalDocumentPlaceholder[]>;
|
|
78
|
-
setCustomPartAction(action: OepaAction): void;
|
|
79
|
-
getCustomPartAction(): OepaAction | undefined;
|
|
80
|
-
getDocumentPartActionSubject(): Observable<PortalDocumentPart>;
|
|
81
|
-
fireCustomPartAction(part: PortalDocumentPart): void;
|
|
82
|
-
getDocumentPartUpdateSubject(): Observable<PortalDocumentPart>;
|
|
83
|
-
fireDocumentPartUpdate(part: PortalDocumentPart): void;
|
|
84
|
-
searchEmails(filter: PortalEmailFilter): Observable<PortalEmail[]>;
|
|
85
|
-
retrieveDocumentByDocumentID(documentID: string): Observable<PortalDocument>;
|
|
86
|
-
updateApprovalStatusForEmails(ids: string[], status: string): Observable<any>;
|
|
87
|
-
sendApprovedEmails(emails: PortalEmail[]): Observable<any>;
|
|
88
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DocumentService, never>;
|
|
89
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<DocumentService>;
|
|
90
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
|
-
import { PortalDocumentGroup } from '../portal-document-group';
|
|
3
|
-
import { FormBuilder, FormGroup } from '@angular/forms';
|
|
4
|
-
import { BsModalRef } from 'ngx-bootstrap/modal';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class GroupModalComponent implements OnInit {
|
|
7
|
-
private fb;
|
|
8
|
-
bsModalRef: BsModalRef;
|
|
9
|
-
group: PortalDocumentGroup;
|
|
10
|
-
label: string;
|
|
11
|
-
onGroupSave: EventEmitter<PortalDocumentGroup>;
|
|
12
|
-
modalForm: FormGroup;
|
|
13
|
-
constructor(fb: FormBuilder, bsModalRef: BsModalRef);
|
|
14
|
-
ngOnInit(): void;
|
|
15
|
-
private createForm;
|
|
16
|
-
save(): void;
|
|
17
|
-
cancel(): void;
|
|
18
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GroupModalComponent, never>;
|
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GroupModalComponent, "oepa-group-modal", never, { "group": { "alias": "group"; "required": false; }; "label": { "alias": "label"; "required": false; }; }, { "onGroupSave": "onGroupSave"; }, never, never, false, never>;
|
|
20
|
-
}
|