@schneideress/dashboardframework 0.0.76 → 0.0.78

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.
Files changed (113) hide show
  1. package/README.md +24 -24
  2. package/bundles/schneideress-dashboardframework.umd.js +7013 -7030
  3. package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
  4. package/bundles/schneideress-dashboardframework.umd.min.js +2 -2
  5. package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
  6. package/esm2015/gridster/index.js +18 -19
  7. package/esm2015/gridster/lib/gridster.component.js +700 -701
  8. package/esm2015/gridster/lib/gridster.interface.js +84 -85
  9. package/esm2015/gridster/lib/gridster.module.js +27 -28
  10. package/esm2015/gridster/lib/gridsterCompact.service.js +223 -224
  11. package/esm2015/gridster/lib/gridsterConfig.constant.js +179 -180
  12. package/esm2015/gridster/lib/gridsterConfig.interface.js +219 -220
  13. package/esm2015/gridster/lib/gridsterConfigS.interface.js +161 -162
  14. package/esm2015/gridster/lib/gridsterDraggable.service.js +510 -511
  15. package/esm2015/gridster/lib/gridsterEmptyCell.service.js +317 -318
  16. package/esm2015/gridster/lib/gridsterItem.component.js +213 -214
  17. package/esm2015/gridster/lib/gridsterItem.interface.js +46 -47
  18. package/esm2015/gridster/lib/gridsterItemComponent.interface.js +48 -49
  19. package/esm2015/gridster/lib/gridsterPreview.component.js +66 -67
  20. package/esm2015/gridster/lib/gridsterPush.service.js +467 -468
  21. package/esm2015/gridster/lib/gridsterPushResize.service.js +358 -359
  22. package/esm2015/gridster/lib/gridsterRenderer.service.js +277 -278
  23. package/esm2015/gridster/lib/gridsterResizable.service.js +552 -553
  24. package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +19 -20
  25. package/esm2015/gridster/lib/gridsterScroll.service.js +195 -196
  26. package/esm2015/gridster/lib/gridsterSwap.service.js +134 -135
  27. package/esm2015/gridster/lib/gridsterUtils.service.js +137 -138
  28. package/esm2015/lib/custom.notifier.options.js +46 -47
  29. package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +496 -497
  30. package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +471 -462
  31. package/esm2015/lib/ra.base.dashboard.filter.js +75 -76
  32. package/esm2015/lib/ra.base.dashboard.template.js +71 -72
  33. package/esm2015/lib/ra.dashbard.event.bus.js +85 -86
  34. package/esm2015/lib/ra.dashboard.module.js +51 -50
  35. package/esm2015/lib/ra.dashboard.service.js +144 -145
  36. package/esm2015/lib/ra.event.enum.js +51 -52
  37. package/esm2015/lib/ra.gridster.config.js +67 -68
  38. package/esm2015/public-api.js +16 -17
  39. package/esm2015/schneideress-dashboardframework.js +14 -15
  40. package/esm5/gridster/index.js +18 -19
  41. package/esm5/gridster/lib/gridster.component.js +803 -804
  42. package/esm5/gridster/lib/gridster.interface.js +94 -95
  43. package/esm5/gridster/lib/gridster.module.js +31 -32
  44. package/esm5/gridster/lib/gridsterCompact.service.js +253 -254
  45. package/esm5/gridster/lib/gridsterConfig.constant.js +179 -180
  46. package/esm5/gridster/lib/gridsterConfig.interface.js +219 -220
  47. package/esm5/gridster/lib/gridsterConfigS.interface.js +161 -162
  48. package/esm5/gridster/lib/gridsterDraggable.service.js +549 -550
  49. package/esm5/gridster/lib/gridsterEmptyCell.service.js +358 -359
  50. package/esm5/gridster/lib/gridsterItem.component.js +238 -239
  51. package/esm5/gridster/lib/gridsterItem.interface.js +46 -47
  52. package/esm5/gridster/lib/gridsterItemComponent.interface.js +58 -59
  53. package/esm5/gridster/lib/gridsterPreview.component.js +70 -71
  54. package/esm5/gridster/lib/gridsterPush.service.js +547 -548
  55. package/esm5/gridster/lib/gridsterPushResize.service.js +423 -424
  56. package/esm5/gridster/lib/gridsterRenderer.service.js +323 -324
  57. package/esm5/gridster/lib/gridsterResizable.service.js +629 -630
  58. package/esm5/gridster/lib/gridsterResizeEventType.interface.js +19 -20
  59. package/esm5/gridster/lib/gridsterScroll.service.js +195 -196
  60. package/esm5/gridster/lib/gridsterSwap.service.js +152 -153
  61. package/esm5/gridster/lib/gridsterUtils.service.js +177 -178
  62. package/esm5/lib/custom.notifier.options.js +46 -47
  63. package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +588 -589
  64. package/esm5/lib/ra-widget-container/ra.widget.container.component.js +584 -575
  65. package/esm5/lib/ra.base.dashboard.filter.js +81 -82
  66. package/esm5/lib/ra.base.dashboard.template.js +74 -75
  67. package/esm5/lib/ra.dashbard.event.bus.js +125 -126
  68. package/esm5/lib/ra.dashboard.module.js +55 -54
  69. package/esm5/lib/ra.dashboard.service.js +221 -222
  70. package/esm5/lib/ra.event.enum.js +51 -52
  71. package/esm5/lib/ra.gridster.config.js +67 -68
  72. package/esm5/public-api.js +16 -17
  73. package/esm5/schneideress-dashboardframework.js +14 -15
  74. package/fesm2015/schneideress-dashboardframework.js +6118 -6136
  75. package/fesm2015/schneideress-dashboardframework.js.map +1 -1
  76. package/fesm5/schneideress-dashboardframework.js +7015 -7033
  77. package/fesm5/schneideress-dashboardframework.js.map +1 -1
  78. package/gridster/index.d.ts +11 -11
  79. package/gridster/lib/gridster.component.d.ts +67 -67
  80. package/gridster/lib/gridster.interface.d.ts +46 -46
  81. package/gridster/lib/gridster.module.d.ts +2 -2
  82. package/gridster/lib/gridsterCompact.service.d.ts +15 -15
  83. package/gridster/lib/gridsterConfig.constant.d.ts +2 -2
  84. package/gridster/lib/gridsterConfig.interface.d.ts +133 -133
  85. package/gridster/lib/gridsterConfigS.interface.d.ts +93 -93
  86. package/gridster/lib/gridsterDraggable.service.d.ts +59 -59
  87. package/gridster/lib/gridsterEmptyCell.service.d.ts +29 -29
  88. package/gridster/lib/gridsterItem.component.d.ts +32 -32
  89. package/gridster/lib/gridsterItem.interface.d.ts +21 -21
  90. package/gridster/lib/gridsterItemComponent.interface.d.ts +25 -25
  91. package/gridster/lib/gridsterPreview.component.d.ts +10 -10
  92. package/gridster/lib/gridsterPush.service.d.ts +33 -33
  93. package/gridster/lib/gridsterPushResize.service.d.ts +26 -26
  94. package/gridster/lib/gridsterRenderer.service.d.ts +38 -38
  95. package/gridster/lib/gridsterResizable.service.d.ts +67 -67
  96. package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -6
  97. package/gridster/lib/gridsterScroll.service.d.ts +4 -4
  98. package/gridster/lib/gridsterSwap.service.d.ts +13 -13
  99. package/gridster/lib/gridsterUtils.service.d.ts +16 -16
  100. package/lib/custom.notifier.options.d.ts +2 -2
  101. package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +64 -64
  102. package/lib/ra-widget-container/ra.widget.container.component.d.ts +64 -63
  103. package/lib/ra.base.dashboard.filter.d.ts +10 -10
  104. package/lib/ra.base.dashboard.template.d.ts +15 -15
  105. package/lib/ra.dashbard.event.bus.d.ts +20 -20
  106. package/lib/ra.dashboard.module.d.ts +2 -2
  107. package/lib/ra.dashboard.service.d.ts +22 -22
  108. package/lib/ra.event.enum.d.ts +42 -42
  109. package/lib/ra.gridster.config.d.ts +2 -2
  110. package/package.json +1 -1
  111. package/public-api.d.ts +8 -8
  112. package/schneideress-dashboardframework.d.ts +9 -9
  113. package/schneideress-dashboardframework.metadata.json +1 -1
@@ -1,278 +1,277 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: gridster/lib/gridsterRenderer.service.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { Injectable } from '@angular/core';
7
- import { GridsterComponentInterface } from './gridster.interface';
8
- import { GridType } from './gridsterConfig.interface';
9
- export class GridsterRenderer {
10
- /**
11
- * @param {?} gridster
12
- */
13
- constructor(gridster) {
14
- this.gridster = gridster;
15
- }
16
- /**
17
- * @return {?}
18
- */
19
- destroy() {
20
- delete this.gridster;
21
- }
22
- /**
23
- * @param {?} el
24
- * @param {?} item
25
- * @param {?} renderer
26
- * @return {?}
27
- */
28
- updateItem(el, item, renderer) {
29
- if (this.gridster.mobile) {
30
- this.clearCellPosition(renderer, el);
31
- if (this.gridster.$options.keepFixedHeightInMobile) {
32
- renderer.setStyle(el, 'height', (item.rows * this.gridster.$options.fixedRowHeight) + 'px');
33
- }
34
- else {
35
- renderer.setStyle(el, 'height', (this.gridster.curWidth / 2 * item.rows) + 'px');
36
- }
37
- if (this.gridster.$options.keepFixedWidthInMobile) {
38
- renderer.setStyle(el, 'width', this.gridster.$options.fixedColWidth + 'px');
39
- }
40
- else {
41
- renderer.setStyle(el, 'width', '');
42
- }
43
- renderer.setStyle(el, 'margin-bottom', this.gridster.$options.margin + 'px');
44
- renderer.setStyle(el, 'margin-right', '');
45
- }
46
- else {
47
- /** @type {?} */
48
- const x = Math.round(this.gridster.curColWidth * item.x);
49
- /** @type {?} */
50
- const y = Math.round(this.gridster.curRowHeight * item.y);
51
- /** @type {?} */
52
- const width = this.gridster.curColWidth * item.cols - this.gridster.$options.margin;
53
- /** @type {?} */
54
- const height = (this.gridster.curRowHeight * item.rows - this.gridster.$options.margin);
55
- // set the cell style
56
- this.setCellPosition(renderer, el, x, y);
57
- renderer.setStyle(el, 'width', width + 'px');
58
- renderer.setStyle(el, 'height', height + 'px');
59
- /** @type {?} */
60
- let marginBottom = null;
61
- /** @type {?} */
62
- let marginRight = null;
63
- if (this.gridster.$options.outerMargin) {
64
- if (this.gridster.rows === item.rows + item.y) {
65
- if (this.gridster.$options.outerMarginBottom !== null) {
66
- marginBottom = this.gridster.$options.outerMarginBottom + 'px';
67
- }
68
- else {
69
- marginBottom = this.gridster.$options.margin + 'px';
70
- }
71
- }
72
- if (this.gridster.columns === item.cols + item.x) {
73
- if (this.gridster.$options.outerMarginBottom !== null) {
74
- marginRight = this.gridster.$options.outerMarginRight + 'px';
75
- }
76
- else {
77
- marginRight = this.gridster.$options.margin + 'px';
78
- }
79
- }
80
- }
81
- renderer.setStyle(el, 'margin-bottom', marginBottom);
82
- renderer.setStyle(el, 'margin-right', marginRight);
83
- }
84
- }
85
- /**
86
- * @return {?}
87
- */
88
- updateGridster() {
89
- /** @type {?} */
90
- let addClass = '';
91
- /** @type {?} */
92
- let removeClass1 = '';
93
- /** @type {?} */
94
- let removeClass2 = '';
95
- /** @type {?} */
96
- let removeClass3 = '';
97
- if (this.gridster.$options.gridType === GridType.Fit) {
98
- addClass = GridType.Fit;
99
- removeClass1 = GridType.ScrollVertical;
100
- removeClass2 = GridType.ScrollHorizontal;
101
- removeClass3 = GridType.Fixed;
102
- }
103
- else if (this.gridster.$options.gridType === GridType.ScrollVertical) {
104
- this.gridster.curRowHeight = this.gridster.curColWidth;
105
- addClass = GridType.ScrollVertical;
106
- removeClass1 = GridType.Fit;
107
- removeClass2 = GridType.ScrollHorizontal;
108
- removeClass3 = GridType.Fixed;
109
- }
110
- else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {
111
- this.gridster.curColWidth = this.gridster.curRowHeight;
112
- addClass = GridType.ScrollHorizontal;
113
- removeClass1 = GridType.Fit;
114
- removeClass2 = GridType.ScrollVertical;
115
- removeClass3 = GridType.Fixed;
116
- }
117
- else if (this.gridster.$options.gridType === GridType.Fixed) {
118
- this.gridster.curColWidth = this.gridster.$options.fixedColWidth +
119
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
120
- this.gridster.curRowHeight = this.gridster.$options.fixedRowHeight +
121
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
122
- addClass = GridType.Fixed;
123
- removeClass1 = GridType.Fit;
124
- removeClass2 = GridType.ScrollVertical;
125
- removeClass3 = GridType.ScrollHorizontal;
126
- }
127
- else if (this.gridster.$options.gridType === GridType.VerticalFixed) {
128
- this.gridster.curRowHeight = this.gridster.$options.fixedRowHeight +
129
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
130
- addClass = GridType.ScrollVertical;
131
- removeClass1 = GridType.Fit;
132
- removeClass2 = GridType.ScrollHorizontal;
133
- removeClass3 = GridType.Fixed;
134
- }
135
- else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {
136
- this.gridster.curColWidth = this.gridster.$options.fixedColWidth +
137
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
138
- addClass = GridType.ScrollHorizontal;
139
- removeClass1 = GridType.Fit;
140
- removeClass2 = GridType.ScrollVertical;
141
- removeClass3 = GridType.Fixed;
142
- }
143
- if (this.gridster.mobile) {
144
- this.gridster.renderer.removeClass(this.gridster.el, addClass);
145
- }
146
- else {
147
- this.gridster.renderer.addClass(this.gridster.el, addClass);
148
- }
149
- this.gridster.renderer.removeClass(this.gridster.el, removeClass1);
150
- this.gridster.renderer.removeClass(this.gridster.el, removeClass2);
151
- this.gridster.renderer.removeClass(this.gridster.el, removeClass3);
152
- }
153
- /**
154
- * @param {?} i
155
- * @return {?}
156
- */
157
- getGridColumnStyle(i) {
158
- return Object.assign({}, this.getLeftPosition(this.gridster.curColWidth * i), { width: this.gridster.curColWidth - this.gridster.$options.margin + 'px', height: this.gridster.gridRows.length * this.gridster.curRowHeight - this.gridster.$options.margin + 'px' });
159
- }
160
- /**
161
- * @param {?} i
162
- * @return {?}
163
- */
164
- getGridRowStyle(i) {
165
- return Object.assign({}, this.getTopPosition(this.gridster.curRowHeight * i), { width: this.gridster.gridColumns.length * this.gridster.curColWidth - this.gridster.$options.margin + 'px', height: this.gridster.curRowHeight - this.gridster.$options.margin + 'px' });
166
- }
167
- /**
168
- * @param {?} d
169
- * @return {?}
170
- */
171
- getLeftPosition(d) {
172
- if (this.gridster.$options.useTransformPositioning) {
173
- return {
174
- transform: 'translateX(' + d + 'px)',
175
- };
176
- }
177
- else {
178
- return {
179
- left: (this.getLeftMargin() + d) + 'px'
180
- };
181
- }
182
- }
183
- /**
184
- * @param {?} d
185
- * @return {?}
186
- */
187
- getTopPosition(d) {
188
- if (this.gridster.$options.useTransformPositioning) {
189
- return {
190
- transform: 'translateY(' + d + 'px)',
191
- };
192
- }
193
- else {
194
- return {
195
- top: this.getTopMargin() + d + 'px'
196
- };
197
- }
198
- }
199
- /**
200
- * @param {?} renderer
201
- * @param {?} el
202
- * @return {?}
203
- */
204
- clearCellPosition(renderer, el) {
205
- if (this.gridster.$options.useTransformPositioning) {
206
- renderer.setStyle(el, 'transform', '');
207
- }
208
- else {
209
- renderer.setStyle(el, 'top', '');
210
- renderer.setStyle(el, 'left', '');
211
- }
212
- }
213
- /**
214
- * @param {?} renderer
215
- * @param {?} el
216
- * @param {?} x
217
- * @param {?} y
218
- * @return {?}
219
- */
220
- setCellPosition(renderer, el, x, y) {
221
- if (this.gridster.$options.useTransformPositioning) {
222
- /** @type {?} */
223
- const transform = 'translate3d(' + x + 'px, ' + y + 'px, 0)';
224
- renderer.setStyle(el, 'transform', transform);
225
- }
226
- else {
227
- renderer.setStyle(el, 'left', this.getLeftMargin() + x + 'px');
228
- renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');
229
- }
230
- }
231
- /**
232
- * @return {?}
233
- */
234
- getLeftMargin() {
235
- if (this.gridster.$options.outerMargin) {
236
- if (this.gridster.$options.outerMarginLeft !== null) {
237
- return this.gridster.$options.outerMarginLeft;
238
- }
239
- else {
240
- return this.gridster.$options.margin;
241
- }
242
- }
243
- else {
244
- return 0;
245
- }
246
- }
247
- /**
248
- * @return {?}
249
- */
250
- getTopMargin() {
251
- if (this.gridster.$options.outerMargin) {
252
- if (this.gridster.$options.outerMarginTop !== null) {
253
- return this.gridster.$options.outerMarginTop;
254
- }
255
- else {
256
- return this.gridster.$options.margin;
257
- }
258
- }
259
- else {
260
- return 0;
261
- }
262
- }
263
- }
264
- GridsterRenderer.decorators = [
265
- { type: Injectable }
266
- ];
267
- /** @nocollapse */
268
- GridsterRenderer.ctorParameters = () => [
269
- { type: GridsterComponentInterface }
270
- ];
271
- if (false) {
272
- /**
273
- * @type {?}
274
- * @private
275
- */
276
- GridsterRenderer.prototype.gridster;
277
- }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNjaG5laWRlcmVzcy9kYXNoYm9hcmRmcmFtZXdvcmsvIiwic291cmNlcyI6WyJncmlkc3Rlci9saWIvZ3JpZHN0ZXJSZW5kZXJlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFJcEQsTUFBTSxPQUFPLGdCQUFnQjs7OztJQUUzQixZQUFvQixRQUFvQztRQUFwQyxhQUFRLEdBQVIsUUFBUSxDQUE0QjtJQUN4RCxDQUFDOzs7O0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDOzs7Ozs7O0lBRUQsVUFBVSxDQUFDLEVBQU8sRUFBRSxJQUFrQixFQUFFLFFBQW1CO1FBQ3pELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO2dCQUNsRCxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzdGO2lCQUFNO2dCQUNMLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFD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LENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDdEM7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUM7U0FDVjtJQUNILENBQUM7OztZQXJNRixVQUFVOzs7O1lBSkgsMEJBQTBCOzs7Ozs7O0lBT3BCLG9DQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7R3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2V9IGZyb20gJy4vZ3JpZHN0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtHcmlkVHlwZX0gZnJvbSAnLi9ncmlkc3RlckNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0dyaWRzdGVySXRlbX0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEdyaWRzdGVyUmVuZGVyZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkge1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGRlbGV0ZSB0aGlzLmdyaWRzdGVyO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSXRlbShlbDogYW55LCBpdGVtOiBHcmlkc3Rlckl0ZW0sIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLm1vYmlsZSkge1xyXG4gICAgICB0aGlzLmNsZWFyQ2VsbFBvc2l0aW9uKHJlbmRlcmVyLCBlbCk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmtlZXBGaXhlZEhlaWdodEluTW9iaWxlKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdoZWlnaHQnLCAoaXRlbS5yb3dzICogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZFJvd0hlaWdodCkgKyAncHgnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2hlaWdodCcsICh0aGlzLmdyaWRzdGVyLmN1cldpZHRoIC8gMiAqIGl0ZW0ucm93cykgKyAncHgnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5rZWVwRml4ZWRXaWR0aEluTW9iaWxlKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd3aWR0aCcsIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZml4ZWRDb2xXaWR0aCArICdweCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnd2lkdGgnLCAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnbWFyZ2luLWJvdHRvbScsIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luICsgJ3B4Jyk7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnbWFyZ2luLXJpZ2h0JywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeCA9IE1hdGgucm91bmQodGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCAqIGl0ZW0ueCk7XHJcbiAgICAgIGNvbnN0IHkgPSBNYXRoLnJvdW5kKHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ICogaXRlbS55KTtcclxuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoICogaXRlbS5jb2xzIC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW47XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCAqIGl0ZW0ucm93cyAtIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luKTtcclxuICAgICAgLy8gc2V0IHRoZSBjZWxsIHN0eWxlXHJcbiAgICAgIHRoaXMuc2V0Q2VsbFBvc2l0aW9uKHJlbmRlcmVyLCBlbCwgeCwgeSk7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnd2lkdGgnLCB3aWR0aCArICdweCcpO1xyXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2hlaWdodCcsIGhlaWdodCArICdweCcpO1xyXG4gICAgICBsZXQgbWFyZ2luQm90dG9tOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgbGV0IG1hcmdpblJpZ2h0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW4pIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkc3Rlci5yb3dzID09PSBpdGVtLnJvd3MgKyBpdGVtLnkpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b20gKyAncHgnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ncmlkc3Rlci5jb2x1bW5zID09PSBpdGVtLmNvbHMgKyBpdGVtLngpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblJpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdtYXJnaW4tYm90dG9tJywgbWFyZ2luQm90dG9tKTtcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdtYXJnaW4tcmlnaHQnLCBtYXJnaW5SaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVHcmlkc3RlcigpIHtcclxuICAgIGxldCBhZGRDbGFzcyA9ICcnO1xyXG4gICAgbGV0IHJlbW92ZUNsYXNzMSA9ICcnO1xyXG4gICAgbGV0IHJlbW92ZUNsYXNzMiA9ICcnO1xyXG4gICAgbGV0IHJlbW92ZUNsYXNzMyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLkZpdCkge1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MxID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMiA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlID09PSBHcmlkVHlwZS5TY3JvbGxWZXJ0aWNhbCkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCA9IHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGg7XHJcbiAgICAgIGFkZENsYXNzID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcclxuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWwpIHtcclxuICAgICAgdGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCA9IHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0O1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlID09PSBHcmlkVHlwZS5GaXhlZCkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZENvbFdpZHRoICtcclxuICAgICAgICAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5pZ25vcmVNYXJnaW5JblJvdyA/IDAgOiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbik7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZFJvd0hlaWdodCArXHJcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3cgPyAwIDogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgICByZW1vdmVDbGFzczEgPSBHcmlkVHlwZS5GaXQ7XHJcbiAgICAgIHJlbW92ZUNsYXNzMiA9IEdyaWRUeXBlLlNjcm9sbFZlcnRpY2FsO1xyXG4gICAgICByZW1vdmVDbGFzczMgPSBHcmlkVHlwZS5TY3JvbGxIb3Jpem9udGFsO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlID09PSBHcmlkVHlwZS5WZXJ0aWNhbEZpeGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZFJvd0hlaWdodCArXHJcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3cgPyAwIDogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLlNjcm9sbFZlcnRpY2FsO1xyXG4gICAgICByZW1vdmVDbGFzczEgPSBHcmlkVHlwZS5GaXQ7XHJcbiAgICAgIHJlbW92ZUNsYXNzMiA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlID09PSBHcmlkVHlwZS5Ib3Jpem9udGFsRml4ZWQpIHtcclxuICAgICAgdGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZml4ZWRDb2xXaWR0aCArXHJcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3cgPyAwIDogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLm1vYmlsZSkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZ3JpZHN0ZXIuZWwsIGFkZENsYXNzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ncmlkc3Rlci5lbCwgYWRkQ2xhc3MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmdyaWRzdGVyLmVsLCByZW1vdmVDbGFzczEpO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmdyaWRzdGVyLmVsLCByZW1vdmVDbGFzczIpO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmdyaWRzdGVyLmVsLCByZW1vdmVDbGFzczMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZENvbHVtblN0eWxlKGk6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4udGhpcy5nZXRMZWZ0UG9zaXRpb24odGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCAqIGkpLFxyXG4gICAgICB3aWR0aDogdGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCAtIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luICsgJ3B4JyxcclxuICAgICAgaGVpZ2h0OiB0aGlzLmdyaWRzdGVyLmdyaWRSb3dzLmxlbmd0aCAqIHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0IC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZFJvd1N0eWxlKGk6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4udGhpcy5nZXRUb3BQb3NpdGlvbih0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCAqIGkpLFxyXG4gICAgICB3aWR0aDogdGhpcy5ncmlkc3Rlci5ncmlkQ29sdW1ucy5sZW5ndGggKiB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoIC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0IC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVmdFBvc2l0aW9uKGQ6IG51bWJlcik6IE9iamVjdCB7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy51c2VUcmFuc2Zvcm1Qb3NpdGlvbmluZykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoJyArIGQgKyAncHgpJyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbGVmdDogKHRoaXMuZ2V0TGVmdE1hcmdpbigpICsgZCkgKyAncHgnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb3BQb3NpdGlvbihkOiBudW1iZXIpOiBPYmplY3Qge1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMudXNlVHJhbnNmb3JtUG9zaXRpb25pbmcpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKCcgKyBkICsgJ3B4KScsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRvcDogdGhpcy5nZXRUb3BNYXJnaW4oKSArIGQgKyAncHgnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckNlbGxQb3NpdGlvbihyZW5kZXJlcjogUmVuZGVyZXIyLCBlbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy51c2VUcmFuc2Zvcm1Qb3NpdGlvbmluZykge1xyXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ3RyYW5zZm9ybScsICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAndG9wJywgJycpO1xyXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2xlZnQnLCAnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRDZWxsUG9zaXRpb24ocmVuZGVyZXI6IFJlbmRlcmVyMiwgZWw6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnVzZVRyYW5zZm9ybVBvc2l0aW9uaW5nKSB7XHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgnICsgeCArICdweCwgJyArIHkgKyAncHgsIDApJztcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0cmFuc2Zvcm0nLCB0cmFuc2Zvcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdsZWZ0JywgdGhpcy5nZXRMZWZ0TWFyZ2luKCkgKyB4ICsgJ3B4Jyk7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAndG9wJywgdGhpcy5nZXRUb3BNYXJnaW4oKSArIHkgKyAncHgnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExlZnRNYXJnaW4oKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG9wTWFyZ2luKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpbikge1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblRvcCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luVG9wO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { Injectable } from '@angular/core';
6
+ import { GridsterComponentInterface } from './gridster.interface';
7
+ import { GridType } from './gridsterConfig.interface';
8
+ export class GridsterRenderer {
9
+ /**
10
+ * @param {?} gridster
11
+ */
12
+ constructor(gridster) {
13
+ this.gridster = gridster;
14
+ }
15
+ /**
16
+ * @return {?}
17
+ */
18
+ destroy() {
19
+ delete this.gridster;
20
+ }
21
+ /**
22
+ * @param {?} el
23
+ * @param {?} item
24
+ * @param {?} renderer
25
+ * @return {?}
26
+ */
27
+ updateItem(el, item, renderer) {
28
+ if (this.gridster.mobile) {
29
+ this.clearCellPosition(renderer, el);
30
+ if (this.gridster.$options.keepFixedHeightInMobile) {
31
+ renderer.setStyle(el, 'height', (item.rows * this.gridster.$options.fixedRowHeight) + 'px');
32
+ }
33
+ else {
34
+ renderer.setStyle(el, 'height', (this.gridster.curWidth / 2 * item.rows) + 'px');
35
+ }
36
+ if (this.gridster.$options.keepFixedWidthInMobile) {
37
+ renderer.setStyle(el, 'width', this.gridster.$options.fixedColWidth + 'px');
38
+ }
39
+ else {
40
+ renderer.setStyle(el, 'width', '');
41
+ }
42
+ renderer.setStyle(el, 'margin-bottom', this.gridster.$options.margin + 'px');
43
+ renderer.setStyle(el, 'margin-right', '');
44
+ }
45
+ else {
46
+ /** @type {?} */
47
+ const x = Math.round(this.gridster.curColWidth * item.x);
48
+ /** @type {?} */
49
+ const y = Math.round(this.gridster.curRowHeight * item.y);
50
+ /** @type {?} */
51
+ const width = this.gridster.curColWidth * item.cols - this.gridster.$options.margin;
52
+ /** @type {?} */
53
+ const height = (this.gridster.curRowHeight * item.rows - this.gridster.$options.margin);
54
+ // set the cell style
55
+ this.setCellPosition(renderer, el, x, y);
56
+ renderer.setStyle(el, 'width', width + 'px');
57
+ renderer.setStyle(el, 'height', height + 'px');
58
+ /** @type {?} */
59
+ let marginBottom = null;
60
+ /** @type {?} */
61
+ let marginRight = null;
62
+ if (this.gridster.$options.outerMargin) {
63
+ if (this.gridster.rows === item.rows + item.y) {
64
+ if (this.gridster.$options.outerMarginBottom !== null) {
65
+ marginBottom = this.gridster.$options.outerMarginBottom + 'px';
66
+ }
67
+ else {
68
+ marginBottom = this.gridster.$options.margin + 'px';
69
+ }
70
+ }
71
+ if (this.gridster.columns === item.cols + item.x) {
72
+ if (this.gridster.$options.outerMarginBottom !== null) {
73
+ marginRight = this.gridster.$options.outerMarginRight + 'px';
74
+ }
75
+ else {
76
+ marginRight = this.gridster.$options.margin + 'px';
77
+ }
78
+ }
79
+ }
80
+ renderer.setStyle(el, 'margin-bottom', marginBottom);
81
+ renderer.setStyle(el, 'margin-right', marginRight);
82
+ }
83
+ }
84
+ /**
85
+ * @return {?}
86
+ */
87
+ updateGridster() {
88
+ /** @type {?} */
89
+ let addClass = '';
90
+ /** @type {?} */
91
+ let removeClass1 = '';
92
+ /** @type {?} */
93
+ let removeClass2 = '';
94
+ /** @type {?} */
95
+ let removeClass3 = '';
96
+ if (this.gridster.$options.gridType === GridType.Fit) {
97
+ addClass = GridType.Fit;
98
+ removeClass1 = GridType.ScrollVertical;
99
+ removeClass2 = GridType.ScrollHorizontal;
100
+ removeClass3 = GridType.Fixed;
101
+ }
102
+ else if (this.gridster.$options.gridType === GridType.ScrollVertical) {
103
+ this.gridster.curRowHeight = this.gridster.curColWidth;
104
+ addClass = GridType.ScrollVertical;
105
+ removeClass1 = GridType.Fit;
106
+ removeClass2 = GridType.ScrollHorizontal;
107
+ removeClass3 = GridType.Fixed;
108
+ }
109
+ else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {
110
+ this.gridster.curColWidth = this.gridster.curRowHeight;
111
+ addClass = GridType.ScrollHorizontal;
112
+ removeClass1 = GridType.Fit;
113
+ removeClass2 = GridType.ScrollVertical;
114
+ removeClass3 = GridType.Fixed;
115
+ }
116
+ else if (this.gridster.$options.gridType === GridType.Fixed) {
117
+ this.gridster.curColWidth = this.gridster.$options.fixedColWidth +
118
+ (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
119
+ this.gridster.curRowHeight = this.gridster.$options.fixedRowHeight +
120
+ (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
121
+ addClass = GridType.Fixed;
122
+ removeClass1 = GridType.Fit;
123
+ removeClass2 = GridType.ScrollVertical;
124
+ removeClass3 = GridType.ScrollHorizontal;
125
+ }
126
+ else if (this.gridster.$options.gridType === GridType.VerticalFixed) {
127
+ this.gridster.curRowHeight = this.gridster.$options.fixedRowHeight +
128
+ (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
129
+ addClass = GridType.ScrollVertical;
130
+ removeClass1 = GridType.Fit;
131
+ removeClass2 = GridType.ScrollHorizontal;
132
+ removeClass3 = GridType.Fixed;
133
+ }
134
+ else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {
135
+ this.gridster.curColWidth = this.gridster.$options.fixedColWidth +
136
+ (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
137
+ addClass = GridType.ScrollHorizontal;
138
+ removeClass1 = GridType.Fit;
139
+ removeClass2 = GridType.ScrollVertical;
140
+ removeClass3 = GridType.Fixed;
141
+ }
142
+ if (this.gridster.mobile) {
143
+ this.gridster.renderer.removeClass(this.gridster.el, addClass);
144
+ }
145
+ else {
146
+ this.gridster.renderer.addClass(this.gridster.el, addClass);
147
+ }
148
+ this.gridster.renderer.removeClass(this.gridster.el, removeClass1);
149
+ this.gridster.renderer.removeClass(this.gridster.el, removeClass2);
150
+ this.gridster.renderer.removeClass(this.gridster.el, removeClass3);
151
+ }
152
+ /**
153
+ * @param {?} i
154
+ * @return {?}
155
+ */
156
+ getGridColumnStyle(i) {
157
+ return Object.assign({}, this.getLeftPosition(this.gridster.curColWidth * i), { width: this.gridster.curColWidth - this.gridster.$options.margin + 'px', height: this.gridster.gridRows.length * this.gridster.curRowHeight - this.gridster.$options.margin + 'px' });
158
+ }
159
+ /**
160
+ * @param {?} i
161
+ * @return {?}
162
+ */
163
+ getGridRowStyle(i) {
164
+ return Object.assign({}, this.getTopPosition(this.gridster.curRowHeight * i), { width: this.gridster.gridColumns.length * this.gridster.curColWidth - this.gridster.$options.margin + 'px', height: this.gridster.curRowHeight - this.gridster.$options.margin + 'px' });
165
+ }
166
+ /**
167
+ * @param {?} d
168
+ * @return {?}
169
+ */
170
+ getLeftPosition(d) {
171
+ if (this.gridster.$options.useTransformPositioning) {
172
+ return {
173
+ transform: 'translateX(' + d + 'px)',
174
+ };
175
+ }
176
+ else {
177
+ return {
178
+ left: (this.getLeftMargin() + d) + 'px'
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * @param {?} d
184
+ * @return {?}
185
+ */
186
+ getTopPosition(d) {
187
+ if (this.gridster.$options.useTransformPositioning) {
188
+ return {
189
+ transform: 'translateY(' + d + 'px)',
190
+ };
191
+ }
192
+ else {
193
+ return {
194
+ top: this.getTopMargin() + d + 'px'
195
+ };
196
+ }
197
+ }
198
+ /**
199
+ * @param {?} renderer
200
+ * @param {?} el
201
+ * @return {?}
202
+ */
203
+ clearCellPosition(renderer, el) {
204
+ if (this.gridster.$options.useTransformPositioning) {
205
+ renderer.setStyle(el, 'transform', '');
206
+ }
207
+ else {
208
+ renderer.setStyle(el, 'top', '');
209
+ renderer.setStyle(el, 'left', '');
210
+ }
211
+ }
212
+ /**
213
+ * @param {?} renderer
214
+ * @param {?} el
215
+ * @param {?} x
216
+ * @param {?} y
217
+ * @return {?}
218
+ */
219
+ setCellPosition(renderer, el, x, y) {
220
+ if (this.gridster.$options.useTransformPositioning) {
221
+ /** @type {?} */
222
+ const transform = 'translate3d(' + x + 'px, ' + y + 'px, 0)';
223
+ renderer.setStyle(el, 'transform', transform);
224
+ }
225
+ else {
226
+ renderer.setStyle(el, 'left', this.getLeftMargin() + x + 'px');
227
+ renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');
228
+ }
229
+ }
230
+ /**
231
+ * @return {?}
232
+ */
233
+ getLeftMargin() {
234
+ if (this.gridster.$options.outerMargin) {
235
+ if (this.gridster.$options.outerMarginLeft !== null) {
236
+ return this.gridster.$options.outerMarginLeft;
237
+ }
238
+ else {
239
+ return this.gridster.$options.margin;
240
+ }
241
+ }
242
+ else {
243
+ return 0;
244
+ }
245
+ }
246
+ /**
247
+ * @return {?}
248
+ */
249
+ getTopMargin() {
250
+ if (this.gridster.$options.outerMargin) {
251
+ if (this.gridster.$options.outerMarginTop !== null) {
252
+ return this.gridster.$options.outerMarginTop;
253
+ }
254
+ else {
255
+ return this.gridster.$options.margin;
256
+ }
257
+ }
258
+ else {
259
+ return 0;
260
+ }
261
+ }
262
+ }
263
+ GridsterRenderer.decorators = [
264
+ { type: Injectable }
265
+ ];
266
+ /** @nocollapse */
267
+ GridsterRenderer.ctorParameters = () => [
268
+ { type: GridsterComponentInterface }
269
+ ];
270
+ if (false) {
271
+ /**
272
+ * @type {?}
273
+ * @private
274
+ */
275
+ GridsterRenderer.prototype.gridster;
276
+ }
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNjaG5laWRlcmVzcy9kYXNoYm9hcmRmcmFtZXdvcmsvIiwic291cmNlcyI6WyJncmlkc3Rlci9saWIvZ3JpZHN0ZXJSZW5kZXJlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUlwRCxNQUFNLE9BQU8sZ0JBQWdCOzs7O0lBRTNCLFlBQW9CLFFBQW9DO1FBQXBDLGFBQVEsR0FBUixRQUFRLENBQTRCO0lBQ3hELENBQUM7Ozs7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7Ozs7Ozs7SUFFRCxVQUFVLENBQUMsRUFBTyxFQUFFLElBQWtCLEVBQUUsUUFBbUI7UUFDekQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2xELFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDN0Y7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMs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Q0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUN0QztTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQztTQUNWO0lBQ0gsQ0FBQzs7O1lBck1GLFVBQVU7Ozs7WUFKSCwwQkFBMEI7Ozs7Ozs7SUFPcEIsb0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0dyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlfSBmcm9tICcuL2dyaWRzdGVyLmludGVyZmFjZSc7XG5pbXBvcnQge0dyaWRUeXBlfSBmcm9tICcuL2dyaWRzdGVyQ29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQge0dyaWRzdGVySXRlbX0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRzdGVyUmVuZGVyZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlKSB7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLmdyaWRzdGVyO1xuICB9XG5cbiAgdXBkYXRlSXRlbShlbDogYW55LCBpdGVtOiBHcmlkc3Rlckl0ZW0sIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICBpZiAodGhpcy5ncmlkc3Rlci5tb2JpbGUpIHtcbiAgICAgIHRoaXMuY2xlYXJDZWxsUG9zaXRpb24ocmVuZGVyZXIsIGVsKTtcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmtlZXBGaXhlZEhlaWdodEluTW9iaWxlKSB7XG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnaGVpZ2h0JywgKGl0ZW0ucm93cyAqIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZml4ZWRSb3dIZWlnaHQpICsgJ3B4Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2hlaWdodCcsICh0aGlzLmdyaWRzdGVyLmN1cldpZHRoIC8gMiAqIGl0ZW0ucm93cykgKyAncHgnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmtlZXBGaXhlZFdpZHRoSW5Nb2JpbGUpIHtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd3aWR0aCcsIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZml4ZWRDb2xXaWR0aCArICdweCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd3aWR0aCcsICcnKTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdtYXJnaW4tYm90dG9tJywgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnKTtcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnbWFyZ2luLXJpZ2h0JywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB4ID0gTWF0aC5yb3VuZCh0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoICogaXRlbS54KTtcbiAgICAgIGNvbnN0IHkgPSBNYXRoLnJvdW5kKHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ICogaXRlbS55KTtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCAqIGl0ZW0uY29scyAtIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ICogaXRlbS5yb3dzIC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xuICAgICAgLy8gc2V0IHRoZSBjZWxsIHN0eWxlXG4gICAgICB0aGlzLnNldENlbGxQb3NpdGlvbihyZW5kZXJlciwgZWwsIHgsIHkpO1xuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2hlaWdodCcsIGhlaWdodCArICdweCcpO1xuICAgICAgbGV0IG1hcmdpbkJvdHRvbTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgbWFyZ2luUmlnaHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIucm93cyA9PT0gaXRlbS5yb3dzICsgaXRlbS55KSB7XG4gICAgICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b20gIT09IG51bGwpIHtcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b20gKyAncHgnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXJnaW5Cb3R0b20gPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbiArICdweCc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNvbHVtbnMgPT09IGl0ZW0uY29scyArIGl0ZW0ueCkge1xuICAgICAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tICE9PSBudWxsKSB7XG4gICAgICAgICAgICBtYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5SaWdodCArICdweCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ21hcmdpbi1ib3R0b20nLCBtYXJnaW5Cb3R0b20pO1xuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdtYXJnaW4tcmlnaHQnLCBtYXJnaW5SaWdodCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlR3JpZHN0ZXIoKSB7XG4gICAgbGV0IGFkZENsYXNzID0gJyc7XG4gICAgbGV0IHJlbW92ZUNsYXNzMSA9ICcnO1xuICAgIGxldCByZW1vdmVDbGFzczIgPSAnJztcbiAgICBsZXQgcmVtb3ZlQ2xhc3MzID0gJyc7XG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLkZpdCkge1xuICAgICAgYWRkQ2xhc3MgPSBHcmlkVHlwZS5GaXQ7XG4gICAgICByZW1vdmVDbGFzczEgPSBHcmlkVHlwZS5TY3JvbGxWZXJ0aWNhbDtcbiAgICAgIHJlbW92ZUNsYXNzMiA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XG4gICAgICByZW1vdmVDbGFzczMgPSBHcmlkVHlwZS5GaXhlZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLlNjcm9sbFZlcnRpY2FsKSB7XG4gICAgICB0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCA9IHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGg7XG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLlNjcm9sbFZlcnRpY2FsO1xuICAgICAgcmVtb3ZlQ2xhc3MxID0gR3JpZFR5cGUuRml0O1xuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5ncmlkVHlwZSA9PT0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbCkge1xuICAgICAgdGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCA9IHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0O1xuICAgICAgYWRkQ2xhc3MgPSBHcmlkVHlwZS5TY3JvbGxIb3Jpem9udGFsO1xuICAgICAgcmVtb3ZlQ2xhc3MxID0gR3JpZFR5cGUuRml0O1xuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XG4gICAgICByZW1vdmVDbGFzczMgPSBHcmlkVHlwZS5GaXhlZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLkZpeGVkKSB7XG4gICAgICB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZENvbFdpZHRoICtcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3cgPyAwIDogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xuICAgICAgdGhpcy5ncmlkc3Rlci5jdXJSb3dIZWlnaHQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmZpeGVkUm93SGVpZ2h0ICtcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3cgPyAwIDogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xuICAgICAgYWRkQ2xhc3MgPSBHcmlkVHlwZS5GaXhlZDtcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcbiAgICAgIHJlbW92ZUNsYXNzMiA9IEdyaWRUeXBlLlNjcm9sbFZlcnRpY2FsO1xuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLlZlcnRpY2FsRml4ZWQpIHtcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZFJvd0hlaWdodCArXG4gICAgICAgICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmlnbm9yZU1hcmdpbkluUm93ID8gMCA6IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luKTtcbiAgICAgIGFkZENsYXNzID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XG4gICAgICByZW1vdmVDbGFzczEgPSBHcmlkVHlwZS5GaXQ7XG4gICAgICByZW1vdmVDbGFzczIgPSBHcmlkVHlwZS5TY3JvbGxIb3Jpem9udGFsO1xuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuRml4ZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlID09PSBHcmlkVHlwZS5Ib3Jpem9udGFsRml4ZWQpIHtcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmZpeGVkQ29sV2lkdGggK1xuICAgICAgICAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5pZ25vcmVNYXJnaW5JblJvdyA/IDAgOiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbik7XG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XG4gICAgICByZW1vdmVDbGFzczEgPSBHcmlkVHlwZS5GaXQ7XG4gICAgICByZW1vdmVDbGFzczIgPSBHcmlkVHlwZS5TY3JvbGxWZXJ0aWNhbDtcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdyaWRzdGVyLm1vYmlsZSkge1xuICAgICAgdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmdyaWRzdGVyLmVsLCBhZGRDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZHN0ZXIucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ncmlkc3Rlci5lbCwgYWRkQ2xhc3MpO1xuICAgIH1cbiAgICB0aGlzLmdyaWRzdGVyLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZ3JpZHN0ZXIuZWwsIHJlbW92ZUNsYXNzMSk7XG4gICAgdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmdyaWRzdGVyLmVsLCByZW1vdmVDbGFzczIpO1xuICAgIHRoaXMuZ3JpZHN0ZXIucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ncmlkc3Rlci5lbCwgcmVtb3ZlQ2xhc3MzKTtcbiAgfVxuXG4gIGdldEdyaWRDb2x1bW5TdHlsZShpOiBudW1iZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRMZWZ0UG9zaXRpb24odGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCAqIGkpLFxuICAgICAgd2lkdGg6IHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggLSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbiArICdweCcsXG4gICAgICBoZWlnaHQ6IHRoaXMuZ3JpZHN0ZXIuZ3JpZFJvd3MubGVuZ3RoICogdGhpcy5ncmlkc3Rlci5jdXJSb3dIZWlnaHQgLSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbiArICdweCdcbiAgICB9O1xuICB9XG5cbiAgZ2V0R3JpZFJvd1N0eWxlKGk6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRvcFBvc2l0aW9uKHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ICogaSksXG4gICAgICB3aWR0aDogdGhpcy5ncmlkc3Rlci5ncmlkQ29sdW1ucy5sZW5ndGggKiB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoIC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnLFxuICAgICAgaGVpZ2h0OiB0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCAtIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luICsgJ3B4J1xuICAgIH07XG4gIH1cblxuICBnZXRMZWZ0UG9zaXRpb24oZDogbnVtYmVyKTogT2JqZWN0IHtcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy51c2VUcmFuc2Zvcm1Qb3NpdGlvbmluZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgnICsgZCArICdweCknLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogKHRoaXMuZ2V0TGVmdE1hcmdpbigpICsgZCkgKyAncHgnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGdldFRvcFBvc2l0aW9uKGQ6IG51bWJlcik6IE9iamVjdCB7XG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMudXNlVHJhbnNmb3JtUG9zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoJyArIGQgKyAncHgpJyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogdGhpcy5nZXRUb3BNYXJnaW4oKSArIGQgKyAncHgnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ2VsbFBvc2l0aW9uKHJlbmRlcmVyOiBSZW5kZXJlcjIsIGVsOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy51c2VUcmFuc2Zvcm1Qb3NpdGlvbmluZykge1xuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAndG9wJywgJycpO1xuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdsZWZ0JywgJycpO1xuICAgIH1cbiAgfVxuXG4gIHNldENlbGxQb3NpdGlvbihyZW5kZXJlcjogUmVuZGVyZXIyLCBlbDogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnVzZVRyYW5zZm9ybVBvc2l0aW9uaW5nKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoJyArIHggKyAncHgsICcgKyB5ICsgJ3B4LCAwKSc7XG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnbGVmdCcsIHRoaXMuZ2V0TGVmdE1hcmdpbigpICsgeCArICdweCcpO1xuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0b3AnLCB0aGlzLmdldFRvcE1hcmdpbigpICsgeSArICdweCcpO1xuICAgIH1cbiAgfVxuXG4gIGdldExlZnRNYXJnaW4oKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpbikge1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5MZWZ0ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgZ2V0VG9wTWFyZ2luKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW4pIHtcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luVG9wICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luVG9wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==