}
}
- var defaultAccessors = {
- rownum:function(value, data, type, params, column, row){
- return row.getPosition();
- }
+ var defaultAccessors = {\r
+ rownum:function(value, data, type, params, column, row){\r
+ return row.getPosition();\r
+ }\r
};
class Accessor extends Module{
},
};
- var bindings$2 = {
- copyToClipboard:["ctrl + 67", "meta + 67"],
+ var bindings$2 = {\r
+ copyToClipboard:["ctrl + 67", "meta + 67"],\r
};
- var actions$2 = {
- copyToClipboard:function(e){
- if(!this.table.modules.edit.currentCell){
- if(this.table.modExists("clipboard", true)){
- this.table.modules.clipboard.copy(false, true);
- }
- }
- },
+ var actions$2 = {\r
+ copyToClipboard:function(e){\r
+ if(!this.table.modules.edit.currentCell){\r
+ if(this.table.modExists("clipboard", true)){\r
+ this.table.modules.clipboard.copy(false, true);\r
+ }\r
+ }\r
+ },\r
};
- var extensions$4 = {
- keybindings:{
- bindings:bindings$2,
- actions:actions$2
- },
+ var extensions$4 = {\r
+ keybindings:{\r
+ bindings:bindings$2,\r
+ actions:actions$2\r
+ },\r
};
class Clipboard extends Module{
}
}
- var columnLookups$1 = {
-
+ var columnLookups$1 = {\r
+\r
};
- var rowLookups$1 = {
- visible:function(){
- return this.rowManager.getVisibleRows(false, true);
- },
- all:function(){
- return this.rowManager.rows;
- },
- selected:function(){
- return this.modules.selectRow.selectedRows;
- },
- active:function(){
- if(this.options.pagination){
- return this.rowManager.getDisplayRows(this.rowManager.displayRows.length - 2);
- }else {
- return this.rowManager.getDisplayRows();
- }
- },
+ var rowLookups$1 = {\r
+ visible:function(){\r
+ return this.rowManager.getVisibleRows(false, true);\r
+ },\r
+ all:function(){\r
+ return this.rowManager.rows;\r
+ },\r
+ selected:function(){\r
+ return this.modules.selectRow.selectedRows;\r
+ },\r
+ active:function(){\r
+ if(this.options.pagination){\r
+ return this.rowManager.getDisplayRows(this.rowManager.displayRows.length - 2);\r
+ }else {\r
+ return this.rowManager.getDisplayRows();\r
+ }\r
+ },\r
};
class Export extends Module{
},
};
- var bindings$1 = {
- undo:["ctrl + 90", "meta + 90"],
- redo:["ctrl + 89", "meta + 89"],
+ var bindings$1 = {\r
+ undo:["ctrl + 90", "meta + 90"],\r
+ redo:["ctrl + 89", "meta + 89"],\r
};
- var actions$1 = {
- undo:function(e){
- var cell = false;
- if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
-
- cell = this.table.modules.edit.currentCell;
-
- if(!cell){
- e.preventDefault();
- this.table.modules.history.undo();
- }
- }
- },
-
- redo:function(e){
- var cell = false;
- if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
-
- cell = this.table.modules.edit.currentCell;
-
- if(!cell){
- e.preventDefault();
- this.table.modules.history.redo();
- }
- }
- },
+ var actions$1 = {\r
+ undo:function(e){\r
+ var cell = false;\r
+ if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){\r
+\r
+ cell = this.table.modules.edit.currentCell;\r
+\r
+ if(!cell){\r
+ e.preventDefault();\r
+ this.table.modules.history.undo();\r
+ }\r
+ }\r
+ },\r
+\r
+ redo:function(e){\r
+ var cell = false;\r
+ if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){\r
+\r
+ cell = this.table.modules.edit.currentCell;\r
+\r
+ if(!cell){\r
+ e.preventDefault();\r
+ this.table.modules.history.redo();\r
+ }\r
+ }\r
+ },\r
};
- var extensions$3 = {
- keybindings:{
- bindings:bindings$1,
- actions:actions$1
- },
+ var extensions$3 = {\r
+ keybindings:{\r
+ bindings:bindings$1,\r
+ actions:actions$1\r
+ },\r
};
class History extends Module{
}
}
- var defaultSenders = {
- delete:function(fromRow, toRow, toTable){
- fromRow.delete();
- }
+ var defaultSenders = {\r
+ delete:function(fromRow, toRow, toTable){\r
+ fromRow.delete();\r
+ }\r
};
- var defaultReceivers = {
- insert:function(fromRow, toRow, fromTable){
- this.table.addRow(fromRow.getData(), undefined, toRow);
- return true;
- },
-
- add:function(fromRow, toRow, fromTable){
- this.table.addRow(fromRow.getData());
- return true;
- },
-
- update:function(fromRow, toRow, fromTable){
- if(toRow){
- toRow.update(fromRow.getData());
- return true;
- }
-
- return false;
- },
-
- replace:function(fromRow, toRow, fromTable){
- if(toRow){
- this.table.addRow(fromRow.getData(), undefined, toRow);
- toRow.delete();
- return true;
- }
-
- return false;
- },
+ var defaultReceivers = {\r
+ insert:function(fromRow, toRow, fromTable){\r
+ this.table.addRow(fromRow.getData(), undefined, toRow);\r
+ return true;\r
+ },\r
+\r
+ add:function(fromRow, toRow, fromTable){\r
+ this.table.addRow(fromRow.getData());\r
+ return true;\r
+ },\r
+\r
+ update:function(fromRow, toRow, fromTable){\r
+ if(toRow){\r
+ toRow.update(fromRow.getData());\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ replace:function(fromRow, toRow, fromTable){\r
+ if(toRow){\r
+ this.table.addRow(fromRow.getData(), undefined, toRow);\r
+ toRow.delete();\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ },\r
};
class MoveRows extends Module{
return el;
}
- var extensions$2 = {
- format:{
- formatters:{
- responsiveCollapse:responsiveCollapse,
- }
- }
+ var extensions$2 = {\r
+ format:{\r
+ formatters:{\r
+ responsiveCollapse:responsiveCollapse,\r
+ }\r
+ }\r
};
class ResponsiveLayout extends Module{
return checkbox;
}
- var extensions$1 = {
- format:{
- formatters:{
- rowSelection:rowSelection,
- }
- }
+ var extensions$1 = {\r
+ format:{\r
+ formatters:{\r
+ rowSelection:rowSelection,\r
+ }\r
+ }\r
};
class SelectRow extends Module{
}
}
- var bindings = {
- rangeJumpUp:["ctrl + 38", "meta + 38"],
- rangeJumpDown:["ctrl + 40", "meta + 40"],
- rangeJumpLeft:["ctrl + 37", "meta + 37"],
- rangeJumpRight:["ctrl + 39", "meta + 39"],
- rangeExpandUp:"shift + 38",
- rangeExpandDown:"shift + 40",
- rangeExpandLeft:"shift + 37",
- rangeExpandRight:"shift + 39",
- rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],
- rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],
- rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],
- rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],
+ var bindings = {\r
+ rangeJumpUp:["ctrl + 38", "meta + 38"],\r
+ rangeJumpDown:["ctrl + 40", "meta + 40"],\r
+ rangeJumpLeft:["ctrl + 37", "meta + 37"],\r
+ rangeJumpRight:["ctrl + 39", "meta + 39"],\r
+ rangeExpandUp:"shift + 38",\r
+ rangeExpandDown:"shift + 40",\r
+ rangeExpandLeft:"shift + 37",\r
+ rangeExpandRight:"shift + 39",\r
+ rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],\r
+ rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],\r
+ rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],\r
+ rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],\r
};
- var actions = {
- rangeJumpLeft: function(e){
- this.dispatch("keybinding-nav-range", e, "left", true, false);
- },
- rangeJumpRight: function(e){
- this.dispatch("keybinding-nav-range", e, "right", true, false);
- },
- rangeJumpUp: function(e){
- this.dispatch("keybinding-nav-range", e, "up", true, false);
- },
- rangeJumpDown: function(e){
- this.dispatch("keybinding-nav-range", e, "down", true, false);
- },
- rangeExpandLeft: function(e){
- this.dispatch("keybinding-nav-range", e, "left", false, true);
- },
- rangeExpandRight: function(e){
- this.dispatch("keybinding-nav-range", e, "right", false, true);
- },
- rangeExpandUp: function(e){
- this.dispatch("keybinding-nav-range", e, "up", false, true);
- },
- rangeExpandDown: function(e){
- this.dispatch("keybinding-nav-range", e, "down", false, true);
- },
- rangeExpandJumpLeft: function(e){
- this.dispatch("keybinding-nav-range", e, "left", true, true);
- },
- rangeExpandJumpRight: function(e){
- this.dispatch("keybinding-nav-range", e, "right", true, true);
- },
- rangeExpandJumpUp: function(e){
- this.dispatch("keybinding-nav-range", e, "up", true, true);
- },
- rangeExpandJumpDown: function(e){
- this.dispatch("keybinding-nav-range", e, "down", true, true);
- },
+ var actions = {\r
+ rangeJumpLeft: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "left", true, false);\r
+ },\r
+ rangeJumpRight: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "right", true, false);\r
+ },\r
+ rangeJumpUp: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "up", true, false);\r
+ },\r
+ rangeJumpDown: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "down", true, false);\r
+ },\r
+ rangeExpandLeft: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "left", false, true);\r
+ },\r
+ rangeExpandRight: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "right", false, true);\r
+ },\r
+ rangeExpandUp: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "up", false, true);\r
+ },\r
+ rangeExpandDown: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "down", false, true);\r
+ },\r
+ rangeExpandJumpLeft: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "left", true, true);\r
+ },\r
+ rangeExpandJumpRight: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "right", true, true);\r
+ },\r
+ rangeExpandJumpUp: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "up", true, true);\r
+ },\r
+ rangeExpandJumpDown: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "down", true, true);\r
+ },\r
};
- var pasteActions = {
- range:function(data){
- var rows = [],
- range = this.table.modules.selectRange.activeRange,
- singleCell = false,
- bounds, startCell, startRow, rowWidth, dataLength;
-
- dataLength = data.length;
-
- if(range){
- bounds = range.getBounds();
- startCell = bounds.start;
-
- if(bounds.start === bounds.end){
- singleCell = true;
- }
-
- if(startCell){
- rows = this.table.rowManager.activeRows.slice();
- startRow = rows.indexOf(startCell.row);
-
- if(singleCell){
- rowWidth = data.length;
- }else {
- rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;
- }
-
-
- if(startRow >-1){
- this.table.blockRedraw();
-
- rows = rows.slice(startRow, startRow + rowWidth);
-
- rows.forEach((row, i) => {
- row.updateData(data[i % dataLength]);
- });
-
- this.table.restoreRedraw();
- }
- }
- }
-
- return rows;
- }
+ var pasteActions = {\r
+ range:function(data){\r
+ var rows = [],\r
+ range = this.table.modules.selectRange.activeRange,\r
+ singleCell = false,\r
+ bounds, startCell, startRow, rowWidth, dataLength;\r
+\r
+ dataLength = data.length;\r
+ \r
+ if(range){\r
+ bounds = range.getBounds();\r
+ startCell = bounds.start;\r
+ \r
+ if(bounds.start === bounds.end){\r
+ singleCell = true;\r
+ }\r
+ \r
+ if(startCell){\r
+ rows = this.table.rowManager.activeRows.slice();\r
+ startRow = rows.indexOf(startCell.row);\r
+\r
+ if(singleCell){\r
+ rowWidth = data.length;\r
+ }else {\r
+ rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\r
+ }\r
+ \r
+ \r
+ if(startRow >-1){\r
+ this.table.blockRedraw();\r
+ \r
+ rows = rows.slice(startRow, startRow + rowWidth);\r
+ \r
+ rows.forEach((row, i) => {\r
+ row.updateData(data[i % dataLength]);\r
+ });\r
+ \r
+ this.table.restoreRedraw();\r
+ }\r
+ }\r
+ }\r
+ \r
+ return rows;\r
+ }\r
};
- var pasteParsers = {
- range:function(clipboard){
- var data = [],
- rows = [],
- range = this.table.modules.selectRange.activeRange,
- singleCell = false,
- bounds, startCell, colWidth, columnMap, startCol;
-
- if(range){
- bounds = range.getBounds();
- startCell = bounds.start;
-
- if(bounds.start === bounds.end){
- singleCell = true;
- }
-
- if(startCell){
- //get data from clipboard into array of columns and rows.
- clipboard = clipboard.split("\n");
-
- clipboard.forEach(function(row){
- data.push(row.split("\t"));
- });
-
- if(data.length){
- columnMap = this.table.columnManager.getVisibleColumnsByIndex();
- startCol = columnMap.indexOf(startCell.column);
-
- if(startCol > -1){
- if(singleCell){
- colWidth = data[0].length;
- }else {
- colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;
- }
-
- columnMap = columnMap.slice(startCol, startCol + colWidth);
-
- data.forEach((item) => {
- var row = {};
- var itemLength = item.length;
-
- columnMap.forEach(function(col, i){
- row[col.field] = item[i % itemLength];
- });
-
- rows.push(row);
- });
-
- return rows;
- }
- }
- }
- }
-
- return false;
- }
+ var pasteParsers = {\r
+ range:function(clipboard){\r
+ var data = [],\r
+ rows = [],\r
+ range = this.table.modules.selectRange.activeRange,\r
+ singleCell = false,\r
+ bounds, startCell, colWidth, columnMap, startCol;\r
+ \r
+ if(range){\r
+ bounds = range.getBounds();\r
+ startCell = bounds.start;\r
+\r
+ if(bounds.start === bounds.end){\r
+ singleCell = true;\r
+ }\r
+ \r
+ if(startCell){\r
+ //get data from clipboard into array of columns and rows.\r
+ clipboard = clipboard.split("\n");\r
+ \r
+ clipboard.forEach(function(row){\r
+ data.push(row.split("\t"));\r
+ });\r
+ \r
+ if(data.length){\r
+ columnMap = this.table.columnManager.getVisibleColumnsByIndex();\r
+ startCol = columnMap.indexOf(startCell.column);\r
+\r
+ if(startCol > -1){\r
+ if(singleCell){\r
+ colWidth = data[0].length;\r
+ }else {\r
+ colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\r
+ }\r
+\r
+ columnMap = columnMap.slice(startCol, startCol + colWidth);\r
+\r
+ data.forEach((item) => {\r
+ var row = {};\r
+ var itemLength = item.length;\r
+\r
+ columnMap.forEach(function(col, i){\r
+ row[col.field] = item[i % itemLength];\r
+ });\r
+ \r
+ rows.push(row); \r
+ });\r
+\r
+ return rows;\r
+ } \r
+ }\r
+ }\r
+ }\r
+ \r
+ return false;\r
+ }\r
};
- var columnLookups = {
- range:function(){
- var columns = this.modules.selectRange.selectedColumns();
-
- if(this.columnManager.rowHeader){
- columns.unshift(this.columnManager.rowHeader);
- }
-
- return columns;
- },
+ var columnLookups = {\r
+ range:function(){\r
+ var columns = this.modules.selectRange.selectedColumns();\r
+\r
+ if(this.columnManager.rowHeader){\r
+ columns.unshift(this.columnManager.rowHeader);\r
+ }\r
+\r
+ return columns;\r
+ },\r
};
- var rowLookups = {
- range:function(){
- return this.modules.selectRange.selectedRows();
- },
+ var rowLookups = {\r
+ range:function(){\r
+ return this.modules.selectRange.selectedRows();\r
+ },\r
};
- var extensions = {
- keybindings:{
- bindings:bindings,
- actions:actions
- },
- clipboard:{
- pasteActions:pasteActions,
- pasteParsers:pasteParsers
- },
- export:{
- columnLookups:columnLookups,
- rowLookups:rowLookups,
- }
+ var extensions = {\r
+ keybindings:{\r
+ bindings:bindings,\r
+ actions:actions\r
+ },\r
+ clipboard:{\r
+ pasteActions:pasteActions,\r
+ pasteParsers:pasteParsers\r
+ },\r
+ export:{\r
+ columnLookups:columnLookups,\r
+ rowLookups:rowLookups,\r
+ }\r
};
class SelectRange extends Module {
}
}
- class GridCalculator{
- constructor(columns, rows){
- this.columnCount = columns;
- this.rowCount = rows;
-
- this.columnString = [];
- this.columns = [];
- this.rows = [];
- }
-
- genColumns(data){
- var colCount = Math.max(this.columnCount, Math.max(...data.map(item => item.length)));
-
- this.columnString = [];
- this.columns = [];
-
- for(let i = 1; i <= colCount; i++){
- this.incrementChar(this.columnString.length - 1);
- this.columns.push(this.columnString.join(""));
- }
-
- return this.columns;
- }
-
- genRows(data){
- var rowCount = Math.max(this.rowCount, data.length);
-
- this.rows = [];
-
- for(let i = 1; i <= rowCount; i++){
- this.rows.push(i);
- }
-
- return this.rows;
- }
-
- incrementChar(i){
- let char = this.columnString[i];
-
- if(char){
- if(char !== "Z"){
- this.columnString[i] = String.fromCharCode(this.columnString[i].charCodeAt(0) + 1);
- }else {
- this.columnString[i] = "A";
-
- if(i){
- this.incrementChar(i-1);
- }else {
- this.columnString.push("A");
- }
- }
- }else {
- this.columnString.push("A");
- }
- }
-
- setRowCount(count){
- this.rowCount = count;
- }
-
- setColumnCount(count){
- this.columnCount = count;
- }
+ class GridCalculator{\r
+ constructor(columns, rows){\r
+ this.columnCount = columns;\r
+ this.rowCount = rows;\r
+\r
+ this.columnString = [];\r
+ this.columns = [];\r
+ this.rows = [];\r
+ }\r
+\r
+ genColumns(data){\r
+ var colCount = Math.max(this.columnCount, Math.max(...data.map(item => item.length)));\r
+\r
+ this.columnString = [];\r
+ this.columns = [];\r
+\r
+ for(let i = 1; i <= colCount; i++){\r
+ this.incrementChar(this.columnString.length - 1);\r
+ this.columns.push(this.columnString.join(""));\r
+ }\r
+\r
+ return this.columns;\r
+ }\r
+\r
+ genRows(data){\r
+ var rowCount = Math.max(this.rowCount, data.length);\r
+\r
+ this.rows = [];\r
+\r
+ for(let i = 1; i <= rowCount; i++){\r
+ this.rows.push(i);\r
+ }\r
+ \r
+ return this.rows;\r
+ }\r
+\r
+ incrementChar(i){\r
+ let char = this.columnString[i];\r
+\r
+ if(char){\r
+ if(char !== "Z"){\r
+ this.columnString[i] = String.fromCharCode(this.columnString[i].charCodeAt(0) + 1);\r
+ }else {\r
+ this.columnString[i] = "A";\r
+ \r
+ if(i){\r
+ this.incrementChar(i-1);\r
+ }else {\r
+ this.columnString.push("A");\r
+ }\r
+ }\r
+ }else {\r
+ this.columnString.push("A");\r
+ }\r
+ }\r
+\r
+ setRowCount(count){\r
+ this.rowCount = count;\r
+ }\r
+\r
+ setColumnCount(count){\r
+ this.columnCount = count;\r
+ }\r
}
- class SheetComponent {
- constructor(sheet) {
- this._sheet = sheet;
-
- return new Proxy(this, {
- get: function (target, name, receiver) {
- if (typeof target[name] !== "undefined") {
- return target[name];
- } else {
- return target._sheet.table.componentFunctionBinder.handle("sheet", target._sheet, name);
- }
- },
- });
- }
-
- getTitle(){
- return this._sheet.title;
- }
-
- getKey(){
- return this._sheet.key;
- }
-
- getDefinition(){
- return this._sheet.getDefinition();
- }
-
- getData() {
- return this._sheet.getData();
- }
-
- setData(data) {
- return this._sheet.setData(data);
- }
-
- clear(){
- return this._sheet.clear();
- }
-
- remove(){
- return this._sheet.remove();
- }
-
- active(){
- return this._sheet.active();
- }
-
- setTitle(title){
- return this._sheet.setTitle(title);
- }
-
- setRows(rows){
- return this._sheet.setRows(rows);
- }
-
- setColumns(columns){
- return this._sheet.setColumns(columns);
- }
+ class SheetComponent {\r
+ constructor(sheet) {\r
+ this._sheet = sheet;\r
+\r
+ return new Proxy(this, {\r
+ get: function (target, name, receiver) {\r
+ if (typeof target[name] !== "undefined") {\r
+ return target[name];\r
+ } else {\r
+ return target._sheet.table.componentFunctionBinder.handle("sheet", target._sheet, name);\r
+ }\r
+ },\r
+ });\r
+ }\r
+\r
+ getTitle(){\r
+ return this._sheet.title;\r
+ }\r
+\r
+ getKey(){\r
+ return this._sheet.key;\r
+ }\r
+\r
+ getDefinition(){\r
+ return this._sheet.getDefinition();\r
+ }\r
+\r
+ getData() {\r
+ return this._sheet.getData();\r
+ }\r
+\r
+ setData(data) {\r
+ return this._sheet.setData(data);\r
+ }\r
+\r
+ clear(){\r
+ return this._sheet.clear();\r
+ }\r
+\r
+ remove(){\r
+ return this._sheet.remove();\r
+ }\r
+ \r
+ active(){\r
+ return this._sheet.active();\r
+ }\r
+\r
+ setTitle(title){\r
+ return this._sheet.setTitle(title);\r
+ }\r
+\r
+ setRows(rows){\r
+ return this._sheet.setRows(rows);\r
+ }\r
+\r
+ setColumns(columns){\r
+ return this._sheet.setColumns(columns);\r
+ }\r
}
- class Sheet extends CoreFeature{
- constructor(spreadsheetManager, definition) {
- super(spreadsheetManager.table);
-
- this.spreadsheetManager = spreadsheetManager;
- this.definition = definition;
-
- this.title = this.definition.title || "";
- this.key = this.definition.key || this.definition.title;
- this.rowCount = this.definition.rows;
- this.columnCount = this.definition.columns;
- this.data = this.definition.data || [];
- this.element = null;
- this.isActive = false;
-
- this.grid = new GridCalculator(this.columnCount, this.rowCount);
-
- this.defaultColumnDefinition = {width:100, headerHozAlign:"center", headerSort:false};
- this.columnDefinition = Object.assign(this.defaultColumnDefinition, this.options("spreadsheetColumnDefinition"));
-
- this.columnDefs = [];
- this.rowDefs = [];
- this.columnFields = [];
- this.columns = [];
- this.rows = [];
-
- this.scrollTop = null;
- this.scrollLeft = null;
-
- this.initialize();
-
- this.dispatchExternal("sheetAdded", this.getComponent());
- }
-
- ///////////////////////////////////
- ///////// Initialization //////////
- ///////////////////////////////////
-
- initialize(){
- this.initializeElement();
- this.initializeColumns();
- this.initializeRows();
- }
-
- reinitialize(){
- this.initializeColumns();
- this.initializeRows();
- }
-
- initializeElement(){
- this.element = document.createElement("div");
- this.element.classList.add("tabulator-spreadsheet-tab");
- this.element.innerText = this.title;
-
- this.element.addEventListener("click", () => {
- this.spreadsheetManager.loadSheet(this);
- });
- }
-
- initializeColumns(){
- this.grid.setColumnCount(this.columnCount);
- this.columnFields = this.grid.genColumns(this.data);
-
- this.columnDefs = [];
-
- this.columnFields.forEach((ref) => {
- var def = Object.assign({}, this.columnDefinition);
- def.field = ref;
- def.title = ref;
-
- this.columnDefs.push(def);
- });
- }
-
- initializeRows(){
- var refs;
-
- this.grid.setRowCount(this.rowCount);
-
- refs = this.grid.genRows(this.data);
-
- this.rowDefs = [];
-
- refs.forEach((ref, i) => {
- var def = {"_id":ref};
- var data = this.data[i];
-
- if(data){
- data.forEach((val, j) => {
- var field = this.columnFields[j];
-
- if(field){
- def[field] = val;
- }
- });
- }
-
- this.rowDefs.push(def);
- });
- }
-
- unload(){
- this.isActive = false;
- this.scrollTop = this.table.rowManager.scrollTop;
- this.scrollLeft = this.table.rowManager.scrollLeft;
- this.data = this.getData(true);
- this.element.classList.remove("tabulator-spreadsheet-tab-active");
- }
-
- load(){
-
- var wasInactive = !this.isActive;
-
- this.isActive = true;
- this.table.blockRedraw();
- this.table.setData([]);
- this.table.setColumns(this.columnDefs);
- this.table.setData(this.rowDefs);
- this.table.restoreRedraw();
-
- if(wasInactive && this.scrollTop !== null){
- this.table.rowManager.element.scrollLeft = this.scrollLeft;
- this.table.rowManager.element.scrollTop = this.scrollTop;
- }
-
- this.element.classList.add("tabulator-spreadsheet-tab-active");
-
- this.dispatchExternal("sheetLoaded", this.getComponent());
- }
-
- ///////////////////////////////////
- //////// Helper Functions /////////
- ///////////////////////////////////
-
- getComponent(){
- return new SheetComponent(this);
- }
-
- getDefinition(){
- return {
- title:this.title,
- key:this.key,
- rows:this.rowCount,
- columns:this.columnCount,
- data:this.getData(),
- };
- }
-
- getData(full){
- var output = [],
- rowWidths,
- outputWidth, outputHeight;
-
- //map data to array format
- this.rowDefs.forEach((rowData) => {
- var row = [];
-
- this.columnFields.forEach((field) => {
- row.push(rowData[field]);
- });
-
- output.push(row);
- });
-
- //trim output
- if(!full && !this.options("spreadsheetOutputFull")){
-
- //calculate used area of data
- rowWidths = output.map(row => row.findLastIndex(val => typeof val !== 'undefined') + 1);
- outputWidth = Math.max(...rowWidths);
- outputHeight = rowWidths.findLastIndex(width => width > 0) + 1;
-
- output = output.slice(0, outputHeight);
- output = output.map(row => row.slice(0, outputWidth));
- }
-
- return output;
- }
-
- setData(data){
- this.data = data;
- this.reinitialize();
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
-
- if(this.isActive){
- this.load();
- }
- }
-
- clear(){
- this.setData([]);
- }
-
- setTitle(title){
- this.title = title;
- this.element.innerText = title;
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
- }
-
- setRows(rows){
- this.rowCount = rows;
- this.initializeRows();
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
-
- if(this.isActive){
- this.load();
- }
- }
-
- setColumns(columns){
- this.columnCount = columns;
- this.reinitialize();
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
-
- if(this.isActive){
- this.load();
- }
- }
-
- remove(){
- this.spreadsheetManager.removeSheet(this);
- }
-
- destroy(){
- if(this.element.parentNode){
- this.element.parentNode.removeChild(this.element);
- }
-
- this.dispatchExternal("sheetRemoved", this.getComponent());
- }
-
- active(){
- this.spreadsheetManager.loadSheet(this);
- }
+ class Sheet extends CoreFeature{\r
+ constructor(spreadsheetManager, definition) {\r
+ super(spreadsheetManager.table);\r
+ \r
+ this.spreadsheetManager = spreadsheetManager;\r
+ this.definition = definition;\r
+ \r
+ this.title = this.definition.title || "";\r
+ this.key = this.definition.key || this.definition.title;\r
+ this.rowCount = this.definition.rows;\r
+ this.columnCount = this.definition.columns;\r
+ this.data = this.definition.data || [];\r
+ this.element = null;\r
+ this.isActive = false;\r
+ \r
+ this.grid = new GridCalculator(this.columnCount, this.rowCount);\r
+ \r
+ this.defaultColumnDefinition = {width:100, headerHozAlign:"center", headerSort:false};\r
+ this.columnDefinition = Object.assign(this.defaultColumnDefinition, this.options("spreadsheetColumnDefinition"));\r
+ \r
+ this.columnDefs = [];\r
+ this.rowDefs = [];\r
+ this.columnFields = [];\r
+ this.columns = [];\r
+ this.rows = [];\r
+ \r
+ this.scrollTop = null;\r
+ this.scrollLeft = null;\r
+ \r
+ this.initialize();\r
+ \r
+ this.dispatchExternal("sheetAdded", this.getComponent());\r
+ }\r
+ \r
+ ///////////////////////////////////\r
+ ///////// Initialization //////////\r
+ ///////////////////////////////////\r
+ \r
+ initialize(){\r
+ this.initializeElement();\r
+ this.initializeColumns();\r
+ this.initializeRows();\r
+ }\r
+ \r
+ reinitialize(){\r
+ this.initializeColumns();\r
+ this.initializeRows();\r
+ }\r
+ \r
+ initializeElement(){\r
+ this.element = document.createElement("div");\r
+ this.element.classList.add("tabulator-spreadsheet-tab");\r
+ this.element.innerText = this.title;\r
+ \r
+ this.element.addEventListener("click", () => {\r
+ this.spreadsheetManager.loadSheet(this);\r
+ });\r
+ }\r
+ \r
+ initializeColumns(){\r
+ this.grid.setColumnCount(this.columnCount);\r
+ this.columnFields = this.grid.genColumns(this.data);\r
+ \r
+ this.columnDefs = [];\r
+ \r
+ this.columnFields.forEach((ref) => {\r
+ var def = Object.assign({}, this.columnDefinition);\r
+ def.field = ref;\r
+ def.title = ref;\r
+ \r
+ this.columnDefs.push(def);\r
+ });\r
+ }\r
+ \r
+ initializeRows(){\r
+ var refs;\r
+ \r
+ this.grid.setRowCount(this.rowCount);\r
+ \r
+ refs = this.grid.genRows(this.data);\r
+ \r
+ this.rowDefs = [];\r
+ \r
+ refs.forEach((ref, i) => {\r
+ var def = {"_id":ref};\r
+ var data = this.data[i];\r
+ \r
+ if(data){\r
+ data.forEach((val, j) => {\r
+ var field = this.columnFields[j];\r
+ \r
+ if(field){\r
+ def[field] = val;\r
+ }\r
+ });\r
+ }\r
+ \r
+ this.rowDefs.push(def);\r
+ });\r
+ }\r
+ \r
+ unload(){\r
+ this.isActive = false;\r
+ this.scrollTop = this.table.rowManager.scrollTop;\r
+ this.scrollLeft = this.table.rowManager.scrollLeft;\r
+ this.data = this.getData(true);\r
+ this.element.classList.remove("tabulator-spreadsheet-tab-active");\r
+ }\r
+ \r
+ load(){\r
+ \r
+ var wasInactive = !this.isActive;\r
+ \r
+ this.isActive = true;\r
+ this.table.blockRedraw();\r
+ this.table.setData([]);\r
+ this.table.setColumns(this.columnDefs);\r
+ this.table.setData(this.rowDefs);\r
+ this.table.restoreRedraw();\r
+ \r
+ if(wasInactive && this.scrollTop !== null){\r
+ this.table.rowManager.element.scrollLeft = this.scrollLeft;\r
+ this.table.rowManager.element.scrollTop = this.scrollTop;\r
+ }\r
+ \r
+ this.element.classList.add("tabulator-spreadsheet-tab-active");\r
+ \r
+ this.dispatchExternal("sheetLoaded", this.getComponent());\r
+ }\r
+ \r
+ ///////////////////////////////////\r
+ //////// Helper Functions /////////\r
+ ///////////////////////////////////\r
+ \r
+ getComponent(){\r
+ return new SheetComponent(this);\r
+ }\r
+ \r
+ getDefinition(){\r
+ return {\r
+ title:this.title,\r
+ key:this.key,\r
+ rows:this.rowCount,\r
+ columns:this.columnCount,\r
+ data:this.getData(),\r
+ };\r
+ }\r
+ \r
+ getData(full){\r
+ var output = [], \r
+ rowWidths,\r
+ outputWidth, outputHeight;\r
+ \r
+ //map data to array format\r
+ this.rowDefs.forEach((rowData) => {\r
+ var row = [];\r
+ \r
+ this.columnFields.forEach((field) => {\r
+ row.push(rowData[field]);\r
+ });\r
+ \r
+ output.push(row);\r
+ });\r
+ \r
+ //trim output\r
+ if(!full && !this.options("spreadsheetOutputFull")){\r
+ \r
+ //calculate used area of data\r
+ rowWidths = output.map(row => row.findLastIndex(val => typeof val !== 'undefined') + 1);\r
+ outputWidth = Math.max(...rowWidths);\r
+ outputHeight = rowWidths.findLastIndex(width => width > 0) + 1;\r
+ \r
+ output = output.slice(0, outputHeight);\r
+ output = output.map(row => row.slice(0, outputWidth));\r
+ }\r
+ \r
+ return output;\r
+ }\r
+ \r
+ setData(data){\r
+ this.data = data;\r
+ this.reinitialize();\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ \r
+ if(this.isActive){\r
+ this.load();\r
+ }\r
+ }\r
+ \r
+ clear(){\r
+ this.setData([]);\r
+ }\r
+ \r
+ setTitle(title){\r
+ this.title = title;\r
+ this.element.innerText = title;\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ }\r
+ \r
+ setRows(rows){\r
+ this.rowCount = rows;\r
+ this.initializeRows();\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ \r
+ if(this.isActive){\r
+ this.load();\r
+ }\r
+ }\r
+ \r
+ setColumns(columns){\r
+ this.columnCount = columns;\r
+ this.reinitialize();\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ \r
+ if(this.isActive){\r
+ this.load();\r
+ }\r
+ }\r
+ \r
+ remove(){\r
+ this.spreadsheetManager.removeSheet(this);\r
+ }\r
+ \r
+ destroy(){\r
+ if(this.element.parentNode){\r
+ this.element.parentNode.removeChild(this.element);\r
+ }\r
+ \r
+ this.dispatchExternal("sheetRemoved", this.getComponent());\r
+ }\r
+ \r
+ active(){\r
+ this.spreadsheetManager.loadSheet(this);\r
+ }\r
}
- class Spreadsheet extends Module{
-
- static moduleName = "spreadsheet";
-
- constructor(table){
- super(table);
-
- this.sheets = [];
- this.element = null;
-
- this.registerTableOption("spreadsheet", false);
- this.registerTableOption("spreadsheetRows", 50);
- this.registerTableOption("spreadsheetColumns", 50);
- this.registerTableOption("spreadsheetColumnDefinition", {});
- this.registerTableOption("spreadsheetOutputFull", false);
- this.registerTableOption("spreadsheetData", false);
- this.registerTableOption("spreadsheetSheets", false);
- this.registerTableOption("spreadsheetSheetTabs", false);
- this.registerTableOption("spreadsheetSheetTabsElement", false);
-
- this.registerTableFunction("setSheets", this.setSheets.bind(this));
- this.registerTableFunction("addSheet", this.addSheet.bind(this));
- this.registerTableFunction("getSheets", this.getSheets.bind(this));
- this.registerTableFunction("getSheetDefinitions", this.getSheetDefinitions.bind(this));
- this.registerTableFunction("setSheetData", this.setSheetData.bind(this));
- this.registerTableFunction("getSheet", this.getSheet.bind(this));
- this.registerTableFunction("getSheetData", this.getSheetData.bind(this));
- this.registerTableFunction("clearSheet", this.clearSheet.bind(this));
- this.registerTableFunction("removeSheet", this.removeSheetFunc.bind(this));
- this.registerTableFunction("activeSheet", this.activeSheetFunc.bind(this));
- }
-
- ///////////////////////////////////
- ////// Module Initialization //////
- ///////////////////////////////////
-
-
- initialize(){
- if(this.options("spreadsheet")){
- this.subscribe("table-initialized", this.tableInitialized.bind(this));
- this.subscribe("data-loaded", this.loadRemoteData.bind(this));
-
- this.table.options.index = "_id";
-
- if(this.options("spreadsheetData") && this.options("spreadsheetSheets")){
- console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData");
-
- this.table.options.spreadsheetData = false;
- }
-
- this.compatibilityCheck();
-
- if(this.options("spreadsheetSheetTabs")){
- this.initializeTabset();
- }
- }
- }
-
- compatibilityCheck(){
- if(this.options("data")){
- console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table");
- }
-
- if(this.options("pagination")){
- console.warn("The spreadsheet module is not compatible with the pagination module");
- }
-
- if(this.options("groupBy")){
- console.warn("The spreadsheet module is not compatible with the row grouping module");
- }
-
- if(this.options("responsiveCollapse")){
- console.warn("The spreadsheet module is not compatible with the responsive collapse module");
- }
- }
- initializeTabset(){
- this.element = document.createElement("div");
- this.element.classList.add("tabulator-spreadsheet-tabs");
- var altContainer = this.options("spreadsheetSheetTabsElement");
-
- if(altContainer && !(altContainer instanceof HTMLElement)){
- altContainer = document.querySelector(altContainer);
-
- if(!altContainer){
- console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:", this.options("spreadsheetSheetTabsElement"));
- }
- }
-
- if(altContainer){
- altContainer.appendChild(this.element);
- }else {
- this.footerAppend(this.element);
- }
- }
-
- tableInitialized(){
- if(this.sheets.length){
- this.loadSheet(this.sheets[0]);
- }else {
-
- if(this.options("spreadsheetSheets")){
- this.loadSheets(this.options("spreadsheetSheets"));
- }else if(this.options("spreadsheetData")){
- this.loadData(this.options("spreadsheetData"));
- }
- }
- }
-
- ///////////////////////////////////
- /////////// Ajax Parsing //////////
- ///////////////////////////////////
-
- loadRemoteData(data, data1, data2){
- console.log("data", data, data1, data2);
-
- if(Array.isArray(data)){
-
- this.table.dataLoader.clearAlert();
- this.dispatchExternal("dataLoaded", data);
-
- if(!data.length || Array.isArray(data[0])){
- this.loadData(data);
- }else {
- this.loadSheets(data);
- }
- }else {
- console.error("Spreadsheet Loading Error - Unable to process remote data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data);
- }
-
- return false;
- }
-
- ///////////////////////////////////
- ///////// Sheet Management ////////
- ///////////////////////////////////
-
-
- loadData(data){
- var def = {
- data:data,
- };
-
- this.loadSheet(this.newSheet(def));
- }
-
- destroySheets(){
- this.sheets.forEach((sheet) => {
- sheet.destroy();
- });
-
- this.sheets = [];
- this.activeSheet = null;
- }
-
- loadSheets(sheets){
- if(!Array.isArray(sheets)){
- sheets = [];
- }
-
- this.destroySheets();
-
- sheets.forEach((def) => {
- this.newSheet(def);
- });
-
- this.loadSheet(this.sheets[0]);
- }
-
- loadSheet(sheet){
- if(this.activeSheet !== sheet){
- if(this.activeSheet){
- this.activeSheet.unload();
- }
-
- this.activeSheet = sheet;
-
- sheet.load();
- }
- }
-
- newSheet(definition = {}){
- var sheet;
-
- if(!definition.rows){
- definition.rows = this.options("spreadsheetRows");
- }
-
- if(!definition.columns){
- definition.columns = this.options("spreadsheetColumns");
- }
-
- sheet = new Sheet(this, definition);
-
- this.sheets.push(sheet);
-
- if(this.element){
- this.element.appendChild(sheet.element);
- }
-
- return sheet;
- }
-
- removeSheet(sheet){
- var index = this.sheets.indexOf(sheet),
- prevSheet;
-
- if(this.sheets.length > 1){
- if(index > -1){
- this.sheets.splice(index, 1);
- sheet.destroy();
-
- if(this.activeSheet === sheet){
-
- prevSheet = this.sheets[index - 1] || this.sheets[0];
-
- if(prevSheet){
- this.loadSheet(prevSheet);
- }else {
- this.activeSheet = null;
- }
- }
- }
- }else {
- console.warn("Unable to remove sheet, at least one sheet must be active");
- }
- }
-
- lookupSheet(key){
- if(!key){
- return this.activeSheet;
- }else if(key instanceof Sheet){
- return key;
- }else if(key instanceof SheetComponent){
- return key._sheet;
- }else {
- return this.sheets.find(sheet => sheet.key === key) || false;
- }
- }
-
-
- ///////////////////////////////////
- //////// Public Functions /////////
- ///////////////////////////////////
-
- setSheets(sheets){
- this.loadSheets(sheets);
-
- return this.getSheets();
- }
-
- addSheet(sheet){
- return this.newSheet(sheet).getComponent();
- }
-
- getSheetDefinitions(){
- return this.sheets.map(sheet => sheet.getDefinition());
- }
-
- getSheets(){
- return this.sheets.map(sheet => sheet.getComponent());
- }
-
- getSheet(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.getComponent() : false;
- }
-
- setSheetData(key, data){
- if (key && !data){
- data = key;
- key = false;
- }
-
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.setData(data) : false;
- }
-
- getSheetData(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.getData() : false;
- }
-
- clearSheet(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.clear() : false;
- }
-
- removeSheetFunc(key){
- var sheet = this.lookupSheet(key);
-
- if(sheet){
- this.removeSheet(sheet);
- }
- }
-
- activeSheetFunc(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? this.loadSheet(sheet) : false;
- }
+ class Spreadsheet extends Module{\r
+ \r
+ static moduleName = "spreadsheet";\r
+ \r
+ constructor(table){\r
+ super(table);\r
+ \r
+ this.sheets = [];\r
+ this.element = null;\r
+ \r
+ this.registerTableOption("spreadsheet", false); \r
+ this.registerTableOption("spreadsheetRows", 50); \r
+ this.registerTableOption("spreadsheetColumns", 50); \r
+ this.registerTableOption("spreadsheetColumnDefinition", {}); \r
+ this.registerTableOption("spreadsheetOutputFull", false); \r
+ this.registerTableOption("spreadsheetData", false); \r
+ this.registerTableOption("spreadsheetSheets", false); \r
+ this.registerTableOption("spreadsheetSheetTabs", false); \r
+ this.registerTableOption("spreadsheetSheetTabsElement", false); \r
+ \r
+ this.registerTableFunction("setSheets", this.setSheets.bind(this));\r
+ this.registerTableFunction("addSheet", this.addSheet.bind(this));\r
+ this.registerTableFunction("getSheets", this.getSheets.bind(this));\r
+ this.registerTableFunction("getSheetDefinitions", this.getSheetDefinitions.bind(this));\r
+ this.registerTableFunction("setSheetData", this.setSheetData.bind(this));\r
+ this.registerTableFunction("getSheet", this.getSheet.bind(this));\r
+ this.registerTableFunction("getSheetData", this.getSheetData.bind(this));\r
+ this.registerTableFunction("clearSheet", this.clearSheet.bind(this));\r
+ this.registerTableFunction("removeSheet", this.removeSheetFunc.bind(this));\r
+ this.registerTableFunction("activeSheet", this.activeSheetFunc.bind(this));\r
+ }\r
+ \r
+ ///////////////////////////////////\r
+ ////// Module Initialization //////\r
+ ///////////////////////////////////\r
+ \r
+ \r
+ initialize(){\r
+ if(this.options("spreadsheet")){ \r
+ this.subscribe("table-initialized", this.tableInitialized.bind(this));\r
+ this.subscribe("data-loaded", this.loadRemoteData.bind(this));\r
+ \r
+ this.table.options.index = "_id";\r
+ \r
+ if(this.options("spreadsheetData") && this.options("spreadsheetSheets")){\r
+ console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData");\r
+ \r
+ this.table.options.spreadsheetData = false;\r
+ }\r
+ \r
+ this.compatibilityCheck();\r
+ \r
+ if(this.options("spreadsheetSheetTabs")){\r
+ this.initializeTabset();\r
+ }\r
+ }\r
+ }\r
+ \r
+ compatibilityCheck(){\r
+ if(this.options("data")){\r
+ console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table");\r
+ }\r
+ \r
+ if(this.options("pagination")){\r
+ console.warn("The spreadsheet module is not compatible with the pagination module");\r
+ }\r
+ \r
+ if(this.options("groupBy")){\r
+ console.warn("The spreadsheet module is not compatible with the row grouping module");\r
+ }\r
+ \r
+ if(this.options("responsiveCollapse")){\r
+ console.warn("The spreadsheet module is not compatible with the responsive collapse module");\r
+ }\r
+ }\r
+ initializeTabset(){\r
+ this.element = document.createElement("div");\r
+ this.element.classList.add("tabulator-spreadsheet-tabs");\r
+ var altContainer = this.options("spreadsheetSheetTabsElement");\r
+ \r
+ if(altContainer && !(altContainer instanceof HTMLElement)){\r
+ altContainer = document.querySelector(altContainer);\r
+ \r
+ if(!altContainer){\r
+ console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:", this.options("spreadsheetSheetTabsElement"));\r
+ }\r
+ }\r
+ \r
+ if(altContainer){\r
+ altContainer.appendChild(this.element);\r
+ }else {\r
+ this.footerAppend(this.element);\r
+ }\r
+ }\r
+ \r
+ tableInitialized(){\r
+ if(this.sheets.length){\r
+ this.loadSheet(this.sheets[0]);\r
+ }else {\r
+ \r
+ if(this.options("spreadsheetSheets")){\r
+ this.loadSheets(this.options("spreadsheetSheets"));\r
+ }else if(this.options("spreadsheetData")){\r
+ this.loadData(this.options("spreadsheetData"));\r
+ }\r
+ }\r
+ }\r
+\r
+ ///////////////////////////////////\r
+ /////////// Ajax Parsing //////////\r
+ ///////////////////////////////////\r
+\r
+ loadRemoteData(data, data1, data2){\r
+ console.log("data", data, data1, data2);\r
+\r
+ if(Array.isArray(data)){\r
+\r
+ this.table.dataLoader.clearAlert();\r
+ this.dispatchExternal("dataLoaded", data);\r
+\r
+ if(!data.length || Array.isArray(data[0])){\r
+ this.loadData(data);\r
+ }else {\r
+ this.loadSheets(data);\r
+ }\r
+ }else {\r
+ console.error("Spreadsheet Loading Error - Unable to process remote data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data);\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ ///////////////////////////////////\r
+ ///////// Sheet Management ////////\r
+ ///////////////////////////////////\r
+ \r
+ \r
+ loadData(data){\r
+ var def = {\r
+ data:data,\r
+ };\r
+ \r
+ this.loadSheet(this.newSheet(def));\r
+ }\r
+ \r
+ destroySheets(){\r
+ this.sheets.forEach((sheet) => {\r
+ sheet.destroy();\r
+ });\r
+ \r
+ this.sheets = [];\r
+ this.activeSheet = null;\r
+ }\r
+ \r
+ loadSheets(sheets){ \r
+ if(!Array.isArray(sheets)){\r
+ sheets = [];\r
+ }\r
+ \r
+ this.destroySheets();\r
+ \r
+ sheets.forEach((def) => {\r
+ this.newSheet(def);\r
+ });\r
+ \r
+ this.loadSheet(this.sheets[0]);\r
+ }\r
+ \r
+ loadSheet(sheet){\r
+ if(this.activeSheet !== sheet){\r
+ if(this.activeSheet){\r
+ this.activeSheet.unload();\r
+ }\r
+ \r
+ this.activeSheet = sheet;\r
+ \r
+ sheet.load();\r
+ }\r
+ }\r
+ \r
+ newSheet(definition = {}){\r
+ var sheet;\r
+ \r
+ if(!definition.rows){\r
+ definition.rows = this.options("spreadsheetRows");\r
+ }\r
+ \r
+ if(!definition.columns){\r
+ definition.columns = this.options("spreadsheetColumns");\r
+ }\r
+ \r
+ sheet = new Sheet(this, definition);\r
+ \r
+ this.sheets.push(sheet);\r
+ \r
+ if(this.element){\r
+ this.element.appendChild(sheet.element);\r
+ }\r
+ \r
+ return sheet;\r
+ }\r
+ \r
+ removeSheet(sheet){\r
+ var index = this.sheets.indexOf(sheet),\r
+ prevSheet;\r
+ \r
+ if(this.sheets.length > 1){\r
+ if(index > -1){\r
+ this.sheets.splice(index, 1);\r
+ sheet.destroy();\r
+ \r
+ if(this.activeSheet === sheet){\r
+ \r
+ prevSheet = this.sheets[index - 1] || this.sheets[0];\r
+ \r
+ if(prevSheet){\r
+ this.loadSheet(prevSheet);\r
+ }else {\r
+ this.activeSheet = null;\r
+ }\r
+ }\r
+ }\r
+ }else {\r
+ console.warn("Unable to remove sheet, at least one sheet must be active");\r
+ }\r
+ }\r
+ \r
+ lookupSheet(key){\r
+ if(!key){\r
+ return this.activeSheet;\r
+ }else if(key instanceof Sheet){\r
+ return key;\r
+ }else if(key instanceof SheetComponent){\r
+ return key._sheet;\r
+ }else {\r
+ return this.sheets.find(sheet => sheet.key === key) || false;\r
+ }\r
+ }\r
+ \r
+ \r
+ ///////////////////////////////////\r
+ //////// Public Functions /////////\r
+ ///////////////////////////////////\r
+ \r
+ setSheets(sheets){\r
+ this.loadSheets(sheets);\r
+\r
+ return this.getSheets();\r
+ }\r
+\r
+ addSheet(sheet){\r
+ return this.newSheet(sheet).getComponent();\r
+ }\r
+ \r
+ getSheetDefinitions(){\r
+ return this.sheets.map(sheet => sheet.getDefinition());\r
+ }\r
+ \r
+ getSheets(){\r
+ return this.sheets.map(sheet => sheet.getComponent());\r
+ }\r
+ \r
+ getSheet(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.getComponent() : false;\r
+ }\r
+ \r
+ setSheetData(key, data){\r
+ if (key && !data){\r
+ data = key;\r
+ key = false;\r
+ }\r
+ \r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.setData(data) : false; \r
+ }\r
+ \r
+ getSheetData(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.getData() : false; \r
+ }\r
+ \r
+ clearSheet(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.clear() : false;\r
+ }\r
+ \r
+ removeSheetFunc(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ if(sheet){\r
+ this.removeSheet(sheet);\r
+ }\r
+ }\r
+ \r
+ activeSheetFunc(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? this.loadSheet(sheet) : false;\r
+ }\r
}
class Tooltip extends Module{
}
-var defaultAccessors = {
- rownum:function(value, data, type, params, column, row){
- return row.getPosition();
- }
+var defaultAccessors = {\r
+ rownum:function(value, data, type, params, column, row){\r
+ return row.getPosition();\r
+ }\r
};
class Accessor extends Module{
},
};
-var bindings$2 = {
- copyToClipboard:["ctrl + 67", "meta + 67"],
+var bindings$2 = {\r
+ copyToClipboard:["ctrl + 67", "meta + 67"],\r
};
-var actions$2 = {
- copyToClipboard:function(e){
- if(!this.table.modules.edit.currentCell){
- if(this.table.modExists("clipboard", true)){
- this.table.modules.clipboard.copy(false, true);
- }
- }
- },
+var actions$2 = {\r
+ copyToClipboard:function(e){\r
+ if(!this.table.modules.edit.currentCell){\r
+ if(this.table.modExists("clipboard", true)){\r
+ this.table.modules.clipboard.copy(false, true);\r
+ }\r
+ }\r
+ },\r
};
-var extensions$4 = {
- keybindings:{
- bindings:bindings$2,
- actions:actions$2
- },
+var extensions$4 = {\r
+ keybindings:{\r
+ bindings:bindings$2,\r
+ actions:actions$2\r
+ },\r
};
class Clipboard extends Module{
}
}
-var columnLookups$1 = {
-
+var columnLookups$1 = {\r
+\r
};
-var rowLookups$1 = {
- visible:function(){
- return this.rowManager.getVisibleRows(false, true);
- },
- all:function(){
- return this.rowManager.rows;
- },
- selected:function(){
- return this.modules.selectRow.selectedRows;
- },
- active:function(){
- if(this.options.pagination){
- return this.rowManager.getDisplayRows(this.rowManager.displayRows.length - 2);
- }else {
- return this.rowManager.getDisplayRows();
- }
- },
+var rowLookups$1 = {\r
+ visible:function(){\r
+ return this.rowManager.getVisibleRows(false, true);\r
+ },\r
+ all:function(){\r
+ return this.rowManager.rows;\r
+ },\r
+ selected:function(){\r
+ return this.modules.selectRow.selectedRows;\r
+ },\r
+ active:function(){\r
+ if(this.options.pagination){\r
+ return this.rowManager.getDisplayRows(this.rowManager.displayRows.length - 2);\r
+ }else {\r
+ return this.rowManager.getDisplayRows();\r
+ }\r
+ },\r
};
class Export extends Module{
},
};
-var bindings$1 = {
- undo:["ctrl + 90", "meta + 90"],
- redo:["ctrl + 89", "meta + 89"],
+var bindings$1 = {\r
+ undo:["ctrl + 90", "meta + 90"],\r
+ redo:["ctrl + 89", "meta + 89"],\r
};
-var actions$1 = {
- undo:function(e){
- var cell = false;
- if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
-
- cell = this.table.modules.edit.currentCell;
-
- if(!cell){
- e.preventDefault();
- this.table.modules.history.undo();
- }
- }
- },
-
- redo:function(e){
- var cell = false;
- if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){
-
- cell = this.table.modules.edit.currentCell;
-
- if(!cell){
- e.preventDefault();
- this.table.modules.history.redo();
- }
- }
- },
+var actions$1 = {\r
+ undo:function(e){\r
+ var cell = false;\r
+ if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){\r
+\r
+ cell = this.table.modules.edit.currentCell;\r
+\r
+ if(!cell){\r
+ e.preventDefault();\r
+ this.table.modules.history.undo();\r
+ }\r
+ }\r
+ },\r
+\r
+ redo:function(e){\r
+ var cell = false;\r
+ if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){\r
+\r
+ cell = this.table.modules.edit.currentCell;\r
+\r
+ if(!cell){\r
+ e.preventDefault();\r
+ this.table.modules.history.redo();\r
+ }\r
+ }\r
+ },\r
};
-var extensions$3 = {
- keybindings:{
- bindings:bindings$1,
- actions:actions$1
- },
+var extensions$3 = {\r
+ keybindings:{\r
+ bindings:bindings$1,\r
+ actions:actions$1\r
+ },\r
};
class History extends Module{
}
}
-var defaultSenders = {
- delete:function(fromRow, toRow, toTable){
- fromRow.delete();
- }
+var defaultSenders = {\r
+ delete:function(fromRow, toRow, toTable){\r
+ fromRow.delete();\r
+ }\r
};
-var defaultReceivers = {
- insert:function(fromRow, toRow, fromTable){
- this.table.addRow(fromRow.getData(), undefined, toRow);
- return true;
- },
-
- add:function(fromRow, toRow, fromTable){
- this.table.addRow(fromRow.getData());
- return true;
- },
-
- update:function(fromRow, toRow, fromTable){
- if(toRow){
- toRow.update(fromRow.getData());
- return true;
- }
-
- return false;
- },
-
- replace:function(fromRow, toRow, fromTable){
- if(toRow){
- this.table.addRow(fromRow.getData(), undefined, toRow);
- toRow.delete();
- return true;
- }
-
- return false;
- },
+var defaultReceivers = {\r
+ insert:function(fromRow, toRow, fromTable){\r
+ this.table.addRow(fromRow.getData(), undefined, toRow);\r
+ return true;\r
+ },\r
+\r
+ add:function(fromRow, toRow, fromTable){\r
+ this.table.addRow(fromRow.getData());\r
+ return true;\r
+ },\r
+\r
+ update:function(fromRow, toRow, fromTable){\r
+ if(toRow){\r
+ toRow.update(fromRow.getData());\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ replace:function(fromRow, toRow, fromTable){\r
+ if(toRow){\r
+ this.table.addRow(fromRow.getData(), undefined, toRow);\r
+ toRow.delete();\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ },\r
};
class MoveRows extends Module{
return el;
}
-var extensions$2 = {
- format:{
- formatters:{
- responsiveCollapse:responsiveCollapse,
- }
- }
+var extensions$2 = {\r
+ format:{\r
+ formatters:{\r
+ responsiveCollapse:responsiveCollapse,\r
+ }\r
+ }\r
};
class ResponsiveLayout extends Module{
return checkbox;
}
-var extensions$1 = {
- format:{
- formatters:{
- rowSelection:rowSelection,
- }
- }
+var extensions$1 = {\r
+ format:{\r
+ formatters:{\r
+ rowSelection:rowSelection,\r
+ }\r
+ }\r
};
class SelectRow extends Module{
}
}
-var bindings = {
- rangeJumpUp:["ctrl + 38", "meta + 38"],
- rangeJumpDown:["ctrl + 40", "meta + 40"],
- rangeJumpLeft:["ctrl + 37", "meta + 37"],
- rangeJumpRight:["ctrl + 39", "meta + 39"],
- rangeExpandUp:"shift + 38",
- rangeExpandDown:"shift + 40",
- rangeExpandLeft:"shift + 37",
- rangeExpandRight:"shift + 39",
- rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],
- rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],
- rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],
- rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],
+var bindings = {\r
+ rangeJumpUp:["ctrl + 38", "meta + 38"],\r
+ rangeJumpDown:["ctrl + 40", "meta + 40"],\r
+ rangeJumpLeft:["ctrl + 37", "meta + 37"],\r
+ rangeJumpRight:["ctrl + 39", "meta + 39"],\r
+ rangeExpandUp:"shift + 38",\r
+ rangeExpandDown:"shift + 40",\r
+ rangeExpandLeft:"shift + 37",\r
+ rangeExpandRight:"shift + 39",\r
+ rangeExpandJumpUp:["ctrl + shift + 38", "meta + shift + 38"],\r
+ rangeExpandJumpDown:["ctrl + shift + 40", "meta + shift + 40"],\r
+ rangeExpandJumpLeft:["ctrl + shift + 37", "meta + shift + 37"],\r
+ rangeExpandJumpRight:["ctrl + shift + 39", "meta + shift + 39"],\r
};
-var actions = {
- rangeJumpLeft: function(e){
- this.dispatch("keybinding-nav-range", e, "left", true, false);
- },
- rangeJumpRight: function(e){
- this.dispatch("keybinding-nav-range", e, "right", true, false);
- },
- rangeJumpUp: function(e){
- this.dispatch("keybinding-nav-range", e, "up", true, false);
- },
- rangeJumpDown: function(e){
- this.dispatch("keybinding-nav-range", e, "down", true, false);
- },
- rangeExpandLeft: function(e){
- this.dispatch("keybinding-nav-range", e, "left", false, true);
- },
- rangeExpandRight: function(e){
- this.dispatch("keybinding-nav-range", e, "right", false, true);
- },
- rangeExpandUp: function(e){
- this.dispatch("keybinding-nav-range", e, "up", false, true);
- },
- rangeExpandDown: function(e){
- this.dispatch("keybinding-nav-range", e, "down", false, true);
- },
- rangeExpandJumpLeft: function(e){
- this.dispatch("keybinding-nav-range", e, "left", true, true);
- },
- rangeExpandJumpRight: function(e){
- this.dispatch("keybinding-nav-range", e, "right", true, true);
- },
- rangeExpandJumpUp: function(e){
- this.dispatch("keybinding-nav-range", e, "up", true, true);
- },
- rangeExpandJumpDown: function(e){
- this.dispatch("keybinding-nav-range", e, "down", true, true);
- },
+var actions = {\r
+ rangeJumpLeft: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "left", true, false);\r
+ },\r
+ rangeJumpRight: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "right", true, false);\r
+ },\r
+ rangeJumpUp: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "up", true, false);\r
+ },\r
+ rangeJumpDown: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "down", true, false);\r
+ },\r
+ rangeExpandLeft: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "left", false, true);\r
+ },\r
+ rangeExpandRight: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "right", false, true);\r
+ },\r
+ rangeExpandUp: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "up", false, true);\r
+ },\r
+ rangeExpandDown: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "down", false, true);\r
+ },\r
+ rangeExpandJumpLeft: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "left", true, true);\r
+ },\r
+ rangeExpandJumpRight: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "right", true, true);\r
+ },\r
+ rangeExpandJumpUp: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "up", true, true);\r
+ },\r
+ rangeExpandJumpDown: function(e){\r
+ this.dispatch("keybinding-nav-range", e, "down", true, true);\r
+ },\r
};
-var pasteActions = {
- range:function(data){
- var rows = [],
- range = this.table.modules.selectRange.activeRange,
- singleCell = false,
- bounds, startCell, startRow, rowWidth, dataLength;
-
- dataLength = data.length;
-
- if(range){
- bounds = range.getBounds();
- startCell = bounds.start;
-
- if(bounds.start === bounds.end){
- singleCell = true;
- }
-
- if(startCell){
- rows = this.table.rowManager.activeRows.slice();
- startRow = rows.indexOf(startCell.row);
-
- if(singleCell){
- rowWidth = data.length;
- }else {
- rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;
- }
-
-
- if(startRow >-1){
- this.table.blockRedraw();
-
- rows = rows.slice(startRow, startRow + rowWidth);
-
- rows.forEach((row, i) => {
- row.updateData(data[i % dataLength]);
- });
-
- this.table.restoreRedraw();
- }
- }
- }
-
- return rows;
- }
+var pasteActions = {\r
+ range:function(data){\r
+ var rows = [],\r
+ range = this.table.modules.selectRange.activeRange,\r
+ singleCell = false,\r
+ bounds, startCell, startRow, rowWidth, dataLength;\r
+\r
+ dataLength = data.length;\r
+ \r
+ if(range){\r
+ bounds = range.getBounds();\r
+ startCell = bounds.start;\r
+ \r
+ if(bounds.start === bounds.end){\r
+ singleCell = true;\r
+ }\r
+ \r
+ if(startCell){\r
+ rows = this.table.rowManager.activeRows.slice();\r
+ startRow = rows.indexOf(startCell.row);\r
+\r
+ if(singleCell){\r
+ rowWidth = data.length;\r
+ }else {\r
+ rowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\r
+ }\r
+ \r
+ \r
+ if(startRow >-1){\r
+ this.table.blockRedraw();\r
+ \r
+ rows = rows.slice(startRow, startRow + rowWidth);\r
+ \r
+ rows.forEach((row, i) => {\r
+ row.updateData(data[i % dataLength]);\r
+ });\r
+ \r
+ this.table.restoreRedraw();\r
+ }\r
+ }\r
+ }\r
+ \r
+ return rows;\r
+ }\r
};
-var pasteParsers = {
- range:function(clipboard){
- var data = [],
- rows = [],
- range = this.table.modules.selectRange.activeRange,
- singleCell = false,
- bounds, startCell, colWidth, columnMap, startCol;
-
- if(range){
- bounds = range.getBounds();
- startCell = bounds.start;
-
- if(bounds.start === bounds.end){
- singleCell = true;
- }
-
- if(startCell){
- //get data from clipboard into array of columns and rows.
- clipboard = clipboard.split("\n");
-
- clipboard.forEach(function(row){
- data.push(row.split("\t"));
- });
-
- if(data.length){
- columnMap = this.table.columnManager.getVisibleColumnsByIndex();
- startCol = columnMap.indexOf(startCell.column);
-
- if(startCol > -1){
- if(singleCell){
- colWidth = data[0].length;
- }else {
- colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;
- }
-
- columnMap = columnMap.slice(startCol, startCol + colWidth);
-
- data.forEach((item) => {
- var row = {};
- var itemLength = item.length;
-
- columnMap.forEach(function(col, i){
- row[col.field] = item[i % itemLength];
- });
-
- rows.push(row);
- });
-
- return rows;
- }
- }
- }
- }
-
- return false;
- }
+var pasteParsers = {\r
+ range:function(clipboard){\r
+ var data = [],\r
+ rows = [],\r
+ range = this.table.modules.selectRange.activeRange,\r
+ singleCell = false,\r
+ bounds, startCell, colWidth, columnMap, startCol;\r
+ \r
+ if(range){\r
+ bounds = range.getBounds();\r
+ startCell = bounds.start;\r
+\r
+ if(bounds.start === bounds.end){\r
+ singleCell = true;\r
+ }\r
+ \r
+ if(startCell){\r
+ //get data from clipboard into array of columns and rows.\r
+ clipboard = clipboard.split("\n");\r
+ \r
+ clipboard.forEach(function(row){\r
+ data.push(row.split("\t"));\r
+ });\r
+ \r
+ if(data.length){\r
+ columnMap = this.table.columnManager.getVisibleColumnsByIndex();\r
+ startCol = columnMap.indexOf(startCell.column);\r
+\r
+ if(startCol > -1){\r
+ if(singleCell){\r
+ colWidth = data[0].length;\r
+ }else {\r
+ colWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\r
+ }\r
+\r
+ columnMap = columnMap.slice(startCol, startCol + colWidth);\r
+\r
+ data.forEach((item) => {\r
+ var row = {};\r
+ var itemLength = item.length;\r
+\r
+ columnMap.forEach(function(col, i){\r
+ row[col.field] = item[i % itemLength];\r
+ });\r
+ \r
+ rows.push(row); \r
+ });\r
+\r
+ return rows;\r
+ } \r
+ }\r
+ }\r
+ }\r
+ \r
+ return false;\r
+ }\r
};
-var columnLookups = {
- range:function(){
- var columns = this.modules.selectRange.selectedColumns();
-
- if(this.columnManager.rowHeader){
- columns.unshift(this.columnManager.rowHeader);
- }
-
- return columns;
- },
+var columnLookups = {\r
+ range:function(){\r
+ var columns = this.modules.selectRange.selectedColumns();\r
+\r
+ if(this.columnManager.rowHeader){\r
+ columns.unshift(this.columnManager.rowHeader);\r
+ }\r
+\r
+ return columns;\r
+ },\r
};
-var rowLookups = {
- range:function(){
- return this.modules.selectRange.selectedRows();
- },
+var rowLookups = {\r
+ range:function(){\r
+ return this.modules.selectRange.selectedRows();\r
+ },\r
};
-var extensions = {
- keybindings:{
- bindings:bindings,
- actions:actions
- },
- clipboard:{
- pasteActions:pasteActions,
- pasteParsers:pasteParsers
- },
- export:{
- columnLookups:columnLookups,
- rowLookups:rowLookups,
- }
+var extensions = {\r
+ keybindings:{\r
+ bindings:bindings,\r
+ actions:actions\r
+ },\r
+ clipboard:{\r
+ pasteActions:pasteActions,\r
+ pasteParsers:pasteParsers\r
+ },\r
+ export:{\r
+ columnLookups:columnLookups,\r
+ rowLookups:rowLookups,\r
+ }\r
};
class SelectRange extends Module {
}
}
-class GridCalculator{
- constructor(columns, rows){
- this.columnCount = columns;
- this.rowCount = rows;
-
- this.columnString = [];
- this.columns = [];
- this.rows = [];
- }
-
- genColumns(data){
- var colCount = Math.max(this.columnCount, Math.max(...data.map(item => item.length)));
-
- this.columnString = [];
- this.columns = [];
-
- for(let i = 1; i <= colCount; i++){
- this.incrementChar(this.columnString.length - 1);
- this.columns.push(this.columnString.join(""));
- }
-
- return this.columns;
- }
-
- genRows(data){
- var rowCount = Math.max(this.rowCount, data.length);
-
- this.rows = [];
-
- for(let i = 1; i <= rowCount; i++){
- this.rows.push(i);
- }
-
- return this.rows;
- }
-
- incrementChar(i){
- let char = this.columnString[i];
-
- if(char){
- if(char !== "Z"){
- this.columnString[i] = String.fromCharCode(this.columnString[i].charCodeAt(0) + 1);
- }else {
- this.columnString[i] = "A";
-
- if(i){
- this.incrementChar(i-1);
- }else {
- this.columnString.push("A");
- }
- }
- }else {
- this.columnString.push("A");
- }
- }
-
- setRowCount(count){
- this.rowCount = count;
- }
-
- setColumnCount(count){
- this.columnCount = count;
- }
+class GridCalculator{\r
+ constructor(columns, rows){\r
+ this.columnCount = columns;\r
+ this.rowCount = rows;\r
+\r
+ this.columnString = [];\r
+ this.columns = [];\r
+ this.rows = [];\r
+ }\r
+\r
+ genColumns(data){\r
+ var colCount = Math.max(this.columnCount, Math.max(...data.map(item => item.length)));\r
+\r
+ this.columnString = [];\r
+ this.columns = [];\r
+\r
+ for(let i = 1; i <= colCount; i++){\r
+ this.incrementChar(this.columnString.length - 1);\r
+ this.columns.push(this.columnString.join(""));\r
+ }\r
+\r
+ return this.columns;\r
+ }\r
+\r
+ genRows(data){\r
+ var rowCount = Math.max(this.rowCount, data.length);\r
+\r
+ this.rows = [];\r
+\r
+ for(let i = 1; i <= rowCount; i++){\r
+ this.rows.push(i);\r
+ }\r
+ \r
+ return this.rows;\r
+ }\r
+\r
+ incrementChar(i){\r
+ let char = this.columnString[i];\r
+\r
+ if(char){\r
+ if(char !== "Z"){\r
+ this.columnString[i] = String.fromCharCode(this.columnString[i].charCodeAt(0) + 1);\r
+ }else {\r
+ this.columnString[i] = "A";\r
+ \r
+ if(i){\r
+ this.incrementChar(i-1);\r
+ }else {\r
+ this.columnString.push("A");\r
+ }\r
+ }\r
+ }else {\r
+ this.columnString.push("A");\r
+ }\r
+ }\r
+\r
+ setRowCount(count){\r
+ this.rowCount = count;\r
+ }\r
+\r
+ setColumnCount(count){\r
+ this.columnCount = count;\r
+ }\r
}
-class SheetComponent {
- constructor(sheet) {
- this._sheet = sheet;
-
- return new Proxy(this, {
- get: function (target, name, receiver) {
- if (typeof target[name] !== "undefined") {
- return target[name];
- } else {
- return target._sheet.table.componentFunctionBinder.handle("sheet", target._sheet, name);
- }
- },
- });
- }
-
- getTitle(){
- return this._sheet.title;
- }
-
- getKey(){
- return this._sheet.key;
- }
-
- getDefinition(){
- return this._sheet.getDefinition();
- }
-
- getData() {
- return this._sheet.getData();
- }
-
- setData(data) {
- return this._sheet.setData(data);
- }
-
- clear(){
- return this._sheet.clear();
- }
-
- remove(){
- return this._sheet.remove();
- }
-
- active(){
- return this._sheet.active();
- }
-
- setTitle(title){
- return this._sheet.setTitle(title);
- }
-
- setRows(rows){
- return this._sheet.setRows(rows);
- }
-
- setColumns(columns){
- return this._sheet.setColumns(columns);
- }
+class SheetComponent {\r
+ constructor(sheet) {\r
+ this._sheet = sheet;\r
+\r
+ return new Proxy(this, {\r
+ get: function (target, name, receiver) {\r
+ if (typeof target[name] !== "undefined") {\r
+ return target[name];\r
+ } else {\r
+ return target._sheet.table.componentFunctionBinder.handle("sheet", target._sheet, name);\r
+ }\r
+ },\r
+ });\r
+ }\r
+\r
+ getTitle(){\r
+ return this._sheet.title;\r
+ }\r
+\r
+ getKey(){\r
+ return this._sheet.key;\r
+ }\r
+\r
+ getDefinition(){\r
+ return this._sheet.getDefinition();\r
+ }\r
+\r
+ getData() {\r
+ return this._sheet.getData();\r
+ }\r
+\r
+ setData(data) {\r
+ return this._sheet.setData(data);\r
+ }\r
+\r
+ clear(){\r
+ return this._sheet.clear();\r
+ }\r
+\r
+ remove(){\r
+ return this._sheet.remove();\r
+ }\r
+ \r
+ active(){\r
+ return this._sheet.active();\r
+ }\r
+\r
+ setTitle(title){\r
+ return this._sheet.setTitle(title);\r
+ }\r
+\r
+ setRows(rows){\r
+ return this._sheet.setRows(rows);\r
+ }\r
+\r
+ setColumns(columns){\r
+ return this._sheet.setColumns(columns);\r
+ }\r
}
-class Sheet extends CoreFeature{
- constructor(spreadsheetManager, definition) {
- super(spreadsheetManager.table);
-
- this.spreadsheetManager = spreadsheetManager;
- this.definition = definition;
-
- this.title = this.definition.title || "";
- this.key = this.definition.key || this.definition.title;
- this.rowCount = this.definition.rows;
- this.columnCount = this.definition.columns;
- this.data = this.definition.data || [];
- this.element = null;
- this.isActive = false;
-
- this.grid = new GridCalculator(this.columnCount, this.rowCount);
-
- this.defaultColumnDefinition = {width:100, headerHozAlign:"center", headerSort:false};
- this.columnDefinition = Object.assign(this.defaultColumnDefinition, this.options("spreadsheetColumnDefinition"));
-
- this.columnDefs = [];
- this.rowDefs = [];
- this.columnFields = [];
- this.columns = [];
- this.rows = [];
-
- this.scrollTop = null;
- this.scrollLeft = null;
-
- this.initialize();
-
- this.dispatchExternal("sheetAdded", this.getComponent());
- }
-
- ///////////////////////////////////
- ///////// Initialization //////////
- ///////////////////////////////////
-
- initialize(){
- this.initializeElement();
- this.initializeColumns();
- this.initializeRows();
- }
-
- reinitialize(){
- this.initializeColumns();
- this.initializeRows();
- }
-
- initializeElement(){
- this.element = document.createElement("div");
- this.element.classList.add("tabulator-spreadsheet-tab");
- this.element.innerText = this.title;
-
- this.element.addEventListener("click", () => {
- this.spreadsheetManager.loadSheet(this);
- });
- }
-
- initializeColumns(){
- this.grid.setColumnCount(this.columnCount);
- this.columnFields = this.grid.genColumns(this.data);
-
- this.columnDefs = [];
-
- this.columnFields.forEach((ref) => {
- var def = Object.assign({}, this.columnDefinition);
- def.field = ref;
- def.title = ref;
-
- this.columnDefs.push(def);
- });
- }
-
- initializeRows(){
- var refs;
-
- this.grid.setRowCount(this.rowCount);
-
- refs = this.grid.genRows(this.data);
-
- this.rowDefs = [];
-
- refs.forEach((ref, i) => {
- var def = {"_id":ref};
- var data = this.data[i];
-
- if(data){
- data.forEach((val, j) => {
- var field = this.columnFields[j];
-
- if(field){
- def[field] = val;
- }
- });
- }
-
- this.rowDefs.push(def);
- });
- }
-
- unload(){
- this.isActive = false;
- this.scrollTop = this.table.rowManager.scrollTop;
- this.scrollLeft = this.table.rowManager.scrollLeft;
- this.data = this.getData(true);
- this.element.classList.remove("tabulator-spreadsheet-tab-active");
- }
-
- load(){
-
- var wasInactive = !this.isActive;
-
- this.isActive = true;
- this.table.blockRedraw();
- this.table.setData([]);
- this.table.setColumns(this.columnDefs);
- this.table.setData(this.rowDefs);
- this.table.restoreRedraw();
-
- if(wasInactive && this.scrollTop !== null){
- this.table.rowManager.element.scrollLeft = this.scrollLeft;
- this.table.rowManager.element.scrollTop = this.scrollTop;
- }
-
- this.element.classList.add("tabulator-spreadsheet-tab-active");
-
- this.dispatchExternal("sheetLoaded", this.getComponent());
- }
-
- ///////////////////////////////////
- //////// Helper Functions /////////
- ///////////////////////////////////
-
- getComponent(){
- return new SheetComponent(this);
- }
-
- getDefinition(){
- return {
- title:this.title,
- key:this.key,
- rows:this.rowCount,
- columns:this.columnCount,
- data:this.getData(),
- };
- }
-
- getData(full){
- var output = [],
- rowWidths,
- outputWidth, outputHeight;
-
- //map data to array format
- this.rowDefs.forEach((rowData) => {
- var row = [];
-
- this.columnFields.forEach((field) => {
- row.push(rowData[field]);
- });
-
- output.push(row);
- });
-
- //trim output
- if(!full && !this.options("spreadsheetOutputFull")){
-
- //calculate used area of data
- rowWidths = output.map(row => row.findLastIndex(val => typeof val !== 'undefined') + 1);
- outputWidth = Math.max(...rowWidths);
- outputHeight = rowWidths.findLastIndex(width => width > 0) + 1;
-
- output = output.slice(0, outputHeight);
- output = output.map(row => row.slice(0, outputWidth));
- }
-
- return output;
- }
-
- setData(data){
- this.data = data;
- this.reinitialize();
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
-
- if(this.isActive){
- this.load();
- }
- }
-
- clear(){
- this.setData([]);
- }
-
- setTitle(title){
- this.title = title;
- this.element.innerText = title;
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
- }
-
- setRows(rows){
- this.rowCount = rows;
- this.initializeRows();
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
-
- if(this.isActive){
- this.load();
- }
- }
-
- setColumns(columns){
- this.columnCount = columns;
- this.reinitialize();
-
- this.dispatchExternal("sheetUpdated", this.getComponent());
-
- if(this.isActive){
- this.load();
- }
- }
-
- remove(){
- this.spreadsheetManager.removeSheet(this);
- }
-
- destroy(){
- if(this.element.parentNode){
- this.element.parentNode.removeChild(this.element);
- }
-
- this.dispatchExternal("sheetRemoved", this.getComponent());
- }
-
- active(){
- this.spreadsheetManager.loadSheet(this);
- }
+class Sheet extends CoreFeature{\r
+ constructor(spreadsheetManager, definition) {\r
+ super(spreadsheetManager.table);\r
+ \r
+ this.spreadsheetManager = spreadsheetManager;\r
+ this.definition = definition;\r
+ \r
+ this.title = this.definition.title || "";\r
+ this.key = this.definition.key || this.definition.title;\r
+ this.rowCount = this.definition.rows;\r
+ this.columnCount = this.definition.columns;\r
+ this.data = this.definition.data || [];\r
+ this.element = null;\r
+ this.isActive = false;\r
+ \r
+ this.grid = new GridCalculator(this.columnCount, this.rowCount);\r
+ \r
+ this.defaultColumnDefinition = {width:100, headerHozAlign:"center", headerSort:false};\r
+ this.columnDefinition = Object.assign(this.defaultColumnDefinition, this.options("spreadsheetColumnDefinition"));\r
+ \r
+ this.columnDefs = [];\r
+ this.rowDefs = [];\r
+ this.columnFields = [];\r
+ this.columns = [];\r
+ this.rows = [];\r
+ \r
+ this.scrollTop = null;\r
+ this.scrollLeft = null;\r
+ \r
+ this.initialize();\r
+ \r
+ this.dispatchExternal("sheetAdded", this.getComponent());\r
+ }\r
+ \r
+ ///////////////////////////////////\r
+ ///////// Initialization //////////\r
+ ///////////////////////////////////\r
+ \r
+ initialize(){\r
+ this.initializeElement();\r
+ this.initializeColumns();\r
+ this.initializeRows();\r
+ }\r
+ \r
+ reinitialize(){\r
+ this.initializeColumns();\r
+ this.initializeRows();\r
+ }\r
+ \r
+ initializeElement(){\r
+ this.element = document.createElement("div");\r
+ this.element.classList.add("tabulator-spreadsheet-tab");\r
+ this.element.innerText = this.title;\r
+ \r
+ this.element.addEventListener("click", () => {\r
+ this.spreadsheetManager.loadSheet(this);\r
+ });\r
+ }\r
+ \r
+ initializeColumns(){\r
+ this.grid.setColumnCount(this.columnCount);\r
+ this.columnFields = this.grid.genColumns(this.data);\r
+ \r
+ this.columnDefs = [];\r
+ \r
+ this.columnFields.forEach((ref) => {\r
+ var def = Object.assign({}, this.columnDefinition);\r
+ def.field = ref;\r
+ def.title = ref;\r
+ \r
+ this.columnDefs.push(def);\r
+ });\r
+ }\r
+ \r
+ initializeRows(){\r
+ var refs;\r
+ \r
+ this.grid.setRowCount(this.rowCount);\r
+ \r
+ refs = this.grid.genRows(this.data);\r
+ \r
+ this.rowDefs = [];\r
+ \r
+ refs.forEach((ref, i) => {\r
+ var def = {"_id":ref};\r
+ var data = this.data[i];\r
+ \r
+ if(data){\r
+ data.forEach((val, j) => {\r
+ var field = this.columnFields[j];\r
+ \r
+ if(field){\r
+ def[field] = val;\r
+ }\r
+ });\r
+ }\r
+ \r
+ this.rowDefs.push(def);\r
+ });\r
+ }\r
+ \r
+ unload(){\r
+ this.isActive = false;\r
+ this.scrollTop = this.table.rowManager.scrollTop;\r
+ this.scrollLeft = this.table.rowManager.scrollLeft;\r
+ this.data = this.getData(true);\r
+ this.element.classList.remove("tabulator-spreadsheet-tab-active");\r
+ }\r
+ \r
+ load(){\r
+ \r
+ var wasInactive = !this.isActive;\r
+ \r
+ this.isActive = true;\r
+ this.table.blockRedraw();\r
+ this.table.setData([]);\r
+ this.table.setColumns(this.columnDefs);\r
+ this.table.setData(this.rowDefs);\r
+ this.table.restoreRedraw();\r
+ \r
+ if(wasInactive && this.scrollTop !== null){\r
+ this.table.rowManager.element.scrollLeft = this.scrollLeft;\r
+ this.table.rowManager.element.scrollTop = this.scrollTop;\r
+ }\r
+ \r
+ this.element.classList.add("tabulator-spreadsheet-tab-active");\r
+ \r
+ this.dispatchExternal("sheetLoaded", this.getComponent());\r
+ }\r
+ \r
+ ///////////////////////////////////\r
+ //////// Helper Functions /////////\r
+ ///////////////////////////////////\r
+ \r
+ getComponent(){\r
+ return new SheetComponent(this);\r
+ }\r
+ \r
+ getDefinition(){\r
+ return {\r
+ title:this.title,\r
+ key:this.key,\r
+ rows:this.rowCount,\r
+ columns:this.columnCount,\r
+ data:this.getData(),\r
+ };\r
+ }\r
+ \r
+ getData(full){\r
+ var output = [], \r
+ rowWidths,\r
+ outputWidth, outputHeight;\r
+ \r
+ //map data to array format\r
+ this.rowDefs.forEach((rowData) => {\r
+ var row = [];\r
+ \r
+ this.columnFields.forEach((field) => {\r
+ row.push(rowData[field]);\r
+ });\r
+ \r
+ output.push(row);\r
+ });\r
+ \r
+ //trim output\r
+ if(!full && !this.options("spreadsheetOutputFull")){\r
+ \r
+ //calculate used area of data\r
+ rowWidths = output.map(row => row.findLastIndex(val => typeof val !== 'undefined') + 1);\r
+ outputWidth = Math.max(...rowWidths);\r
+ outputHeight = rowWidths.findLastIndex(width => width > 0) + 1;\r
+ \r
+ output = output.slice(0, outputHeight);\r
+ output = output.map(row => row.slice(0, outputWidth));\r
+ }\r
+ \r
+ return output;\r
+ }\r
+ \r
+ setData(data){\r
+ this.data = data;\r
+ this.reinitialize();\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ \r
+ if(this.isActive){\r
+ this.load();\r
+ }\r
+ }\r
+ \r
+ clear(){\r
+ this.setData([]);\r
+ }\r
+ \r
+ setTitle(title){\r
+ this.title = title;\r
+ this.element.innerText = title;\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ }\r
+ \r
+ setRows(rows){\r
+ this.rowCount = rows;\r
+ this.initializeRows();\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ \r
+ if(this.isActive){\r
+ this.load();\r
+ }\r
+ }\r
+ \r
+ setColumns(columns){\r
+ this.columnCount = columns;\r
+ this.reinitialize();\r
+ \r
+ this.dispatchExternal("sheetUpdated", this.getComponent());\r
+ \r
+ if(this.isActive){\r
+ this.load();\r
+ }\r
+ }\r
+ \r
+ remove(){\r
+ this.spreadsheetManager.removeSheet(this);\r
+ }\r
+ \r
+ destroy(){\r
+ if(this.element.parentNode){\r
+ this.element.parentNode.removeChild(this.element);\r
+ }\r
+ \r
+ this.dispatchExternal("sheetRemoved", this.getComponent());\r
+ }\r
+ \r
+ active(){\r
+ this.spreadsheetManager.loadSheet(this);\r
+ }\r
}
-class Spreadsheet extends Module{
-
- static moduleName = "spreadsheet";
-
- constructor(table){
- super(table);
-
- this.sheets = [];
- this.element = null;
-
- this.registerTableOption("spreadsheet", false);
- this.registerTableOption("spreadsheetRows", 50);
- this.registerTableOption("spreadsheetColumns", 50);
- this.registerTableOption("spreadsheetColumnDefinition", {});
- this.registerTableOption("spreadsheetOutputFull", false);
- this.registerTableOption("spreadsheetData", false);
- this.registerTableOption("spreadsheetSheets", false);
- this.registerTableOption("spreadsheetSheetTabs", false);
- this.registerTableOption("spreadsheetSheetTabsElement", false);
-
- this.registerTableFunction("setSheets", this.setSheets.bind(this));
- this.registerTableFunction("addSheet", this.addSheet.bind(this));
- this.registerTableFunction("getSheets", this.getSheets.bind(this));
- this.registerTableFunction("getSheetDefinitions", this.getSheetDefinitions.bind(this));
- this.registerTableFunction("setSheetData", this.setSheetData.bind(this));
- this.registerTableFunction("getSheet", this.getSheet.bind(this));
- this.registerTableFunction("getSheetData", this.getSheetData.bind(this));
- this.registerTableFunction("clearSheet", this.clearSheet.bind(this));
- this.registerTableFunction("removeSheet", this.removeSheetFunc.bind(this));
- this.registerTableFunction("activeSheet", this.activeSheetFunc.bind(this));
- }
-
- ///////////////////////////////////
- ////// Module Initialization //////
- ///////////////////////////////////
-
-
- initialize(){
- if(this.options("spreadsheet")){
- this.subscribe("table-initialized", this.tableInitialized.bind(this));
- this.subscribe("data-loaded", this.loadRemoteData.bind(this));
-
- this.table.options.index = "_id";
-
- if(this.options("spreadsheetData") && this.options("spreadsheetSheets")){
- console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData");
-
- this.table.options.spreadsheetData = false;
- }
-
- this.compatibilityCheck();
-
- if(this.options("spreadsheetSheetTabs")){
- this.initializeTabset();
- }
- }
- }
-
- compatibilityCheck(){
- if(this.options("data")){
- console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table");
- }
-
- if(this.options("pagination")){
- console.warn("The spreadsheet module is not compatible with the pagination module");
- }
-
- if(this.options("groupBy")){
- console.warn("The spreadsheet module is not compatible with the row grouping module");
- }
-
- if(this.options("responsiveCollapse")){
- console.warn("The spreadsheet module is not compatible with the responsive collapse module");
- }
- }
- initializeTabset(){
- this.element = document.createElement("div");
- this.element.classList.add("tabulator-spreadsheet-tabs");
- var altContainer = this.options("spreadsheetSheetTabsElement");
-
- if(altContainer && !(altContainer instanceof HTMLElement)){
- altContainer = document.querySelector(altContainer);
-
- if(!altContainer){
- console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:", this.options("spreadsheetSheetTabsElement"));
- }
- }
-
- if(altContainer){
- altContainer.appendChild(this.element);
- }else {
- this.footerAppend(this.element);
- }
- }
-
- tableInitialized(){
- if(this.sheets.length){
- this.loadSheet(this.sheets[0]);
- }else {
-
- if(this.options("spreadsheetSheets")){
- this.loadSheets(this.options("spreadsheetSheets"));
- }else if(this.options("spreadsheetData")){
- this.loadData(this.options("spreadsheetData"));
- }
- }
- }
-
- ///////////////////////////////////
- /////////// Ajax Parsing //////////
- ///////////////////////////////////
-
- loadRemoteData(data, data1, data2){
- console.log("data", data, data1, data2);
-
- if(Array.isArray(data)){
-
- this.table.dataLoader.clearAlert();
- this.dispatchExternal("dataLoaded", data);
-
- if(!data.length || Array.isArray(data[0])){
- this.loadData(data);
- }else {
- this.loadSheets(data);
- }
- }else {
- console.error("Spreadsheet Loading Error - Unable to process remote data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data);
- }
-
- return false;
- }
-
- ///////////////////////////////////
- ///////// Sheet Management ////////
- ///////////////////////////////////
-
-
- loadData(data){
- var def = {
- data:data,
- };
-
- this.loadSheet(this.newSheet(def));
- }
-
- destroySheets(){
- this.sheets.forEach((sheet) => {
- sheet.destroy();
- });
-
- this.sheets = [];
- this.activeSheet = null;
- }
-
- loadSheets(sheets){
- if(!Array.isArray(sheets)){
- sheets = [];
- }
-
- this.destroySheets();
-
- sheets.forEach((def) => {
- this.newSheet(def);
- });
-
- this.loadSheet(this.sheets[0]);
- }
-
- loadSheet(sheet){
- if(this.activeSheet !== sheet){
- if(this.activeSheet){
- this.activeSheet.unload();
- }
-
- this.activeSheet = sheet;
-
- sheet.load();
- }
- }
-
- newSheet(definition = {}){
- var sheet;
-
- if(!definition.rows){
- definition.rows = this.options("spreadsheetRows");
- }
-
- if(!definition.columns){
- definition.columns = this.options("spreadsheetColumns");
- }
-
- sheet = new Sheet(this, definition);
-
- this.sheets.push(sheet);
-
- if(this.element){
- this.element.appendChild(sheet.element);
- }
-
- return sheet;
- }
-
- removeSheet(sheet){
- var index = this.sheets.indexOf(sheet),
- prevSheet;
-
- if(this.sheets.length > 1){
- if(index > -1){
- this.sheets.splice(index, 1);
- sheet.destroy();
-
- if(this.activeSheet === sheet){
-
- prevSheet = this.sheets[index - 1] || this.sheets[0];
-
- if(prevSheet){
- this.loadSheet(prevSheet);
- }else {
- this.activeSheet = null;
- }
- }
- }
- }else {
- console.warn("Unable to remove sheet, at least one sheet must be active");
- }
- }
-
- lookupSheet(key){
- if(!key){
- return this.activeSheet;
- }else if(key instanceof Sheet){
- return key;
- }else if(key instanceof SheetComponent){
- return key._sheet;
- }else {
- return this.sheets.find(sheet => sheet.key === key) || false;
- }
- }
-
-
- ///////////////////////////////////
- //////// Public Functions /////////
- ///////////////////////////////////
-
- setSheets(sheets){
- this.loadSheets(sheets);
-
- return this.getSheets();
- }
-
- addSheet(sheet){
- return this.newSheet(sheet).getComponent();
- }
-
- getSheetDefinitions(){
- return this.sheets.map(sheet => sheet.getDefinition());
- }
-
- getSheets(){
- return this.sheets.map(sheet => sheet.getComponent());
- }
-
- getSheet(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.getComponent() : false;
- }
-
- setSheetData(key, data){
- if (key && !data){
- data = key;
- key = false;
- }
-
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.setData(data) : false;
- }
-
- getSheetData(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.getData() : false;
- }
-
- clearSheet(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? sheet.clear() : false;
- }
-
- removeSheetFunc(key){
- var sheet = this.lookupSheet(key);
-
- if(sheet){
- this.removeSheet(sheet);
- }
- }
-
- activeSheetFunc(key){
- var sheet = this.lookupSheet(key);
-
- return sheet ? this.loadSheet(sheet) : false;
- }
+class Spreadsheet extends Module{\r
+ \r
+ static moduleName = "spreadsheet";\r
+ \r
+ constructor(table){\r
+ super(table);\r
+ \r
+ this.sheets = [];\r
+ this.element = null;\r
+ \r
+ this.registerTableOption("spreadsheet", false); \r
+ this.registerTableOption("spreadsheetRows", 50); \r
+ this.registerTableOption("spreadsheetColumns", 50); \r
+ this.registerTableOption("spreadsheetColumnDefinition", {}); \r
+ this.registerTableOption("spreadsheetOutputFull", false); \r
+ this.registerTableOption("spreadsheetData", false); \r
+ this.registerTableOption("spreadsheetSheets", false); \r
+ this.registerTableOption("spreadsheetSheetTabs", false); \r
+ this.registerTableOption("spreadsheetSheetTabsElement", false); \r
+ \r
+ this.registerTableFunction("setSheets", this.setSheets.bind(this));\r
+ this.registerTableFunction("addSheet", this.addSheet.bind(this));\r
+ this.registerTableFunction("getSheets", this.getSheets.bind(this));\r
+ this.registerTableFunction("getSheetDefinitions", this.getSheetDefinitions.bind(this));\r
+ this.registerTableFunction("setSheetData", this.setSheetData.bind(this));\r
+ this.registerTableFunction("getSheet", this.getSheet.bind(this));\r
+ this.registerTableFunction("getSheetData", this.getSheetData.bind(this));\r
+ this.registerTableFunction("clearSheet", this.clearSheet.bind(this));\r
+ this.registerTableFunction("removeSheet", this.removeSheetFunc.bind(this));\r
+ this.registerTableFunction("activeSheet", this.activeSheetFunc.bind(this));\r
+ }\r
+ \r
+ ///////////////////////////////////\r
+ ////// Module Initialization //////\r
+ ///////////////////////////////////\r
+ \r
+ \r
+ initialize(){\r
+ if(this.options("spreadsheet")){ \r
+ this.subscribe("table-initialized", this.tableInitialized.bind(this));\r
+ this.subscribe("data-loaded", this.loadRemoteData.bind(this));\r
+ \r
+ this.table.options.index = "_id";\r
+ \r
+ if(this.options("spreadsheetData") && this.options("spreadsheetSheets")){\r
+ console.warn("You cannot use spreadsheetData and spreadsheetSheets at the same time, ignoring spreadsheetData");\r
+ \r
+ this.table.options.spreadsheetData = false;\r
+ }\r
+ \r
+ this.compatibilityCheck();\r
+ \r
+ if(this.options("spreadsheetSheetTabs")){\r
+ this.initializeTabset();\r
+ }\r
+ }\r
+ }\r
+ \r
+ compatibilityCheck(){\r
+ if(this.options("data")){\r
+ console.warn("Do not use the data option when working with spreadsheets, use either spreadsheetData or spreadsheetSheets to pass data into the table");\r
+ }\r
+ \r
+ if(this.options("pagination")){\r
+ console.warn("The spreadsheet module is not compatible with the pagination module");\r
+ }\r
+ \r
+ if(this.options("groupBy")){\r
+ console.warn("The spreadsheet module is not compatible with the row grouping module");\r
+ }\r
+ \r
+ if(this.options("responsiveCollapse")){\r
+ console.warn("The spreadsheet module is not compatible with the responsive collapse module");\r
+ }\r
+ }\r
+ initializeTabset(){\r
+ this.element = document.createElement("div");\r
+ this.element.classList.add("tabulator-spreadsheet-tabs");\r
+ var altContainer = this.options("spreadsheetSheetTabsElement");\r
+ \r
+ if(altContainer && !(altContainer instanceof HTMLElement)){\r
+ altContainer = document.querySelector(altContainer);\r
+ \r
+ if(!altContainer){\r
+ console.warn("Unable to find element matching spreadsheetSheetTabsElement selector:", this.options("spreadsheetSheetTabsElement"));\r
+ }\r
+ }\r
+ \r
+ if(altContainer){\r
+ altContainer.appendChild(this.element);\r
+ }else {\r
+ this.footerAppend(this.element);\r
+ }\r
+ }\r
+ \r
+ tableInitialized(){\r
+ if(this.sheets.length){\r
+ this.loadSheet(this.sheets[0]);\r
+ }else {\r
+ \r
+ if(this.options("spreadsheetSheets")){\r
+ this.loadSheets(this.options("spreadsheetSheets"));\r
+ }else if(this.options("spreadsheetData")){\r
+ this.loadData(this.options("spreadsheetData"));\r
+ }\r
+ }\r
+ }\r
+\r
+ ///////////////////////////////////\r
+ /////////// Ajax Parsing //////////\r
+ ///////////////////////////////////\r
+\r
+ loadRemoteData(data, data1, data2){\r
+ console.log("data", data, data1, data2);\r
+\r
+ if(Array.isArray(data)){\r
+\r
+ this.table.dataLoader.clearAlert();\r
+ this.dispatchExternal("dataLoaded", data);\r
+\r
+ if(!data.length || Array.isArray(data[0])){\r
+ this.loadData(data);\r
+ }else {\r
+ this.loadSheets(data);\r
+ }\r
+ }else {\r
+ console.error("Spreadsheet Loading Error - Unable to process remote data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data);\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ ///////////////////////////////////\r
+ ///////// Sheet Management ////////\r
+ ///////////////////////////////////\r
+ \r
+ \r
+ loadData(data){\r
+ var def = {\r
+ data:data,\r
+ };\r
+ \r
+ this.loadSheet(this.newSheet(def));\r
+ }\r
+ \r
+ destroySheets(){\r
+ this.sheets.forEach((sheet) => {\r
+ sheet.destroy();\r
+ });\r
+ \r
+ this.sheets = [];\r
+ this.activeSheet = null;\r
+ }\r
+ \r
+ loadSheets(sheets){ \r
+ if(!Array.isArray(sheets)){\r
+ sheets = [];\r
+ }\r
+ \r
+ this.destroySheets();\r
+ \r
+ sheets.forEach((def) => {\r
+ this.newSheet(def);\r
+ });\r
+ \r
+ this.loadSheet(this.sheets[0]);\r
+ }\r
+ \r
+ loadSheet(sheet){\r
+ if(this.activeSheet !== sheet){\r
+ if(this.activeSheet){\r
+ this.activeSheet.unload();\r
+ }\r
+ \r
+ this.activeSheet = sheet;\r
+ \r
+ sheet.load();\r
+ }\r
+ }\r
+ \r
+ newSheet(definition = {}){\r
+ var sheet;\r
+ \r
+ if(!definition.rows){\r
+ definition.rows = this.options("spreadsheetRows");\r
+ }\r
+ \r
+ if(!definition.columns){\r
+ definition.columns = this.options("spreadsheetColumns");\r
+ }\r
+ \r
+ sheet = new Sheet(this, definition);\r
+ \r
+ this.sheets.push(sheet);\r
+ \r
+ if(this.element){\r
+ this.element.appendChild(sheet.element);\r
+ }\r
+ \r
+ return sheet;\r
+ }\r
+ \r
+ removeSheet(sheet){\r
+ var index = this.sheets.indexOf(sheet),\r
+ prevSheet;\r
+ \r
+ if(this.sheets.length > 1){\r
+ if(index > -1){\r
+ this.sheets.splice(index, 1);\r
+ sheet.destroy();\r
+ \r
+ if(this.activeSheet === sheet){\r
+ \r
+ prevSheet = this.sheets[index - 1] || this.sheets[0];\r
+ \r
+ if(prevSheet){\r
+ this.loadSheet(prevSheet);\r
+ }else {\r
+ this.activeSheet = null;\r
+ }\r
+ }\r
+ }\r
+ }else {\r
+ console.warn("Unable to remove sheet, at least one sheet must be active");\r
+ }\r
+ }\r
+ \r
+ lookupSheet(key){\r
+ if(!key){\r
+ return this.activeSheet;\r
+ }else if(key instanceof Sheet){\r
+ return key;\r
+ }else if(key instanceof SheetComponent){\r
+ return key._sheet;\r
+ }else {\r
+ return this.sheets.find(sheet => sheet.key === key) || false;\r
+ }\r
+ }\r
+ \r
+ \r
+ ///////////////////////////////////\r
+ //////// Public Functions /////////\r
+ ///////////////////////////////////\r
+ \r
+ setSheets(sheets){\r
+ this.loadSheets(sheets);\r
+\r
+ return this.getSheets();\r
+ }\r
+\r
+ addSheet(sheet){\r
+ return this.newSheet(sheet).getComponent();\r
+ }\r
+ \r
+ getSheetDefinitions(){\r
+ return this.sheets.map(sheet => sheet.getDefinition());\r
+ }\r
+ \r
+ getSheets(){\r
+ return this.sheets.map(sheet => sheet.getComponent());\r
+ }\r
+ \r
+ getSheet(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.getComponent() : false;\r
+ }\r
+ \r
+ setSheetData(key, data){\r
+ if (key && !data){\r
+ data = key;\r
+ key = false;\r
+ }\r
+ \r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.setData(data) : false; \r
+ }\r
+ \r
+ getSheetData(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.getData() : false; \r
+ }\r
+ \r
+ clearSheet(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? sheet.clear() : false;\r
+ }\r
+ \r
+ removeSheetFunc(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ if(sheet){\r
+ this.removeSheet(sheet);\r
+ }\r
+ }\r
+ \r
+ activeSheetFunc(key){\r
+ var sheet = this.lookupSheet(key);\r
+ \r
+ return sheet ? this.loadSheet(sheet) : false;\r
+ }\r
}
class Tooltip extends Module{