@refinitiv-ui/efx-grid 6.0.58 → 6.0.60

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 (43) hide show
  1. package/lib/core/dist/core.js +4 -4
  2. package/lib/core/dist/core.min.js +1 -1
  3. package/lib/core/es6/grid/Core.js +1 -1
  4. package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +3 -3
  5. package/lib/grid/index.js +1 -1
  6. package/lib/grid/lib/efx-grid.d.ts +0 -1
  7. package/lib/grid/lib/efx-grid.js +8 -5
  8. package/lib/grid/themes/base.less +1 -1
  9. package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
  10. package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
  11. package/lib/grid/themes/halo/light/efx-grid.js +1 -1
  12. package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
  13. package/lib/grid/themes/solar/charcoal/efx-grid.js +1 -1
  14. package/lib/grid/themes/solar/charcoal/es5/all-elements.js +1 -1
  15. package/lib/grid/themes/solar/pearl/efx-grid.js +1 -1
  16. package/lib/grid/themes/solar/pearl/es5/all-elements.js +1 -1
  17. package/lib/rt-grid/dist/rt-grid.js +8 -8
  18. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  19. package/lib/rt-grid/es6/Grid.d.ts +3 -3
  20. package/lib/rt-grid/es6/Grid.js +8 -8
  21. package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +3 -1
  22. package/lib/tr-grid-column-stack/es6/ColumnStack.js +64 -8
  23. package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +65 -14
  24. package/lib/tr-grid-rowcoloring/es6/RowColoring.d.ts +2 -0
  25. package/lib/tr-grid-rowcoloring/es6/RowColoring.js +162 -118
  26. package/lib/tr-grid-util/es6/CellPainter.d.ts +4 -0
  27. package/lib/tr-grid-util/es6/CellPainter.js +43 -15
  28. package/lib/tr-grid-util/es6/ElementObserver.js +4 -2
  29. package/lib/tr-grid-util/es6/ElementWrapper.js +3 -2
  30. package/lib/tr-grid-util/es6/GridPlugin.js +5 -0
  31. package/lib/tr-grid-util/es6/SubTable.d.ts +4 -2
  32. package/lib/tr-grid-util/es6/SubTable.js +157 -79
  33. package/lib/tr-grid-util/es6/Table.d.ts +27 -10
  34. package/lib/tr-grid-util/es6/Table.js +104 -78
  35. package/lib/tr-grid-util/es6/formula/AdFinSubscription.js +1 -1
  36. package/lib/types/es6/ColumnStack.d.ts +3 -1
  37. package/lib/types/es6/RealtimeGrid/Grid.d.ts +3 -3
  38. package/lib/types/es6/RowColoring.d.ts +2 -0
  39. package/lib/types/es6/TextFormatting.d.ts +1 -1
  40. package/lib/utils/index.d.ts +2 -1
  41. package/lib/utils/index.js +2 -1
  42. package/lib/versions.json +4 -4
  43. package/package.json +3 -3
@@ -62,6 +62,10 @@ CellPainter.prototype._conditions = null;
62
62
  /** @type {Object}
63
63
  * @private
64
64
  */
65
+ CellPainter.prototype._effectiveStyles = null;
66
+ /** @type {Object}
67
+ * @private
68
+ */
65
69
  CellPainter.prototype._blinkCondition = null;
66
70
  /** @type {!Array}
67
71
  * @private
@@ -185,6 +189,7 @@ CellPainter.prototype.reset = function() {
185
189
  CellPainter.prototype.resetColoring = function() {
186
190
  // reset coloring type to allow other extensions to be able to set their new mode
187
191
  this._setColoringType(0);
192
+ this._effectiveStyles = null;
188
193
  this._conditions.length = 0;
189
194
  };
190
195
 
@@ -284,6 +289,18 @@ CellPainter.prototype._setColoringType = function(enumType) {
284
289
  }
285
290
  };
286
291
  /** @public
292
+ * @param {Object} mapping Effective styles mapping
293
+ */
294
+ CellPainter.prototype.setEffectiveStyles = function(mapping) {
295
+ this._effectiveStyles = mapping;
296
+ };
297
+ /** @public
298
+ * @return {Object}
299
+ */
300
+ CellPainter.prototype.getEffectiveStyles = function() {
301
+ return this._effectiveStyles;
302
+ };
303
+ /** @public
287
304
  * @param {Array.<CellPainter~Condition>} conditions
288
305
  */
289
306
  CellPainter.prototype.setConditions = function(conditions) {
@@ -901,9 +918,17 @@ CellPainter.clearCellStyle = function(cell, styles) {
901
918
  elem.classList.remove(elem._coloringCssClass);
902
919
  }
903
920
 
904
- styles = styles || CellPainter.supportedStyles;
905
- for(var i = styles.length; --i >= 0;) {
906
- elem.style[styles[i]] = ""; // WARNING: Very slow
921
+ if(!styles){
922
+ styles = CellPainter.supportedStyles;
923
+ }
924
+ if(Array.isArray(styles)){
925
+ for(var i = styles.length; --i >= 0;) {
926
+ elem.style[styles[i]] = ""; // WARNING: Very slow
927
+ }
928
+ } else {
929
+ for(var key in styles) {
930
+ elem.style[key] = ""; // WARNING: Very slow
931
+ }
907
932
  }
908
933
  };
909
934
  /** @private
@@ -1025,26 +1050,29 @@ CellPainter.prototype._paintCell = function(cell, rowData, min, max) {
1025
1050
  }
1026
1051
 
1027
1052
  var styles = this._getStyles(rowData, min, max);
1053
+
1054
+ var elStyle = elem.style;
1055
+
1028
1056
  var cssClass = styles["cssClass"]; // Can be an empty string
1057
+ if (elem._coloringCssClass && elem._coloringCssClass !== cssClass) {
1058
+ elem.classList.remove(elem._coloringCssClass);
1059
+ elem._coloringCssClass = null;
1060
+ }
1029
1061
  if (cssClass != null) { // Predefined colors mode
1030
- if (elem._coloringCssClass && elem._coloringCssClass !== cssClass) {
1031
- elem.classList.remove(elem._coloringCssClass);
1032
- elem._coloringCssClass = null;
1033
- }
1034
1062
  if (cssClass) {
1035
1063
  elem.classList.add(cssClass);
1036
1064
  elem._coloringCssClass = cssClass;
1037
1065
  }
1038
1066
  } else {
1039
- if (elem._coloringCssClass) {
1040
- elem.classList.remove(elem._coloringCssClass);
1041
- elem._coloringCssClass = null;
1067
+ if(styles["backgroundColor"]){
1068
+ elStyle.backgroundColor = styles["backgroundColor"];
1069
+ } else if(!this._effectiveStyles || this._effectiveStyles["backgroundColor"]){
1070
+ elStyle.backgroundColor = "";
1042
1071
  }
1043
- var ss = CellPainter.bgStyles;
1044
- var elStyle = elem.style;
1045
- for (var n = ss.length; --n >= 0;) {
1046
- var styleName = ss[n];
1047
- elStyle[styleName] = styles[styleName] || "";
1072
+ if(styles["color"]){
1073
+ elStyle.color = styles["color"];
1074
+ } else if(!this._effectiveStyles || this._effectiveStyles["color"]){
1075
+ elStyle.color = "";
1048
1076
  }
1049
1077
  }
1050
1078
  };
@@ -38,7 +38,8 @@ ElementObserver._getNewId = function () {
38
38
  return id;
39
39
  };
40
40
 
41
- /** @private Observe any element
41
+ /** Observe any element
42
+ * @private
42
43
  * @param {Element} elem
43
44
  * @param {Function} listener
44
45
  * @param {Object=} opt_option
@@ -101,7 +102,8 @@ ElementObserver.addLanguageListener = function(element) {
101
102
  ElementObserver._addObserver(document.documentElement, _onLanguageMutated.bind(null, element));
102
103
  };
103
104
 
104
- /** @public Add a listener to a html attribute
105
+ /** Add a listener to a html attribute
106
+ * @public
105
107
  * @param {Element} element An element within the DOM tree to watch for changes
106
108
  * @param {Function} listener A function which will be called on each attribute change
107
109
  * @param {string=} attributeName If not specified, listener will be called on every attribute change
@@ -63,7 +63,8 @@ ElementWrapper.prototype.getMousePosition = function(e, retObj) {
63
63
  */
64
64
  ElementWrapper.prototype.addEventListener = function(type, listener) {
65
65
  ElementWrapper.base(this, "addEventListener", type, listener);
66
- if(this._elem["on" + type] != null) { // TODO: This won't work with Custom Element
66
+ // TODO: This won't work with Custom Element
67
+ if(this._elem["on" + type] !== undefined) { // eslint-disable-line
67
68
  this._elem.addEventListener(type, listener, false);
68
69
  }
69
70
  };
@@ -74,7 +75,7 @@ ElementWrapper.prototype.addEventListener = function(type, listener) {
74
75
  */
75
76
  ElementWrapper.prototype.removeEventListener = function(type, listener) {
76
77
  ElementWrapper.base(this, "removeEventListener", type, listener);
77
- if(this._elem["on" + type] != null) {
78
+ if(this._elem["on" + type] !== undefined) { // eslint-disable-line
78
79
  this._elem.removeEventListener(type, listener, false);
79
80
  }
80
81
  };
@@ -259,6 +259,11 @@ GridPlugin.prototype.getColumnIndex = function (colRef) {
259
259
  * @return {Array.<number>} column indices
260
260
  */
261
261
  GridPlugin.prototype.getColumnIndices = function (colRefs) {
262
+ var api = this.getGridApi();
263
+ if(api.getColumnIndices) {
264
+ return api.getColumnIndices(colRefs);
265
+ }
266
+
262
267
  // TODO: Unify the below logics
263
268
  if(this._compositeGrid) {
264
269
  var allFields = this._compositeGrid.getColumnFields();
@@ -30,9 +30,9 @@ declare class SubTable extends ElementWrapper {
30
30
 
31
31
  public getAllCells(): (Element)[];
32
32
 
33
- public getAllRows(): HTMLCollection|null;
33
+ public getAllRows(): (Element)[];
34
34
 
35
- public getRows(): HTMLCollection|null;
35
+ public getRows(): (Element)[];
36
36
 
37
37
  public getRow(r: number): Element|null;
38
38
 
@@ -70,5 +70,7 @@ declare class SubTable extends ElementWrapper {
70
70
 
71
71
  declare function tdElem(e: Event|null): number;
72
72
 
73
+ declare function trElem(colIndex: number, rowIndex?: number|null): number;
74
+
73
75
  export default SubTable;
74
76
  export { SubTable };
@@ -2,6 +2,18 @@ import { Dom } from "./Dom.js";
2
2
  import { Ext } from "./Ext.js";
3
3
  import { ElementWrapper } from "./ElementWrapper.js";
4
4
 
5
+ /** @private
6
+ * @function
7
+ * @param {Element} parentElem tr element
8
+ * @param {number} count Number of elements to be added
9
+ * @param {string} childTag Tag name of the cells
10
+ */
11
+ var _addElements = function(parentElem, count, childTag) {
12
+ for(var i = count; --i >= 0;) {
13
+ parentElem.appendChild(document.createElement(childTag));
14
+ }
15
+ };
16
+
5
17
  /** SubTable represents a single tbody, thead, or tfoot element within table element
6
18
  * @constructor
7
19
  * @extends {ElementWrapper}
@@ -39,6 +51,12 @@ SubTable.prototype._defaultRowHeight = null;
39
51
  SubTable.prototype._render;
40
52
 
41
53
 
54
+ /** @private
55
+ * @return {string} tagName
56
+ */
57
+ SubTable.prototype._getCellTagName = function() {
58
+ return this._elem.tagName === "THEAD" ? "TH" : "TD";
59
+ };
42
60
  /** @public
43
61
  * @ignore
44
62
  * @param {number=} opt_count
@@ -49,12 +67,10 @@ SubTable.prototype.addColumns = function(opt_count) {
49
67
 
50
68
  this._colCount += opt_count;
51
69
 
52
- var rows = this.getRows(); // TODO: Must include all suspended rows
70
+ var cellTag = this._getCellTagName();
71
+ var rows = this._elem.children; // TODO: Must include all suspended rows
53
72
  for(var r = rows.length; --r >= 0;) {
54
- var tr = rows[r];
55
- for(var c = 0; c < opt_count; ++c) {
56
- tr.insertCell(-1);
57
- }
73
+ _addElements(rows[r], opt_count, cellTag);
58
74
  }
59
75
  };
60
76
  /** @public
@@ -68,7 +84,7 @@ SubTable.prototype.removeColumns = function(opt_count) {
68
84
  if(opt_count <= 0) { return; }
69
85
 
70
86
  this._colCount -= opt_count;
71
- var rows = this.getRows(); // TODO: Must include all suspended rows
87
+ var rows = this._elem.children; // TODO: Must include all suspended rows
72
88
  for(var r = rows.length; --r >= 0;) {
73
89
  Dom.removeChildren(rows[r], opt_count);
74
90
  }
@@ -100,9 +116,7 @@ SubTable.prototype.setColumnCount = function(val) {
100
116
  */
101
117
  SubTable.prototype.insertRow = function(at) {
102
118
  var row = this._elem.insertRow(at);
103
- for(var i = this._colCount; --i >= 0;) {
104
- row.insertCell();
105
- }
119
+ _addElements(row, this._colCount, this._getCellTagName());
106
120
  return row;
107
121
  };
108
122
 
@@ -158,7 +172,7 @@ SubTable.prototype.setDefaultRowHeight = function(val) {
158
172
  this._defaultRowHeight = val;
159
173
  var minHeight = (this._defaultRowHeight != null) ? this._defaultRowHeight + "px" : "";
160
174
 
161
- this._applyDefaultRowHeight(this.getRows(), minHeight);
175
+ this._applyDefaultRowHeight(this._elem.children, minHeight);
162
176
  };
163
177
 
164
178
  /** @public
@@ -194,7 +208,7 @@ SubTable.prototype.getCellsInColumn = function(c) {
194
208
  if(c < 0 || c >= this._colCount) {
195
209
  return null;
196
210
  }
197
- var rows = this.getRows();
211
+ var rows = this._elem.children;
198
212
  var rowCount = rows.length;
199
213
  var ary = new Array(rowCount);
200
214
  for(var r = 0; r < rowCount; ++r) {
@@ -209,13 +223,22 @@ SubTable.prototype.getCellsInColumn = function(c) {
209
223
  */
210
224
  SubTable.prototype.getCellsInRow = function(r) {
211
225
  var tr = this.getRow(r);
212
- return (tr) ? tr.cells : null;
226
+ if(tr) {
227
+ var cells = tr.cells;
228
+ var len = cells.length;
229
+ var ary = new Array(len);
230
+ for(var i = 0; i < len; ++i) {
231
+ ary[i] = cells[i];
232
+ }
233
+ return ary;
234
+ }
235
+ return null;
213
236
  };
214
237
  /** @public
215
238
  * @return {!Array.<Element>} Array of td (HTMLTableCellElement) elements
216
239
  */
217
240
  SubTable.prototype.getAllCells = function() {
218
- var rows = this.getRows();
241
+ var rows = this._elem.children;
219
242
  var rowCount = rows.length;
220
243
  var colCount = this._colCount;
221
244
  var cellCount = 0;
@@ -229,14 +252,20 @@ SubTable.prototype.getAllCells = function() {
229
252
  return ary;
230
253
  };
231
254
  /** @public
232
- * @return {HTMLCollection} Array like collection of tr (HTMLTableRowElement) elements
255
+ * @return {!Array.<Element>} Array of tr (HTMLTableRowElement) elements
233
256
  */
234
257
  SubTable.prototype.getAllRows = function() {
235
- return this._elem.children;
258
+ var chdr = this._elem.children;
259
+ var len = chdr ? chdr.length : 0;
260
+ var ary = new Array(len);
261
+ for(var i = 0; i < len; ++i) {
262
+ ary[i] = chdr[i];
263
+ }
264
+ return ary;
236
265
  };
237
266
  /** @public
238
267
  * @function
239
- * @return {HTMLCollection} Array like collection of tr (HTMLTableRowElement) elements
268
+ * @return {!Array.<Element>} Array of tr (HTMLTableRowElement) elements
240
269
  */
241
270
  SubTable.prototype.getRows = SubTable.prototype.getAllRows;
242
271
  /** @public
@@ -251,7 +280,7 @@ SubTable.prototype.getRow = function(r) {
251
280
  * @return {!Array.<Array.<string>>}
252
281
  */
253
282
  SubTable.prototype.getTextContents = function() {
254
- var rows = this.getRows();
283
+ var rows = this._elem.children;
255
284
  var rowCount = rows.length;
256
285
  var rowContents = new Array(rowCount);
257
286
  for(var r = 0; r < rowCount; ++r) {
@@ -281,7 +310,7 @@ SubTable.prototype.getCellTextContent = function(c, r) {
281
310
  * @return {string}
282
311
  */
283
312
  SubTable.prototype.getColumnTextContent = function(c) { // New-line delimited
284
- var rows = this.getRows();
313
+ var rows = this._elem.children;
285
314
  var rowCount = rows.length;
286
315
  if(c >= 0 && c < this._colCount && rowCount > 0) {
287
316
  var str = rows[0].cells[c].textContent;
@@ -311,7 +340,7 @@ SubTable.prototype.getRowTextContent = function(r) { // Tab delimited
311
340
  * @return {string}
312
341
  */
313
342
  SubTable.prototype.getTableTextContent = function() { // Tab delimited
314
- var rowCount = this.getRows().length;
343
+ var rowCount = this._elem.children.length;
315
344
  if(rowCount > 0) {
316
345
  var str = this.getRowTextContent(0);
317
346
  for(var r = 1; r < rowCount; ++r) {
@@ -326,9 +355,10 @@ SubTable.prototype.getTableTextContent = function() { // Tab delimited
326
355
  */
327
356
  SubTable.prototype.toString = function() {
328
357
  var str = this.getElement().outerHTML;
358
+ str = str.replace(/>\s+</g, "><");
329
359
  str = str.replace(/><tr/g, ">\n\t<tr");
330
360
  str = str.replace(/><td/g, ">\n\t\t<td");
331
- str = str.replace(/><td/g, ">\n\t\t<th"); // TH can occur in thead
361
+ str = str.replace(/><th/g, ">\n\t\t<th"); // TH can occur in thead
332
362
  str = str.replace(/><\/tr/g, ">\n\t</tr");
333
363
  var tagName = this.getElement().tagName.toLowerCase();
334
364
  str = str.replace("</" + tagName, "\n</" + tagName);
@@ -340,39 +370,40 @@ SubTable.prototype.toString = function() {
340
370
  * @return {number}
341
371
  */
342
372
  SubTable.prototype.getColumnIndex = function(e) {
343
- if(e) {
344
- var len, i;
345
- var tgt = /** @type{Node} */(e.target);
346
- if(this._elem.contains(tgt)) {
347
- var tdElem = Dom.closestTagName(tgt, "TD");
348
- if(!tdElem) {
349
- tdElem = Dom.closestTagName(tgt, "TH");
373
+ if(!e) {
374
+ return -1;
375
+ }
376
+ var len, i;
377
+ var tgt = /** @type{Node} */(e.target); // TODO: Support Shadow Root
378
+ if(this._elem.contains(tgt)) {
379
+ var tdElem = Dom.closestTagName(tgt, "TD");
380
+ if(!tdElem) {
381
+ tdElem = Dom.closestTagName(tgt, "TH");
382
+ }
383
+ if(tdElem) {
384
+ var chdr = tdElem.parentElement.children;
385
+ len = chdr.length;
386
+ for(i = 0; i < len; ++i) {
387
+ if(tdElem === chdr[i]) {
388
+ return i;
389
+ }
350
390
  }
351
- if(tdElem) {
352
- var chdr = tdElem.parentElement.children;
353
- len = chdr.length;
391
+ }
392
+ } else { // In case of the target is not a child of this element
393
+ var rows = this._elem.children;
394
+ var cells = (rows[0]) ? rows[0].cells : null;
395
+ if(cells) {
396
+ var pos = Dom.getRelativePosition(e, this._elem);
397
+ var x = pos["x"];
398
+ if(x >= 0) {
399
+ len = cells.length;
354
400
  for(i = 0; i < len; ++i) {
355
- if(tdElem === chdr[i]) {
401
+ x -= cells[i].offsetWidth;
402
+ if(x < 0) { // Not include the right border
356
403
  return i;
357
404
  }
358
405
  }
359
406
  }
360
- } else { // In case of the target is not a child of this element
361
- var rows = this.getRows();
362
- var cells = (rows[0]) ? rows[0].cells : null;
363
- if(cells) {
364
- var pos = Dom.getRelativePosition(e, this._elem);
365
- var x = pos["x"];
366
- if(x >= 0) {
367
- len = cells.length;
368
- for(i = 0; i < len; ++i) {
369
- x -= cells[i].offsetWidth;
370
- if(x < 0) { // Not include the right border
371
- return i;
372
- }
373
- }
374
- }
375
- }
376
407
  }
377
408
  }
378
409
  return -1;
@@ -382,27 +413,36 @@ SubTable.prototype.getColumnIndex = function(e) {
382
413
  * @return {number}
383
414
  */
384
415
  SubTable.prototype.getRowIndex = function(e) {
385
- var rows = this.getRows();
386
- if(rows && e) {
387
- var jLen = rows.length;
388
- var tgtElem = e.target; // TODO: Support Shadow Root
389
- for(var j = 0; j < jLen; ++j) {
390
- var row = rows[j];
391
- if(row === tgtElem) {
392
- return j;
416
+ if(!e) {
417
+ return -1;
418
+ }
419
+ var rows = this._elem.children; // This return HTML collection
420
+ var rowCount = rows ? rows.length : 0;
421
+ if(!rowCount) {
422
+ return -1;
423
+ }
424
+ var i;
425
+ var tgt = /** @type{Node} */(e.target); // TODO: Support Shadow Root
426
+ if(this._elem.contains(tgt)) {
427
+ var trElem = Dom.closestTagName(tgt, "TR");
428
+ if(trElem) {
429
+ for(i = 0; i < rowCount; ++i) {
430
+ var row = rows[i];
431
+ if(row === trElem) {
432
+ return i;
433
+ }
393
434
  }
394
435
  }
436
+ }
395
437
 
396
- // In case of the target is not a child of this element
397
- var pos = Dom.getRelativePosition(e, this._elem);
398
- var y = pos["y"];
399
- if(y >= 0) {
400
- var len = rows.length;
401
- for(var i = 0; i < len; ++i) {
402
- y -= rows[i].offsetHeight;
403
- if(y < 0) { // Not include the right border
404
- return i;
405
- }
438
+ // In case of the target is not a child of this element
439
+ var pos = Dom.getRelativePosition(e, this._elem);
440
+ var y = pos["y"];
441
+ if(y >= 0) {
442
+ for(i = 0; i < rowCount; ++i) {
443
+ y -= rows[i].offsetHeight;
444
+ if(y < 0) { // Not include the right border
445
+ return i;
406
446
  }
407
447
  }
408
448
  }
@@ -458,31 +498,69 @@ SubTable.prototype.setCellRenderer = function(func) {
458
498
  * @param {string=} opt_elementType
459
499
  */
460
500
  SubTable.prototype.cloak = function(elem, opt_elementType) {
461
- SubTable["base"](this, "cloak", elem, "tr");
462
- var rows = elem.getElementsByTagName("TR");
463
- this._colCount = rows[0] ? rows[0].children.length : 0;
501
+ if(elem) {
502
+ this._elem = elem;
503
+ var rows = elem.getElementsByTagName("TR");
504
+ this._colCount = rows[0] ? rows[0].children.length : 0;
505
+ }
464
506
  };
465
507
 
466
508
  /** @public
467
- * @param {number} c1
468
- * @param {number} c2
469
- * @param {number} r1
470
- * @param {number} r2
509
+ * @param {number} c1 Starting column index
510
+ * @param {number} c2 Destination column index
511
+ * @param {number} r1 Starting row index
512
+ * @param {number} r2 Destination row index
471
513
  * @return {Element} Top left cell element
472
514
  */
473
515
  SubTable.prototype.spanBlock = function (c1, c2, r1, r2) { // WARNING: It's c c r r
474
- var cell = null;
475
- for(var c = c2; c >= c1; --c) {
476
- for(var r = r2; r >= r1; --r) {
516
+ var cell = this.getCell(c1, r1);
517
+ if(!cell) {
518
+ return null;
519
+ }
520
+ if(c2 < c1) {
521
+ c2 = c1;
522
+ }
523
+ if(r2 < r1) {
524
+ r2 = r1;
525
+ }
526
+ var curColSpan = +cell.getAttribute("colspan");
527
+ var curRowSpan = +cell.getAttribute("rowspan");
528
+ var c3 = (curColSpan) ? c1 + curColSpan - 1 : c1;
529
+ var r3 = (curRowSpan) ? r1 + curRowSpan - 1 : r1;
530
+
531
+ // TODO: Optimize below logics
532
+ var c, r;
533
+ for(c = c3; c >= c1; --c) {
534
+ for(r = r3; r >= r1; --r) {
535
+ cell = this.getCell(c, r);
536
+ if(cell) {
537
+ cell.style.display = "";
538
+ }
539
+ }
540
+ }
541
+
542
+ for(c = c2; c >= c1; --c) {
543
+ for(r = r2; r >= r1; --r) {
477
544
  cell = this.getCell(c, r);
478
545
  if(cell) {
479
546
  cell.style.display = "none";
480
547
  }
481
548
  }
482
549
  }
483
- if(cell) {
484
- cell.setAttribute("colspan", (c2 - c1 + 1));
485
- cell.setAttribute("rowspan", (r2 - r1 + 1));
550
+
551
+ if(cell) { // The last cell from the loop is the top left cell
552
+ var colSpan = (c2 - c1 + 1);
553
+ var rowSpan = (r2 - r1 + 1);
554
+ if(colSpan > 1) {
555
+ cell.setAttribute("colspan", colSpan);
556
+ } else {
557
+ cell.removeAttribute("colspan");
558
+ }
559
+ if(colSpan > 1) {
560
+ cell.setAttribute("rowspan", rowSpan);
561
+ } else {
562
+ cell.removeAttribute("rowspan");
563
+ }
486
564
  cell.style.display = "";
487
565
  }
488
566
  return cell;
@@ -526,7 +604,7 @@ SubTable.parseTableContent = function(tbl) {
526
604
  };
527
605
 
528
606
  /** @private
529
- * @param {!NodeList<!Element>|Array.<Element>} rows
607
+ * @param {!(NodeList<!Element>|Array.<Element>)} rows
530
608
  * @param {string} minHeight
531
609
  */
532
610
  SubTable.prototype._applyDefaultRowHeight = function(rows, minHeight) {
@@ -3,17 +3,32 @@ import { Ext } from "./Ext.js";
3
3
  import { ElementWrapper } from "./ElementWrapper.js";
4
4
  import { SubTable } from "./SubTable.js";
5
5
 
6
+ declare namespace Table {
7
+
8
+ type Options = {
9
+ colCount?: number|null,
10
+ rowCount?: number|null,
11
+ cellWidth?: number|null,
12
+ cellHeight?: number|null,
13
+ width?: number|null,
14
+ height?: number|null,
15
+ header?: number|null,
16
+ footer?: number|null
17
+ };
18
+
19
+ }
20
+
6
21
  declare class Table extends ElementWrapper {
7
22
 
8
- constructor(elem?: (Element|number)|null, opt_colCount?: (number|any)|null, opt_rowCount?: number|null);
23
+ constructor(elem?: Element|null, options?: Table.Options|null);
9
24
 
10
25
  public getTableElement(): Element|null;
11
26
 
12
27
  public setCRWH(col: number, row: number, width: number, height: number): void;
13
28
 
14
- public init(options: any): void;
29
+ public init(options: Table.Options|null): void;
15
30
 
16
- public addColumns(opt_count?: number|null): (Element)[]|null;
31
+ public addColumns(count?: number|null): (Element)[]|null;
17
32
 
18
33
  public removeColumns(opt_count?: number|null): void;
19
34
 
@@ -21,9 +36,9 @@ declare class Table extends ElementWrapper {
21
36
 
22
37
  public setColumnCount(val: number): void;
23
38
 
24
- public addRows(opt_count?: number|null): (Element)[];
39
+ public addRows(count?: number|null): (Element)[];
25
40
 
26
- public removeRows(opt_count?: number|null): void;
41
+ public removeRows(count?: number|null): void;
27
42
 
28
43
  public removeAllRows(): void;
29
44
 
@@ -43,21 +58,23 @@ declare class Table extends ElementWrapper {
43
58
 
44
59
  public getAllRows(): (Element)[];
45
60
 
61
+ public getRows(): (Element)[];
62
+
46
63
  public getRow(r: number): Element|null;
47
64
 
48
65
  public spanBlock(c1: number, c2: number, r1: number, r2: number): Element|null;
49
66
 
50
67
  public spanHorizontally(r: number, bool: boolean): Element|null;
51
68
 
52
- public setColMinWidths(val: number|string|(string|number)[]|null, opt_at?: number|null): void;
69
+ public setColMinWidths(val: number|string|(string|number)[]|null, colIndex?: number|null): void;
53
70
 
54
- public setColumnWidths(val: number|string|(string|number)[]|null, opt_at?: number|null): void;
71
+ public setColumnWidths(val: number|string|(string|number)[]|null, colIndex?: number|null): void;
55
72
 
56
- public setColBackgroundColors(val: string|(string)[]|null, opt_at?: number|null): void;
73
+ public setColBackgroundColors(val: string|(string)[]|null, colIndex?: number|null): void;
57
74
 
58
- public setColBGColors(val: string|(string)[]|null, opt_at?: number|null): void;
75
+ public setColBGColors(val: string|(string)[]|null, colIndex?: number|null): void;
59
76
 
60
- public setColBorders(val: number|string|(number|string)[]|null, opt_at?: number|null): void;
77
+ public setColBorders(val: number|string|(number|string)[]|null, colIndex?: number|null): void;
61
78
 
62
79
  public setSize(width: number, height: number): void;
63
80