@resolveio/client-lib-core 15.5.2 → 16.0.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-manager.service.mjs +229 -0
- package/esm2022/lib/auth/auth-guard.service.mjs +174 -0
- package/esm2022/lib/auth/auth-permissions.service.mjs +23 -0
- package/esm2022/lib/auth/auth.service.mjs +251 -0
- package/esm2022/lib/auth/auth365.component.mjs +51 -0
- package/esm2022/lib/auth/can-deactivate-guard.service.mjs +13 -0
- package/esm2022/lib/auth/enroll.component.mjs +88 -0
- package/esm2022/lib/auth/forgot-password.component.mjs +89 -0
- package/esm2022/lib/core.component.mjs +404 -0
- package/esm2022/lib/core.module.mjs +176 -0
- package/esm2022/lib/core.service.mjs +88 -0
- package/esm2022/lib/directive/focus.mjs +24 -0
- package/esm2022/lib/directive/scroll.mjs +54 -0
- package/esm2022/lib/home/home.component.mjs +84 -0
- package/esm2022/lib/logger/logger.component.mjs +229 -0
- package/esm2022/lib/models/app-status.model.mjs +2 -0
- package/esm2022/lib/models/collection-document.model.mjs +2 -0
- package/esm2022/lib/models/cron-job.model.mjs +2 -0
- package/esm2022/lib/models/dialog.model.mjs +2 -0
- package/esm2022/lib/models/file.model.mjs +2 -0
- package/esm2022/lib/models/log-method-latency.model.mjs +2 -0
- package/esm2022/lib/models/navbar-main-tab.model.mjs +2 -0
- package/esm2022/lib/models/pagination.model.mjs +2 -0
- package/esm2022/lib/models/permission.model.mjs +2 -0
- package/esm2022/lib/models/select-data-label.model.mjs +2 -0
- package/esm2022/lib/models/subscription.model.mjs +2 -0
- package/esm2022/lib/models/support-ticket.model.mjs +2 -0
- package/esm2022/lib/models/user-group.model.mjs +2 -0
- package/esm2022/lib/models/user.model.mjs +2 -0
- package/esm2022/lib/offline-db.mjs +519 -0
- package/esm2022/lib/offline-manager.service.mjs +109 -0
- package/esm2022/lib/pipes/domsanitizor.pipe.mjs +29 -0
- package/esm2022/lib/pipes/filter.pipe.mjs +36 -0
- package/esm2022/lib/pipes/json-parse.pipe.mjs +29 -0
- package/esm2022/lib/pipes/minus-currency.pipe.mjs +16 -0
- package/esm2022/lib/pipes/phone.pipe.mjs +47 -0
- package/esm2022/lib/pipes/pipe.module.mjs +54 -0
- package/esm2022/lib/pipes/reverse-list.pipe.mjs +17 -0
- package/esm2022/lib/pipes/titlecase.pipe.mjs +22 -0
- package/esm2022/lib/report-builder.permission.mjs +13 -0
- package/esm2022/lib/resolveio-class.mjs +50 -0
- package/esm2022/lib/shared/shared.module.mjs +96 -0
- package/esm2022/lib/socket-manager.service.mjs +340 -0
- package/esm2022/lib/socket.service.mjs +200 -0
- package/esm2022/lib/super-admin.permission.mjs +9 -0
- package/esm2022/lib/support-ticket/detail/support-ticket-detail.component.mjs +211 -0
- package/esm2022/lib/support-ticket/edit/support-ticket-edit.component.mjs +131 -0
- package/esm2022/lib/support-ticket/list/support-ticket-list.component.mjs +142 -0
- package/esm2022/lib/support-ticket/new/support-ticket-new.component.mjs +121 -0
- package/esm2022/lib/support-ticket/support-ticket.component.mjs +67 -0
- package/esm2022/lib/support-ticket/support-ticket.module.mjs +50 -0
- package/esm2022/lib/support-ticket/support-ticket.routing.mjs +20 -0
- package/esm2022/lib/support-ticket/support-ticket.service.mjs +16 -0
- package/esm2022/lib/token-manager.service.mjs +25 -0
- package/esm2022/lib/user-settings/settings/users-settings.component.mjs +302 -0
- package/esm2022/lib/user-settings/user-settings.component.mjs +61 -0
- package/esm2022/lib/user-settings/user-settings.module.mjs +41 -0
- package/esm2022/lib/user-settings/user-settings.permission.mjs +10 -0
- package/esm2022/lib/user-settings/user-settings.routing.mjs +14 -0
- package/esm2022/lib/user-settings/user-settings.service.mjs +16 -0
- package/esm2022/lib/util/action-name.helper.mjs +9 -0
- package/esm2022/lib/util/aws.service.mjs +80 -0
- package/esm2022/lib/util/common.helper.mjs +133 -0
- package/esm2022/lib/util/validation.service.mjs +185 -0
- package/esm2022/lib/util/window-resize.service.mjs +38 -0
- package/esm2022/lib/util/window.service.mjs +16 -0
- package/esm2022/lib/widgets/alert/alert.model.mjs +2 -0
- package/esm2022/lib/widgets/alert/alert.service.mjs +79 -0
- package/esm2022/lib/widgets/collapse-table/collapse-table.component.mjs +83 -0
- package/esm2022/lib/widgets/collapse-table/collapse-table.module.mjs +34 -0
- package/esm2022/lib/widgets/data-table/data-table.component.mjs +84 -0
- package/esm2022/lib/widgets/data-table/data-table.model.mjs +2 -0
- package/esm2022/lib/widgets/data-table/data-table.module.mjs +41 -0
- package/esm2022/lib/widgets/date-shortcut/date-shortcut.component.mjs +198 -0
- package/esm2022/lib/widgets/date-shortcut/date-shortcut.module.mjs +32 -0
- package/esm2022/lib/widgets/dialog/dialog.confirm.content.mjs +67 -0
- package/esm2022/lib/widgets/dialog/dialog.error.content.mjs +60 -0
- package/esm2022/lib/widgets/dialog/dialog.input.content.mjs +200 -0
- package/esm2022/lib/widgets/dialog/dialog.login.content.mjs +354 -0
- package/esm2022/lib/widgets/dialog/dialog.notify.content.mjs +60 -0
- package/esm2022/lib/widgets/dialog/dialog.register.content.mjs +333 -0
- package/esm2022/lib/widgets/dialog/dialog.select-array-objs.content.mjs +203 -0
- package/esm2022/lib/widgets/dialog/dialog.select-array.content.mjs +310 -0
- package/esm2022/lib/widgets/dialog/dialog.select-data-labels.content.mjs +196 -0
- package/esm2022/lib/widgets/dialog/dialog.select-datetime.content.mjs +191 -0
- package/esm2022/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +166 -0
- package/esm2022/lib/widgets/dialog/dialog.service.mjs +98 -0
- package/esm2022/lib/widgets/file/file-upload.component.mjs +433 -0
- package/esm2022/lib/widgets/file/file-upload.module.mjs +48 -0
- package/esm2022/lib/widgets/form-button/form-button.component.mjs +97 -0
- package/esm2022/lib/widgets/form-button/form-button.module.mjs +28 -0
- package/esm2022/lib/widgets/navbar-main/navbar-main.component.mjs +222 -0
- package/esm2022/lib/widgets/navbar-module/navbar-module.component.mjs +108 -0
- package/esm2022/lib/widgets/navbar-module/navbar-module.model.mjs +2 -0
- package/esm2022/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +41 -0
- package/esm2022/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +24 -0
- package/esm2022/lib/widgets/scheduler/scheduler.component.mjs +186 -0
- package/esm2022/lib/widgets/scheduler/scheduler.module.mjs +37 -0
- package/esm2022/lib/widgets/sort-table/sort-table-header.component.mjs +72 -0
- package/esm2022/lib/widgets/sort-table/sort-table-ngfor.component.mjs +49 -0
- package/esm2022/lib/widgets/sort-table/sort-table.directive.mjs +177 -0
- package/esm2022/lib/widgets/sort-table/sort-table.module.mjs +38 -0
- package/esm2022/lib/widgets/user-role/user-role.component.mjs +29 -0
- package/esm2022/lib/widgets/user-role/user-role.module.mjs +24 -0
- package/esm2022/public_api.mjs +91 -0
- package/esm2022/resolveio-client-lib-core.mjs +5 -0
- package/fesm2022/resolveio-client-lib-core.mjs +9019 -0
- package/fesm2022/resolveio-client-lib-core.mjs.map +1 -0
- package/index.d.ts +3 -0
- package/lib/auth/auth-guard.service.d.ts +2 -2
- package/lib/auth/can-deactivate-guard.service.d.ts +1 -2
- package/lib/core.component.d.ts +1 -2
- package/lib/core.module.d.ts +26 -29
- package/lib/directive/focus.d.ts +1 -1
- package/lib/directive/scroll.d.ts +1 -1
- package/lib/logger/logger.component.d.ts +0 -2
- package/lib/models/dialog.model.d.ts +1 -1
- package/lib/models/pagination.model.d.ts +1 -0
- package/lib/models/user-group.model.d.ts +0 -1
- package/lib/offline-db.d.ts +1 -5
- package/lib/offline-manager.service.d.ts +1 -4
- package/lib/socket-manager.service.d.ts +5 -34
- package/lib/socket.service.d.ts +3 -17
- package/lib/token-manager.service.d.ts +2 -4
- package/lib/util/aws.service.d.ts +1 -2
- package/lib/util/common.helper.d.ts +1 -3
- package/lib/util/window-resize.service.d.ts +6 -5
- package/lib/widgets/collapse-table/collapse-table.component.d.ts +1 -1
- package/lib/widgets/data-table/data-table.component.d.ts +1 -1
- package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +1 -5
- package/lib/widgets/dialog/dialog.confirm.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.error.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.input.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.login.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.notify.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-array.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +1 -1
- package/lib/widgets/file/file-upload.component.d.ts +1 -1
- package/lib/widgets/file/file-upload.module.d.ts +2 -2
- package/lib/widgets/form-button/form-button.component.d.ts +1 -1
- package/lib/widgets/navbar-main/navbar-main.component.d.ts +1 -2
- package/lib/widgets/navbar-module/navbar-module.component.d.ts +1 -1
- package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +1 -1
- package/lib/widgets/sort-table/sort-table-header.component.d.ts +1 -1
- package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +1 -1
- package/lib/widgets/sort-table/sort-table.directive.d.ts +8 -1
- package/lib/widgets/user-role/user-role.component.d.ts +1 -1
- package/package.json +5 -6
- package/fesm2020/resolveio-client-lib-core.min.mjs +0 -1
- package/lib/logger/diff-viewer.component.d.ts +0 -35
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { ResizeService } from '../../util/window-resize.service';
|
|
3
|
+
import { ProviderService, BaseComponent } from '../../resolveio-class';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../util/window-resize.service";
|
|
6
|
+
import * as i2 from "../../resolveio-class";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
export class ResponsiveButtonGroupComponent extends BaseComponent {
|
|
9
|
+
_cdRef;
|
|
10
|
+
_resizeService;
|
|
11
|
+
_services;
|
|
12
|
+
collapseSize = 900;
|
|
13
|
+
windowSize = window.innerWidth;
|
|
14
|
+
windowSizeSubscription = null;
|
|
15
|
+
constructor(_cdRef, _resizeService, _services) {
|
|
16
|
+
super(_services);
|
|
17
|
+
this._cdRef = _cdRef;
|
|
18
|
+
this._resizeService = _resizeService;
|
|
19
|
+
this._services = _services;
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
this.windowSizeSubscription = this._resizeService.onResize$.subscribe((val) => {
|
|
23
|
+
if (val) {
|
|
24
|
+
this.windowSize = val.innerWidth;
|
|
25
|
+
this._cdRef.detectChanges();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
ngOnDestroy() {
|
|
30
|
+
this.windowSizeSubscription.unsubscribe();
|
|
31
|
+
}
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsiveButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ResizeService }, { token: i2.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResponsiveButtonGroupComponent, selector: "responsive-button-group", inputs: { collapseSize: "collapseSize" }, providers: [ProviderService], usesInheritance: true, ngImport: i0, template: "<style>\n\t@media screen and (min-width: 900px) {\n\t\t:host /deep/ .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\n\t\t:host /deep/ .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host /deep/ .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host /deep/ .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n</style>\n\n<div [ngClass]=\"windowSize <= collapseSize ? ['btn-group-vertical', 'xsBtnGroup'] : ['btn-group', 'lgBtnGroup']\">\n\t<ng-content></ng-content>\n</div>\n", styles: ["\n\t@media screen and (min-width: 900px) {\n\t\t:host /deep/ .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\n\t\t:host /deep/ .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host /deep/ .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host /deep/ .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsiveButtonGroupComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ providers: [ProviderService], selector: 'responsive-button-group', template: "<style>\n\t@media screen and (min-width: 900px) {\n\t\t:host /deep/ .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\n\t\t:host /deep/ .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host /deep/ .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host /deep/ .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host /deep/ .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n</style>\n\n<div [ngClass]=\"windowSize <= collapseSize ? ['btn-group-vertical', 'xsBtnGroup'] : ['btn-group', 'lgBtnGroup']\">\n\t<ng-content></ng-content>\n</div>\n" }]
|
|
38
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ResizeService }, { type: i2.ProviderService }]; }, propDecorators: { collapseSize: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}] } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQU92RSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsYUFBYTtJQU81QztJQUFtQztJQUF1QztJQUxyRixZQUFZLEdBQUcsR0FBRyxDQUFDO0lBRTVCLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUVuQyxZQUFvQixNQUF5QixFQUFVLGNBQTZCLEVBQVUsU0FBMEI7UUFDdkgsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBREUsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWlCO0lBRXhILENBQUM7SUFFRCxRQUFRO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdFLElBQUksR0FBRyxFQUFFO2dCQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1QjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQzt3R0F0QlcsOEJBQThCOzRGQUE5Qiw4QkFBOEIsNEZBSi9CLENBQUMsZUFBZSxDQUFDLGlEQ043QixvNkJBMkNBOzs0RkRqQ2EsOEJBQThCO2tCQUwxQyxTQUFTO2dDQUNFLENBQUMsZUFBZSxDQUFDLFlBQ2xCLHlCQUF5QjtrS0FLMUIsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplU2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWwvd2luZG93LXJlc2l6ZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlLCBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVzb2x2ZWlvLWNsYXNzJztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHNlbGVjdG9yOiAncmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAnLFxuXHR0ZW1wbGF0ZVVybDogJy4vcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFJlc3BvbnNpdmVCdXR0b25Hcm91cENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7IFxuXG5cdEBJbnB1dCgpIGNvbGxhcHNlU2l6ZSA9IDkwMDtcblxuXHR3aW5kb3dTaXplOiBudW1iZXIgPSB3aW5kb3cuaW5uZXJXaWR0aDtcblx0d2luZG93U2l6ZVN1YnNjcmlwdGlvbjogYW55ID0gbnVsbDtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX3Jlc2l6ZVNlcnZpY2U6IFJlc2l6ZVNlcnZpY2UsIHByaXZhdGUgX3NlcnZpY2VzOiBQcm92aWRlclNlcnZpY2UpIHtcblx0XHRzdXBlcihfc2VydmljZXMpO1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy53aW5kb3dTaXplU3Vic2NyaXB0aW9uID0gdGhpcy5fcmVzaXplU2VydmljZS5vblJlc2l6ZSQuc3Vic2NyaWJlKCh2YWwpID0+IHtcblx0XHRcdGlmICh2YWwpIHtcblx0XHRcdFx0dGhpcy53aW5kb3dTaXplID0gdmFsLmlubmVyV2lkdGg7XG5cdFx0XHRcdHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMud2luZG93U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHR9XG59XG4iLCI8c3R5bGU+XG5cdEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDkwMHB4KSB7XG5cdFx0Omhvc3QgL2RlZXAvIC54c0J0bkdyb3VwIHtcblx0XHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQ6aG9zdCAvZGVlcC8gLmxnQnRuR3JvdXAge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQ6aG9zdCAvZGVlcC8gLmxnQnRuR3JvdXAgYnV0dG9uIHtcblx0XHRcdG1hcmdpbi1sZWZ0OiA1cHggIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQ6aG9zdCAvZGVlcC8gLmxnQnRuR3JvdXAgYSB7XG5cdFx0XHRtYXJnaW4tbGVmdDogNXB4ICFpbXBvcnRhbnQ7XG5cdFx0fVxuXHR9XG5cblx0QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTAwcHgpIHtcblxuXHRcdDpob3N0IC9kZWVwLyAueHNCdG5Hcm91cCB7XG5cdFx0XHRkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0Omhvc3QgL2RlZXAvIC54c0J0bkdyb3VwIGJ1dHRvbiB7XG5cdFx0XHRtYXJnaW4tdG9wOiA1cHggIWltcG9ydGFudDtcblx0XHRcdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0Omhvc3QgL2RlZXAvIC54c0J0bkdyb3VwIGEge1xuXHRcdFx0bWFyZ2luLXRvcDogNXB4ICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0Omhvc3QgL2RlZXAvIC5sZ0J0bkdyb3VwIHtcblx0XHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0XHR9XG5cdH1cbjwvc3R5bGU+XG5cbjxkaXYgW25nQ2xhc3NdPVwid2luZG93U2l6ZSA8PSBjb2xsYXBzZVNpemUgPyBbJ2J0bi1ncm91cC12ZXJ0aWNhbCcsICd4c0J0bkdyb3VwJ10gOiBbJ2J0bi1ncm91cCcsICdsZ0J0bkdyb3VwJ11cIj5cblx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ResponsiveButtonGroupComponent } from './responsive-button-group.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ResponsiveButtonGroupModule {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsiveButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ResponsiveButtonGroupModule, declarations: [ResponsiveButtonGroupComponent], imports: [CommonModule], exports: [ResponsiveButtonGroupComponent] });
|
|
8
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsiveButtonGroupModule, imports: [CommonModule] });
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsiveButtonGroupModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
imports: [
|
|
14
|
+
CommonModule
|
|
15
|
+
],
|
|
16
|
+
declarations: [
|
|
17
|
+
ResponsiveButtonGroupComponent
|
|
18
|
+
],
|
|
19
|
+
exports: [
|
|
20
|
+
ResponsiveButtonGroupComponent
|
|
21
|
+
]
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQWFyRixNQUFNLE9BQU8sMkJBQTJCO3dHQUEzQiwyQkFBMkI7eUdBQTNCLDJCQUEyQixpQkFOdEMsOEJBQThCLGFBSDlCLFlBQVksYUFNWiw4QkFBOEI7eUdBR25CLDJCQUEyQixZQVR0QyxZQUFZOzs0RkFTRCwyQkFBMkI7a0JBWHZDLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFO3dCQUNSLFlBQVk7cUJBQ1o7b0JBQ0QsWUFBWSxFQUFFO3dCQUNiLDhCQUE4QjtxQkFDOUI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNSLDhCQUE4QjtxQkFDOUI7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlc3BvbnNpdmVCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRcdENvbW1vbk1vZHVsZVxuXHRdLFxuXHRkZWNsYXJhdGlvbnM6IFtcblx0XHRSZXNwb25zaXZlQnV0dG9uR3JvdXBDb21wb25lbnRcblx0XSxcblx0ZXhwb3J0czogW1xuXHRcdFJlc3BvbnNpdmVCdXR0b25Hcm91cENvbXBvbmVudFxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIFJlc3BvbnNpdmVCdXR0b25Hcm91cE1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Component, ViewChild, ElementRef, HostListener } from '@angular/core';
|
|
2
|
+
import moment from 'moment';
|
|
3
|
+
import { ProviderService, BaseComponent } from '../../resolveio-class';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../resolveio-class";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
export class SchedulerComponent extends BaseComponent {
|
|
8
|
+
_services;
|
|
9
|
+
today = new Date();
|
|
10
|
+
over_forward = false;
|
|
11
|
+
over_backwards = false;
|
|
12
|
+
mouseDown = false;
|
|
13
|
+
mouseLastEvent = null;
|
|
14
|
+
timer_sub = null;
|
|
15
|
+
months = [
|
|
16
|
+
'Jan',
|
|
17
|
+
'Feb',
|
|
18
|
+
'Mar',
|
|
19
|
+
'Apr',
|
|
20
|
+
'May',
|
|
21
|
+
'Jun',
|
|
22
|
+
'Jul',
|
|
23
|
+
'Aug',
|
|
24
|
+
'Sep',
|
|
25
|
+
'Oct',
|
|
26
|
+
'Nov',
|
|
27
|
+
'Dec'
|
|
28
|
+
];
|
|
29
|
+
size_svg = {
|
|
30
|
+
width: 0,
|
|
31
|
+
height: 0
|
|
32
|
+
};
|
|
33
|
+
size_cell = {
|
|
34
|
+
width: 30,
|
|
35
|
+
height: 30
|
|
36
|
+
};
|
|
37
|
+
svgChart;
|
|
38
|
+
constructor(_services) {
|
|
39
|
+
super(_services);
|
|
40
|
+
this._services = _services;
|
|
41
|
+
}
|
|
42
|
+
ngAfterViewInit() {
|
|
43
|
+
this.size_svg.width = this.svgChart.nativeElement.clientWidth;
|
|
44
|
+
this.size_svg.height = this.svgChart.nativeElement.clientHeight;
|
|
45
|
+
}
|
|
46
|
+
ngOnDestroy() {
|
|
47
|
+
if (this.timer_sub) {
|
|
48
|
+
clearInterval(this.timer_sub);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
onMouseup() {
|
|
52
|
+
this.mouseDown = false;
|
|
53
|
+
}
|
|
54
|
+
onMousedown(event) {
|
|
55
|
+
this.mouseDown = true;
|
|
56
|
+
this.mouseLastEvent = event;
|
|
57
|
+
}
|
|
58
|
+
onMousemove(event) {
|
|
59
|
+
if (this.mouseDown) {
|
|
60
|
+
let daysAdd = 0;
|
|
61
|
+
if (this.mouseLastEvent.clientX - event.clientX > 1) {
|
|
62
|
+
if (Math.floor((this.mouseLastEvent.clientX - event.clientX) / 15) > 0) {
|
|
63
|
+
daysAdd = Math.floor((this.mouseLastEvent.clientX - event.clientX + ((30 - this.size_cell.width) * 5)) / 20);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
daysAdd = 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (this.mouseLastEvent.clientX - event.clientX < -1) {
|
|
70
|
+
if (Math.floor((this.mouseLastEvent.clientX - event.clientX) / 15) < 0) {
|
|
71
|
+
daysAdd = Math.floor((this.mouseLastEvent.clientX - event.clientX - ((30 - this.size_cell.width) * 5)) / 20);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
daysAdd = -1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.today = moment(this.today).add(daysAdd, 'days').toDate();
|
|
78
|
+
this.mouseLastEvent = event;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
onMouseLeave(event) {
|
|
82
|
+
if (this.mouseDown) {
|
|
83
|
+
this.mouseDown = false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
buildDays() {
|
|
87
|
+
let days = [];
|
|
88
|
+
for (let i = 0; i < Math.floor(this.size_svg.width / this.size_cell.width); i++) {
|
|
89
|
+
days.push({
|
|
90
|
+
index: i,
|
|
91
|
+
day: moment(this.today).add(i, 'days').toDate().getDate()
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return days;
|
|
95
|
+
}
|
|
96
|
+
buildMonths() {
|
|
97
|
+
let months = [{
|
|
98
|
+
index_start: 0,
|
|
99
|
+
index_end: null,
|
|
100
|
+
month: this.months[this.today.getMonth()]
|
|
101
|
+
}];
|
|
102
|
+
for (let i = 1; i < Math.floor(this.size_svg.width / this.size_cell.width); i++) {
|
|
103
|
+
if (moment(this.today).add(i, 'days').toDate().getMonth() !== moment(this.today).add(i - 1, 'days').toDate().getMonth()) {
|
|
104
|
+
months[months.length - 1].index_end = i;
|
|
105
|
+
months.push({
|
|
106
|
+
index_start: i,
|
|
107
|
+
index_end: null,
|
|
108
|
+
month: this.months[moment(this.today).add(i, 'days').toDate().getMonth()]
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
months[months.length - 1].index_end = Math.floor(this.size_svg.width / this.size_cell.width);
|
|
113
|
+
return months;
|
|
114
|
+
}
|
|
115
|
+
buildYears() {
|
|
116
|
+
let years = [{
|
|
117
|
+
index_start: 0,
|
|
118
|
+
index_end: null,
|
|
119
|
+
year: this.today.getFullYear()
|
|
120
|
+
}];
|
|
121
|
+
for (let i = 1; i < Math.floor(this.size_svg.width / this.size_cell.width); i++) {
|
|
122
|
+
if (moment(this.today).add(i, 'days').toDate().getFullYear() !== moment(this.today).add(i - 1, 'days').toDate().getFullYear()) {
|
|
123
|
+
years[years.length - 1].index_end = i;
|
|
124
|
+
years.push({
|
|
125
|
+
index_start: i,
|
|
126
|
+
index_end: null,
|
|
127
|
+
year: moment(this.today).add(i, 'days').toDate().getFullYear()
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
years[years.length - 1].index_end = Math.floor(this.size_svg.width / this.size_cell.width);
|
|
132
|
+
return years;
|
|
133
|
+
}
|
|
134
|
+
decrementToday() {
|
|
135
|
+
this.today = moment(this.today).subtract(1, 'days').toDate();
|
|
136
|
+
}
|
|
137
|
+
incrementToday() {
|
|
138
|
+
this.today = moment(this.today).add(1, 'days').toDate();
|
|
139
|
+
}
|
|
140
|
+
overForward() {
|
|
141
|
+
this.timer_sub = setInterval(() => {
|
|
142
|
+
this.incrementToday();
|
|
143
|
+
}, 50);
|
|
144
|
+
}
|
|
145
|
+
leftForward() {
|
|
146
|
+
clearInterval(this.timer_sub);
|
|
147
|
+
}
|
|
148
|
+
overBackwards() {
|
|
149
|
+
this.timer_sub = setInterval(() => {
|
|
150
|
+
this.decrementToday();
|
|
151
|
+
}, 50);
|
|
152
|
+
}
|
|
153
|
+
leftBackwards() {
|
|
154
|
+
clearInterval(this.timer_sub);
|
|
155
|
+
}
|
|
156
|
+
zoomOut() {
|
|
157
|
+
if (this.size_cell.width > 10) {
|
|
158
|
+
this.size_cell.width -= 10;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
zoomIn() {
|
|
162
|
+
this.size_cell.width += 10;
|
|
163
|
+
}
|
|
164
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SchedulerComponent, deps: [{ token: i1.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
165
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SchedulerComponent, selector: "scheduler", host: { listeners: { "mouseup": "onMouseup()", "mousedown": "onMousedown($event)", "mousemove": "onMousemove($event)", "mouseleave": "onMouseLeave($event)" } }, providers: [ProviderService], viewQueries: [{ propertyName: "svgChart", first: true, predicate: ["svgChart"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<style>\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill .3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n</style>\n\n<div class=\"scheduler\">\n\n\t<button class=\"btn btn-warning\" type=\"button\" (mouseenter)=\"overBackwards()\" (mouseleave)=\"leftBackwards()\">Go Backwards</button>\n\t<button class=\"btn btn-success\" type=\"button\" (mouseenter)=\"overForward()\" (mouseleave)=\"leftForward()\">Go Forward</button>\n\n\t<button style=\"margin-left: 20px;\" class=\"btn btn-warning\" type=\"button\" (click)=\"zoomOut()\">Zoom Out</button>\n\t<button class=\"btn btn-success\" type=\"button\" (click)=\"zoomIn()\">Zoom In</button>\n\n\t<svg class=\"chart\" width=\"100%\" height=\"100%\" aria-labelledby=\"title desc\" role=\"img\" #svgChart>\n\t\t<title id=\"title\">Scheduler</title>\n\t\t<desc id=\"desc\">Scheduler</desc>\n\n\t\t<g class=\"year\">\n\t\t\t<ng-container *ngFor=\"let year of buildYears()\">\n\t\t\t\t<rect [attr.width]=\"(year.index_end - year.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"year.index_start * size_cell.width\"></rect>\n\t\t\t\t<svg [attr.width]=\"(year.index_end - year.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"year.index_start * size_cell.width\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" text-anchor=\"middle\">{{year.year}}</text>\n\t\t\t\t</svg>\n\t\t\t</ng-container>\n\t\t</g>\n\t\t<g class=\"month\">\n\t\t\t<ng-container *ngFor=\"let month of buildMonths()\">\n\t\t\t\t<rect [attr.width]=\"(month.index_end - month.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"month.index_start * size_cell.width\" [attr.y]=\"size_cell.height\"></rect>\n\t\t\t\t<svg [attr.width]=\"(month.index_end - month.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"month.index_start * size_cell.width\" [attr.y]=\"size_cell.height\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" text-anchor=\"middle\">{{month.month}}</text>\n\t\t\t\t</svg>\n\t\t\t</ng-container>\n\t\t</g>\n\t\t<g class=\"day\">\n\t\t\t<ng-container *ngFor=\"let day of buildDays()\">\n\t\t\t\t<rect [attr.width]=\"size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"day.index * size_cell.width\" [attr.y]=\"size_cell.height * 2\"></rect>\n\t\t\t\t<svg [attr.width]=\"size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"day.index * size_cell.width\" [attr.y]=\"size_cell.height * 2\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" text-anchor=\"middle\" [style.font-size.px]=\"[size_cell.width > 10 ? 12 : 6]\">{{day.day}}</text>\n\t\t\t\t</svg>\n\t\t\t</ng-container>\n\t\t</g>\n\n\n\t\t<!-- <g class=\"bar\">\n\t\t\t<rect width=\"40\" height=\"19\"></rect>\n\t\t\t<text x=\"45\" y=\"9.5\" dy=\".35em\">4 apples</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"80\" height=\"19\" y=\"20\"></rect>\n\t\t\t<text x=\"85\" y=\"28\" dy=\".35em\">8 bananas</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"150\" height=\"19\" y=\"40\"></rect>\n\t\t\t<text x=\"150\" y=\"48\" dy=\".35em\">15 kiwis</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"160\" height=\"19\" y=\"60\"></rect>\n\t\t\t<text x=\"161\" y=\"68\" dy=\".35em\">16 oranges</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"230\" height=\"19\" y=\"80\"></rect>\n\t\t\t<text x=\"235\" y=\"88\" dy=\".35em\">23 lemons</text>\n\t\t</g> -->\n\t</svg>\n</div>\n", styles: ["\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill .3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
166
|
+
}
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SchedulerComponent, decorators: [{
|
|
168
|
+
type: Component,
|
|
169
|
+
args: [{ providers: [ProviderService], selector: 'scheduler', template: "<style>\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill .3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke:black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n</style>\n\n<div class=\"scheduler\">\n\n\t<button class=\"btn btn-warning\" type=\"button\" (mouseenter)=\"overBackwards()\" (mouseleave)=\"leftBackwards()\">Go Backwards</button>\n\t<button class=\"btn btn-success\" type=\"button\" (mouseenter)=\"overForward()\" (mouseleave)=\"leftForward()\">Go Forward</button>\n\n\t<button style=\"margin-left: 20px;\" class=\"btn btn-warning\" type=\"button\" (click)=\"zoomOut()\">Zoom Out</button>\n\t<button class=\"btn btn-success\" type=\"button\" (click)=\"zoomIn()\">Zoom In</button>\n\n\t<svg class=\"chart\" width=\"100%\" height=\"100%\" aria-labelledby=\"title desc\" role=\"img\" #svgChart>\n\t\t<title id=\"title\">Scheduler</title>\n\t\t<desc id=\"desc\">Scheduler</desc>\n\n\t\t<g class=\"year\">\n\t\t\t<ng-container *ngFor=\"let year of buildYears()\">\n\t\t\t\t<rect [attr.width]=\"(year.index_end - year.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"year.index_start * size_cell.width\"></rect>\n\t\t\t\t<svg [attr.width]=\"(year.index_end - year.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"year.index_start * size_cell.width\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" text-anchor=\"middle\">{{year.year}}</text>\n\t\t\t\t</svg>\n\t\t\t</ng-container>\n\t\t</g>\n\t\t<g class=\"month\">\n\t\t\t<ng-container *ngFor=\"let month of buildMonths()\">\n\t\t\t\t<rect [attr.width]=\"(month.index_end - month.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"month.index_start * size_cell.width\" [attr.y]=\"size_cell.height\"></rect>\n\t\t\t\t<svg [attr.width]=\"(month.index_end - month.index_start) * size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"month.index_start * size_cell.width\" [attr.y]=\"size_cell.height\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" text-anchor=\"middle\">{{month.month}}</text>\n\t\t\t\t</svg>\n\t\t\t</ng-container>\n\t\t</g>\n\t\t<g class=\"day\">\n\t\t\t<ng-container *ngFor=\"let day of buildDays()\">\n\t\t\t\t<rect [attr.width]=\"size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"day.index * size_cell.width\" [attr.y]=\"size_cell.height * 2\"></rect>\n\t\t\t\t<svg [attr.width]=\"size_cell.width\" [attr.height]=\"size_cell.height\" [attr.x]=\"day.index * size_cell.width\" [attr.y]=\"size_cell.height * 2\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" text-anchor=\"middle\" [style.font-size.px]=\"[size_cell.width > 10 ? 12 : 6]\">{{day.day}}</text>\n\t\t\t\t</svg>\n\t\t\t</ng-container>\n\t\t</g>\n\n\n\t\t<!-- <g class=\"bar\">\n\t\t\t<rect width=\"40\" height=\"19\"></rect>\n\t\t\t<text x=\"45\" y=\"9.5\" dy=\".35em\">4 apples</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"80\" height=\"19\" y=\"20\"></rect>\n\t\t\t<text x=\"85\" y=\"28\" dy=\".35em\">8 bananas</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"150\" height=\"19\" y=\"40\"></rect>\n\t\t\t<text x=\"150\" y=\"48\" dy=\".35em\">15 kiwis</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"160\" height=\"19\" y=\"60\"></rect>\n\t\t\t<text x=\"161\" y=\"68\" dy=\".35em\">16 oranges</text>\n\t\t</g>\n\t\t<g class=\"bar\">\n\t\t\t<rect width=\"230\" height=\"19\" y=\"80\"></rect>\n\t\t\t<text x=\"235\" y=\"88\" dy=\".35em\">23 lemons</text>\n\t\t</g> -->\n\t</svg>\n</div>\n" }]
|
|
170
|
+
}], ctorParameters: function () { return [{ type: i1.ProviderService }]; }, propDecorators: { svgChart: [{
|
|
171
|
+
type: ViewChild,
|
|
172
|
+
args: ['svgChart', { static: true }]
|
|
173
|
+
}], onMouseup: [{
|
|
174
|
+
type: HostListener,
|
|
175
|
+
args: ['mouseup']
|
|
176
|
+
}], onMousedown: [{
|
|
177
|
+
type: HostListener,
|
|
178
|
+
args: ['mousedown', ['$event']]
|
|
179
|
+
}], onMousemove: [{
|
|
180
|
+
type: HostListener,
|
|
181
|
+
args: ['mousemove', ['$event']]
|
|
182
|
+
}], onMouseLeave: [{
|
|
183
|
+
type: HostListener,
|
|
184
|
+
args: ['mouseleave', ['$event']]
|
|
185
|
+
}] } });
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi93aWRnZXRzL3NjaGVkdWxlci9zY2hlZHVsZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBaUIsVUFBVSxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQVF2RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsYUFBYTtJQXVDaEM7SUFyQ3BCLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBRW5CLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUV2QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFdEIsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVqQixNQUFNLEdBQUc7UUFDUixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7S0FDTCxDQUFDO0lBRUYsUUFBUSxHQUFHO1FBQ1YsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsQ0FBQztLQUNULENBQUM7SUFFRixTQUFTLEdBQUc7UUFDWCxLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO0tBQ1Ys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VztRQUNWLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWE7UUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3RCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxhQUFhO1FBQ1osYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTztRQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFFRCxNQUFNO1FBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBL0xXLGtCQUFrQjs0RkFBbEIsa0JBQWtCLHFNQUxuQixDQUFDLGVBQWUsQ0FBQyxxS0NMN0IsNDFIQXVHQTs7NEZEN0ZhLGtCQUFrQjtrQkFOOUIsU0FBUztnQ0FDRSxDQUFDLGVBQWUsQ0FBQyxZQUNsQixXQUFXO3NHQXlDa0IsUUFBUTtzQkFBOUMsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQWlCWixTQUFTO3NCQUFqQyxZQUFZO3VCQUFDLFNBQVM7Z0JBSWdCLFdBQVc7c0JBQWpELFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtFLFdBQVc7c0JBQWpELFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJCRyxZQUFZO3NCQUFuRCxZQUFZO3VCQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlLCBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVzb2x2ZWlvLWNsYXNzJztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHNlbGVjdG9yOiAnc2NoZWR1bGVyJyxcblx0dGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHsgXG5cblx0dG9kYXkgPSBuZXcgRGF0ZSgpO1xuXG5cdG92ZXJfZm9yd2FyZCA9IGZhbHNlO1xuXHRvdmVyX2JhY2t3YXJkcyA9IGZhbHNlO1xuXHRcblx0bW91c2VEb3duID0gZmFsc2U7XG5cdG1vdXNlTGFzdEV2ZW50ID0gbnVsbDtcblxuXHR0aW1lcl9zdWIgPSBudWxsO1xuXG5cdG1vbnRocyA9IFtcblx0XHQnSmFuJyxcblx0XHQnRmViJyxcblx0XHQnTWFyJyxcblx0XHQnQXByJyxcblx0XHQnTWF5Jyxcblx0XHQnSnVuJyxcblx0XHQnSnVsJyxcblx0XHQnQXVnJyxcblx0XHQnU2VwJyxcblx0XHQnT2N0Jyxcblx0XHQnTm92Jyxcblx0XHQnRGVjJ1xuXHRdO1xuXG5cdHNpemVfc3ZnID0ge1xuXHRcdHdpZHRoOiAwLFxuXHRcdGhlaWdodDogMFxuXHR9O1xuXG5cdHNpemVfY2VsbCA9IHtcblx0XHR3aWR0aDogMzAsXG5cdFx0aGVpZ2h0OiAzMFxuXHR9O1xuXHRcblx0QFZpZXdDaGlsZCgnc3ZnQ2hhcnQnLCB7c3RhdGljOiB0cnVlfSkgc3ZnQ2hhcnQ6IEVsZW1lbnRSZWY7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfc2VydmljZXM6IFByb3ZpZGVyU2VydmljZSkge1xuXHRcdHN1cGVyKF9zZXJ2aWNlcyk7XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0dGhpcy5zaXplX3N2Zy53aWR0aCA9IHRoaXMuc3ZnQ2hhcnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcblx0XHR0aGlzLnNpemVfc3ZnLmhlaWdodCA9IHRoaXMuc3ZnQ2hhcnQubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAodGhpcy50aW1lcl9zdWIpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcl9zdWIpO1xuXHRcdH1cblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnKSBvbk1vdXNldXAoKSB7XG5cdFx0dGhpcy5tb3VzZURvd24gPSBmYWxzZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIG9uTW91c2Vkb3duKGV2ZW50KSB7XG5cdFx0dGhpcy5tb3VzZURvd24gPSB0cnVlO1xuXHRcdHRoaXMubW91c2VMYXN0RXZlbnQgPSBldmVudDtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZScsIFsnJGV2ZW50J10pIG9uTW91c2Vtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdFx0aWYgKHRoaXMubW91c2VEb3duKSB7XG5cblx0XHRcdGxldCBkYXlzQWRkID0gMDtcblxuXHRcdFx0aWYgKHRoaXMubW91c2VMYXN0RXZlbnQuY2xpZW50WCAtIGV2ZW50LmNsaWVudFggPiAxKSB7XG5cdFx0XHRcdGlmIChNYXRoLmZsb29yKCh0aGlzLm1vdXNlTGFzdEV2ZW50LmNsaWVudFggLSBldmVudC5jbGllbnRYKSAvIDE1KSA+IDApIHtcblx0XHRcdFx0XHRkYXlzQWRkID0gTWF0aC5mbG9vcigodGhpcy5tb3VzZUxhc3RFdmVudC5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCArICgoMzAgLSB0aGlzLnNpemVfY2VsbC53aWR0aCkgKiA1KSkgLyAyMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0ZGF5c0FkZCA9IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKHRoaXMubW91c2VMYXN0RXZlbnQuY2xpZW50WCAtIGV2ZW50LmNsaWVudFggPCAtMSkge1xuXHRcdFx0XHRpZiAoTWF0aC5mbG9vcigodGhpcy5tb3VzZUxhc3RFdmVudC5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgLyAxNSkgPCAwKSB7XG5cdFx0XHRcdFx0ZGF5c0FkZCA9IE1hdGguZmxvb3IoKHRoaXMubW91c2VMYXN0RXZlbnQuY2xpZW50WCAtIGV2ZW50LmNsaWVudFggLSAoKDMwIC0gdGhpcy5zaXplX2NlbGwud2lkdGgpICogNSkpIC8gMjApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGRheXNBZGQgPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRvZGF5ID0gbW9tZW50KHRoaXMudG9kYXkpLmFkZChkYXlzQWRkLCAnZGF5cycpLnRvRGF0ZSgpO1x0XHRcblx0XHRcdHRoaXMubW91c2VMYXN0RXZlbnQgPSBldmVudDtcblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSkgb25Nb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdFx0aWYgKHRoaXMubW91c2VEb3duKSB7XG5cdFx0XHR0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGJ1aWxkRGF5cygpIHtcblx0XHRsZXQgZGF5cyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmZsb29yKHRoaXMuc2l6ZV9zdmcud2lkdGggLyB0aGlzLnNpemVfY2VsbC53aWR0aCk7IGkrKykge1xuXHRcdFx0ZGF5cy5wdXNoKHtcblx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdGRheTogbW9tZW50KHRoaXMudG9kYXkpLmFkZChpLCAnZGF5cycpLnRvRGF0ZSgpLmdldERhdGUoKVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRheXM7XG5cdH1cblxuXHRidWlsZE1vbnRocygpIHtcblx0XHRsZXQgbW9udGhzID0gW3tcblx0XHRcdGluZGV4X3N0YXJ0OiAwLFxuXHRcdFx0aW5kZXhfZW5kOiBudWxsLFxuXHRcdFx0bW9udGg6IHRoaXMubW9udGhzW3RoaXMudG9kYXkuZ2V0TW9udGgoKV1cblx0XHR9XTtcblxuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgTWF0aC5mbG9vcih0aGlzLnNpemVfc3ZnLndpZHRoIC8gdGhpcy5zaXplX2NlbGwud2lkdGgpOyBpKyspIHtcblx0XHRcdGlmIChtb21lbnQodGhpcy50b2RheSkuYWRkKGksICdkYXlzJykudG9EYXRlKCkuZ2V0TW9udGgoKSAhPT0gbW9tZW50KHRoaXMudG9kYXkpLmFkZChpIC0gMSwgJ2RheXMnKS50b0RhdGUoKS5nZXRNb250aCgpKSB7XG5cdFx0XHRcdG1vbnRoc1ttb250aHMubGVuZ3RoIC0gMV0uaW5kZXhfZW5kID0gaTtcblx0XHRcdFx0bW9udGhzLnB1c2goe1xuXHRcdFx0XHRcdGluZGV4X3N0YXJ0OiBpLFxuXHRcdFx0XHRcdGluZGV4X2VuZDogbnVsbCxcblx0XHRcdFx0XHRtb250aDogdGhpcy5tb250aHNbbW9tZW50KHRoaXMudG9kYXkpLmFkZChpLCAnZGF5cycpLnRvRGF0ZSgpLmdldE1vbnRoKCldXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1vbnRoc1ttb250aHMubGVuZ3RoIC0gMV0uaW5kZXhfZW5kID0gTWF0aC5mbG9vcih0aGlzLnNpemVfc3ZnLndpZHRoIC8gdGhpcy5zaXplX2NlbGwud2lkdGgpO1xuXG5cdFx0cmV0dXJuIG1vbnRocztcblx0fVxuXG5cdGJ1aWxkWWVhcnMoKSB7XG5cdFx0bGV0IHllYXJzID0gW3tcblx0XHRcdGluZGV4X3N0YXJ0OiAwLFxuXHRcdFx0aW5kZXhfZW5kOiBudWxsLFxuXHRcdFx0eWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpXG5cdFx0fV07XG5cblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IE1hdGguZmxvb3IodGhpcy5zaXplX3N2Zy53aWR0aCAvIHRoaXMuc2l6ZV9jZWxsLndpZHRoKTsgaSsrKSB7XG5cdFx0XHRpZiAobW9tZW50KHRoaXMudG9kYXkpLmFkZChpLCAnZGF5cycpLnRvRGF0ZSgpLmdldEZ1bGxZZWFyKCkgIT09IG1vbWVudCh0aGlzLnRvZGF5KS5hZGQoaSAtIDEsICdkYXlzJykudG9EYXRlKCkuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0XHR5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXS5pbmRleF9lbmQgPSBpO1xuXHRcdFx0XHR5ZWFycy5wdXNoKHtcblx0XHRcdFx0XHRpbmRleF9zdGFydDogaSxcblx0XHRcdFx0XHRpbmRleF9lbmQ6IG51bGwsXG5cdFx0XHRcdFx0eWVhcjogbW9tZW50KHRoaXMudG9kYXkpLmFkZChpLCAnZGF5cycpLnRvRGF0ZSgpLmdldEZ1bGxZZWFyKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0eWVhcnNbeWVhcnMubGVuZ3RoIC0gMV0uaW5kZXhfZW5kID0gTWF0aC5mbG9vcih0aGlzLnNpemVfc3ZnLndpZHRoIC8gdGhpcy5zaXplX2NlbGwud2lkdGgpO1xuXG5cdFx0cmV0dXJuIHllYXJzO1xuXHR9XG5cblx0ZGVjcmVtZW50VG9kYXkoKSB7XG5cdFx0dGhpcy50b2RheSA9IG1vbWVudCh0aGlzLnRvZGF5KS5zdWJ0cmFjdCgxLCAnZGF5cycpLnRvRGF0ZSgpO1xuXHR9XG5cblx0aW5jcmVtZW50VG9kYXkoKSB7XG5cdFx0dGhpcy50b2RheSA9IG1vbWVudCh0aGlzLnRvZGF5KS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKTtcblx0fVxuXG5cdG92ZXJGb3J3YXJkKCkge1xuXHRcdHRoaXMudGltZXJfc3ViID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5pbmNyZW1lbnRUb2RheSgpXG5cdFx0fSwgNTApO1xuXHR9XG5cblx0bGVmdEZvcndhcmQoKSB7XG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyX3N1Yik7XG5cdH1cblxuXHRvdmVyQmFja3dhcmRzKCkge1xuXHRcdHRoaXMudGltZXJfc3ViID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0dGhpcy5kZWNyZW1lbnRUb2RheSgpXG5cdFx0fSwgNTApO1xuXHR9XG5cblx0bGVmdEJhY2t3YXJkcygpIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMudGltZXJfc3ViKTtcblx0fVxuXG5cdHpvb21PdXQoKSB7XG5cdFx0aWYgKHRoaXMuc2l6ZV9jZWxsLndpZHRoID4gMTApIHtcblx0XHRcdHRoaXMuc2l6ZV9jZWxsLndpZHRoIC09IDEwO1xuXHRcdH1cblx0fVxuXG5cdHpvb21JbigpIHtcblx0XHR0aGlzLnNpemVfY2VsbC53aWR0aCArPSAxMDtcblx0fVxufVxuIiwiPHN0eWxlPlxuXHQuYmFyIHtcblx0XHRmaWxsOiByZWQ7IC8qIGNoYW5nZXMgdGhlIGJhY2tncm91bmQgKi9cblx0XHRoZWlnaHQ6IDIxcHg7XG5cdFx0dHJhbnNpdGlvbjogZmlsbCAuM3MgZWFzZTtcblx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0Zm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjtcblx0fVxuXG5cdC5iYXIgdGV4dCB7XG5cdFx0Y29sb3I6IGJsYWNrO1xuXHR9XG5cblx0LmJhcjpob3Zlcixcblx0LmJhcjpmb2N1cyB7XG5cdFx0ZmlsbDogYmxhY2s7XG5cdH1cblxuXHQuYmFyOmhvdmVyIHRleHQsXG5cdC5iYXI6Zm9jdXMgdGV4dCB7XG5cdFx0ZmlsbDogcmVkO1xuXHR9XG5cblx0LnllYXIge1xuXHRcdHN0cm9rZTpibGFjaztcblx0XHRmaWxsOiB3aGl0ZTtcblx0fVxuXG5cdC5tb250aCB7XG5cdFx0c3Ryb2tlOmJsYWNrO1xuXHRcdGZpbGw6IHdoaXRlO1xuXHR9XG5cblx0LmRheSB7XG5cdFx0c3Ryb2tlOmJsYWNrO1xuXHRcdGZpbGw6IHdoaXRlO1xuXHR9XG5cblx0LnNtYWxsVGV4dCB7XG5cdFx0Zm9udC1zaXplOiA0cHg7XG5cdH1cbjwvc3R5bGU+XG5cbjxkaXYgY2xhc3M9XCJzY2hlZHVsZXJcIj5cblxuXHQ8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCIgdHlwZT1cImJ1dHRvblwiIChtb3VzZWVudGVyKT1cIm92ZXJCYWNrd2FyZHMoKVwiIChtb3VzZWxlYXZlKT1cImxlZnRCYWNrd2FyZHMoKVwiPkdvIEJhY2t3YXJkczwvYnV0dG9uPlxuXHQ8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgdHlwZT1cImJ1dHRvblwiIChtb3VzZWVudGVyKT1cIm92ZXJGb3J3YXJkKClcIiAobW91c2VsZWF2ZSk9XCJsZWZ0Rm9yd2FyZCgpXCI+R28gRm9yd2FyZDwvYnV0dG9uPlxuXG5cdDxidXR0b24gc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiem9vbU91dCgpXCI+Wm9vbSBPdXQ8L2J1dHRvbj5cblx0PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiem9vbUluKClcIj5ab29tIEluPC9idXR0b24+XG5cblx0PHN2ZyBjbGFzcz1cImNoYXJ0XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGFyaWEtbGFiZWxsZWRieT1cInRpdGxlIGRlc2NcIiByb2xlPVwiaW1nXCIgI3N2Z0NoYXJ0PlxuXHRcdDx0aXRsZSBpZD1cInRpdGxlXCI+U2NoZWR1bGVyPC90aXRsZT5cblx0XHQ8ZGVzYyBpZD1cImRlc2NcIj5TY2hlZHVsZXI8L2Rlc2M+XG5cblx0XHQ8ZyBjbGFzcz1cInllYXJcIj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHllYXIgb2YgYnVpbGRZZWFycygpXCI+XG5cdFx0XHRcdDxyZWN0IFthdHRyLndpZHRoXT1cIih5ZWFyLmluZGV4X2VuZCAtIHllYXIuaW5kZXhfc3RhcnQpICogc2l6ZV9jZWxsLndpZHRoXCIgW2F0dHIuaGVpZ2h0XT1cInNpemVfY2VsbC5oZWlnaHRcIiBbYXR0ci54XT1cInllYXIuaW5kZXhfc3RhcnQgKiBzaXplX2NlbGwud2lkdGhcIj48L3JlY3Q+XG5cdFx0XHRcdDxzdmcgW2F0dHIud2lkdGhdPVwiKHllYXIuaW5kZXhfZW5kIC0geWVhci5pbmRleF9zdGFydCkgKiBzaXplX2NlbGwud2lkdGhcIiBbYXR0ci5oZWlnaHRdPVwic2l6ZV9jZWxsLmhlaWdodFwiIFthdHRyLnhdPVwieWVhci5pbmRleF9zdGFydCAqIHNpemVfY2VsbC53aWR0aFwiPlxuXHRcdFx0XHRcdDx0ZXh0IHg9XCI1MCVcIiB5PVwiNTAlXCIgYWxpZ25tZW50LWJhc2VsaW5lPVwibWlkZGxlXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj57e3llYXIueWVhcn19PC90ZXh0PlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDwvZz5cblx0XHQ8ZyBjbGFzcz1cIm1vbnRoXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtb250aCBvZiBidWlsZE1vbnRocygpXCI+XG5cdFx0XHRcdDxyZWN0IFthdHRyLndpZHRoXT1cIihtb250aC5pbmRleF9lbmQgLSBtb250aC5pbmRleF9zdGFydCkgKiBzaXplX2NlbGwud2lkdGhcIiBbYXR0ci5oZWlnaHRdPVwic2l6ZV9jZWxsLmhlaWdodFwiIFthdHRyLnhdPVwibW9udGguaW5kZXhfc3RhcnQgKiBzaXplX2NlbGwud2lkdGhcIiBbYXR0ci55XT1cInNpemVfY2VsbC5oZWlnaHRcIj48L3JlY3Q+XG5cdFx0XHRcdDxzdmcgW2F0dHIud2lkdGhdPVwiKG1vbnRoLmluZGV4X2VuZCAtIG1vbnRoLmluZGV4X3N0YXJ0KSAqIHNpemVfY2VsbC53aWR0aFwiIFthdHRyLmhlaWdodF09XCJzaXplX2NlbGwuaGVpZ2h0XCIgW2F0dHIueF09XCJtb250aC5pbmRleF9zdGFydCAqIHNpemVfY2VsbC53aWR0aFwiIFthdHRyLnldPVwic2l6ZV9jZWxsLmhlaWdodFwiPlxuXHRcdFx0XHRcdDx0ZXh0IHg9XCI1MCVcIiB5PVwiNTAlXCIgYWxpZ25tZW50LWJhc2VsaW5lPVwibWlkZGxlXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj57e21vbnRoLm1vbnRofX08L3RleHQ+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PC9nPlxuXHRcdDxnIGNsYXNzPVwiZGF5XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXkgb2YgYnVpbGREYXlzKClcIj5cblx0XHRcdFx0PHJlY3QgW2F0dHIud2lkdGhdPVwic2l6ZV9jZWxsLndpZHRoXCIgW2F0dHIuaGVpZ2h0XT1cInNpemVfY2VsbC5oZWlnaHRcIiBbYXR0ci54XT1cImRheS5pbmRleCAqIHNpemVfY2VsbC53aWR0aFwiIFthdHRyLnldPVwic2l6ZV9jZWxsLmhlaWdodCAqIDJcIj48L3JlY3Q+XG5cdFx0XHRcdDxzdmcgW2F0dHIud2lkdGhdPVwic2l6ZV9jZWxsLndpZHRoXCIgW2F0dHIuaGVpZ2h0XT1cInNpemVfY2VsbC5oZWlnaHRcIiBbYXR0ci54XT1cImRheS5pbmRleCAqIHNpemVfY2VsbC53aWR0aFwiIFthdHRyLnldPVwic2l6ZV9jZWxsLmhlaWdodCAqIDJcIj5cblx0XHRcdFx0XHQ8dGV4dCB4PVwiNTAlXCIgeT1cIjUwJVwiIGFsaWdubWVudC1iYXNlbGluZT1cIm1pZGRsZVwiIHRleHQtYW5jaG9yPVwibWlkZGxlXCIgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJbc2l6ZV9jZWxsLndpZHRoID4gMTAgPyAxMiA6IDZdXCI+e3tkYXkuZGF5fX08L3RleHQ+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PC9nPlxuXG5cblx0XHQ8IS0tIDxnIGNsYXNzPVwiYmFyXCI+XG5cdFx0XHQ8cmVjdCB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiMTlcIj48L3JlY3Q+XG5cdFx0XHQ8dGV4dCB4PVwiNDVcIiB5PVwiOS41XCIgZHk9XCIuMzVlbVwiPjQgYXBwbGVzPC90ZXh0PlxuXHRcdDwvZz5cblx0XHQ8ZyBjbGFzcz1cImJhclwiPlxuXHRcdFx0PHJlY3Qgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjE5XCIgeT1cIjIwXCI+PC9yZWN0PlxuXHRcdFx0PHRleHQgeD1cIjg1XCIgeT1cIjI4XCIgZHk9XCIuMzVlbVwiPjggYmFuYW5hczwvdGV4dD5cblx0XHQ8L2c+XG5cdFx0PGcgY2xhc3M9XCJiYXJcIj5cblx0XHRcdDxyZWN0IHdpZHRoPVwiMTUwXCIgaGVpZ2h0PVwiMTlcIiB5PVwiNDBcIj48L3JlY3Q+XG5cdFx0XHQ8dGV4dCB4PVwiMTUwXCIgeT1cIjQ4XCIgZHk9XCIuMzVlbVwiPjE1IGtpd2lzPC90ZXh0PlxuXHRcdDwvZz5cblx0XHQ8ZyBjbGFzcz1cImJhclwiPlxuXHRcdFx0PHJlY3Qgd2lkdGg9XCIxNjBcIiBoZWlnaHQ9XCIxOVwiIHk9XCI2MFwiPjwvcmVjdD5cblx0XHRcdDx0ZXh0IHg9XCIxNjFcIiB5PVwiNjhcIiBkeT1cIi4zNWVtXCI+MTYgb3JhbmdlczwvdGV4dD5cblx0XHQ8L2c+XG5cdFx0PGcgY2xhc3M9XCJiYXJcIj5cblx0XHRcdDxyZWN0IHdpZHRoPVwiMjMwXCIgaGVpZ2h0PVwiMTlcIiB5PVwiODBcIj48L3JlY3Q+XG5cdFx0XHQ8dGV4dCB4PVwiMjM1XCIgeT1cIjg4XCIgZHk9XCIuMzVlbVwiPjIzIGxlbW9uczwvdGV4dD5cblx0XHQ8L2c+IC0tPlxuXHQ8L3N2Zz5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import { RouterModule } from '@angular/router';
|
|
6
|
+
import { SchedulerComponent } from './scheduler.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class SchedulerModule {
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: SchedulerModule, declarations: [SchedulerComponent], imports: [NgbModule,
|
|
11
|
+
FormsModule,
|
|
12
|
+
CommonModule,
|
|
13
|
+
RouterModule], exports: [SchedulerComponent] });
|
|
14
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SchedulerModule, imports: [NgbModule,
|
|
15
|
+
FormsModule,
|
|
16
|
+
CommonModule,
|
|
17
|
+
RouterModule] });
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SchedulerModule, decorators: [{
|
|
20
|
+
type: NgModule,
|
|
21
|
+
args: [{
|
|
22
|
+
imports: [
|
|
23
|
+
NgbModule,
|
|
24
|
+
FormsModule,
|
|
25
|
+
CommonModule,
|
|
26
|
+
RouterModule
|
|
27
|
+
],
|
|
28
|
+
exports: [
|
|
29
|
+
SchedulerComponent
|
|
30
|
+
],
|
|
31
|
+
declarations: [
|
|
32
|
+
SchedulerComponent
|
|
33
|
+
],
|
|
34
|
+
providers: []
|
|
35
|
+
}]
|
|
36
|
+
}] });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi93aWRnZXRzL3NjaGVkdWxlci9zY2hlZHVsZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWlCM0QsTUFBTSxPQUFPLGVBQWU7d0dBQWYsZUFBZTt5R0FBZixlQUFlLGlCQUoxQixrQkFBa0IsYUFUbEIsU0FBUztZQUNULFdBQVc7WUFDWCxZQUFZO1lBQ1osWUFBWSxhQUdaLGtCQUFrQjt5R0FPUCxlQUFlLFlBYjFCLFNBQVM7WUFDVCxXQUFXO1lBQ1gsWUFBWTtZQUNaLFlBQVk7OzRGQVVELGVBQWU7a0JBZjNCLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFO3dCQUNSLFNBQVM7d0JBQ1QsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7cUJBQ1o7b0JBQ0QsT0FBTyxFQUFFO3dCQUNSLGtCQUFrQjtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNiLGtCQUFrQjtxQkFDbEI7b0JBQ0QsU0FBUyxFQUFFLEVBQUc7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHRcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHRcblxuaW1wb3J0IHsgU2NoZWR1bGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlZHVsZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRcdE5nYk1vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0Um91dGVyTW9kdWxlXG5cdF0sXG5cdGV4cG9ydHM6IFtcblx0XHRTY2hlZHVsZXJDb21wb25lbnRcblx0XSxcblx0ZGVjbGFyYXRpb25zOiBbXG5cdFx0U2NoZWR1bGVyQ29tcG9uZW50XG5cdF0sXG5cdHByb3ZpZGVyczogWyBdXG59KVxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlck1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, ChangeDetectorRef, Optional } from '@angular/core';
|
|
2
|
+
import { SortTableDirective } from './sort-table.directive';
|
|
3
|
+
import { merge } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./sort-table.directive";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
export class SortTableHeaderComponent {
|
|
8
|
+
_sort;
|
|
9
|
+
_arrowDirection = 0;
|
|
10
|
+
id;
|
|
11
|
+
arrowPosition = 'after';
|
|
12
|
+
start;
|
|
13
|
+
_rerenderSubscription;
|
|
14
|
+
disabled;
|
|
15
|
+
constructor(changeDetectorRef, _sort) {
|
|
16
|
+
this._sort = _sort;
|
|
17
|
+
if (!_sort) {
|
|
18
|
+
throw Error(`SortTableSortHeader must be placed within a parent element with the CTSortable directive.`);
|
|
19
|
+
}
|
|
20
|
+
this._rerenderSubscription = merge(_sort.sortChange, _sort._stateChanges).subscribe(() => {
|
|
21
|
+
if (this._isSorted()) {
|
|
22
|
+
this._updateArrowDirection();
|
|
23
|
+
}
|
|
24
|
+
changeDetectorRef.markForCheck();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
// console.log('Init Sort Header');
|
|
29
|
+
this._sort.register(this);
|
|
30
|
+
}
|
|
31
|
+
ngOnDestroy() {
|
|
32
|
+
this._sort.deregister(this);
|
|
33
|
+
this._rerenderSubscription.unsubscribe();
|
|
34
|
+
}
|
|
35
|
+
_isSorted() {
|
|
36
|
+
return this._sort.active === this.id;
|
|
37
|
+
}
|
|
38
|
+
_getSortDirection() {
|
|
39
|
+
return this._sort.direction;
|
|
40
|
+
}
|
|
41
|
+
_updateArrowDirection() {
|
|
42
|
+
this._arrowDirection = this._isSorted() ? this._sort.direction : (this.start || this._sort.start);
|
|
43
|
+
}
|
|
44
|
+
_isDisabled() {
|
|
45
|
+
return this._sort.disabled || this.disabled;
|
|
46
|
+
}
|
|
47
|
+
onClick(event) {
|
|
48
|
+
// console.log('Clicked on', this.id, event);
|
|
49
|
+
if (this._isDisabled()) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this._sort.sort(this);
|
|
53
|
+
}
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortTableHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SortTableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SortTableHeaderComponent, selector: "[sort-table-header]", inputs: { disabled: "disabled", id: ["sort-table-header", "id"], arrowPosition: "arrowPosition", start: "start" }, ngImport: i0, template: "<div (click)=\"onClick($event)\">\n <ng-content></ng-content>\n <i *ngIf=\"_isSorted() && _getSortDirection() === -1\" class=\"fa fa-arrow-down\" style=\"margin-left: 10px; font-size: 14px\"></i>\n <i *ngIf=\"_isSorted() && _getSortDirection() === 1\" class=\"fa fa-arrow-up\" style=\"margin-left: 10px; font-size: 14px\"></i>\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortTableHeaderComponent, decorators: [{
|
|
58
|
+
type: Component,
|
|
59
|
+
args: [{ selector: '[sort-table-header]', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['disabled'], template: "<div (click)=\"onClick($event)\">\n <ng-content></ng-content>\n <i *ngIf=\"_isSorted() && _getSortDirection() === -1\" class=\"fa fa-arrow-down\" style=\"margin-left: 10px; font-size: 14px\"></i>\n <i *ngIf=\"_isSorted() && _getSortDirection() === 1\" class=\"fa fa-arrow-up\" style=\"margin-left: 10px; font-size: 14px\"></i>\n</div>" }]
|
|
60
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SortTableDirective, decorators: [{
|
|
61
|
+
type: Optional
|
|
62
|
+
}] }]; }, propDecorators: { id: [{
|
|
63
|
+
type: Input,
|
|
64
|
+
args: ['sort-table-header']
|
|
65
|
+
}], arrowPosition: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], start: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], disabled: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}] } });
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC10YWJsZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvc29ydC10YWJsZS9zb3J0LXRhYmxlLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvd2lkZ2V0cy9zb3J0LXRhYmxlL3NvcnQtdGFibGUtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQXFCLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0ksT0FBTyxFQUErQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxLQUFLLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7O0FBeUIzQyxNQUFNLE9BQU8sd0JBQXdCO0lBUWlDO0lBUHJFLGVBQWUsR0FBc0IsQ0FBQyxDQUFDO0lBQ1gsRUFBRSxDQUFTO0lBQzlCLGFBQWEsR0FBdUIsT0FBTyxDQUFDO0lBQzVDLEtBQUssQ0FBb0I7SUFDbEMscUJBQXFCLENBQWU7SUFDM0IsUUFBUSxDQUFVO0lBRTNCLFlBQVksaUJBQW9DLEVBQXFCLEtBQXlCO1FBQXpCLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBRTdGLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWCxNQUFNLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO1NBQ3pHO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzthQUM3QjtZQUVELGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDUCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFNBQVM7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGlCQUFpQjtRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxxQkFBcUI7UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsV0FBVztRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQUs7UUFDWiw2Q0FBNkM7UUFFN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFFbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQzt3R0F2RFcsd0JBQXdCOzRGQUF4Qix3QkFBd0IsOEtDM0JyQyx5VkFJTTs7NEZEdUJPLHdCQUF3QjtrQkF2QnBDLFNBQVM7K0JBQ0MscUJBQXFCLGlCQVVoQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFVBQ3ZDLENBQUMsVUFBVSxDQUFDOzswQkFrQitCLFFBQVE7NENBTi9CLEVBQUU7c0JBQTdCLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUNqQixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uRGVzdHJveSwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZSwgU29ydERpcmVjdGlvblR5cGUsIFNvcnRUYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vc29ydC10YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdbc29ydC10YWJsZS1oZWFkZXJdJyxcblx0dGVtcGxhdGVVcmw6ICcuL3NvcnQtdGFibGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcblx0Ly8gaG9zdDoge1xuXHQvLyAgICcoY2xpY2spJzogJ19oYW5kbGVDbGljaygpJyxcblx0Ly8gICAnKG1vdXNlZW50ZXIpJzogJ19zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSh0cnVlKScsXG5cdC8vICAgJyhsb25ncHJlc3MpJzogJ19zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSh0cnVlKScsXG5cdC8vICAgJyhtb3VzZWxlYXZlKSc6ICdfc2V0SW5kaWNhdG9ySGludFZpc2libGUoZmFsc2UpJyxcblx0Ly8gICAnW2F0dHIuYXJpYS1zb3J0XSc6ICdfZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKScsXG5cdC8vICAgJ1tjbGFzcy5tYXQtc29ydC1oZWFkZXItZGlzYWJsZWRdJzogJ19pc0Rpc2FibGVkKCknLFxuXHQvLyB9LFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW5wdXRzOiBbJ2Rpc2FibGVkJ10sXG5cdC8vIGFuaW1hdGlvbnM6IFtcblx0Ly8gICBtYXRTb3J0QW5pbWF0aW9ucy5pbmRpY2F0b3IsXG5cdC8vICAgbWF0U29ydEFuaW1hdGlvbnMubGVmdFBvaW50ZXIsXG5cdC8vICAgbWF0U29ydEFuaW1hdGlvbnMucmlnaHRQb2ludGVyLFxuXHQvLyAgIG1hdFNvcnRBbmltYXRpb25zLmFycm93T3BhY2l0eSxcblx0Ly8gICBtYXRTb3J0QW5pbWF0aW9ucy5hcnJvd1Bvc2l0aW9uLFxuXHQvLyAgIG1hdFNvcnRBbmltYXRpb25zLmFsbG93Q2hpbGRyZW4sXG5cdC8vIF1cbn0pXG5leHBvcnQgY2xhc3MgU29ydFRhYmxlSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgU29ydGFibGUsIE9uRGVzdHJveSwgT25Jbml0IHtcblx0X2Fycm93RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uVHlwZSA9IDA7XG5cdEBJbnB1dCgnc29ydC10YWJsZS1oZWFkZXInKSBpZDogc3RyaW5nO1xuXHRASW5wdXQoKSBhcnJvd1Bvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgPSAnYWZ0ZXInO1xuXHRASW5wdXQoKSBzdGFydDogU29ydERpcmVjdGlvblR5cGU7XG5cdF9yZXJlbmRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXHRASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvcihjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBPcHRpb25hbCgpIHB1YmxpYyBfc29ydDogU29ydFRhYmxlRGlyZWN0aXZlKSB7XG5cblx0XHRpZiAoIV9zb3J0KSB7XG5cdFx0XHR0aHJvdyBFcnJvcihgU29ydFRhYmxlU29ydEhlYWRlciBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gYSBwYXJlbnQgZWxlbWVudCB3aXRoIHRoZSBDVFNvcnRhYmxlIGRpcmVjdGl2ZS5gKTtcblx0XHR9XG5cblx0XHR0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbiA9IG1lcmdlKF9zb3J0LnNvcnRDaGFuZ2UsIF9zb3J0Ll9zdGF0ZUNoYW5nZXMpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5faXNTb3J0ZWQoKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdC8vIGNvbnNvbGUubG9nKCdJbml0IFNvcnQgSGVhZGVyJyk7XG5cdFx0dGhpcy5fc29ydC5yZWdpc3Rlcih0aGlzKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMuX3NvcnQuZGVyZWdpc3Rlcih0aGlzKTtcblx0XHR0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHR9XG5cblx0X2lzU29ydGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9zb3J0LmFjdGl2ZSA9PT0gdGhpcy5pZDtcblx0fVxuXG5cdF9nZXRTb3J0RGlyZWN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zb3J0LmRpcmVjdGlvbjtcblx0fVxuXG5cdF91cGRhdGVBcnJvd0RpcmVjdGlvbigpIHtcblx0XHR0aGlzLl9hcnJvd0RpcmVjdGlvbiA9IHRoaXMuX2lzU29ydGVkKCkgPyB0aGlzLl9zb3J0LmRpcmVjdGlvbiA6ICh0aGlzLnN0YXJ0IHx8IHRoaXMuX3NvcnQuc3RhcnQpO1xuXHR9XG5cblx0X2lzRGlzYWJsZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZDtcblx0fVxuXG5cdG9uQ2xpY2soZXZlbnQpIHtcblx0XHQvLyBjb25zb2xlLmxvZygnQ2xpY2tlZCBvbicsIHRoaXMuaWQsIGV2ZW50KTtcblx0XHRcblx0XHRpZiAodGhpcy5faXNEaXNhYmxlZCgpKSB7IHJldHVybjsgfVxuXG5cdFx0dGhpcy5fc29ydC5zb3J0KHRoaXMpO1xuXHR9XG59IiwiPGRpdiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxpICpuZ0lmPVwiX2lzU29ydGVkKCkgJiYgX2dldFNvcnREaXJlY3Rpb24oKSA9PT0gLTFcIiBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHhcIj48L2k+XG4gICAgPGkgKm5nSWY9XCJfaXNTb3J0ZWQoKSAmJiBfZ2V0U29ydERpcmVjdGlvbigpID09PSAxXCIgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7IGZvbnQtc2l6ZTogMTRweFwiPjwvaT5cbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { SortTableDirective } from './sort-table.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./sort-table.directive";
|
|
5
|
+
export class SortTableNgForComponent {
|
|
6
|
+
_sort;
|
|
7
|
+
data = [];
|
|
8
|
+
dataChanged = new EventEmitter();
|
|
9
|
+
sortSub$ = null;
|
|
10
|
+
sortedData = [];
|
|
11
|
+
constructor(_sort) {
|
|
12
|
+
this._sort = _sort;
|
|
13
|
+
// console.log('NgFor Const');
|
|
14
|
+
if (!_sort) {
|
|
15
|
+
throw Error(`SortTableNgFor must be placed within a parent element with the CTSortable directive.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.sortSub$ = this._sort.getData().subscribe(data => {
|
|
20
|
+
this.sortedData = data;
|
|
21
|
+
this.dataChanged.emit(this.sortedData);
|
|
22
|
+
// console.log('Sorted Data', this.sortedData);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
ngOnChanges() {
|
|
26
|
+
// console.log('NgFor Changed', this.data);
|
|
27
|
+
this._sort.setData(this.data);
|
|
28
|
+
}
|
|
29
|
+
ngOnDestroy() {
|
|
30
|
+
this.sortSub$.unsubscribe();
|
|
31
|
+
}
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortTableNgForComponent, deps: [{ token: i1.SortTableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SortTableNgForComponent, selector: "[sort-table-ngfor]", inputs: { data: ["sort-table-ngfor", "data"] }, outputs: { dataChanged: "dataChanged" }, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortTableNgForComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{
|
|
38
|
+
selector: '[sort-table-ngfor]',
|
|
39
|
+
template: '<ng-content></ng-content>'
|
|
40
|
+
}]
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i1.SortTableDirective, decorators: [{
|
|
42
|
+
type: Optional
|
|
43
|
+
}] }]; }, propDecorators: { data: [{
|
|
44
|
+
type: Input,
|
|
45
|
+
args: ['sort-table-ngfor']
|
|
46
|
+
}], dataChanged: [{
|
|
47
|
+
type: Output
|
|
48
|
+
}] } });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC10YWJsZS1uZ2Zvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvd2lkZ2V0cy9zb3J0LXRhYmxlL3NvcnQtdGFibGUtbmdmb3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBTTVELE1BQU0sT0FBTyx1QkFBdUI7SUFPSjtJQU5KLElBQUksR0FBRyxFQUFFLENBQUM7SUFDM0IsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFFbEQsUUFBUSxHQUFpQixJQUFJLENBQUM7SUFDOUIsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUVoQixZQUErQixLQUF5QjtRQUF6QixVQUFLLEdBQUwsS0FBSyxDQUFvQjtRQUN2RCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNYLE1BQU0sS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7U0FDcEc7SUFDRixDQUFDO0lBRUQsUUFBUTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXZDLCtDQUErQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1YsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQzt3R0E5QlcsdUJBQXVCOzRGQUF2Qix1QkFBdUIsd0tBRnpCLDJCQUEyQjs7NEZBRXpCLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsMkJBQTJCO2lCQUNyQzs7MEJBUWEsUUFBUTs0Q0FOTSxJQUFJO3NCQUE5QixLQUFLO3VCQUFDLGtCQUFrQjtnQkFDZixXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3B0aW9uYWwsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNvcnRUYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vc29ydC10YWJsZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdbc29ydC10YWJsZS1uZ2Zvcl0nLFxuXHR0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nXG59KVxuZXhwb3J0IGNsYXNzIFNvcnRUYWJsZU5nRm9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cdEBJbnB1dCgnc29ydC10YWJsZS1uZ2ZvcicpIGRhdGEgPSBbXTtcblx0QE91dHB1dCgpIGRhdGFDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuXHRzb3J0U3ViJDogU3Vic2NyaXB0aW9uID0gbnVsbDtcblx0c29ydGVkRGF0YSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHB1YmxpYyBfc29ydDogU29ydFRhYmxlRGlyZWN0aXZlKSB7XG5cdFx0Ly8gY29uc29sZS5sb2coJ05nRm9yIENvbnN0Jyk7XG5cdFx0aWYgKCFfc29ydCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoYFNvcnRUYWJsZU5nRm9yIG11c3QgYmUgcGxhY2VkIHdpdGhpbiBhIHBhcmVudCBlbGVtZW50IHdpdGggdGhlIENUU29ydGFibGUgZGlyZWN0aXZlLmApO1xuXHRcdH1cblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuc29ydFN1YiQgPSB0aGlzLl9zb3J0LmdldERhdGEoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG5cdFx0XHR0aGlzLnNvcnRlZERhdGEgPSBkYXRhO1xuXHRcdFx0dGhpcy5kYXRhQ2hhbmdlZC5lbWl0KHRoaXMuc29ydGVkRGF0YSk7XG5cblx0XHRcdC8vIGNvbnNvbGUubG9nKCdTb3J0ZWQgRGF0YScsIHRoaXMuc29ydGVkRGF0YSk7XG5cdFx0fSk7XG5cdH1cblxuXHRuZ09uQ2hhbmdlcygpIHtcblx0XHQvLyBjb25zb2xlLmxvZygnTmdGb3IgQ2hhbmdlZCcsIHRoaXMuZGF0YSk7XG5cdFx0dGhpcy5fc29ydC5zZXREYXRhKHRoaXMuZGF0YSk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnNvcnRTdWIkLnVuc3Vic2NyaWJlKCk7XG5cdH1cbn0iXX0=
|