ln.skyscanner/www/tables.js

102 lines
3.0 KiB
JavaScript

function DynamicTable(table, columns, loader, adder = null, deleter = null)
{
if (!table.dtable)
{
table.dtable = {};
table.dtable.loader = loader;
table.dtable.columns = columns;
table.dtable.adder = adder;
table.dtable.deleter = deleter;
table.dtable.lAdd = []
table.addRow = function(){
var ap = [];
for (var n=0;n<this.dtable.lAdd.length;n++)
{
ap.push(this.dtable.lAdd[n].value);
}
return this.dtable.adder(ap);
}
table.create = function(){
CLEAN(this);
var thead = CE("thead", this);
this.trhead = CE("tr", thead);
this.trfilter = CE("tr", thead);
this.tradd = CE("tr", thead);
for (var n=0;n<this.dtable.columns.length;n++)
{
var col = CE("td", this.trhead);
col.innerText = this.dtable.columns[n].Label;
var fcol = CE("td", this.trfilter);
if (this.dtable.columns[n].ToFilter)
{
var ia = CE("input", fcol);
}
if (this.dtable.adder)
{
var acol = CE("td", this.tradd);
if (this.dtable.columns[n].ToAdd)
{
var ia = CE("input", acol);
ia.id = this.dtable.columns[n].Field;
this.dtable.lAdd.push(ia);
}
}
}
CE("td",this.trhead);
if (this.dtable.adder)
{
var ab = CE("button", CE("td",this.tradd));
ab.onclick = function(){ table.addRow(); };
ab.innerText = "+";
}
var tbody = CE("tbody", this);
this.tbody = tbody;
}
table.load = function(){
CLEAN(this.tbody);
var dtable = this;
var rows = this.dtable.loader();
for (var n=0;n<rows.length;n++)
{
var tr = CE("tr",this.tbody);
tr.dtRow = rows[n]
tr.onclick = function(){ dtable.selectedRow = this.dtRow; dtable.selectedRowChanged(dtable.selectedRow); };
for (var c=0;c<this.dtable.columns.length;c++)
{
var td = CE("td",tr);
td.innerText = rows[n][this.dtable.columns[c].Field];
tr.onclick = function(){ dtable.selectedRow = this.dtRow; dtable.selectedRowChanged(dtable.selectedRow); };
}
}
}
table.selectedRowChanged = function(selectedRow){}
}
table.create();
table.load();
return table;
}