123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
- /* Tabulator v4.6.3 (c) Oliver Folkerd */
-
- var Export = function Export(table) {
- this.table = table; //hold Tabulator object
- this.config = {};
- this.cloneTableStyle = true;
- this.colVisProp = "";
- };
-
- Export.prototype.genereateTable = function (config, style, range, colVisProp) {
- this.cloneTableStyle = style;
- this.config = config || {};
- this.colVisProp = colVisProp;
-
- var table = document.createElement("table");
- table.classList.add("tabulator-print-table");
-
- if (this.config.columnHeaders !== false) {
- table.appendChild(this.generateHeaderElements());
- }
-
- table.appendChild(this.generateBodyElements(this.rowLookup(range)));
-
- this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]);
-
- return table;
- };
-
- Export.prototype.rowLookup = function (range) {
- var _this = this;
-
- var rows = [];
-
- if (typeof range == "function") {
- range.call(this.table).forEach(function (row) {
- row = _this.table.rowManager.findRow(row);
-
- if (row) {
- rows.push(row);
- }
- });
- } else {
- switch (range) {
- case true:
- case "visible":
- rows = this.table.rowManager.getVisibleRows(true);
- break;
-
- case "all":
- rows = this.table.rowManager.rows;
- break;
-
- case "selected":
- rows = this.table.modules.selectRow.selectedRows;
- break;
-
- case "active":
- default:
- rows = this.table.rowManager.getDisplayRows();
- }
- }
-
- return Object.assign([], rows);
- };
-
- Export.prototype.generateColumnGroupHeaders = function () {
- var _this2 = this;
-
- var output = [];
-
- var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;
-
- columns.forEach(function (column) {
- var colData = _this2.processColumnGroup(column);
-
- if (colData) {
- output.push(colData);
- }
- });
-
- return output;
- };
-
- Export.prototype.processColumnGroup = function (column) {
- var _this3 = this;
-
- var subGroups = column.columns,
- maxDepth = 0;
-
- var groupData = {
- title: column.definition.title,
- column: column,
- depth: 1
- };
-
- if (subGroups.length) {
- groupData.subGroups = [];
- groupData.width = 0;
-
- subGroups.forEach(function (subGroup) {
- var subGroupData = _this3.processColumnGroup(subGroup);
-
- if (subGroupData) {
- groupData.width += subGroupData.width;
- groupData.subGroups.push(subGroupData);
-
- if (subGroupData.depth > maxDepth) {
- maxDepth = subGroupData.depth;
- }
- }
- });
-
- groupData.depth += maxDepth;
-
- if (!groupData.width) {
- return false;
- }
- } else {
- if (this.columnVisCheck(column)) {
- groupData.width = 1;
- } else {
- return false;
- }
- }
-
- return groupData;
- };
-
- Export.prototype.groupHeadersToRows = function (columns) {
-
- var headers = [],
- headerDepth = 0;
-
- function parseColumnGroup(column, level) {
-
- var depth = headerDepth - level;
-
- if (typeof headers[level] === "undefined") {
- headers[level] = [];
- }
-
- column.height = column.subGroups ? 1 : depth - column.depth + 1;
-
- headers[level].push(column);
-
- if (column.subGroups) {
- column.subGroups.forEach(function (subGroup) {
- parseColumnGroup(subGroup, level + 1);
- });
- }
- }
-
- //calculate maximum header debth
- columns.forEach(function (column) {
- if (column.depth > headerDepth) {
- headerDepth = column.depth;
- }
- });
-
- columns.forEach(function (column) {
- parseColumnGroup(column, 0);
- });
-
- return headers;
- };
-
- Export.prototype.generateHeaderElements = function () {
- var _this4 = this;
-
- var headerEl = document.createElement("thead");
-
- var rows = this.groupHeadersToRows(this.generateColumnGroupHeaders());
-
- rows.forEach(function (row) {
- var rowEl = document.createElement("tr");
-
- _this4.mapElementStyles(_this4.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
-
- row.forEach(function (column) {
- var cellEl = document.createElement("th");
- var classNames = column.column.definition.cssClass ? column.column.definition.cssClass.split(" ") : [];
-
- cellEl.colSpan = column.width;
- cellEl.rowSpan = column.height;
-
- cellEl.innerHTML = column.column.definition.title;
-
- if (_this4.cloneTableStyle) {
- cellEl.style.boxSizing = "border-box";
- }
-
- classNames.forEach(function (className) {
- cellEl.classList.add(className);
- });
-
- _this4.mapElementStyles(column.column.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]);
- _this4.mapElementStyles(column.column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
-
- if (column.column.visible) {
- _this4.mapElementStyles(column.column.getElement(), cellEl, ["width"]);
- } else {
- if (column.column.definition.width) {
- cellEl.style.width = column.column.definition.width + "px";
- }
- }
-
- if (column.column.parent) {
- _this4.mapElementStyles(column.column.parent.groupElement, cellEl, ["border-top"]);
- }
-
- rowEl.appendChild(cellEl);
- });
-
- headerEl.appendChild(rowEl);
- });
-
- return headerEl;
- };
-
- Export.prototype.generateBodyElements = function (rows) {};
-
- Export.prototype.generateBodyElements = function (rows) {
- var _this5 = this;
-
- var oddRow, evenRow, calcRow, firstRow, firstCell, firstGroup, lastCell, styleCells, styleRow, treeElementField, rowFormatter;
-
- //assign row formatter
- rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];
- rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;
-
- //lookup row styles
- if (this.cloneTableStyle && window.getComputedStyle) {
- oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)");
- evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)");
- calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs");
- firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)");
- firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0];
-
- if (firstRow) {
- styleCells = firstRow.getElementsByClassName("tabulator-cell");
- firstCell = styleCells[0];
- lastCell = styleCells[styleCells.length - 1];
- }
- }
-
- var bodyEl = document.createElement("tbody");
-
- var columns = [];
-
- if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) {
- if (this.table.modules.columnCalcs.topInitialized) {
- rows.unshift(this.table.modules.columnCalcs.topRow);
- }
-
- if (this.table.modules.columnCalcs.botInitialized) {
- rows.push(this.table.modules.columnCalcs.botRow);
- }
- }
-
- this.table.columnManager.columnsByIndex.forEach(function (column) {
- if (_this5.columnVisCheck(column)) {
- columns.push(column);
- }
- });
-
- if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) {
- treeElementField = this.table.modules.dataTree.elementField;
- }
-
- rows = rows.filter(function (row) {
- switch (row.type) {
- case "group":
- return _this5.config.rowGroups !== false;
- break;
-
- case "calc":
- return _this5.config.columnCalcs !== false;
- break;
- }
-
- return true;
- });
-
- if (rows.length > 1000) {
- console.warn("It may take a long time to render an HTML table with more than 1000 rows");
- }
-
- rows.forEach(function (row, i) {
- var rowData = row.getData(_this5.colVisProp);
-
- var rowEl = document.createElement("tr");
- rowEl.classList.add("tabulator-print-table-row");
-
- switch (row.type) {
- case "group":
- var cellEl = document.createElement("td");
- cellEl.colSpan = columns.length;
- cellEl.innerHTML = row.key;
-
- rowEl.classList.add("tabulator-print-table-group");
-
- _this5.mapElementStyles(firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
- _this5.mapElementStyles(firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]);
- rowEl.appendChild(cellEl);
- break;
-
- case "calc":
- rowEl.classList.add("tabulator-print-table-calcs");
-
- case "row":
-
- if (_this5.table.options.dataTree && _this5.config.dataTree === false && row.modules.dataTree.parent) {
- return;
- }
-
- columns.forEach(function (column, i) {
- var cellEl = document.createElement("td");
-
- var value = column.getFieldValue(rowData);
-
- var cellWrapper = {
- modules: {},
- getValue: function getValue() {
- return value;
- },
- getField: function getField() {
- return column.definition.field;
- },
- getElement: function getElement() {
- return cellEl;
- },
- getColumn: function getColumn() {
- return column.getComponent();
- },
- getData: function getData() {
- return rowData;
- },
- getRow: function getRow() {
- return row.getComponent();
- },
- getComponent: function getComponent() {
- return cellWrapper;
- },
- column: column
- };
-
- var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : [];
-
- classNames.forEach(function (className) {
- cellEl.classList.add(className);
- });
-
- if (_this5.table.modExists("format") && _this5.config.formatCells !== false) {
- value = _this5.table.modules.format.formatExportValue(cellWrapper, _this5.colVisProp);
- } else {
- switch (typeof value === "undefined" ? "undefined" : _typeof(value)) {
- case "object":
- value = JSON.stringify(value);
- break;
-
- case "undefined":
- case "null":
- value = "";
- break;
-
- default:
- value = value;
- }
- }
-
- if (value instanceof Node) {
- cellEl.appendChild(value);
- } else {
- cellEl.innerHTML = value;
- }
-
- if (firstCell) {
- _this5.mapElementStyles(firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]);
-
- if (column.definition.align) {
- cellEl.style.textAlign = column.definition.align;
- }
- }
-
- if (_this5.table.options.dataTree && _this5.config.dataTree !== false) {
- if (treeElementField && treeElementField == column.field || !treeElementField && i == 0) {
- if (row.modules.dataTree.controlEl) {
- cellEl.insertBefore(row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);
- }
- if (row.modules.dataTree.branchEl) {
- cellEl.insertBefore(row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);
- }
- }
- }
-
- rowEl.appendChild(cellEl);
-
- if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {
- cellWrapper.modules.format.renderedCallback();
- }
- });
-
- styleRow = row.type == "calc" ? calcRow : i % 2 && evenRow ? evenRow : oddRow;
-
- _this5.mapElementStyles(styleRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]);
-
- if (rowFormatter && _this5.config.formatCells !== false) {
- var rowComponent = row.getComponent();
-
- rowComponent.getElement = function () {
- return rowEl;
- };
-
- rowFormatter(rowComponent);
- }
-
- break;
- }
-
- bodyEl.appendChild(rowEl);
- });
-
- return bodyEl;
- };
-
- Export.prototype.columnVisCheck = function (column) {
- return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);
- };
-
- Export.prototype.getHtml = function (visible, style, config, colVisProp) {
- var holder = document.createElement("div");
-
- holder.appendChild(this.genereateTable(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput"));
-
- return holder.innerHTML;
- };
-
- Export.prototype.mapElementStyles = function (from, to, props) {
- if (this.cloneTableStyle && from && to) {
-
- var lookup = {
- "background-color": "backgroundColor",
- "color": "fontColor",
- "width": "width",
- "font-weight": "fontWeight",
- "font-family": "fontFamily",
- "font-size": "fontSize",
- "text-align": "textAlign",
- "border-top": "borderTop",
- "border-left": "borderLeft",
- "border-right": "borderRight",
- "border-bottom": "borderBottom",
- "padding-top": "paddingTop",
- "padding-left": "paddingLeft",
- "padding-right": "paddingRight",
- "padding-bottom": "paddingBottom"
- };
-
- if (window.getComputedStyle) {
- var fromStyle = window.getComputedStyle(from);
-
- props.forEach(function (prop) {
- to.style[lookup[prop]] = fromStyle.getPropertyValue(prop);
- });
- }
- }
- };
-
- Tabulator.prototype.registerModule("export", Export);
|