ngx-sp-infra 3.0.9-test → 3.0.12-next
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/directives/copy-clipboard.directive.mjs +28 -0
- package/esm2022/lib/directives/disable-control.directive.mjs +27 -0
- package/esm2022/lib/directives/highlight.directive.mjs +43 -0
- package/esm2022/lib/directives/loading-btn.directive.mjs +73 -0
- package/esm2022/lib/directives/required.directive.mjs +104 -0
- package/esm2022/lib/infra.module.mjs +326 -0
- package/esm2022/lib/message/alert/alert.component.mjs +32 -0
- package/esm2022/lib/message/confirm/confirm.component.mjs +52 -0
- package/esm2022/lib/message/confirm-modal/confirm-modal.component.mjs +72 -0
- package/esm2022/lib/message/message-enum.mjs +23 -0
- package/esm2022/lib/message/message.service.mjs +132 -0
- package/esm2022/lib/message/save/save.component.mjs +46 -0
- package/esm2022/lib/models/DownloadArquivos.mjs +3 -0
- package/esm2022/lib/models/basic-filters.mjs +7 -0
- package/esm2022/lib/models/combobox/record-combobox.mjs +15 -0
- package/esm2022/lib/models/combobox/ret-records-combobox.mjs +12 -0
- package/esm2022/lib/models/email-model.mjs +35 -0
- package/esm2022/lib/models/forms/custom-form-control.mjs +24 -0
- package/esm2022/lib/models/icons/icon.model.mjs +854 -0
- package/esm2022/lib/models/ierror.mjs +2 -0
- package/esm2022/lib/models/ipagination.mjs +2 -0
- package/esm2022/lib/models/report-file.mjs +7 -0
- package/esm2022/lib/models/ret-error.mjs +3 -0
- package/esm2022/lib/models/ret-feedback-message.mjs +7 -0
- package/esm2022/lib/models/ret-report-file.mjs +3 -0
- package/esm2022/lib/pipes/cpf-cnpj.pipe.mjs +20 -0
- package/esm2022/lib/pipes/currency.pipe.mjs +16 -0
- package/esm2022/lib/pipes/decimal-comma.pipe.mjs +19 -0
- package/esm2022/lib/pipes/filter-multiple-choice.pipe.mjs +16 -0
- package/esm2022/lib/pipes/order-sort.pipe.mjs +20 -0
- package/esm2022/lib/pipes/phone-format.pipe.mjs +22 -0
- package/esm2022/lib/pipes/text-filter.pipe.mjs +17 -0
- package/esm2022/lib/pipes/title-case-pipe.pipe.mjs +19 -0
- package/esm2022/lib/pipes/to-url.pipe.mjs +32 -0
- package/esm2022/lib/service/ip-service.service.mjs +39 -0
- package/esm2022/lib/service/modal-utils.service.mjs +59 -0
- package/esm2022/lib/templates/footer/footer.component.mjs +25 -0
- package/esm2022/lib/templates/header/header.component.mjs +37 -0
- package/esm2022/lib/templates/simple-header/simple-header.component.mjs +140 -0
- package/esm2022/lib/utils/check-url-and-method.service.mjs +70 -0
- package/esm2022/lib/utils/form-utils.mjs +111 -0
- package/esm2022/lib/utils/settings.service.mjs +32 -0
- package/esm2022/lib/utils/utils.mjs +340 -0
- package/esm2022/lib/validators/cpf-cnpj.validator.directive.mjs +24 -0
- package/esm2022/lib/validators/cpf-cnpj.validator.mjs +54 -0
- package/esm2022/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.mjs +35 -0
- package/esm2022/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.mjs +28 -0
- package/esm2022/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.mjs +21 -0
- package/esm2022/lib/widgets/click-outside/clickoutside.directive.mjs +167 -0
- package/esm2022/lib/widgets/combobox/combobox.component.mjs +569 -0
- package/esm2022/lib/widgets/combobox/pipes/filter-by.pipe.mjs +44 -0
- package/esm2022/lib/widgets/combobox/pipes/limit-to.pipe.mjs +19 -0
- package/esm2022/lib/widgets/combobox-multiple-choice/combobox-multiple-choice.component.mjs +49 -0
- package/esm2022/lib/widgets/content-container/content-container.component.mjs +44 -0
- package/esm2022/lib/widgets/custom-acordion/custom-acordion.component.mjs +29 -0
- package/esm2022/lib/widgets/dropdown-options/dropdown-options.component.mjs +32 -0
- package/esm2022/lib/widgets/dynamic-input/dynamic-input.component.mjs +37 -0
- package/esm2022/lib/widgets/field-contador-message/field-contador-message.component.mjs +45 -0
- package/esm2022/lib/widgets/field-control-error/field-control-error.component.mjs +23 -0
- package/esm2022/lib/widgets/field-error-message/field-error-message.component.mjs +36 -0
- package/esm2022/lib/widgets/generic-modal/generic-modal.component.mjs +23 -0
- package/esm2022/lib/widgets/input-trim/input-trim.component.mjs +34 -0
- package/esm2022/lib/widgets/lib-combobox/lib-combobox.component.mjs +261 -0
- package/esm2022/lib/widgets/lib-header/lib-header.component.mjs +113 -0
- package/esm2022/lib/widgets/lib-icons/lib-icons.component.mjs +168 -0
- package/esm2022/lib/widgets/loading/loading.component.mjs +12 -0
- package/esm2022/lib/widgets/loading-button/loading-button.component.mjs +19 -0
- package/esm2022/lib/widgets/nav-produtos/nav-produtos.component.mjs +49 -0
- package/esm2022/lib/widgets/ordering/ordering.component.mjs +57 -0
- package/esm2022/lib/widgets/pagination/pagination.component.mjs +61 -0
- package/esm2022/lib/widgets/search-combobox/search-combobox.component.mjs +209 -0
- package/esm2022/lib/widgets/search-filters/search-filters.component.mjs +59 -0
- package/esm2022/lib/widgets/side-tabs/side-tabs.component.mjs +42 -0
- package/esm2022/lib/widgets/simple-search/simple-search.component.mjs +33 -0
- package/esm2022/lib/widgets/spinner/spinner.component.mjs +59 -0
- package/esm2022/lib/widgets/svg-storage/svg-storage.component.mjs +95 -0
- package/esm2022/lib/widgets/table/table.component.mjs +199 -0
- package/esm2022/lib/widgets/tree/models/ret-tree.mjs +3 -0
- package/esm2022/lib/widgets/tree/models/tree-item.mjs +7 -0
- package/esm2022/lib/widgets/tree/pipes/search-tree.pipe.mjs +17 -0
- package/esm2022/lib/widgets/tree/tree.component.mjs +108 -0
- package/esm2022/ngx-sp-infra.mjs +5 -0
- package/esm2022/public-api.mjs +95 -0
- package/fesm2022/ngx-sp-infra.mjs +5585 -0
- package/fesm2022/ngx-sp-infra.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/directives/copy-clipboard.directive.d.ts +7 -0
- package/lib/directives/disable-control.directive.d.ts +10 -0
- package/lib/directives/highlight.directive.d.ts +15 -0
- package/lib/directives/loading-btn.directive.d.ts +26 -0
- package/lib/directives/required.directive.d.ts +60 -0
- package/lib/infra.module.d.ts +69 -0
- package/lib/message/alert/alert.component.d.ts +14 -0
- package/lib/message/confirm/confirm.component.d.ts +22 -0
- package/lib/message/confirm-modal/confirm-modal.component.d.ts +33 -0
- package/lib/message/message-enum.d.ts +20 -0
- package/lib/message/message.service.d.ts +31 -0
- package/lib/message/save/save.component.d.ts +21 -0
- package/lib/models/DownloadArquivos.d.ts +11 -0
- package/lib/models/basic-filters.d.ts +4 -0
- package/lib/models/combobox/record-combobox.d.ts +15 -0
- package/lib/models/combobox/ret-records-combobox.d.ts +11 -0
- package/lib/models/email-model.d.ts +30 -0
- package/lib/models/forms/custom-form-control.d.ts +15 -0
- package/lib/models/icons/icon.model.d.ts +12 -0
- package/lib/models/ierror.d.ts +4 -0
- package/lib/models/ipagination.d.ts +5 -0
- package/lib/models/report-file.d.ts +4 -0
- package/lib/models/ret-error.d.ts +5 -0
- package/lib/models/ret-feedback-message.d.ts +7 -0
- package/lib/models/ret-report-file.d.ts +7 -0
- package/lib/pipes/cpf-cnpj.pipe.d.ts +7 -0
- package/lib/pipes/currency.pipe.d.ts +7 -0
- package/lib/pipes/decimal-comma.pipe.d.ts +7 -0
- package/lib/pipes/filter-multiple-choice.pipe.d.ts +8 -0
- package/lib/pipes/order-sort.pipe.d.ts +7 -0
- package/lib/pipes/phone-format.pipe.d.ts +7 -0
- package/lib/pipes/text-filter.pipe.d.ts +8 -0
- package/lib/pipes/title-case-pipe.pipe.d.ts +7 -0
- package/lib/pipes/to-url.pipe.d.ts +16 -0
- package/lib/service/ip-service.service.d.ts +15 -0
- package/lib/service/modal-utils.service.d.ts +30 -0
- package/lib/templates/footer/footer.component.d.ts +11 -0
- package/lib/templates/header/header.component.d.ts +17 -0
- package/lib/templates/simple-header/simple-header.component.d.ts +66 -0
- package/lib/utils/check-url-and-method.service.d.ts +35 -0
- package/lib/utils/form-utils.d.ts +56 -0
- package/lib/utils/settings.service.d.ts +9 -0
- package/lib/utils/utils.d.ts +58 -0
- package/lib/validators/cpf-cnpj.validator.d.ts +18 -0
- package/lib/validators/cpf-cnpj.validator.directive.d.ts +7 -0
- package/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.d.ts +29 -0
- package/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.d.ts +14 -0
- package/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.d.ts +10 -0
- package/lib/widgets/click-outside/clickoutside.directive.d.ts +40 -0
- package/lib/widgets/combobox/combobox.component.d.ts +174 -0
- package/lib/widgets/combobox/pipes/filter-by.pipe.d.ts +10 -0
- package/lib/widgets/combobox/pipes/limit-to.pipe.d.ts +7 -0
- package/lib/widgets/combobox-multiple-choice/combobox-multiple-choice.component.d.ts +16 -0
- package/lib/widgets/content-container/content-container.component.d.ts +16 -0
- package/lib/widgets/custom-acordion/custom-acordion.component.d.ts +13 -0
- package/lib/widgets/dropdown-options/dropdown-options.component.d.ts +16 -0
- package/lib/widgets/dynamic-input/dynamic-input.component.d.ts +14 -0
- package/lib/widgets/field-contador-message/field-contador-message.component.d.ts +14 -0
- package/lib/widgets/field-control-error/field-control-error.component.d.ts +12 -0
- package/lib/widgets/field-error-message/field-error-message.component.d.ts +15 -0
- package/lib/widgets/generic-modal/generic-modal.component.d.ts +8 -0
- package/lib/widgets/input-trim/input-trim.component.d.ts +11 -0
- package/lib/widgets/lib-combobox/lib-combobox.component.d.ts +118 -0
- package/lib/widgets/lib-header/lib-header.component.d.ts +78 -0
- package/lib/widgets/lib-icons/lib-icons.component.d.ts +47 -0
- package/lib/widgets/loading/loading.component.d.ts +6 -0
- package/lib/widgets/loading-button/loading-button.component.d.ts +7 -0
- package/lib/widgets/nav-produtos/nav-produtos.component.d.ts +15 -0
- package/lib/widgets/ordering/ordering.component.d.ts +18 -0
- package/lib/widgets/pagination/pagination.component.d.ts +20 -0
- package/lib/widgets/search-combobox/search-combobox.component.d.ts +98 -0
- package/lib/widgets/search-filters/search-filters.component.d.ts +16 -0
- package/lib/widgets/side-tabs/side-tabs.component.d.ts +24 -0
- package/lib/widgets/simple-search/simple-search.component.d.ts +11 -0
- package/lib/widgets/spinner/spinner.component.d.ts +25 -0
- package/lib/widgets/svg-storage/svg-storage.component.d.ts +16 -0
- package/lib/widgets/table/table.component.d.ts +93 -0
- package/lib/widgets/tree/models/ret-tree.d.ts +7 -0
- package/lib/widgets/tree/models/tree-item.d.ts +11 -0
- package/lib/widgets/tree/pipes/search-tree.pipe.d.ts +8 -0
- package/lib/widgets/tree/tree.component.d.ts +27 -0
- package/package.json +1 -5
- package/public-api.d.ts +91 -0
- package/src/assets/fonts/OpenSans/OpenSans-Bold.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-BoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-ExtraBold.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-Italic.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-Light.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-LightItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-Medium.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-MediumItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-Regular.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-SemiBold.ttf +0 -0
- package/src/assets/fonts/OpenSans/OpenSans-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-Bold.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-Italic.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-Light.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-Medium.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-Regular.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/OpenSans_Condensed/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Bold.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Italic.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Light.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Medium.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Regular.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CopyClipboardDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.payload = "";
|
|
6
|
+
}
|
|
7
|
+
onClick(event) {
|
|
8
|
+
event.preventDefault();
|
|
9
|
+
if (!this.payload)
|
|
10
|
+
return;
|
|
11
|
+
navigator.clipboard.writeText(this.payload.toString());
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CopyClipboardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
14
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: CopyClipboardDirective, selector: "[copy-clipboard]", inputs: { payload: ["copy-clipboard", "payload"] }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 }); }
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CopyClipboardDirective, decorators: [{
|
|
17
|
+
type: Directive,
|
|
18
|
+
args: [{
|
|
19
|
+
selector: '[copy-clipboard]'
|
|
20
|
+
}]
|
|
21
|
+
}], propDecorators: { payload: [{
|
|
22
|
+
type: Input,
|
|
23
|
+
args: ["copy-clipboard"]
|
|
24
|
+
}], onClick: [{
|
|
25
|
+
type: HostListener,
|
|
26
|
+
args: ["click", ["$event"]]
|
|
27
|
+
}] } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1jbGlwYm9hcmQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvZGlyZWN0aXZlcy9jb3B5LWNsaXBib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7QUFLckYsTUFBTSxPQUFPLHNCQUFzQjtJQUhuQztRQU1TLFlBQU8sR0FBVyxFQUFFLENBQUM7S0FZN0I7SUFUUSxPQUFPLENBQUMsS0FBaUI7UUFFOUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNmLE9BQU87UUFFVCxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQzsrR0FiVSxzQkFBc0I7bUdBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFIbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2lCQUM3Qjs4QkFJUSxPQUFPO3NCQURiLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUloQixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY29weS1jbGlwYm9hcmRdJ1xufSlcbmV4cG9ydCBjbGFzcyBDb3B5Q2xpcGJvYXJkRGlyZWN0aXZlIHtcblxuICBASW5wdXQoXCJjb3B5LWNsaXBib2FyZFwiKVxuICBwdWJsaWMgcGF5bG9hZDogc3RyaW5nID0gXCJcIjtcblxuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxuICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRoaXMucGF5bG9hZClcbiAgICAgIHJldHVybjtcblxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMucGF5bG9hZC50b1N0cmluZygpKTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
export class DisableControlDirective {
|
|
5
|
+
constructor(ngControl) {
|
|
6
|
+
this.ngControl = ngControl;
|
|
7
|
+
}
|
|
8
|
+
ngOnInit() {
|
|
9
|
+
if (this.disableControl) {
|
|
10
|
+
this.ngControl.control?.disable();
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
this.ngControl.control?.enable();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DisableControlDirective, deps: [{ token: i1.NgControl }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DisableControlDirective, selector: "[disableControl]", inputs: { disableControl: "disableControl" }, ngImport: i0 }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DisableControlDirective, decorators: [{
|
|
20
|
+
type: Directive,
|
|
21
|
+
args: [{
|
|
22
|
+
selector: '[disableControl]'
|
|
23
|
+
}]
|
|
24
|
+
}], ctorParameters: () => [{ type: i1.NgControl }], propDecorators: { disableControl: [{
|
|
25
|
+
type: Input
|
|
26
|
+
}] } });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZS1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL2RpcmVjdGl2ZXMvZGlzYWJsZS1jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTWpELE1BQU0sT0FBTyx1QkFBdUI7SUFJbEMsWUFBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUFHLENBQUM7SUFFNUMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7K0dBWlUsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OEVBR1UsY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Rpc2FibGVDb250cm9sXSdcbn0pXG5leHBvcnQgY2xhc3MgRGlzYWJsZUNvbnRyb2xEaXJlY3RpdmUge1xuXG4gIEBJbnB1dCgpIGRpc2FibGVDb250cm9sOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2wpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZUNvbnRyb2wpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/LmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8uZW5hYmxlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class HighlightDirective {
|
|
4
|
+
constructor(el, renderer) {
|
|
5
|
+
this.el = el;
|
|
6
|
+
this.renderer = renderer;
|
|
7
|
+
this.setTitle = false;
|
|
8
|
+
}
|
|
9
|
+
ngOnChanges(changes) {
|
|
10
|
+
if (!this.content) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (this.setTitle) {
|
|
14
|
+
this.renderer.setProperty(this.el.nativeElement, 'title', this.content);
|
|
15
|
+
}
|
|
16
|
+
if (!this.searchedWord || !this.searchedWord.length || !this.classToApply) {
|
|
17
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', this.content);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', this.getFormattedText());
|
|
21
|
+
}
|
|
22
|
+
getFormattedText() {
|
|
23
|
+
const re = new RegExp(`(${this.searchedWord})`, 'gi');
|
|
24
|
+
return this.content.replace(re, `<span class="${this.classToApply}">$1</span>`);
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
27
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: HighlightDirective, selector: "[appHighlight]", inputs: { searchedWord: "searchedWord", content: "content", classToApply: "classToApply", setTitle: "setTitle" }, usesOnChanges: true, ngImport: i0 }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightDirective, decorators: [{
|
|
30
|
+
type: Directive,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: '[appHighlight]'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { searchedWord: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}], content: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}], classToApply: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}], setTitle: [{
|
|
41
|
+
type: Input
|
|
42
|
+
}] } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL2RpcmVjdGl2ZXMvaGlnaGxpZ2h0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBbUQsTUFBTSxlQUFlLENBQUM7O0FBS2xHLE1BQU0sT0FBTyxrQkFBa0I7SUFNN0IsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBRnRELGFBQVEsR0FBRyxLQUFLLENBQUM7SUFFeUMsQ0FBQztJQUVwRSxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDckIsT0FBTyxFQUNQLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQ3JCLFdBQVcsRUFDWCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksYUFBYSxDQUFDLENBQUM7SUFDbEYsQ0FBQzsrR0FwQ1Usa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7dUdBRVUsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgU2ltcGxlQ2hhbmdlcywgUmVuZGVyZXIyLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcEhpZ2hsaWdodF0nXG59KVxuZXhwb3J0IGNsYXNzIEhpZ2hsaWdodERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHNlYXJjaGVkV29yZDogc3RyaW5nO1xuICBASW5wdXQoKSBjb250ZW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzVG9BcHBseTogc3RyaW5nO1xuICBASW5wdXQoKSBzZXRUaXRsZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0VGl0bGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgdGhpcy5jb250ZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWFyY2hlZFdvcmQgfHwgIXRoaXMuc2VhcmNoZWRXb3JkLmxlbmd0aCB8fCAhdGhpcy5jbGFzc1RvQXBwbHkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgdGhpcy5jb250ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2lubmVySFRNTCcsXG4gICAgICB0aGlzLmdldEZvcm1hdHRlZFRleHQoKVxuICAgICk7XG4gIH1cblxuICBnZXRGb3JtYXR0ZWRUZXh0KCkge1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKCR7dGhpcy5zZWFyY2hlZFdvcmR9KWAsICdnaScpO1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQucmVwbGFjZShyZSwgYDxzcGFuIGNsYXNzPVwiJHt0aGlzLmNsYXNzVG9BcHBseX1cIj4kMTwvc3Bhbj5gKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class LoadingBtnDirective {
|
|
4
|
+
get isLoading() { return this._isLoading; }
|
|
5
|
+
set isLoading(value) {
|
|
6
|
+
this._isLoading = value !== false && value !== 'false';
|
|
7
|
+
if (this._isLoading)
|
|
8
|
+
this.setLoadingState();
|
|
9
|
+
else
|
|
10
|
+
this.setDefaultState();
|
|
11
|
+
}
|
|
12
|
+
// #endregion PUBLIC
|
|
13
|
+
// #endregion ==========> PROPERTIES <==========
|
|
14
|
+
// #region ==========> INITIALIZATION <==========
|
|
15
|
+
/**
|
|
16
|
+
* @param _elementRef - Referência ao elemento DOM ao qual a diretiva está associada.
|
|
17
|
+
* @param _renderer - Serviço Angular para manipulação segura do DOM. */
|
|
18
|
+
constructor(_elementRef, _renderer) {
|
|
19
|
+
this._elementRef = _elementRef;
|
|
20
|
+
this._renderer = _renderer;
|
|
21
|
+
// #region ==========> PROPERTIES <==========
|
|
22
|
+
// #region PRIVATE
|
|
23
|
+
this._isLoading = false;
|
|
24
|
+
// #endregion PRIVATE
|
|
25
|
+
// #region PUBLIC
|
|
26
|
+
/** Texto ao trocar o botão para carregamento
|
|
27
|
+
* @example "Salvando..." */
|
|
28
|
+
this.loadingText = "";
|
|
29
|
+
/** Tipo de spinner a ser exibido no botão
|
|
30
|
+
* @default "border" */
|
|
31
|
+
this.loadingType = "border";
|
|
32
|
+
}
|
|
33
|
+
ngOnInit() { }
|
|
34
|
+
ngAfterViewInit() {
|
|
35
|
+
// Somente captura o conteúdo original se ainda não foi capturado
|
|
36
|
+
if (!this._originalContent) {
|
|
37
|
+
this._originalContent = this._elementRef.nativeElement.innerHTML;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// #endregion ==========> INITIALIZATION <==========
|
|
41
|
+
// #region ==========> UTILS <==========
|
|
42
|
+
setLoadingState() {
|
|
43
|
+
// Captura o conteúdo original se não foi capturado
|
|
44
|
+
if (!this._originalContent)
|
|
45
|
+
this._originalContent = this._elementRef.nativeElement.innerHTML;
|
|
46
|
+
// Desabilita o botão e substitui o conteúdo
|
|
47
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', true);
|
|
48
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', `<span class="spinner-${this.loadingType} spinner-${this.loadingType}-sm" style="width: 1rem; height: 1rem;"></span> ${this.loadingText}`);
|
|
49
|
+
}
|
|
50
|
+
setDefaultState() {
|
|
51
|
+
// Restaura o conteúdo original e habilita o botão
|
|
52
|
+
if (this._originalContent) {
|
|
53
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', false);
|
|
54
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', this._originalContent);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingBtnDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
58
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: LoadingBtnDirective, selector: "button[libLoading], a[libLoading]", inputs: { loadingText: "loadingText", loadingType: "loadingType", isLoading: ["libLoading", "isLoading"] }, ngImport: i0 }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingBtnDirective, decorators: [{
|
|
61
|
+
type: Directive,
|
|
62
|
+
args: [{
|
|
63
|
+
selector: 'button[libLoading], a[libLoading]'
|
|
64
|
+
}]
|
|
65
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { loadingText: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], loadingType: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], isLoading: [{
|
|
70
|
+
type: Input,
|
|
71
|
+
args: ["libLoading"]
|
|
72
|
+
}] } });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1idG4uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvZGlyZWN0aXZlcy9sb2FkaW5nLWJ0bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQzs7QUFLL0YsTUFBTSxPQUFPLG1CQUFtQjtJQW1COUIsSUFDVyxTQUFTLEtBQWMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFXLFNBQVMsQ0FBQyxLQUF1QjtRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLE9BQU8sQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDOztZQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELG9CQUFvQjtJQUVwQixnREFBZ0Q7SUFHaEQsaURBQWlEO0lBQ2pEOzs0RUFFd0U7SUFDeEUsWUFDVSxXQUF1QixFQUN2QixTQUFvQjtRQURwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBcEM5Qiw2Q0FBNkM7UUFFN0Msa0JBQWtCO1FBQ1YsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVwQyxxQkFBcUI7UUFFckIsaUJBQWlCO1FBRWpCO29DQUM0QjtRQUNaLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRXpDOytCQUN1QjtRQUNQLGdCQUFXLEdBQXNCLFFBQVEsQ0FBQztJQXNCdEQsQ0FBQztJQUVMLFFBQVEsS0FBSyxDQUFDO0lBRWQsZUFBZTtRQUNiLGlFQUFpRTtRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUNELG9EQUFvRDtJQUdwRCx3Q0FBd0M7SUFDaEMsZUFBZTtRQUNyQixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBRTdGLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUM5QixXQUFXLEVBQ1gsd0JBQXdCLElBQUksQ0FBQyxXQUFXLFlBQVksSUFBSSxDQUFDLFdBQVcsbURBQW1ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDMUksQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlO1FBQ3JCLGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakcsQ0FBQztJQUNILENBQUM7K0dBeEVVLG1CQUFtQjttR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQ0FBbUM7aUJBQzlDO3VHQWNpQixXQUFXO3NCQUExQixLQUFLO2dCQUlVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBR0ssU0FBUztzQkFEbkIsS0FBSzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnYnV0dG9uW2xpYkxvYWRpbmddLCBhW2xpYkxvYWRpbmddJ1xufSlcbmV4cG9ydCBjbGFzcyBMb2FkaW5nQnRuRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gUFJPUEVSVElFUyA8PT09PT09PT09PVxuXG4gIC8vICNyZWdpb24gUFJJVkFURVxuICBwcml2YXRlIF9pc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3JpZ2luYWxDb250ZW50OiBhbnk7XG4gIC8vICNlbmRyZWdpb24gUFJJVkFURVxuXG4gIC8vICNyZWdpb24gUFVCTElDXG5cbiAgLyoqIFRleHRvIGFvIHRyb2NhciBvIGJvdMOjbyBwYXJhIGNhcnJlZ2FtZW50b1xuICAgKiBAZXhhbXBsZSBcIlNhbHZhbmRvLi4uXCIgKi9cbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKiBUaXBvIGRlIHNwaW5uZXIgYSBzZXIgZXhpYmlkbyBubyBib3TDo29cbiAgICogQGRlZmF1bHQgXCJib3JkZXJcIiAqL1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZ1R5cGU6IFwiYm9yZGVyXCIgfCBcImdyb3dcIiA9IFwiYm9yZGVyXCI7XG5cbiAgQElucHV0KFwibGliTG9hZGluZ1wiKVxuICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzTG9hZGluZzsgfVxuICBwdWJsaWMgc2V0IGlzTG9hZGluZyh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIHRoaXMuX2lzTG9hZGluZyA9IHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJztcblxuICAgIGlmICh0aGlzLl9pc0xvYWRpbmcpIHRoaXMuc2V0TG9hZGluZ1N0YXRlKCk7XG4gICAgZWxzZSB0aGlzLnNldERlZmF1bHRTdGF0ZSgpO1xuICB9XG4gIC8vICNlbmRyZWdpb24gUFVCTElDXG5cbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBQUk9QRVJUSUVTIDw9PT09PT09PT09XG5cblxuICAvLyAjcmVnaW9uID09PT09PT09PT0+IElOSVRJQUxJWkFUSU9OIDw9PT09PT09PT09XG4gIC8qKlxuICAgKiBAcGFyYW0gX2VsZW1lbnRSZWYgLSBSZWZlcsOqbmNpYSBhbyBlbGVtZW50byBET00gYW8gcXVhbCBhIGRpcmV0aXZhIGVzdMOhIGFzc29jaWFkYS5cbiAgICogQHBhcmFtIF9yZW5kZXJlciAtIFNlcnZpw6dvIEFuZ3VsYXIgcGFyYSBtYW5pcHVsYcOnw6NvIHNlZ3VyYSBkbyBET00uICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBTb21lbnRlIGNhcHR1cmEgbyBjb250ZcO6ZG8gb3JpZ2luYWwgc2UgYWluZGEgbsOjbyBmb2kgY2FwdHVyYWRvXG4gICAgaWYgKCF0aGlzLl9vcmlnaW5hbENvbnRlbnQpIHtcbiAgICAgIHRoaXMuX29yaWdpbmFsQ29udGVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuICB9XG4gIC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gSU5JVElBTElaQVRJT04gPD09PT09PT09PT1cblxuXG4gIC8vICNyZWdpb24gPT09PT09PT09PT4gVVRJTFMgPD09PT09PT09PT1cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nU3RhdGUoKSB7XG4gICAgLy8gQ2FwdHVyYSBvIGNvbnRlw7pkbyBvcmlnaW5hbCBzZSBuw6NvIGZvaSBjYXB0dXJhZG9cbiAgICBpZiAoIXRoaXMuX29yaWdpbmFsQ29udGVudCkgdGhpcy5fb3JpZ2luYWxDb250ZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcblxuICAgIC8vIERlc2FiaWxpdGEgbyBib3TDo28gZSBzdWJzdGl0dWkgbyBjb250ZcO6ZG9cbiAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHRydWUpO1xuICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2lubmVySFRNTCcsXG4gICAgICBgPHNwYW4gY2xhc3M9XCJzcGlubmVyLSR7dGhpcy5sb2FkaW5nVHlwZX0gc3Bpbm5lci0ke3RoaXMubG9hZGluZ1R5cGV9LXNtXCIgc3R5bGU9XCJ3aWR0aDogMXJlbTsgaGVpZ2h0OiAxcmVtO1wiPjwvc3Bhbj4gJHt0aGlzLmxvYWRpbmdUZXh0fWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0U3RhdGUoKSB7XG4gICAgLy8gUmVzdGF1cmEgbyBjb250ZcO6ZG8gb3JpZ2luYWwgZSBoYWJpbGl0YSBvIGJvdMOjb1xuICAgIGlmICh0aGlzLl9vcmlnaW5hbENvbnRlbnQpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgdGhpcy5fb3JpZ2luYWxDb250ZW50KTtcbiAgICB9XG4gIH1cbiAgLy8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBVVElMUyA8PT09PT09PT09PVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Directive, Input } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Diretiva que adiciona um asterisco vermelho (*) ao lado de um elemento <label>
|
|
5
|
+
* para indicar que o campo é obrigatório.
|
|
6
|
+
*
|
|
7
|
+
* ## Uso
|
|
8
|
+
*
|
|
9
|
+
* No seu template HTML, você pode usar a diretiva de duas maneiras:
|
|
10
|
+
*
|
|
11
|
+
* 1. Sem especificar o valor, onde o marcador será exibido por padrão:
|
|
12
|
+
*
|
|
13
|
+
* ```html
|
|
14
|
+
* <label libRequired for="inputTeste" class="form-label">Pessoa</label>
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* 2. Especificando explicitamente o valor (true ou false):
|
|
18
|
+
*
|
|
19
|
+
* ```html
|
|
20
|
+
* <label [libRequired]="true" for="inputTeste" class="form-label">Nome</label>
|
|
21
|
+
* <label [libRequired]="false" for="inputTeste" class="form-label">Empresa</label>
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ### Inputs
|
|
25
|
+
*
|
|
26
|
+
* - `libRequired`: boolean | string
|
|
27
|
+
* - Determina se o asterisco de obrigatoriedade deve ser exibido.
|
|
28
|
+
* - Aceita valores booleanos (`true` ou `false`) ou strings (`"true"` ou `"false"`).
|
|
29
|
+
* - Padrão: `true`
|
|
30
|
+
*
|
|
31
|
+
* - `sisID`: string
|
|
32
|
+
* - Identificador único para o elemento `<span>` criado.
|
|
33
|
+
* - Útil para manipulação direta do DOM ou testes.
|
|
34
|
+
*/
|
|
35
|
+
export class RequiredDirective {
|
|
36
|
+
/**
|
|
37
|
+
* @param _elementRef - Referência ao elemento DOM ao qual a diretiva está associada.
|
|
38
|
+
* @param _renderer - Serviço Angular para manipulação segura do DOM.
|
|
39
|
+
*/
|
|
40
|
+
constructor(_elementRef, _renderer) {
|
|
41
|
+
this._elementRef = _elementRef;
|
|
42
|
+
this._renderer = _renderer;
|
|
43
|
+
this._showMarker = true; // Valor padrão
|
|
44
|
+
/** Identificador único para o elemento <span> criado. */
|
|
45
|
+
this.spanID = "";
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Define se o asterisco de obrigatoriedade deve ser exibido.
|
|
49
|
+
* Se nenhum valor for especificado, o padrão é true.
|
|
50
|
+
*/
|
|
51
|
+
set showMarker(value) { this._showMarker = value !== false && value !== 'false'; /* Qualquer valor diferente de false será tratado como true*/ }
|
|
52
|
+
get showMarker() { return this._showMarker; }
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
if (this.showMarker) {
|
|
55
|
+
this.addMarker();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
ngOnChanges(changes) {
|
|
59
|
+
if (changes["showMarker"]?.currentValue !== changes["showMarker"]?.previousValue && changes["showMarker"]?.previousValue !== undefined) {
|
|
60
|
+
if (this.showMarker) {
|
|
61
|
+
this.addMarker();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.removeMarker();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Adiciona o marcador de asterisco ao elemento <label>. */
|
|
69
|
+
addMarker() {
|
|
70
|
+
if (document.getElementById(this.spanID)) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const spanElement = document.createElement("span");
|
|
74
|
+
spanElement.className = "text-danger";
|
|
75
|
+
spanElement.innerHTML = " *";
|
|
76
|
+
spanElement.id = this.spanID;
|
|
77
|
+
this._renderer.appendChild(this._elementRef.nativeElement, spanElement);
|
|
78
|
+
}
|
|
79
|
+
/** Remove o marcador de asterisco do elemento <label>. */
|
|
80
|
+
removeMarker() {
|
|
81
|
+
if (this.spanID === "") {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const spanElement = document.getElementById(this.spanID);
|
|
85
|
+
if (spanElement !== null) {
|
|
86
|
+
this._renderer.removeChild(this._elementRef.nativeElement, spanElement);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RequiredDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
90
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: RequiredDirective, selector: "label[libRequired], span[libRequired], p[libRequired]", inputs: { showMarker: ["libRequired", "showMarker"], spanID: ["sisID", "spanID"] }, usesOnChanges: true, ngImport: i0 }); }
|
|
91
|
+
}
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RequiredDirective, decorators: [{
|
|
93
|
+
type: Directive,
|
|
94
|
+
args: [{
|
|
95
|
+
selector: "label[libRequired], span[libRequired], p[libRequired]"
|
|
96
|
+
}]
|
|
97
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { showMarker: [{
|
|
98
|
+
type: Input,
|
|
99
|
+
args: ["libRequired"]
|
|
100
|
+
}], spanID: [{
|
|
101
|
+
type: Input,
|
|
102
|
+
args: ["sisID"]
|
|
103
|
+
}] } });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZWQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvZGlyZWN0aXZlcy9yZXF1aXJlZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQStDLE1BQU0sZUFBZSxDQUFDOztBQUUxRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFHNUI7OztPQUdHO0lBQ0gsWUFDVSxXQUF1QixFQUN2QixTQUFvQjtRQURwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBUnRCLGdCQUFXLEdBQVksSUFBSSxDQUFDLENBQUMsZUFBZTtRQW1CcEQseURBQXlEO1FBQ3pDLFdBQU0sR0FBVyxFQUFFLENBQUM7SUFYaEMsQ0FBQztJQUVMOzs7T0FHRztJQUNILElBQ0ksVUFBVSxDQUFDLEtBQXVCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQ2xLLElBQUksVUFBVSxLQUFjLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFNdEQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLEtBQUssT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUFDLENBQUM7aUJBQ3JDLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUdELDREQUE0RDtJQUNwRCxTQUFTO1FBQ2YsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQUMsT0FBTztRQUFDLENBQUM7UUFFckQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxXQUFXLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztRQUN0QyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM3QixXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELDBEQUEwRDtJQUNsRCxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBRW5DLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFBQyxDQUFDO0lBQ3hHLENBQUM7K0dBdkRVLGlCQUFpQjttR0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUg3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1REFBdUQ7aUJBQ2xFO3VHQWtCSyxVQUFVO3NCQURiLEtBQUs7dUJBQUMsYUFBYTtnQkFLSixNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuLyoqXG4gKiBEaXJldGl2YSBxdWUgYWRpY2lvbmEgdW0gYXN0ZXJpc2NvIHZlcm1lbGhvICgqKSBhbyBsYWRvIGRlIHVtIGVsZW1lbnRvIDxsYWJlbD5cbiAqIHBhcmEgaW5kaWNhciBxdWUgbyBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uXG4gKiBcbiAqICMjIFVzb1xuICogXG4gKiBObyBzZXUgdGVtcGxhdGUgSFRNTCwgdm9jw6ogcG9kZSB1c2FyIGEgZGlyZXRpdmEgZGUgZHVhcyBtYW5laXJhczpcbiAqIFxuICogMS4gU2VtIGVzcGVjaWZpY2FyIG8gdmFsb3IsIG9uZGUgbyBtYXJjYWRvciBzZXLDoSBleGliaWRvIHBvciBwYWRyw6NvOlxuICogXG4gKiBgYGBodG1sXG4gKiA8bGFiZWwgbGliUmVxdWlyZWQgZm9yPVwiaW5wdXRUZXN0ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBlc3NvYTwvbGFiZWw+XG4gKiBgYGBcbiAqIFxuICogMi4gRXNwZWNpZmljYW5kbyBleHBsaWNpdGFtZW50ZSBvIHZhbG9yICh0cnVlIG91IGZhbHNlKTpcbiAqIFxuICogYGBgaHRtbFxuICogPGxhYmVsIFtsaWJSZXF1aXJlZF09XCJ0cnVlXCIgZm9yPVwiaW5wdXRUZXN0ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5vbWU8L2xhYmVsPlxuICogPGxhYmVsIFtsaWJSZXF1aXJlZF09XCJmYWxzZVwiIGZvcj1cImlucHV0VGVzdGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbXByZXNhPC9sYWJlbD5cbiAqIGBgYFxuICogXG4gKiAjIyMgSW5wdXRzXG4gKiBcbiAqIC0gYGxpYlJlcXVpcmVkYDogYm9vbGVhbiB8IHN0cmluZ1xuICogICAtIERldGVybWluYSBzZSBvIGFzdGVyaXNjbyBkZSBvYnJpZ2F0b3JpZWRhZGUgZGV2ZSBzZXIgZXhpYmlkby4gXG4gKiAgIC0gQWNlaXRhIHZhbG9yZXMgYm9vbGVhbm9zIChgdHJ1ZWAgb3UgYGZhbHNlYCkgb3Ugc3RyaW5ncyAoYFwidHJ1ZVwiYCBvdSBgXCJmYWxzZVwiYCkuXG4gKiAgIC0gUGFkcsOjbzogYHRydWVgXG4gKiBcbiAqIC0gYHNpc0lEYDogc3RyaW5nXG4gKiAgIC0gSWRlbnRpZmljYWRvciDDum5pY28gcGFyYSBvIGVsZW1lbnRvIGA8c3Bhbj5gIGNyaWFkby5cbiAqICAgLSDDmnRpbCBwYXJhIG1hbmlwdWxhw6fDo28gZGlyZXRhIGRvIERPTSBvdSB0ZXN0ZXMuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJsYWJlbFtsaWJSZXF1aXJlZF0sIHNwYW5bbGliUmVxdWlyZWRdLCBwW2xpYlJlcXVpcmVkXVwiXG59KVxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIF9zaG93TWFya2VyOiBib29sZWFuID0gdHJ1ZTsgLy8gVmFsb3IgcGFkcsOjb1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gX2VsZW1lbnRSZWYgLSBSZWZlcsOqbmNpYSBhbyBlbGVtZW50byBET00gYW8gcXVhbCBhIGRpcmV0aXZhIGVzdMOhIGFzc29jaWFkYS5cbiAgICogQHBhcmFtIF9yZW5kZXJlciAtIFNlcnZpw6dvIEFuZ3VsYXIgcGFyYSBtYW5pcHVsYcOnw6NvIHNlZ3VyYSBkbyBET00uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBzZSBvIGFzdGVyaXNjbyBkZSBvYnJpZ2F0b3JpZWRhZGUgZGV2ZSBzZXIgZXhpYmlkby5cbiAgICogU2UgbmVuaHVtIHZhbG9yIGZvciBlc3BlY2lmaWNhZG8sIG8gcGFkcsOjbyDDqSB0cnVlLlxuICAgKi9cbiAgQElucHV0KFwibGliUmVxdWlyZWRcIilcbiAgc2V0IHNob3dNYXJrZXIodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHsgdGhpcy5fc2hvd01hcmtlciA9IHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJzsgLyogUXVhbHF1ZXIgdmFsb3IgZGlmZXJlbnRlIGRlIGZhbHNlIHNlcsOhIHRyYXRhZG8gY29tbyB0cnVlKi8gfVxuICBnZXQgc2hvd01hcmtlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Nob3dNYXJrZXI7IH1cblxuICAvKiogSWRlbnRpZmljYWRvciDDum5pY28gcGFyYSBvIGVsZW1lbnRvIDxzcGFuPiBjcmlhZG8uICovXG4gIEBJbnB1dChcInNpc0lEXCIpIHNwYW5JRDogc3RyaW5nID0gXCJcIjtcblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dNYXJrZXIpIHtcbiAgICAgIHRoaXMuYWRkTWFya2VyKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wic2hvd01hcmtlclwiXT8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzW1wic2hvd01hcmtlclwiXT8ucHJldmlvdXNWYWx1ZSAmJiBjaGFuZ2VzW1wic2hvd01hcmtlclwiXT8ucHJldmlvdXNWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5zaG93TWFya2VyKSB7IHRoaXMuYWRkTWFya2VyKCk7IH1cbiAgICAgIGVsc2UgeyB0aGlzLnJlbW92ZU1hcmtlcigpOyB9XG4gICAgfVxuICB9XG5cblxuICAvKiogQWRpY2lvbmEgbyBtYXJjYWRvciBkZSBhc3RlcmlzY28gYW8gZWxlbWVudG8gPGxhYmVsPi4gKi9cbiAgcHJpdmF0ZSBhZGRNYXJrZXIoKTogdm9pZCB7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3BhbklEKSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgc3BhbkVsZW1lbnQuY2xhc3NOYW1lID0gXCJ0ZXh0LWRhbmdlclwiO1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IFwiICpcIjtcbiAgICBzcGFuRWxlbWVudC5pZCA9IHRoaXMuc3BhbklEO1xuICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgc3BhbkVsZW1lbnQpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBvIG1hcmNhZG9yIGRlIGFzdGVyaXNjbyBkbyBlbGVtZW50byA8bGFiZWw+LiAqL1xuICBwcml2YXRlIHJlbW92ZU1hcmtlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zcGFuSUQgPT09IFwiXCIpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3BhbklEKTtcbiAgICBpZiAoc3BhbkVsZW1lbnQgIT09IG51bGwpIHsgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBzcGFuRWxlbWVudCk7IH1cbiAgfVxufVxuIl19
|