Skip to content
This repository was archived by the owner on Jul 25, 2021. It is now read-only.

Commit 52a82df

Browse files
committed
v5.0.0-rc.5 - "colspan"/"rowspan" improvements
1 parent 9b6ef74 commit 52a82df

File tree

11 files changed

+64
-54
lines changed

11 files changed

+64
-54
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tableexport.js",
3-
"version": "5.0.0-rc.4",
3+
"version": "5.0.0-rc.6",
44
"authors": [
55
"clarketm <travis.m.clarke@gmail.com>"
66
],

dist/css/tableexport.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* TableExport.js v5.0.0-rc.4 (https://www.travismclarke.com)
2+
* TableExport.js v5.0.0-rc.6 (https://www.travismclarke.com)
33
*
44
* Copyright (c) 2017 - Travis Clarke - https://www.travismclarke.com
55
*

dist/css/tableexport.min.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* TableExport.js v5.0.0-rc.4 (https://www.travismclarke.com)
2+
* TableExport.js v5.0.0-rc.6 (https://www.travismclarke.com)
33
*
44
* Copyright (c) 2017 - Travis Clarke - https://www.travismclarke.com
55
*

dist/js/tableexport.js

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* TableExport.js v5.0.0-rc.4 (https://www.travismclarke.com)
2+
* TableExport.js v5.0.0-rc.6 (https://www.travismclarke.com)
33
*
44
* Copyright (c) 2017 - Travis Clarke - https://www.travismclarke.com
55
*
@@ -116,6 +116,8 @@
116116

117117
context.rcMap = new RowColMap().build(context, settings);
118118

119+
// console.debug(context.rcMap);
120+
119121
var formatMap = _FORMAT_LIST
120122
.reduce(function (acc, cur) {
121123
acc[cur] = 0;
@@ -147,7 +149,7 @@
147149
* Version.
148150
* @memberof TableExport.prototype
149151
*/
150-
version: '5.0.0-rc.4',
152+
version: '5.0.0-rc.6',
151153
/**
152154
* Default library options.
153155
* @memberof TableExport.prototype
@@ -683,9 +685,16 @@
683685
var _empty = RowColMap.prototype.TYPE.EMPTY;
684686
return this.getRowColMapProp(ir, ic, _empty);
685687
};
688+
this.isRowSpan = function (ir) {
689+
var _rowspan = RowColMap.prototype.TYPE.ROWSPAN;
690+
return this.getRowColMapProp(ir, undefined, _rowspan);
691+
};
692+
this.isColSpan = function (ir) {
693+
var _colspan = RowColMap.prototype.TYPE.COLSPAN;
694+
return this.getRowColMapProp(ir, undefined, _colspan);
695+
};
686696
this.isSpan = function (ir) {
687-
var _span = RowColMap.prototype.TYPE.SPAN;
688-
return this.getRowColMapProp(ir, undefined, _span);
697+
return this.isRowSpan(ir) || this.isColSpan(ir);
689698
};
690699
this.getRowColMapProp = function (ir, ic, key) {
691700
if (this.rcMap[ir]) {
@@ -710,30 +719,21 @@
710719
this.rcMap[ir][ic][key] = value;
711720
}
712721
};
722+
this.generateTotal = function (ir, ic) {
723+
var _total = 0;
724+
725+
if (this.isRowSpan(ir) && this.isColSpan(ir)) {
726+
_total = this.getRowColMapProp(ir, ic) || 0;
727+
} else if (this.getRowColMapProp(ir, ic)) {
728+
_total = this.getRowColMapProp(ir, ic);
729+
}
730+
return _total;
731+
};
713732
this.convertSpanToArray = function (ir, ic, key, _return, colDel) {
733+
714734
if (this.rcMap[ir] && this.isSpan(ir)) {
715-
var threshold = ic + RowColMap.prototype.OFFSET,
716-
total = 0,
717-
count = 0,
718-
skip = null,
719-
max = Math.max.apply(Math,
720-
Object.keys(this.rcMap[ir]).filter(_numeric)
721-
);
722-
723-
for (var _col = 0; _col <= max; _col++) {
724-
skip = this.rcMap[ir][_col];
725-
726-
if (!skip) {
727-
count++
728-
} else {
729-
total = (count >= ic)
730-
? total + skip
731-
: total
732-
}
733-
if (count === threshold) {
734-
break;
735-
}
736-
}
735+
var total = this.generateTotal(ir, ic);
736+
737737
return (_isEnhanced(key))
738738
? new Array(total).concat(_return)
739739
: new Array(total).concat(_return).join(colDel);
@@ -757,7 +757,8 @@
757757
TYPE: {
758758
IGNORE: 'ignore',
759759
EMPTY: 'empty',
760-
SPAN: 'span',
760+
ROWSPAN: 'rowspan',
761+
COLSPAN: 'colspan',
761762
DEFAULT: 'default'
762763
},
763764
build: function (context, settings) {
@@ -780,28 +781,40 @@
780781
self.setRowColMapProp(ir, ic, self.TYPE.EMPTY, true);
781782
};
782783
var handleRowSpan = function (val, ir, ic) {
783-
var rowSpan = val.getAttribute('rowspan');
784+
var rowSpan = +val.getAttribute('rowspan');
784785
var hasColSpan = val.hasAttribute('colspan');
786+
var handledByColSpan;
785787

786788
for (var _row = 0; _row < rowSpan; _row++) {
787789
if (_row + ir >= rowLength) {
788790
return;
789791
}
790-
hasColSpan && handleColSpan(val, _row + ir, ic);
792+
hasColSpan && (handledByColSpan = handleColSpan(val, _row + ir, ic, _row > 0));
791793
if (_row >= 1) {
792-
self.setRowColMapProp(_row + ir, undefined, self.TYPE.SPAN, true);
793-
self.setRowColMapProp(_row + ir, ic, undefined, 1);
794+
var currentRowSpan = self.getRowColMapProp(_row + ir, undefined, self.TYPE.ROWSPAN) || 0;
795+
self.setRowColMapProp(_row + ir, undefined, self.TYPE.ROWSPAN, currentRowSpan + 1);
796+
797+
if (!handledByColSpan) {
798+
var current = self.getRowColMapProp(_row + ir, ic - currentRowSpan) || 0;
799+
self.setRowColMapProp(_row + ir, ic - currentRowSpan, undefined, current + 1);
800+
}
794801
}
795802
}
796803
};
797-
var handleColSpan = function (val, ir, ic) {
798-
var colSpan = val.getAttribute('colspan');
804+
var handleColSpan = function (val, ir, ic, isRowSpan) {
805+
var colSpan = +val.getAttribute('colspan');
806+
var currentColSpan = self.getRowColMapProp(ir, undefined, self.TYPE.COLSPAN) || 0;
807+
self.setRowColMapProp(ir, undefined, self.TYPE.COLSPAN, currentColSpan + 1);
799808

800809
if (colSpan <= 1) {
801-
return;
810+
return false;
811+
}
812+
if (isRowSpan) {
813+
self.setRowColMapProp(ir, ic - currentColSpan, undefined, colSpan);
814+
return true;
815+
} else {
816+
self.setRowColMapProp(ir, ic + OFFSET, undefined, colSpan - OFFSET);
802817
}
803-
self.setRowColMapProp(ir, undefined, self.TYPE.SPAN, true);
804-
self.setRowColMapProp(ir, ic + OFFSET, undefined, colSpan - OFFSET);
805818
};
806819

807820
_nodesArray(context.rows).map(function (val, ir) {

0 commit comments

Comments
 (0)