UNPKG

tabulator-tables

Version:

Interactive table generation JavaScript library

113 lines (89 loc) 2.78 kB
var Mutator = function(table){ this.table = table; //hold Tabulator object this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types this.enabled = true; }; //initialize column mutator Mutator.prototype.initializeColumn = function(column){ var self = this, match = false, config = {}; this.allowedTypes.forEach(function(type){ var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), mutator; if(column.definition[key]){ mutator = self.lookupMutator(column.definition[key]); if(mutator){ match = true; config[key] = { mutator:mutator, params: column.definition[key + "Params"] || {}, }; } } }); if(match){ column.modules.mutate = config; } }; Mutator.prototype.lookupMutator = function(value){ var mutator = false; //set column mutator switch(typeof value){ case "string": if(this.mutators[value]){ mutator = this.mutators[value]; }else{ console.warn("Mutator Error - No such mutator found, ignoring: ", value); } break; case "function": mutator = value; break; } return mutator; }; //apply mutator to row Mutator.prototype.transformRow = function(data, type, updatedData){ var self = this, key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), value; if(this.enabled){ self.table.columnManager.traverse(function(column){ var mutator, params, component; if(column.modules.mutate){ mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; if(mutator){ value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data); if(type == "data" || typeof value !== "undefined"){ component = column.getComponent(); params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); } } } }); } return data; }; //apply mutator to new cell value Mutator.prototype.transformCell = function(cell, value){ var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, tempData = {}; if(mutator){ tempData = Object.assign(tempData, cell.row.getData()); cell.column.setFieldValue(tempData, value); return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); }else{ return value; } }; Mutator.prototype.enable = function(){ this.enabled = true; }; Mutator.prototype.disable = function(){ this.enabled = false; }; //default mutators Mutator.prototype.mutators = {}; Tabulator.prototype.registerModule("mutator", Mutator);