tabulator-tables
Version:
Interactive table generation JavaScript library
93 lines (69 loc) • 2.31 kB
JavaScript
var Accessor = function(table){
this.table = table; //hold Tabulator object
this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"] //list of accessor types
};
//initialize column accessor
Accessor.prototype.initializeColumn = function(column){
var self = this,
match = false,
config = {};
this.allowedTypes.forEach(function(type){
var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
accessor;
if(column.definition[key]){
accessor = self.lookupAccessor(column.definition[key]);
if(accessor){
match = true;
config[key] = {
accessor:accessor,
params: column.definition[key + "Params"] || {},
}
}
}
});
if(match){
column.modules.accessor = config;
}
};
Accessor.prototype.lookupAccessor = function(value){
var accessor = false;
//set column accessor
switch(typeof value){
case "string":
if(this.accessors[value]){
accessor = this.accessors[value]
}else{
console.warn("Accessor Error - No such accessor found, ignoring: ", value);
}
break;
case "function":
accessor = value;
break;
}
return accessor;
};
//apply accessor to row
Accessor.prototype.transformRow = function(row, type){
var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)),
rowComponent = row.getComponent();
//clone data object with deep copy to isolate internal data from returned result
var data = Tabulator.prototype.helpers.deepClone(row.data || {});
this.table.columnManager.traverse(function(column){
var value, accessor, params, colCompnent;
if(column.modules.accessor){
accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;
if(accessor){
value = column.getFieldValue(data);
if(value != "undefined"){
colCompnent = column.getComponent();
params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;
column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));
}
}
}
});
return data;
},
//default accessors
Accessor.prototype.accessors = {};
Tabulator.prototype.registerModule("accessor", Accessor);