@firestitch/list 13.0.3 → 13.0.5
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/app/classes/actions-controller.d.ts +20 -20
- package/app/classes/columns-controller.d.ts +71 -71
- package/app/classes/data-controller.d.ts +91 -91
- package/app/classes/external-params-controller.d.ts +32 -32
- package/app/classes/index.d.ts +2 -2
- package/app/classes/list-controller.d.ts +191 -191
- package/app/classes/pagination-controller.d.ts +198 -198
- package/app/classes/persistance-controller.d.ts +10 -10
- package/app/classes/reorder-controller.d.ts +68 -68
- package/app/classes/selection-controller.d.ts +155 -155
- package/app/classes/sorting-controller.d.ts +65 -65
- package/app/components/body/body.component.d.ts +28 -28
- package/app/components/body/row/actions/actions.component.d.ts +36 -36
- package/app/components/body/row/cell/cell.component.d.ts +22 -22
- package/app/components/body/row/inline-action/inline-action.component.d.ts +13 -13
- package/app/components/body/row/menu-action/menu-action.component.d.ts +20 -20
- package/app/components/body/row/row.component.d.ts +85 -85
- package/app/components/customize-cols/customize-cols.component.d.ts +17 -17
- package/app/components/footer/footer-row/footer-cell/footer-cell.component.d.ts +7 -7
- package/app/components/footer/footer-row/footer-row.component.d.ts +14 -14
- package/app/components/footer/footer.component.d.ts +15 -15
- package/app/components/head/head-cell/head-cell.component.d.ts +14 -14
- package/app/components/head/head.component.d.ts +49 -49
- package/app/components/list/list.component.d.ts +128 -128
- package/app/components/loader/loader.component.d.ts +14 -14
- package/app/components/manage-saved-filters/manage-saved-filters.component.d.ts +13 -13
- package/app/components/pagination/pagination.component.d.ts +14 -14
- package/app/components/saved-filters/saved-filters.component.d.ts +15 -15
- package/app/components/status/status.component.d.ts +21 -21
- package/app/directives/cell/cell.directive.d.ts +8 -8
- package/app/directives/column/column.directive.d.ts +37 -33
- package/app/directives/content/content.directive.d.ts +5 -5
- package/app/directives/content-init/content-init.directive.d.ts +9 -9
- package/app/directives/draggable-list/draggable-list.directive.d.ts +95 -95
- package/app/directives/draggable-row/draggable-row.directive.d.ts +23 -23
- package/app/directives/empty-state/empty-state.directive.d.ts +5 -5
- package/app/directives/footer/footer.directive.d.ts +8 -8
- package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +10 -10
- package/app/directives/group-footer/group-footer.directive.d.ts +6 -6
- package/app/directives/group-header/group-header.directive.d.ts +6 -6
- package/app/directives/header/header.directive.d.ts +8 -8
- package/app/directives/heading/heading.directive.d.ts +5 -5
- package/app/directives/heading-container/heading-container.directive.d.ts +5 -5
- package/app/directives/index.d.ts +3 -3
- package/app/directives/subheading/subheading.directive.d.ts +5 -5
- package/app/enums/button-type.enum.d.ts +7 -7
- package/app/enums/page-change-type.enum.d.ts +4 -4
- package/app/enums/pagination-strategy.enum.d.ts +5 -5
- package/app/enums/row-type.enum.d.ts +6 -6
- package/app/enums/state.enum.d.ts +9 -9
- package/app/fs-list.module.d.ts +60 -60
- package/app/fs-list.providers.d.ts +3 -3
- package/app/interfaces/cellconfig.interface.d.ts +5 -5
- package/app/interfaces/column-config.interface.d.ts +2 -2
- package/app/interfaces/draggable-list.interface.d.ts +7 -7
- package/app/interfaces/external-params.interface.d.ts +13 -13
- package/app/interfaces/index.d.ts +4 -4
- package/app/interfaces/listconfig.interface.d.ts +247 -247
- package/app/interfaces/pagination-state.interface.d.ts +9 -9
- package/app/interfaces/pagination.interface.d.ts +13 -13
- package/app/interfaces/sorting-change-event.interface.d.ts +4 -4
- package/app/models/column-async-attribute.d.ts +5 -5
- package/app/models/column-attributes.d.ts +39 -39
- package/app/models/column.model.d.ts +61 -60
- package/app/models/row/base-row.d.ts +13 -13
- package/app/models/row/child-row.d.ts +12 -12
- package/app/models/row/group-footer-row.d.ts +10 -10
- package/app/models/row/group-row.d.ts +16 -16
- package/app/models/row/simple-row.d.ts +5 -5
- package/app/models/row-action.model.d.ts +29 -29
- package/app/models/row.d.ts +34 -34
- package/app/models/styleConfig.model.d.ts +31 -31
- package/app/pipes/action-label.d.ts +8 -8
- package/app/pipes/index.d.ts +1 -1
- package/app/services/group-expand-notifier.service.d.ts +11 -11
- package/{esm2015/app/classes/actions-controller.js → esm2020/app/classes/actions-controller.mjs} +55 -55
- package/{esm2015/app/classes/columns-controller.js → esm2020/app/classes/columns-controller.mjs} +205 -205
- package/esm2020/app/classes/data-controller.mjs +367 -0
- package/esm2020/app/classes/external-params-controller.mjs +147 -0
- package/{esm2015/app/classes/index.js → esm2020/app/classes/index.mjs} +3 -3
- package/esm2020/app/classes/list-controller.mjs +752 -0
- package/{esm2015/app/classes/pagination-controller.js → esm2020/app/classes/pagination-controller.mjs} +478 -479
- package/{esm2015/app/classes/persistance-controller.js → esm2020/app/classes/persistance-controller.mjs} +19 -19
- package/esm2020/app/classes/reorder-controller.mjs +182 -0
- package/esm2020/app/classes/selection-controller.mjs +468 -0
- package/{esm2015/app/classes/sorting-controller.js → esm2020/app/classes/sorting-controller.mjs} +183 -183
- package/esm2020/app/components/body/body.component.mjs +64 -0
- package/esm2020/app/components/body/row/actions/actions.component.mjs +97 -0
- package/esm2020/app/components/body/row/cell/cell.component.mjs +107 -0
- package/esm2020/app/components/body/row/inline-action/inline-action.component.mjs +33 -0
- package/esm2020/app/components/body/row/menu-action/menu-action.component.mjs +46 -0
- package/esm2020/app/components/body/row/row.component.mjs +323 -0
- package/esm2020/app/components/customize-cols/customize-cols.component.mjs +68 -0
- package/esm2020/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +16 -0
- package/esm2020/app/components/footer/footer-row/footer-row.component.mjs +28 -0
- package/esm2020/app/components/footer/footer.component.mjs +31 -0
- package/esm2020/app/components/head/head-cell/head-cell.component.mjs +29 -0
- package/esm2020/app/components/head/head.component.mjs +103 -0
- package/esm2020/app/components/list/list.component.mjs +391 -0
- package/esm2020/app/components/loader/loader.component.mjs +40 -0
- package/esm2020/app/components/manage-saved-filters/manage-saved-filters.component.mjs +76 -0
- package/esm2020/app/components/pagination/pagination.component.mjs +37 -0
- package/esm2020/app/components/saved-filters/saved-filters.component.mjs +29 -0
- package/esm2020/app/components/status/status.component.mjs +66 -0
- package/{esm2015/app/directives/cell/cell.directive.js → esm2020/app/directives/cell/cell.directive.mjs} +18 -18
- package/esm2020/app/directives/column/column.directive.mjs +121 -0
- package/{esm2015/app/directives/content/content.directive.js → esm2020/app/directives/content/content.directive.mjs} +13 -13
- package/{esm2015/app/directives/content-init/content-init.directive.js → esm2020/app/directives/content-init/content-init.directive.mjs} +22 -22
- package/esm2020/app/directives/draggable-list/draggable-list.directive.mjs +328 -0
- package/esm2020/app/directives/draggable-row/draggable-row.directive.mjs +78 -0
- package/{esm2015/app/directives/empty-state/empty-state.directive.js → esm2020/app/directives/empty-state/empty-state.directive.mjs} +13 -13
- package/{esm2015/app/directives/footer/footer.directive.js → esm2020/app/directives/footer/footer.directive.mjs} +18 -18
- package/{esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js → esm2020/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs} +26 -26
- package/{esm2015/app/directives/group-footer/group-footer.directive.js → esm2020/app/directives/group-footer/group-footer.directive.mjs} +14 -14
- package/{esm2015/app/directives/group-header/group-header.directive.js → esm2020/app/directives/group-header/group-header.directive.mjs} +14 -14
- package/{esm2015/app/directives/header/header.directive.js → esm2020/app/directives/header/header.directive.mjs} +18 -18
- package/{esm2015/app/directives/heading/heading.directive.js → esm2020/app/directives/heading/heading.directive.mjs} +13 -13
- package/{esm2015/app/directives/heading-container/heading-container.directive.js → esm2020/app/directives/heading-container/heading-container.directive.mjs} +13 -13
- package/{esm2015/app/directives/index.js → esm2020/app/directives/index.mjs} +4 -4
- package/{esm2015/app/directives/subheading/subheading.directive.js → esm2020/app/directives/subheading/subheading.directive.mjs} +13 -13
- package/{esm2015/app/enums/button-type.enum.js → esm2020/app/enums/button-type.enum.mjs} +9 -9
- package/{esm2015/app/enums/page-change-type.enum.js → esm2020/app/enums/page-change-type.enum.mjs} +6 -6
- package/{esm2015/app/enums/pagination-strategy.enum.js → esm2020/app/enums/pagination-strategy.enum.mjs} +7 -7
- package/{esm2015/app/enums/row-type.enum.js → esm2020/app/enums/row-type.enum.mjs} +7 -7
- package/{esm2015/app/enums/state.enum.js → esm2020/app/enums/state.enum.mjs} +11 -11
- package/{esm2015/app/fs-list.module.js → esm2020/app/fs-list.module.mjs} +246 -246
- package/{esm2015/app/fs-list.providers.js → esm2020/app/fs-list.providers.mjs} +4 -4
- package/{esm2015/app/interfaces/cellconfig.interface.js → esm2020/app/interfaces/cellconfig.interface.mjs} +2 -2
- package/{esm2015/app/interfaces/column-config.interface.js → esm2020/app/interfaces/column-config.interface.mjs} +1 -1
- package/{esm2015/app/interfaces/draggable-list.interface.js → esm2020/app/interfaces/draggable-list.interface.mjs} +2 -2
- package/esm2020/app/interfaces/external-params.interface.mjs +2 -0
- package/{esm2015/app/interfaces/index.js → esm2020/app/interfaces/index.mjs} +5 -5
- package/{esm2015/app/interfaces/listconfig.interface.js → esm2020/app/interfaces/listconfig.interface.mjs} +1 -1
- package/{esm2015/app/interfaces/pagination-state.interface.js → esm2020/app/interfaces/pagination-state.interface.mjs} +1 -1
- package/esm2020/app/interfaces/pagination.interface.mjs +2 -0
- package/{esm2015/app/interfaces/sorting-change-event.interface.js → esm2020/app/interfaces/sorting-change-event.interface.mjs} +2 -2
- package/{esm2015/app/models/column-async-attribute.js → esm2020/app/models/column-async-attribute.mjs} +13 -13
- package/esm2020/app/models/column-attributes.mjs +132 -0
- package/esm2020/app/models/column.model.mjs +164 -0
- package/{esm2015/app/models/row/base-row.js → esm2020/app/models/row/base-row.mjs} +23 -23
- package/{esm2015/app/models/row/child-row.js → esm2020/app/models/row/child-row.mjs} +28 -28
- package/{esm2015/app/models/row/group-footer-row.js → esm2020/app/models/row/group-footer-row.mjs} +20 -20
- package/{esm2015/app/models/row/group-row.js → esm2020/app/models/row/group-row.mjs} +44 -44
- package/{esm2015/app/models/row/simple-row.js → esm2020/app/models/row/simple-row.mjs} +10 -10
- package/esm2020/app/models/row-action.model.mjs +90 -0
- package/{esm2015/app/models/row.js → esm2020/app/models/row.mjs} +88 -88
- package/{esm2015/app/models/styleConfig.model.js → esm2020/app/models/styleConfig.model.mjs} +75 -75
- package/{esm2015/app/pipes/action-label.js → esm2020/app/pipes/action-label.mjs} +17 -17
- package/{esm2015/app/pipes/index.js → esm2020/app/pipes/index.mjs} +1 -1
- package/{esm2015/app/services/group-expand-notifier.service.js → esm2020/app/services/group-expand-notifier.service.mjs} +26 -26
- package/{esm2015/firestitch-list.js → esm2020/firestitch-list.mjs} +4 -4
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +45 -45
- package/fesm2015/{firestitch-list.js → firestitch-list.mjs} +5739 -5805
- package/fesm2015/firestitch-list.mjs.map +1 -0
- package/fesm2020/firestitch-list.mjs +5871 -0
- package/fesm2020/firestitch-list.mjs.map +1 -0
- package/firestitch-list.d.ts +5 -5
- package/package.json +20 -7
- package/public_api.d.ts +41 -41
- package/bundles/firestitch-list.umd.js +0 -7218
- package/bundles/firestitch-list.umd.js.map +0 -1
- package/esm2015/app/classes/data-controller.js +0 -365
- package/esm2015/app/classes/external-params-controller.js +0 -147
- package/esm2015/app/classes/list-controller.js +0 -754
- package/esm2015/app/classes/reorder-controller.js +0 -183
- package/esm2015/app/classes/selection-controller.js +0 -468
- package/esm2015/app/components/body/body.component.js +0 -69
- package/esm2015/app/components/body/row/actions/actions.component.js +0 -102
- package/esm2015/app/components/body/row/cell/cell.component.js +0 -113
- package/esm2015/app/components/body/row/inline-action/inline-action.component.js +0 -37
- package/esm2015/app/components/body/row/menu-action/menu-action.component.js +0 -50
- package/esm2015/app/components/body/row/row.component.js +0 -330
- package/esm2015/app/components/customize-cols/customize-cols.component.js +0 -72
- package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +0 -20
- package/esm2015/app/components/footer/footer-row/footer-row.component.js +0 -33
- package/esm2015/app/components/footer/footer.component.js +0 -36
- package/esm2015/app/components/head/head-cell/head-cell.component.js +0 -34
- package/esm2015/app/components/head/head.component.js +0 -108
- package/esm2015/app/components/list/list.component.js +0 -397
- package/esm2015/app/components/loader/loader.component.js +0 -45
- package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +0 -79
- package/esm2015/app/components/pagination/pagination.component.js +0 -42
- package/esm2015/app/components/saved-filters/saved-filters.component.js +0 -32
- package/esm2015/app/components/status/status.component.js +0 -72
- package/esm2015/app/directives/column/column.directive.js +0 -112
- package/esm2015/app/directives/draggable-list/draggable-list.directive.js +0 -330
- package/esm2015/app/directives/draggable-row/draggable-row.directive.js +0 -79
- package/esm2015/app/interfaces/external-params.interface.js +0 -2
- package/esm2015/app/interfaces/pagination.interface.js +0 -2
- package/esm2015/app/models/column-attributes.js +0 -131
- package/esm2015/app/models/column.model.js +0 -163
- package/esm2015/app/models/row-action.model.js +0 -90
- package/fesm2015/firestitch-list.js.map +0 -1
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Directive, ElementRef, Input, NgZone, Renderer2 } from '@angular/core';
|
|
2
|
+
import { Observable, Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { ReorderController, ReorderStrategy } from '../../classes/reorder-controller';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../classes/reorder-controller";
|
|
7
|
+
export class FsListDraggableListDirective {
|
|
8
|
+
constructor(_cdRef, _zone, _containerElement, _reorderController, _renderer) {
|
|
9
|
+
this._cdRef = _cdRef;
|
|
10
|
+
this._zone = _zone;
|
|
11
|
+
this._containerElement = _containerElement;
|
|
12
|
+
this._reorderController = _reorderController;
|
|
13
|
+
this._renderer = _renderer;
|
|
14
|
+
// Handlers
|
|
15
|
+
this._dragToHandler = this.dragTo.bind(this);
|
|
16
|
+
this._dragEndHandler = this.dragEnd.bind(this);
|
|
17
|
+
this._windowTouchMoveHandler = () => { };
|
|
18
|
+
this._dragInProgress = false;
|
|
19
|
+
this._dragStart$ = new Subject();
|
|
20
|
+
this._dragEnd$ = new Subject();
|
|
21
|
+
this._draggableChildrenDirectives = [];
|
|
22
|
+
this._selectedRowsDirectives = [];
|
|
23
|
+
this._destroy$ = new Subject();
|
|
24
|
+
}
|
|
25
|
+
get dragStart$() {
|
|
26
|
+
return this._dragStart$.pipe(takeUntil(this._destroy$));
|
|
27
|
+
}
|
|
28
|
+
get dragEnd$() {
|
|
29
|
+
return this._dragEnd$.pipe(takeUntil(this._destroy$));
|
|
30
|
+
}
|
|
31
|
+
get draggableItem() {
|
|
32
|
+
return this._rows[this._draggableElementIndex];
|
|
33
|
+
}
|
|
34
|
+
get _isMultipleDrag() {
|
|
35
|
+
return this._reorderController.multiple && this._selectedRowsDirectives.length > 1;
|
|
36
|
+
}
|
|
37
|
+
addDraggableDirective(dir) {
|
|
38
|
+
this._draggableChildrenDirectives.push(dir);
|
|
39
|
+
}
|
|
40
|
+
removeDraggableDirective(dir) {
|
|
41
|
+
const idx = this._draggableChildrenDirectives.indexOf(dir);
|
|
42
|
+
if (idx !== -1) {
|
|
43
|
+
this._draggableChildrenDirectives.splice(idx, 1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Prepare draggable elements and add events
|
|
48
|
+
*
|
|
49
|
+
* @param draggableElement
|
|
50
|
+
*/
|
|
51
|
+
dragStart(draggableElement) {
|
|
52
|
+
if (this._dragInProgress) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (this._reorderController.startCallback
|
|
56
|
+
&& this._reorderController.strategy === ReorderStrategy.Always) {
|
|
57
|
+
this._reorderController.startCallback();
|
|
58
|
+
}
|
|
59
|
+
this._dragInProgress = true;
|
|
60
|
+
window.document.body.classList.add('reorder-in-progress');
|
|
61
|
+
this._draggableElement = draggableElement;
|
|
62
|
+
this._detectSelectedRows();
|
|
63
|
+
this.prepareElements();
|
|
64
|
+
this.initDraggableElement();
|
|
65
|
+
this._draggableElementStartIndex = this._draggableElementIndex;
|
|
66
|
+
this._draggableElement.classList.add('draggable-elem');
|
|
67
|
+
this._zone.runOutsideAngular(() => {
|
|
68
|
+
window.addEventListener('touchmove', this._windowTouchMoveHandler, { passive: true });
|
|
69
|
+
window.document.addEventListener('mousemove', this._dragToHandler, { passive: true });
|
|
70
|
+
window.document.addEventListener('touchmove', this._dragToHandler, { passive: false });
|
|
71
|
+
});
|
|
72
|
+
window.document.addEventListener('mouseup', this._dragEndHandler);
|
|
73
|
+
window.document.addEventListener('touchend', this._dragEndHandler);
|
|
74
|
+
window.document.addEventListener('touchcancel', this._dragEndHandler);
|
|
75
|
+
this._dragStart$.next();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Move draggable elements and swap items
|
|
79
|
+
*
|
|
80
|
+
* @param event
|
|
81
|
+
*/
|
|
82
|
+
dragTo(event) {
|
|
83
|
+
this.touchFix(event);
|
|
84
|
+
const elemIndex = this.lookupElementUnder(event);
|
|
85
|
+
const targetRow = this._rows[elemIndex];
|
|
86
|
+
if (this._multipleDraggableElementPreview) {
|
|
87
|
+
this._multipleDraggableElementPreview.style.left = `${event.clientX}px`;
|
|
88
|
+
this._multipleDraggableElementPreview.style.top = `${event.clientY}px`;
|
|
89
|
+
}
|
|
90
|
+
// Can not drag before first group and after last group
|
|
91
|
+
const swapWithBoundaryGroupElement = (elemIndex === 0 || elemIndex === this._rows.length - 1)
|
|
92
|
+
&& targetRow.isGroup
|
|
93
|
+
// TODO fix isChild & all
|
|
94
|
+
&& this.draggableItem.isChild;
|
|
95
|
+
if (!swapWithBoundaryGroupElement) {
|
|
96
|
+
if (elemIndex !== null) {
|
|
97
|
+
if (targetRow.readyToSwap) {
|
|
98
|
+
this.swapWithIndex(elemIndex);
|
|
99
|
+
if (this._draggableElementPreview) {
|
|
100
|
+
this._draggableElementPreview.classList.remove('fs-list-no-drop');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
if (this._draggableElementPreview) {
|
|
105
|
+
this._draggableElementPreview.classList.add('fs-list-no-drop');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// FIXME
|
|
110
|
+
if (this._draggableElementPreview) {
|
|
111
|
+
const topOffset = (event.y || event.clientY) - (this._draggableElementHeight / 2);
|
|
112
|
+
this._draggableElementPreview.style.top = `${topOffset}px`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Remove events and classes after drag finish
|
|
118
|
+
*/
|
|
119
|
+
dragEnd() {
|
|
120
|
+
this._dragInProgress = false;
|
|
121
|
+
this._reorderController.dataController.finishReorder();
|
|
122
|
+
if (this._reorderController.movedCallback
|
|
123
|
+
&& this._draggableElementStartIndex !== this._draggableElementIndex) {
|
|
124
|
+
this._reorderController.movedCallback(this._reorderController.dataController.reorderData);
|
|
125
|
+
}
|
|
126
|
+
if (this._reorderController.strategy === ReorderStrategy.Always) {
|
|
127
|
+
this._zone.run(() => {
|
|
128
|
+
if (this._reorderController.doneCallback) {
|
|
129
|
+
const result = this._reorderController.doneCallback(this._reorderController.dataController.reorderData);
|
|
130
|
+
this._waitUntilIsNotDone(result);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// this._reorderController.dataController.updateOrderByRows(this._rows);
|
|
135
|
+
///
|
|
136
|
+
this._containerElement.nativeElement.classList.remove('drag-hidden');
|
|
137
|
+
this._draggableElement.classList.remove('draggable-elem');
|
|
138
|
+
window.document.body.classList.remove('reorder-in-progress');
|
|
139
|
+
this._draggableElement = null;
|
|
140
|
+
if (this._draggableElementPreview) {
|
|
141
|
+
this._draggableElementPreview.remove();
|
|
142
|
+
this._draggableElementPreview = null;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this._renderer.removeChild(document.body, this._multipleDraggableElementPreview);
|
|
146
|
+
this._multipleDraggableElementPreview = null;
|
|
147
|
+
}
|
|
148
|
+
this._draggableElementHeight = null;
|
|
149
|
+
this._draggableElementIndex = null;
|
|
150
|
+
this._draggableElementStartIndex = null;
|
|
151
|
+
this._selectedRowsDirectives = [];
|
|
152
|
+
window.removeEventListener('touchmove', this._windowTouchMoveHandler);
|
|
153
|
+
window.document.removeEventListener('mousemove', this._dragToHandler);
|
|
154
|
+
window.document.removeEventListener('touchmove', this._dragToHandler);
|
|
155
|
+
window.document.removeEventListener('mouseup', this._dragEndHandler);
|
|
156
|
+
window.document.removeEventListener('touchend', this._dragEndHandler);
|
|
157
|
+
window.document.removeEventListener('touchcancel', this._dragEndHandler);
|
|
158
|
+
this._dragEnd$.next();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* looking row elements and save their dims
|
|
162
|
+
*/
|
|
163
|
+
prepareElements() {
|
|
164
|
+
this.lookupChildElements();
|
|
165
|
+
this.calcElementsDimensions();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Store child rows
|
|
169
|
+
*/
|
|
170
|
+
lookupChildElements() {
|
|
171
|
+
this._childRowElements = Array.from(this._containerElement.nativeElement.querySelectorAll('tr:not(.drag-hidden)'))
|
|
172
|
+
.reduce((acc, rowElement, index) => {
|
|
173
|
+
const element = { target: rowElement };
|
|
174
|
+
if (rowElement === this._draggableElement) {
|
|
175
|
+
this._draggableElementIndex = index;
|
|
176
|
+
element.active = true;
|
|
177
|
+
}
|
|
178
|
+
acc.push(element);
|
|
179
|
+
return acc;
|
|
180
|
+
}, []);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Calc child rows sizes/offsets
|
|
184
|
+
*/
|
|
185
|
+
calcElementsDimensions() {
|
|
186
|
+
this._childRowElements.forEach((el, index) => {
|
|
187
|
+
const dims = el.target.getBoundingClientRect();
|
|
188
|
+
el.top = dims.top;
|
|
189
|
+
el.height = dims.height;
|
|
190
|
+
el.center = dims.top + (dims.height / 2);
|
|
191
|
+
el.index = index;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Init draggable element
|
|
196
|
+
*/
|
|
197
|
+
initDraggableElement() {
|
|
198
|
+
const el = this._draggableElement.cloneNode(true);
|
|
199
|
+
const data = this._draggableElement.getBoundingClientRect();
|
|
200
|
+
if (!(this._isMultipleDrag)) {
|
|
201
|
+
el.style.width = `${data.width}px`;
|
|
202
|
+
el.style.left = `${data.left}px`;
|
|
203
|
+
el.style.top = `${data.top}px`;
|
|
204
|
+
el.classList.add('draggable');
|
|
205
|
+
this._containerElement.nativeElement.insertAdjacentElement('afterbegin', el);
|
|
206
|
+
this._draggableElementPreview = el;
|
|
207
|
+
this._draggableElementHeight = data.height;
|
|
208
|
+
this.updateDraggableDims();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Create preview DIV
|
|
212
|
+
this._containerElement.nativeElement.classList.add('drag-hidden');
|
|
213
|
+
const selectedCount = this._selectedRowsDirectives?.length;
|
|
214
|
+
const previewBlock = this._renderer.createElement('div');
|
|
215
|
+
previewBlock.style.left = `${data.left}px`;
|
|
216
|
+
previewBlock.style.top = `${data.top}px`;
|
|
217
|
+
const text = this._renderer.createText(`${selectedCount} selected items`);
|
|
218
|
+
this._renderer.appendChild(previewBlock, text);
|
|
219
|
+
this._renderer.addClass(previewBlock, 'fs-list-preview-block');
|
|
220
|
+
this._renderer.appendChild(document.body, previewBlock);
|
|
221
|
+
this._multipleDraggableElementPreview = previewBlock;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Looking by stored row elements for overlapped row
|
|
226
|
+
*
|
|
227
|
+
* @param event
|
|
228
|
+
*/
|
|
229
|
+
lookupElementUnder(event) {
|
|
230
|
+
const top = event.y || event.clientY;
|
|
231
|
+
const bottom = event.y || event.clientY;
|
|
232
|
+
let elemIndex = null;
|
|
233
|
+
for (let i = 0; i < this._childRowElements.length; i++) {
|
|
234
|
+
const el = this._childRowElements[i];
|
|
235
|
+
if (!el.active) {
|
|
236
|
+
if (top < el.center + (el.height / 2) && el.index < this._draggableElementIndex
|
|
237
|
+
|| bottom > el.center - (el.height / 2) && el.index > this._draggableElementIndex) {
|
|
238
|
+
elemIndex = i;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return elemIndex;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Swap rows
|
|
246
|
+
*
|
|
247
|
+
* @param index
|
|
248
|
+
*/
|
|
249
|
+
swapWithIndex(index) {
|
|
250
|
+
const activeIndex = this._draggableElementIndex;
|
|
251
|
+
const selectedRows = this._selectedRowsDirectives
|
|
252
|
+
.map((d) => d.row)
|
|
253
|
+
.filter((d) => d.readyToSwap);
|
|
254
|
+
// Swap rows in global rows stack
|
|
255
|
+
this._reorderController
|
|
256
|
+
.dataController
|
|
257
|
+
.swapRows(this._rows[activeIndex], this._rows[index], selectedRows, this._isMultipleDrag);
|
|
258
|
+
// Swap visible rows
|
|
259
|
+
if (!this._isMultipleDrag) {
|
|
260
|
+
const activeRow = this._rows[activeIndex];
|
|
261
|
+
this._rows[activeIndex] = this._rows[index];
|
|
262
|
+
this._rows[index] = activeRow;
|
|
263
|
+
const activeElement = this._childRowElements[activeIndex].target;
|
|
264
|
+
this._childRowElements[activeIndex].active = false;
|
|
265
|
+
this._childRowElements[activeIndex].target = this._childRowElements[index].target;
|
|
266
|
+
this._childRowElements[index].target = activeElement;
|
|
267
|
+
this._childRowElements[index].active = true;
|
|
268
|
+
}
|
|
269
|
+
this._draggableElementIndex = index;
|
|
270
|
+
this._cdRef.detectChanges();
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Update cell width for draggable elem
|
|
274
|
+
*/
|
|
275
|
+
updateDraggableDims() {
|
|
276
|
+
const draggableCells = Array.from(this._draggableElementPreview.querySelectorAll('td'));
|
|
277
|
+
Array.from(this._draggableElementPreview.querySelectorAll('td')).forEach((elem, index) => {
|
|
278
|
+
const dims = elem.getBoundingClientRect();
|
|
279
|
+
draggableCells[index].style.width = `${dims.width}px`;
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
_waitUntilIsNotDone(doneResult) {
|
|
283
|
+
if (doneResult instanceof Observable) {
|
|
284
|
+
this._reorderController.disableReorderAction();
|
|
285
|
+
doneResult
|
|
286
|
+
.pipe(takeUntil(this._destroy$))
|
|
287
|
+
.subscribe(() => {
|
|
288
|
+
this._reorderController.enableReorderAction();
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
_detectSelectedRows() {
|
|
293
|
+
this._draggableChildrenDirectives
|
|
294
|
+
.forEach((dir) => {
|
|
295
|
+
const isRowSelected = this._reorderController.selectionController?.isRowSelected(dir.row.data);
|
|
296
|
+
if (isRowSelected && !dir.row.isGroup) {
|
|
297
|
+
this._selectedRowsDirectives.push(dir);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Fix background when mobile
|
|
303
|
+
*
|
|
304
|
+
* @param e
|
|
305
|
+
*/
|
|
306
|
+
touchFix(e) {
|
|
307
|
+
if (!('clientX' in e) && !('clientY' in e)) {
|
|
308
|
+
const touches = e.touches || e.originalEvent.touches;
|
|
309
|
+
if (touches && touches.length) {
|
|
310
|
+
e.clientX = touches[0].clientX;
|
|
311
|
+
e.clientY = touches[0].clientY;
|
|
312
|
+
}
|
|
313
|
+
e.preventDefault();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
FsListDraggableListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListDraggableListDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.ReorderController }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
318
|
+
FsListDraggableListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: { _rows: ["rows", "_rows"] }, ngImport: i0 });
|
|
319
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListDraggableListDirective, decorators: [{
|
|
320
|
+
type: Directive,
|
|
321
|
+
args: [{
|
|
322
|
+
selector: '[fsListDraggableList]',
|
|
323
|
+
}]
|
|
324
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.ReorderController }, { type: i0.Renderer2 }]; }, propDecorators: { _rows: [{
|
|
325
|
+
type: Input,
|
|
326
|
+
args: ['rows']
|
|
327
|
+
}] } });
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2RyYWdnYWJsZS1saXN0L2RyYWdnYWJsZS1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7QUFTdEYsTUFBTSxPQUFPLDRCQUE0QjtJQTBCdkMsWUFDVSxNQUF5QixFQUN6QixLQUFhLEVBQ2IsaUJBQTZCLEVBQzdCLGtCQUFxQyxFQUNyQyxTQUFvQjtRQUpwQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFZO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXRCOUIsV0FBVztRQUNILG1CQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyw0QkFBdUIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHeEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xD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LENBQUMsQ0FBQztZQUUvRixJQUFJLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDckQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDN0IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUMvQixDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDaEM7WUFFRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDOzt5SEFsWlUsNEJBQTRCOzZHQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFIeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2lCQUNsQzs4TUFzQlMsS0FBSztzQkFEWixLQUFLO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgTmdab25lLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZW9yZGVyQ29udHJvbGxlciwgUmVvcmRlclN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9yZW9yZGVyLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgRnNMaXN0RHJhZ0NoaWxkUm93RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZHJhZ2dhYmxlLWxpc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uLy4uL21vZGVscy9yb3cnO1xuaW1wb3J0IHsgRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZ2dhYmxlLXJvdy9kcmFnZ2FibGUtcm93LmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzTGlzdERyYWdnYWJsZUxpc3RdJyxcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0RHJhZ2dhYmxlTGlzdERpcmVjdGl2ZSB7XG4gIC8vIERyYWdnYWJsZSBFbGVtZW50XG4gIHByaXZhdGUgX2RyYWdnYWJsZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9kcmFnZ2FibGVFbGVtZW50UHJldmlldzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX211bHRpcGxlRHJhZ2dhYmxlRWxlbWVudFByZXZpZXc6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9kcmFnZ2FibGVFbGVtZW50SGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX2RyYWdnYWJsZUVsZW1lbnRJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIF9kcmFnZ2FibGVFbGVtZW50U3RhcnRJbmRleDogbnVtYmVyO1xuXG4gIC8vIEhhbmRsZXJzXG4gIHByaXZhdGUgX2RyYWdUb0hhbmRsZXIgPSB0aGlzLmRyYWdUby5iaW5kKHRoaXMpO1xuICBwcml2YXRlIF9kcmFnRW5kSGFuZGxlciA9IHRoaXMuZHJhZ0VuZC5iaW5kKHRoaXMpO1xuICBwcml2YXRlIF93aW5kb3dUb3VjaE1vdmVIYW5kbGVyID0gKCkgPT4geyB9O1xuXG4gIHByaXZhdGUgX2RyYWdJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY2hpbGRSb3dFbGVtZW50czogRnNMaXN0RHJhZ0NoaWxkUm93RWxlbWVudFtdO1xuICBwcml2YXRlIF9kcmFnU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfZHJhZ0VuZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgncm93cycpXG4gIHByaXZhdGUgX3Jvd3M6IFJvd1tdO1xuICBwcml2YXRlIF9kcmFnZ2FibGVDaGlsZHJlbkRpcmVjdGl2ZXM6IEZzTGlzdERyYWdnYWJsZVJvd0RpcmVjdGl2ZVtdID0gW107XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93c0RpcmVjdGl2ZXM6IEZzTGlzdERyYWdnYWJsZVJvd0RpcmVjdGl2ZVtdID0gW107XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgX2NvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfcmVvcmRlckNvbnRyb2xsZXI6IFJlb3JkZXJDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkgeyB9XG5cbiAgcHVibGljIGdldCBkcmFnU3RhcnQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kcmFnU3RhcnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRyYWdFbmQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kcmFnRW5kJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBkcmFnZ2FibGVJdGVtKCk6IFJvdyB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NbdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEluZGV4XTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9pc011bHRpcGxlRHJhZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIubXVsdGlwbGUgJiYgdGhpcy5fc2VsZWN0ZWRSb3dzRGlyZWN0aXZlcy5sZW5ndGggPiAxO1xuICB9XG5cbiAgcHVibGljIGFkZERyYWdnYWJsZURpcmVjdGl2ZShkaXI6IEZzTGlzdERyYWdnYWJsZVJvd0RpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuX2RyYWdnYWJsZUNoaWxkcmVuRGlyZWN0aXZlcy5wdXNoKGRpcik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRHJhZ2dhYmxlRGlyZWN0aXZlKGRpcjogRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlKTogdm9pZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5fZHJhZ2dhYmxlQ2hpbGRyZW5EaXJlY3RpdmVzLmluZGV4T2YoZGlyKTtcblxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kcmFnZ2FibGVDaGlsZHJlbkRpcmVjdGl2ZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgZHJhZ2dhYmxlIGVsZW1lbnRzIGFuZCBhZGQgZXZlbnRzXG4gICAqXG4gICAqIEBwYXJhbSBkcmFnZ2FibGVFbGVtZW50XG4gICAqL1xuICBwdWJsaWMgZHJhZ1N0YXJ0KGRyYWdnYWJsZUVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2RyYWdJblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuc3RhcnRDYWxsYmFja1xuICAgICAgJiYgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kgPT09IFJlb3JkZXJTdHJhdGVneS5BbHdheXNcbiAgICApIHtcbiAgICAgIHRoaXMuX3Jlb3JkZXJDb250cm9sbGVyLnN0YXJ0Q2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kcmFnSW5Qcm9ncmVzcyA9IHRydWU7XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdyZW9yZGVyLWluLXByb2dyZXNzJyk7XG5cbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50ID0gZHJhZ2dhYmxlRWxlbWVudDtcblxuICAgIHRoaXMuX2RldGVjdFNlbGVjdGVkUm93cygpO1xuICAgIHRoaXMucHJlcGFyZUVsZW1lbnRzKCk7XG4gICAgdGhpcy5pbml0RHJhZ2dhYmxlRWxlbWVudCgpO1xuXG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFN0YXJ0SW5kZXggPSB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXg7XG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2FibGUtZWxlbScpO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fd2luZG93VG91Y2hNb3ZlSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2RyYWdUb0hhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl9kcmFnVG9IYW5kbGVyLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9kcmFnRW5kSGFuZGxlcik7XG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fZHJhZ0VuZEhhbmRsZXIpO1xuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuX2RyYWdFbmRIYW5kbGVyKTtcblxuICAgIHRoaXMuX2RyYWdTdGFydCQubmV4dCgpO1xuICB9XG5cblxuICAvKipcbiAgICogTW92ZSBkcmFnZ2FibGUgZWxlbWVudHMgYW5kIHN3YXAgaXRlbXNcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgZHJhZ1RvKGV2ZW50KSB7XG4gICAgdGhpcy50b3VjaEZpeChldmVudCk7XG4gICAgY29uc3QgZWxlbUluZGV4ID0gdGhpcy5sb29rdXBFbGVtZW50VW5kZXIoZXZlbnQpO1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IHRoaXMuX3Jvd3NbZWxlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLl9tdWx0aXBsZURyYWdnYWJsZUVsZW1lbnRQcmV2aWV3KSB7XG4gICAgICB0aGlzLl9tdWx0aXBsZURyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYfXB4YDtcbiAgICAgIHRoaXMuX211bHRpcGxlRHJhZ2dhYmxlRWxlbWVudFByZXZpZXcuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WX1weGA7XG4gICAgfVxuXG4gICAgLy8gQ2FuIG5vdCBkcmFnIGJlZm9yZSBmaXJzdCBncm91cCBhbmQgYWZ0ZXIgbGFzdCBncm91cFxuICAgIGNvbnN0IHN3YXBXaXRoQm91bmRhcnlHcm91cEVsZW1lbnQgPVxuICAgICAgKGVsZW1JbmRleCA9PT0gMCB8fCBlbGVtSW5kZXggPT09IHRoaXMuX3Jvd3MubGVuZ3RoIC0gMSlcbiAgICAgICYmIHRhcmdldFJvdy5pc0dyb3VwXG4gICAgICAvLyBUT0RPIGZpeCBpc0NoaWxkICYgYWxsXG4gICAgICAmJiAodGhpcy5kcmFnZ2FibGVJdGVtIGFzIGFueSkuaXNDaGlsZDtcblxuXG4gICAgaWYgKCFzd2FwV2l0aEJvdW5kYXJ5R3JvdXBFbGVtZW50KSB7XG4gICAgICBpZiAoZWxlbUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0YXJnZXRSb3cucmVhZHlUb1N3YXApIHtcbiAgICAgICAgICB0aGlzLnN3YXBXaXRoSW5kZXgoZWxlbUluZGV4KTtcbiAgICAgICAgICBpZiAodGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LmNsYXNzTGlzdC5yZW1vdmUoJ2ZzLWxpc3Qtbm8tZHJvcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LmNsYXNzTGlzdC5hZGQoJ2ZzLWxpc3Qtbm8tZHJvcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRVxuICAgICAgaWYgKHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3KSB7XG4gICAgICAgIGNvbnN0IHRvcE9mZnNldCA9IChldmVudC55IHx8IGV2ZW50LmNsaWVudFkpIC0gKHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRIZWlnaHQgLyAyKTtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcuc3R5bGUudG9wID0gYCR7dG9wT2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGV2ZW50cyBhbmQgY2xhc3NlcyBhZnRlciBkcmFnIGZpbmlzaFxuICAgKi9cbiAgcHVibGljIGRyYWdFbmQoKSB7XG4gICAgdGhpcy5fZHJhZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kYXRhQ29udHJvbGxlci5maW5pc2hSZW9yZGVyKCk7XG5cbiAgICBpZiAodGhpcy5fcmVvcmRlckNvbnRyb2xsZXIubW92ZWRDYWxsYmFja1xuICAgICAgJiYgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFN0YXJ0SW5kZXggIT09IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRJbmRleCkge1xuXG4gICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5tb3ZlZENhbGxiYWNrKFxuICAgICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kYXRhQ29udHJvbGxlci5yZW9yZGVyRGF0YSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jlb3JkZXJDb250cm9sbGVyLnN0cmF0ZWd5ID09PSBSZW9yZGVyU3RyYXRlZ3kuQWx3YXlzKSB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kb25lQ2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kb25lQ2FsbGJhY2soXG4gICAgICAgICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kYXRhQ29udHJvbGxlci5yZW9yZGVyRGF0YSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5fd2FpdFVudGlsSXNOb3REb25lKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMuX3Jlb3JkZXJDb250cm9sbGVyLmRhdGFDb250cm9sbGVyLnVwZGF0ZU9yZGVyQnlSb3dzKHRoaXMuX3Jvd3MpO1xuICAgIC8vL1xuICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnLWhpZGRlbicpO1xuICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dhYmxlLWVsZW0nKTtcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdyZW9yZGVyLWluLXByb2dyZXNzJyk7XG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpIHtcbiAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LnJlbW92ZSgpO1xuXG4gICAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50UHJldmlldyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIHRoaXMuX211bHRpcGxlRHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpO1xuICAgICAgdGhpcy5fbXVsdGlwbGVEcmFnZ2FibGVFbGVtZW50UHJldmlldyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEhlaWdodCA9IG51bGw7XG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50U3RhcnRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzRGlyZWN0aXZlcyA9IFtdO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX3dpbmRvd1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9kcmFnVG9IYW5kbGVyKTtcbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fZHJhZ1RvSGFuZGxlcik7XG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9kcmFnRW5kSGFuZGxlcik7XG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fZHJhZ0VuZEhhbmRsZXIpO1xuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuX2RyYWdFbmRIYW5kbGVyKTtcblxuICAgIHRoaXMuX2RyYWdFbmQkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsb29raW5nIHJvdyBlbGVtZW50cyBhbmQgc2F2ZSB0aGVpciBkaW1zXG4gICAqL1xuICBwcml2YXRlIHByZXBhcmVFbGVtZW50cygpIHtcbiAgICB0aGlzLmxvb2t1cENoaWxkRWxlbWVudHMoKTtcbiAgICB0aGlzLmNhbGNFbGVtZW50c0RpbWVuc2lvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBjaGlsZCByb3dzXG4gICAqL1xuICBwcml2YXRlIGxvb2t1cENoaWxkRWxlbWVudHMoKSB7XG4gICAgdGhpcy5fY2hpbGRSb3dFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5fY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyOm5vdCguZHJhZy1oaWRkZW4pJykpXG4gICAgICAucmVkdWNlKChhY2M6IGFueVtdLCByb3dFbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50OiBhbnkgPSB7IHRhcmdldDogcm93RWxlbWVudCB9O1xuXG4gICAgICAgIGlmIChyb3dFbGVtZW50ID09PSB0aGlzLl9kcmFnZ2FibGVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgZWxlbWVudC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjLnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKSBhcyBGc0xpc3REcmFnQ2hpbGRSb3dFbGVtZW50W107XG4gIH1cblxuICAvKipcbiAgICogQ2FsYyBjaGlsZCByb3dzIHNpemVzL29mZnNldHNcbiAgICovXG4gIHByaXZhdGUgY2FsY0VsZW1lbnRzRGltZW5zaW9ucygpIHtcbiAgICB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzLmZvckVhY2goKGVsOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBkaW1zID0gZWwudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgZWwudG9wID0gZGltcy50b3A7XG4gICAgICBlbC5oZWlnaHQgPSBkaW1zLmhlaWdodDtcbiAgICAgIGVsLmNlbnRlciA9IGRpbXMudG9wICsgKGRpbXMuaGVpZ2h0IC8gMik7XG4gICAgICBlbC5pbmRleCA9IGluZGV4O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgZHJhZ2dhYmxlIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgaW5pdERyYWdnYWJsZUVsZW1lbnQoKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLl9kcmFnZ2FibGVFbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZHJhZ2dhYmxlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmICghKHRoaXMuX2lzTXVsdGlwbGVEcmFnKSkge1xuICAgICAgZWwuc3R5bGUud2lkdGggPSBgJHtkYXRhLndpZHRofXB4YDtcbiAgICAgIGVsLnN0eWxlLmxlZnQgPSBgJHtkYXRhLmxlZnR9cHhgO1xuICAgICAgZWwuc3R5bGUudG9wID0gYCR7ZGF0YS50b3B9cHhgO1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnZHJhZ2dhYmxlJyk7XG5cbiAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyYmVnaW4nLCBlbCk7XG5cbiAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3ID0gZWw7XG4gICAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SGVpZ2h0ID0gZGF0YS5oZWlnaHQ7XG5cbiAgICAgIHRoaXMudXBkYXRlRHJhZ2dhYmxlRGltcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgcHJldmlldyBESVZcbiAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcmFnLWhpZGRlbicpO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5fc2VsZWN0ZWRSb3dzRGlyZWN0aXZlcz8ubGVuZ3RoO1xuICAgICAgY29uc3QgcHJldmlld0Jsb2NrID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBwcmV2aWV3QmxvY2suc3R5bGUubGVmdCA9IGAke2RhdGEubGVmdH1weGA7XG4gICAgICBwcmV2aWV3QmxvY2suc3R5bGUudG9wID0gYCR7ZGF0YS50b3B9cHhgO1xuXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlVGV4dChgJHtzZWxlY3RlZENvdW50fSBzZWxlY3RlZCBpdGVtc2ApO1xuXG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChwcmV2aWV3QmxvY2ssIHRleHQpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MocHJldmlld0Jsb2NrLCAnZnMtbGlzdC1wcmV2aWV3LWJsb2NrJyk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCBwcmV2aWV3QmxvY2spO1xuICAgICAgdGhpcy5fbXVsdGlwbGVEcmFnZ2FibGVFbGVtZW50UHJldmlldyA9IHByZXZpZXdCbG9jaztcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBMb29raW5nIGJ5IHN0b3JlZCByb3cgZWxlbWVudHMgZm9yIG92ZXJsYXBwZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb29rdXBFbGVtZW50VW5kZXIoZXZlbnQpIHtcbiAgICBjb25zdCB0b3AgPSBldmVudC55IHx8IGV2ZW50LmNsaWVudFk7XG4gICAgY29uc3QgYm90dG9tID0gZXZlbnQueSB8fCBldmVudC5jbGllbnRZO1xuICAgIGxldCBlbGVtSW5kZXggPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuX2NoaWxkUm93RWxlbWVudHNbaV07XG5cbiAgICAgIGlmICghZWwuYWN0aXZlKSB7XG4gICAgICAgIGlmICh0b3AgPCBlbC5jZW50ZXIgKyAoZWwuaGVpZ2h0IC8gMikgJiYgZWwuaW5kZXggPCB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXhcbiAgICAgICAgICB8fCBib3R0b20gPiBlbC5jZW50ZXIgLSAoZWwuaGVpZ2h0IC8gMikgJiYgZWwuaW5kZXggPiB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXgpIHtcbiAgICAgICAgICBlbGVtSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1JbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2FwIHJvd3NcbiAgICpcbiAgICogQHBhcmFtIGluZGV4XG4gICAqL1xuICBwcml2YXRlIHN3YXBXaXRoSW5kZXgoaW5kZXgpIHtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRJbmRleDtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLl9zZWxlY3RlZFJvd3NEaXJlY3RpdmVzXG4gICAgICAubWFwKChkKSA9PiBkLnJvdylcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQucmVhZHlUb1N3YXApO1xuXG4gICAgLy8gU3dhcCByb3dzIGluIGdsb2JhbCByb3dzIHN0YWNrXG4gICAgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXJcbiAgICAgIC5kYXRhQ29udHJvbGxlclxuICAgICAgLnN3YXBSb3dzKFxuICAgICAgICB0aGlzLl9yb3dzW2FjdGl2ZUluZGV4XSxcbiAgICAgICAgdGhpcy5fcm93c1tpbmRleF0sXG4gICAgICAgIHNlbGVjdGVkUm93cyxcbiAgICAgICAgdGhpcy5faXNNdWx0aXBsZURyYWcsXG4gICAgICApO1xuXG4gICAgLy8gU3dhcCB2aXNpYmxlIHJvd3NcbiAgICBpZiAoIXRoaXMuX2lzTXVsdGlwbGVEcmFnKSB7XG4gICAgICBjb25zdCBhY3RpdmVSb3cgPSB0aGlzLl9yb3dzW2FjdGl2ZUluZGV4XTtcbiAgICAgIHRoaXMuX3Jvd3NbYWN0aXZlSW5kZXhdID0gdGhpcy5fcm93c1tpbmRleF07XG4gICAgICB0aGlzLl9yb3dzW2luZGV4XSA9IGFjdGl2ZVJvdztcblxuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2NoaWxkUm93RWxlbWVudHNbYWN0aXZlSW5kZXhdLnRhcmdldDtcbiAgICAgIHRoaXMuX2NoaWxkUm93RWxlbWVudHNbYWN0aXZlSW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzW2FjdGl2ZUluZGV4XS50YXJnZXQgPSB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzW2luZGV4XS50YXJnZXQ7XG4gICAgICB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzW2luZGV4XS50YXJnZXQgPSBhY3RpdmVFbGVtZW50O1xuICAgICAgdGhpcy5fY2hpbGRSb3dFbGVtZW50c1tpbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNlbGwgd2lkdGggZm9yIGRyYWdnYWJsZSBlbGVtXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURyYWdnYWJsZURpbXMoKSB7XG4gICAgY29uc3QgZHJhZ2dhYmxlQ2VsbHM6IGFueSA9IEFycmF5LmZyb20odGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcucXVlcnlTZWxlY3RvckFsbCgndGQnKSk7XG5cbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcucXVlcnlTZWxlY3RvckFsbCgndGQnKSxcbiAgICApLmZvckVhY2goKGVsZW06IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGRpbXMgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgZHJhZ2dhYmxlQ2VsbHNbaW5kZXhdLnN0eWxlLndpZHRoID0gYCR7ZGltcy53aWR0aH1weGA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YWl0VW50aWxJc05vdERvbmUoZG9uZVJlc3VsdDogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChkb25lUmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuZGlzYWJsZVJlb3JkZXJBY3Rpb24oKTtcblxuICAgICAgZG9uZVJlc3VsdFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5lbmFibGVSZW9yZGVyQWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2RldGVjdFNlbGVjdGVkUm93cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnZ2FibGVDaGlsZHJlbkRpcmVjdGl2ZXNcbiAgICAgIC5mb3JFYWNoKChkaXI6IEZzTGlzdERyYWdnYWJsZVJvd0RpcmVjdGl2ZSkgPT4ge1xuICAgICAgICBjb25zdCBpc1Jvd1NlbGVjdGVkID0gdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuc2VsZWN0aW9uQ29udHJvbGxlcj8uaXNSb3dTZWxlY3RlZChkaXIucm93LmRhdGEpO1xuXG4gICAgICAgIGlmIChpc1Jvd1NlbGVjdGVkICYmICFkaXIucm93LmlzR3JvdXApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3NEaXJlY3RpdmVzLnB1c2goZGlyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRml4IGJhY2tncm91bmQgd2hlbiBtb2JpbGVcbiAgICpcbiAgICogQHBhcmFtIGVcbiAgICovXG4gIHByaXZhdGUgdG91Y2hGaXgoZSkge1xuICAgIGlmICghKCdjbGllbnRYJyBpbiBlKSAmJiAhKCdjbGllbnRZJyBpbiBlKSkge1xuICAgICAgY29uc3QgdG91Y2hlcyA9IGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcztcbiAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgIGUuY2xpZW50WCA9IHRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgZS5jbGllbnRZID0gdG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { ReorderController } from '../../classes/reorder-controller';
|
|
5
|
+
import { Row } from '../../models/row';
|
|
6
|
+
import { FsListDraggableListDirective } from '../draggable-list/draggable-list.directive';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../classes/reorder-controller";
|
|
9
|
+
import * as i2 from "../draggable-list/draggable-list.directive";
|
|
10
|
+
export class FsListDraggableRowDirective {
|
|
11
|
+
constructor(_el, _renderer, _reorderController, _draggableList) {
|
|
12
|
+
this._el = _el;
|
|
13
|
+
this._renderer = _renderer;
|
|
14
|
+
this._reorderController = _reorderController;
|
|
15
|
+
this._draggableList = _draggableList;
|
|
16
|
+
this._destroy$ = new Subject();
|
|
17
|
+
}
|
|
18
|
+
get elRef() {
|
|
19
|
+
return this._el;
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
if (this._reorderController.moveDropCallback) {
|
|
23
|
+
this._listenDragEvents();
|
|
24
|
+
}
|
|
25
|
+
this._draggableList.addDraggableDirective(this);
|
|
26
|
+
}
|
|
27
|
+
ngOnDestroy() {
|
|
28
|
+
this._draggableList.removeDraggableDirective(this);
|
|
29
|
+
this._destroy$.next();
|
|
30
|
+
this._destroy$.complete();
|
|
31
|
+
}
|
|
32
|
+
dragHide() {
|
|
33
|
+
this._el.nativeElement.classList.add('drag-hidden');
|
|
34
|
+
}
|
|
35
|
+
_listenDragEvents() {
|
|
36
|
+
this._draggableList
|
|
37
|
+
.dragStart$
|
|
38
|
+
.pipe(takeUntil(this._destroy$))
|
|
39
|
+
.subscribe(() => {
|
|
40
|
+
this._markReadyToSwapRows();
|
|
41
|
+
});
|
|
42
|
+
this._draggableList
|
|
43
|
+
.dragEnd$
|
|
44
|
+
.pipe(takeUntil(this._destroy$))
|
|
45
|
+
.subscribe(() => {
|
|
46
|
+
this._unmarkRows();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
_markReadyToSwapRows() {
|
|
50
|
+
const currentEl = this.row;
|
|
51
|
+
const targetEl = this._draggableList.draggableItem;
|
|
52
|
+
this.row.readyToSwap = this._reorderController.moveDropCallback({
|
|
53
|
+
row1: currentEl?.data,
|
|
54
|
+
row2: targetEl?.data,
|
|
55
|
+
group1: currentEl?.parent?.data,
|
|
56
|
+
group2: targetEl?.parent?.data,
|
|
57
|
+
});
|
|
58
|
+
if (!this.row.readyToSwap) {
|
|
59
|
+
this._renderer.addClass(this._el.nativeElement, 'fs-list-swap-restricted');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
_unmarkRows() {
|
|
63
|
+
if (!this.row.readyToSwap) {
|
|
64
|
+
this._renderer.removeClass(this._el.nativeElement, 'fs-list-swap-restricted');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
FsListDraggableRowDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListDraggableRowDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ReorderController }, { token: i2.FsListDraggableListDirective }], target: i0.ɵɵFactoryTarget.Directive });
|
|
69
|
+
FsListDraggableRowDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsListDraggableRowDirective, selector: "[fsListDraggableRow]", inputs: { row: "row" }, ngImport: i0 });
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListDraggableRowDirective, decorators: [{
|
|
71
|
+
type: Directive,
|
|
72
|
+
args: [{
|
|
73
|
+
selector: '[fsListDraggableRow]',
|
|
74
|
+
}]
|
|
75
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ReorderController }, { type: i2.FsListDraggableListDirective }]; }, propDecorators: { row: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}] } });
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXJvdy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZHJhZ2dhYmxlLXJvdy9kcmFnZ2FibGUtcm93LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7QUFNMUYsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUNVLEdBQWUsRUFDZixTQUFvQixFQUNwQixrQkFBcUMsRUFDckMsY0FBNEM7UUFINUMsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBOEI7UUFOOUMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFPcEMsQ0FBQztJQUVMLElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFO1lBQzVDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYzthQUNoQixVQUFVO2FBQ1YsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGNBQWM7YUFDaEIsUUFBUTthQUNSLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFFbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUM3RDtZQUNFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSTtZQUNyQixJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUk7WUFDcEIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSTtZQUMvQixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJO1NBQy9CLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVFO0lBQ0gsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLHlCQUF5QixDQUFDLENBQUM7U0FDL0U7SUFDSCxDQUFDOzt3SEE3RVUsMkJBQTJCOzRHQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFIdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNqQztvTUFJUSxHQUFHO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVvcmRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlcic7XG5pbXBvcnQgeyBSb3cgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm93JztcbmltcG9ydCB7IEZzTGlzdERyYWdnYWJsZUxpc3REaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnZ2FibGUtbGlzdC9kcmFnZ2FibGUtbGlzdC5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0xpc3REcmFnZ2FibGVSb3ddJyxcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3c6IFJvdztcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIF9yZW9yZGVyQ29udHJvbGxlcjogUmVvcmRlckNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBfZHJhZ2dhYmxlTGlzdDogRnNMaXN0RHJhZ2dhYmxlTGlzdERpcmVjdGl2ZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgZ2V0IGVsUmVmKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLl9lbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVvcmRlckNvbnRyb2xsZXIubW92ZURyb3BDYWxsYmFjaykge1xuICAgICAgdGhpcy5fbGlzdGVuRHJhZ0V2ZW50cygpO1xuICAgIH1cbiAgICB0aGlzLl9kcmFnZ2FibGVMaXN0LmFkZERyYWdnYWJsZURpcmVjdGl2ZSh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnZ2FibGVMaXN0LnJlbW92ZURyYWdnYWJsZURpcmVjdGl2ZSh0aGlzKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnSGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2RyYWctaGlkZGVuJyk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5EcmFnRXZlbnRzKCkge1xuICAgIHRoaXMuX2RyYWdnYWJsZUxpc3RcbiAgICAgIC5kcmFnU3RhcnQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tYXJrUmVhZHlUb1N3YXBSb3dzKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2RyYWdnYWJsZUxpc3RcbiAgICAgIC5kcmFnRW5kJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdW5tYXJrUm93cygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9tYXJrUmVhZHlUb1N3YXBSb3dzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRFbCA9IHRoaXMucm93O1xuICAgIGNvbnN0IHRhcmdldEVsID0gdGhpcy5fZHJhZ2dhYmxlTGlzdC5kcmFnZ2FibGVJdGVtO1xuXG4gICAgdGhpcy5yb3cucmVhZHlUb1N3YXAgPSB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5tb3ZlRHJvcENhbGxiYWNrKFxuICAgICAge1xuICAgICAgICByb3cxOiBjdXJyZW50RWw/LmRhdGEsXG4gICAgICAgIHJvdzI6IHRhcmdldEVsPy5kYXRhLFxuICAgICAgICBncm91cDE6IGN1cnJlbnRFbD8ucGFyZW50Py5kYXRhLFxuICAgICAgICBncm91cDI6IHRhcmdldEVsPy5wYXJlbnQ/LmRhdGEsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMucm93LnJlYWR5VG9Td2FwKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAnZnMtbGlzdC1zd2FwLXJlc3RyaWN0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91bm1hcmtSb3dzKCkge1xuICAgIGlmICghdGhpcy5yb3cucmVhZHlUb1N3YXApIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsICdmcy1saXN0LXN3YXAtcmVzdHJpY3RlZCcpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Directive } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class FsListEmptyStateDirective {
|
|
4
|
-
}
|
|
5
|
-
FsListEmptyStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
6
|
-
FsListEmptyStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
8
|
-
type: Directive,
|
|
9
|
-
args: [{
|
|
10
|
-
selector: '[fs-list-empty-state]',
|
|
11
|
-
}]
|
|
12
|
-
}] });
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FsListEmptyStateDirective {
|
|
4
|
+
}
|
|
5
|
+
FsListEmptyStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListEmptyStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6
|
+
FsListEmptyStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsListEmptyStateDirective, selector: "[fs-list-empty-state]", ngImport: i0 });
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListEmptyStateDirective, decorators: [{
|
|
8
|
+
type: Directive,
|
|
9
|
+
args: [{
|
|
10
|
+
selector: '[fs-list-empty-state]',
|
|
11
|
+
}]
|
|
12
|
+
}] });
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsxQyxNQUFNLE9BQU8seUJBQXlCOztzSEFBekIseUJBQXlCOzBHQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZnMtbGlzdC1lbXB0eS1zdGF0ZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnNMaXN0RW1wdHlTdGF0ZURpcmVjdGl2ZSB7fVxyXG4iXX0=
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class FsListFooterDirective {
|
|
4
|
-
}
|
|
5
|
-
FsListFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
6
|
-
FsListFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
8
|
-
type: Directive,
|
|
9
|
-
args: [{ selector: '[fs-list-footer]' }]
|
|
10
|
-
}], propDecorators: { colspan: [{
|
|
11
|
-
type: Input
|
|
12
|
-
}], align: [{
|
|
13
|
-
type: Input
|
|
14
|
-
}], className: [{
|
|
15
|
-
type: Input,
|
|
16
|
-
args: ['class']
|
|
17
|
-
}] } });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FsListFooterDirective {
|
|
4
|
+
}
|
|
5
|
+
FsListFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6
|
+
FsListFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsListFooterDirective, selector: "[fs-list-footer]", inputs: { colspan: "colspan", align: "align", className: ["class", "className"] }, ngImport: i0 });
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListFooterDirective, decorators: [{
|
|
8
|
+
type: Directive,
|
|
9
|
+
args: [{ selector: '[fs-list-footer]' }]
|
|
10
|
+
}], propDecorators: { colspan: [{
|
|
11
|
+
type: Input
|
|
12
|
+
}], align: [{
|
|
13
|
+
type: Input
|
|
14
|
+
}], className: [{
|
|
15
|
+
type: Input,
|
|
16
|
+
args: ['class']
|
|
17
|
+
}] } });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb290ZXIvZm9vdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHakQsTUFBTSxPQUFPLHFCQUFxQjs7a0hBQXJCLHFCQUFxQjtzR0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUU7OEJBRXpCLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDaUIsU0FBUztzQkFBL0IsS0FBSzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2ZzLWxpc3QtZm9vdGVyXScgfSlcclxuZXhwb3J0IGNsYXNzIEZzTGlzdEZvb3RlckRpcmVjdGl2ZSB7XHJcbiAgQElucHV0KCkgcHVibGljIGNvbHNwYW47XHJcbiAgQElucHV0KCkgcHVibGljIGFsaWduOiBzdHJpbmc7XHJcbiAgQElucHV0KCdjbGFzcycpIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
-
import { GroupExpandNotifierService } from '../../services/group-expand-notifier.service';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../../services/group-expand-notifier.service";
|
|
5
|
-
export class FsListGroupExpandTriggerDirective {
|
|
6
|
-
constructor(_expandNotifier) {
|
|
7
|
-
this._expandNotifier = _expandNotifier;
|
|
8
|
-
}
|
|
9
|
-
click(event) {
|
|
10
|
-
event.preventDefault();
|
|
11
|
-
event.stopPropagation();
|
|
12
|
-
this._expandNotifier.toggleExpandStatus(this.row);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
FsListGroupExpandTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
16
|
-
FsListGroupExpandTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
18
|
-
type: Directive,
|
|
19
|
-
args: [{ selector: '[fsListGroupExpandTrigger]' }]
|
|
20
|
-
}], ctorParameters: function () { return [{ type: i1.GroupExpandNotifierService }]; }, propDecorators: { click: [{
|
|
21
|
-
type: HostListener,
|
|
22
|
-
args: ['click', ['$event']]
|
|
23
|
-
}], row: [{
|
|
24
|
-
type: Input
|
|
25
|
-
}] } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
+
import { GroupExpandNotifierService } from '../../services/group-expand-notifier.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/group-expand-notifier.service";
|
|
5
|
+
export class FsListGroupExpandTriggerDirective {
|
|
6
|
+
constructor(_expandNotifier) {
|
|
7
|
+
this._expandNotifier = _expandNotifier;
|
|
8
|
+
}
|
|
9
|
+
click(event) {
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
event.stopPropagation();
|
|
12
|
+
this._expandNotifier.toggleExpandStatus(this.row);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
FsListGroupExpandTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListGroupExpandTriggerDirective, deps: [{ token: i1.GroupExpandNotifierService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
16
|
+
FsListGroupExpandTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsListGroupExpandTriggerDirective, selector: "[fsListGroupExpandTrigger]", inputs: { row: "row" }, host: { listeners: { "click": "click($event)" } }, ngImport: i0 });
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsListGroupExpandTriggerDirective, decorators: [{
|
|
18
|
+
type: Directive,
|
|
19
|
+
args: [{ selector: '[fsListGroupExpandTrigger]' }]
|
|
20
|
+
}], ctorParameters: function () { return [{ type: i1.GroupExpandNotifierService }]; }, propDecorators: { click: [{
|
|
21
|
+
type: HostListener,
|
|
22
|
+
args: ['click', ['$event']]
|
|
23
|
+
}], row: [{
|
|
24
|
+
type: Input
|
|
25
|
+
}] } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtZXhwYW5kLXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2dyb3VwLWV4cGFuZC10cmlnZ2VyL2dyb3VwLWV4cGFuZC10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7OztBQUkxRixNQUFNLE9BQU8saUNBQWlDO0lBWTVDLFlBQW9CLGVBQTJDO1FBQTNDLG9CQUFlLEdBQWYsZUFBZSxDQUE0QjtJQUFHLENBQUM7SUFUNUQsS0FBSyxDQUFDLEtBQUs7UUFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDOzs4SEFQVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQzsyRkFBakMsaUNBQWlDO2tCQUQ3QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFO2lIQUk1QyxLQUFLO3NCQURYLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVExQixHQUFHO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cC1leHBhbmQtbm90aWZpZXIuc2VydmljZSc7XHJcblxyXG5cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2ZzTGlzdEdyb3VwRXhwYW5kVHJpZ2dlcl0nIH0pXHJcbmV4cG9ydCBjbGFzcyBGc0xpc3RHcm91cEV4cGFuZFRyaWdnZXJEaXJlY3RpdmUge1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGNsaWNrKGV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9leHBhbmROb3RpZmllci50b2dnbGVFeHBhbmRTdGF0dXModGhpcy5yb3cpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9leHBhbmROb3RpZmllcjogR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UpIHt9XHJcbn1cclxuIl19
|