|
1 | 1 | /*! |
2 | | - * TableExport.js v5.0.0-rc.4 (https://www.travismclarke.com) |
| 2 | + * TableExport.js v5.0.0-rc.6 (https://www.travismclarke.com) |
3 | 3 | * |
4 | 4 | * Copyright (c) 2017 - Travis Clarke - https://www.travismclarke.com |
5 | 5 | * |
|
116 | 116 |
|
117 | 117 | context.rcMap = new RowColMap().build(context, settings); |
118 | 118 |
|
| 119 | + // console.debug(context.rcMap); |
| 120 | + |
119 | 121 | var formatMap = _FORMAT_LIST |
120 | 122 | .reduce(function (acc, cur) { |
121 | 123 | acc[cur] = 0; |
|
147 | 149 | * Version. |
148 | 150 | * @memberof TableExport.prototype |
149 | 151 | */ |
150 | | - version: '5.0.0-rc.4', |
| 152 | + version: '5.0.0-rc.6', |
151 | 153 | /** |
152 | 154 | * Default library options. |
153 | 155 | * @memberof TableExport.prototype |
|
683 | 685 | var _empty = RowColMap.prototype.TYPE.EMPTY; |
684 | 686 | return this.getRowColMapProp(ir, ic, _empty); |
685 | 687 | }; |
| 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 | + }; |
686 | 696 | 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); |
689 | 698 | }; |
690 | 699 | this.getRowColMapProp = function (ir, ic, key) { |
691 | 700 | if (this.rcMap[ir]) { |
|
710 | 719 | this.rcMap[ir][ic][key] = value; |
711 | 720 | } |
712 | 721 | }; |
| 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 | + }; |
713 | 732 | this.convertSpanToArray = function (ir, ic, key, _return, colDel) { |
| 733 | + |
714 | 734 | 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 | + |
737 | 737 | return (_isEnhanced(key)) |
738 | 738 | ? new Array(total).concat(_return) |
739 | 739 | : new Array(total).concat(_return).join(colDel); |
|
757 | 757 | TYPE: { |
758 | 758 | IGNORE: 'ignore', |
759 | 759 | EMPTY: 'empty', |
760 | | - SPAN: 'span', |
| 760 | + ROWSPAN: 'rowspan', |
| 761 | + COLSPAN: 'colspan', |
761 | 762 | DEFAULT: 'default' |
762 | 763 | }, |
763 | 764 | build: function (context, settings) { |
|
780 | 781 | self.setRowColMapProp(ir, ic, self.TYPE.EMPTY, true); |
781 | 782 | }; |
782 | 783 | var handleRowSpan = function (val, ir, ic) { |
783 | | - var rowSpan = val.getAttribute('rowspan'); |
| 784 | + var rowSpan = +val.getAttribute('rowspan'); |
784 | 785 | var hasColSpan = val.hasAttribute('colspan'); |
| 786 | + var handledByColSpan; |
785 | 787 |
|
786 | 788 | for (var _row = 0; _row < rowSpan; _row++) { |
787 | 789 | if (_row + ir >= rowLength) { |
788 | 790 | return; |
789 | 791 | } |
790 | | - hasColSpan && handleColSpan(val, _row + ir, ic); |
| 792 | + hasColSpan && (handledByColSpan = handleColSpan(val, _row + ir, ic, _row > 0)); |
791 | 793 | 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 | + } |
794 | 801 | } |
795 | 802 | } |
796 | 803 | }; |
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); |
799 | 808 |
|
800 | 809 | 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); |
802 | 817 | } |
803 | | - self.setRowColMapProp(ir, undefined, self.TYPE.SPAN, true); |
804 | | - self.setRowColMapProp(ir, ic + OFFSET, undefined, colSpan - OFFSET); |
805 | 818 | }; |
806 | 819 |
|
807 | 820 | _nodesArray(context.rows).map(function (val, ir) { |
|
0 commit comments