class BootstrapTable { constructor(classDef, idDef, styleDef, attrDef) { this.table = {}; this.table.classes = new Array(); this.addTableClass('table'); this.table.style = ''; this.table.id = ''; this.table.attributes = {}; if ($.bootstrapSortable === undefined) { console.warn('bootstrap-sortable not found. BootstrapTable.useSortingTable() will not work. Failing nicely.'); } if (classDef !== "" && classDef !== undefined) { var tClass = classDef.split(' '); for (c in tClass) addTableClass(c); } if (idDef !== "" && idDef !== undefined) { this.table.id=idDef; } if (styleDef !== "" && styleDef !== undefined) { this.table.style=styleDef; } if (attrDef !== "" && attrDef !== undefined) { var tAttr = JSON.parse(attrDef); this.table.attributes = tAttr; } this.table.sortable = false; this.table.head = {}; this.table.head.classes = new Array(); this.table.head.id = ''; this.table.head.style = ''; this.table.head.attributes = {}; this.table.head.data = new Array(); this.table.body = {}; this.table.body.classes = new Array(); this.table.body.id = ''; this.table.body.style = ''; this.table.body.attributes = {}; this.table.body.rows = []; } /* * REQUIRES BOOTSTRAP-SORTABLE. */ useSortableTable() { if ($.bootstrapSortable !== undefined) { this.table.classes.push('sortable'); this.table.sortable = true; return true; } else { return false; } } useStripedTable() { this.tableClass += 'table-striped '; return true; } /* * Internal Use for modifying table object only. */ addTableClass(className) { this.table.classes.push(className); return true; } addTableAttribute(key, value) { this.table.attributes[key]=value; return true; } setTableID(id) { this.table.id = id; return true; } setTableStyle(style) { this.table.style = style; return true; } // Column (Header) Modifiers. addColumn(type, name, format) { if (name == undefined || type == undefined) { console.error('addColumn: Missing Parameters'); return false; } var cFormat = (format !== undefined && format !== ""?format:""); var tmp = {}; tmp.classes=new Array(); tmp.id=''; tmp.style=''; tmp.attributes={}; tmp.value=name; tmp.format=cFormat; tmp.type=type; this.table.head.data.push(tmp); return this.table.head.data.length-1; } setColumnID(columnIdx, ID) { if (columnIdx === undefined || ID === undefined) { console.error('setColumnID: Missing Parameters'); return false; } if (this.table.head.data[columnIdx] === undefined) { console.error('setColumnID: columnIdx '+columnIdx+' undefined.'); return false; } this.table.head.data[columnIdx].id = ID; return true; } addColumnClass(columnIdx, className) { if (columnIdx === undefined || ID === undefined) { console.error('addColumnClass: Missing Parameters'); return false; } if (this.table.head.data[columnIdx] === undefined) { console.error('addColumnClass: columnIdx '+columnIdx+' undefined.'); return false; } if (className == "") { return false; } this.table.head.data[columnIdx].classes.push(className); return true; } setColumnStyle(columnIdx, style) { if (columnIdx === undefined || ID === undefined) { console.error('setColumnStyle: Missing Parameters'); return false; } if (this.table.head.data[columnIdx] === undefined) { console.error('setColumnStyle: columnIdx '+columnIdx+' undefined.'); return false; } this.table.head.data[columnIdx].style = style; return true; } setColumnAttribute(columnIdx, key, value) { if (columnIdx === undefined || key === undefined || value === undefined) { console.error('setColumnAttribute: Missing Parameters'); return false; } if (this.table.head.data[columnIdx] === undefined) { console.error('setColumnAttribute: columnIdx '+columnIdx+' undefined.'); return false; } this.table.head.data[columnIdx].attributes[key] = value; return true; } //Body addRow() { var tmp = {}; tmp.classes=new Array(); tmp.id=''; tmp.style=''; tmp.attributes={}; tmp.cells = []; this.table.body.rows.push(tmp); return this.table.body.rows.length-1; } //Alias for Google Table morphing addRows(count) { return this.addRow(); } setRowID(rowIdx, ID) { if (rowIdx === undefined || ID === undefined) { console.error('setRowID: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setRowID: rowIdx '+rowIdx+' undefined.'); return false; } this.table.body.rows[rowIdx].id = ID; return true; } addRowClass(rowIdx, className) { if (rowIdx === undefined || className === undefined) { console.error('addRowClass: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('addRowClass: rowIdx '+rowIdx+' undefined.'); return false; } if (className == "") { return false; } this.table.body.rows[rowIdx].classes.push(className); return true; } setRowStyle(rowIdx, style) { if (rowIdx === undefined || style === undefined) { console.error('setRowStyle: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setRowStyle: rowIdx '+rowIdx+' undefined.'); return false; } this.table.body.rows[rowIdx].style = style; return true; } setRowAttribute(rowIdx, key, value) { if (rowIdx === undefined || key === undefined || value === undefined) { console.error('setRowAttribute: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setRowAttribute: rowIdx '+rowIdx+' undefined.'); return false; } this.table.body.rows[rowIdx].attributes[key] = value; return true; } setCell(rowIdx, columnIdx, value) { if (rowIdx === undefined || columnIdx === undefined || value === undefined) { if (rowIdx === undefined) console.error('setCell: Missing Parameters - row'); if (columnIdx === undefined) console.error('setCell: Missing Parameters - column'); if (value === undefined) console.error('setCell: Missing Parameters - value @ ('+rowIdx+','+columnIdx+')'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setCell: cellIdx '+cellIdx+' undefined.'); return false; } var tmp = {}; tmp.classes=new Array(); tmp.id=''; tmp.style=''; tmp.attributes={}; tmp.value=value; this.table.body.rows[rowIdx].cells[columnIdx] = tmp; return true; } setCellID(rowIdx, columnIdx, ID) { if (rowIdx === undefined || columnIdx === undefined || ID === undefined) { console.error('setCellID: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setCellID: rowIdx '+rowIdx+' undefined.'); return false; } if (this.table.body.rows[rowIdx].cells[columnIdx] === undefined) { console.error('setCellID: columnIdx '+columnIdx+' undefined.'); return false; } this.table.body.rows[rowIdx].cells[columnIdx].id = ID; return true; } addCellClass(rowIdx, columnIdx, className) { if (rowIdx === undefined || className === undefined || className == undefined) { console.error('addCellClass: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('addCellClass: rowIdx '+rowIdx+' undefined.'); return false; } if (this.table.body.rows[rowIdx].cells[columnIdx] === undefined) { console.error('addCellClass: columnIdx '+rowIdx+' undefined.'); return false; } if (className == "") { return false; } this.table.body.rows[rowIdx].cells[columnIdx].classes.push(className); return true; } setCellStyle(rowIdx, columnIdx, style) { if (rowIdx === undefined || columnIdx === undefined || style === undefined) { console.error('setCellStyle: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setCellStyle: rowIdx '+rowIdx+' undefined.'); return false; } if (this.table.body.rows[rowIdx].cells[columnIdx] === undefined) { console.error('setCellStyle: columnIdx '+rowIdx+' undefined.'); return false; } this.table.body.rows[rowIdx].cells[columnIdx].style = style; return true; } setCellAttribute(rowIdx, columnIdx, key, value) { if (rowIdx === undefined || columnIdx === undefined || key === undefined || value === undefined) { console.error('setCellAttribute: Missing Parameters'); return false; } if (this.table.body.rows[rowIdx] === undefined) { console.error('setCellAttribute: rowIdx '+rowIdx+' undefined.'); return false; } if (this.table.body.rows[rowIdx].cells[columnIdx] === undefined) { console.error('setCellAttribute: columnIdx '+rowIdx+' undefined.'); return false; } this.table.body.rows[rowIdx].cells[columnIdx].attributes[key] = value; return true; } //General draw(id, options) { var oDef = (options !== undefined && options !== ''?options:''); //Santizing mostly.. if (options.sortColumn !== undefined) { this.addTableClass('sortable'); this.table.sortable = true; if (options.sortAscending !== undefined) { if (options.sortAscending === true) { this.setColumnAttribute(options.sortColumn, "data-defaultsort", "asc"); } else { this.setColumnAttribute(options.sortColumn, "data-defaultsort", "desc"); } } else { this.setColumnAttribute(options.sortColumn, "data-defaultsort", "asc"); } } var html = ''; html += ''; html += ''; html += ''; if (options.showRowNumber !== undefined) { if (options.showRowNumber === true) { html +=''; } } for (var h=0; h'+this.getTableColumnValue(h)+''; html += line; } html += ''; html += ''; html += ''; for (var b=0; b'; if (options.showRowNumber !== undefined) { if (options.showRowNumber === true) { html +=''+(b+1)+''; } } var row = this.table.body.rows[b]; for (var c=0; c'+value+''; } html +=''; } html += ""; html += ""; if (id == "" || id == undefined) { return html; } $('#'+id).html(html); if (this.table.sortable) { $.bootstrapSortable(true); } return true; } addListener(element,event,callback) { if (event == 'rowClick') { $('#'+element+' > table > tbody > tr').click(function() { callback($(this).attr('data-row')); }); } return true; } /* * Internal Use for generating HTML only. */ //Table getTableClasses() { return (this.table.classes != ""?' class="'+this.table.classes.join(" ")+'"':''); } getTableID() { return (this.table.id != ""?' id="'+this.table.id+'"':''); } getTableStyle() { return (this.table.style != ""?' style="'+this.table.style+'"':''); } getTableAttributes() { var attrHTML = ''; var attr = this.table.attributes for (var key in attr) { attrHTML+=' '+key+'="'+attr[key]+'"'; } return attrHTML; } //Head getTableHeadClasses() { return (this.table.head.classes != ""?' class="'+this.table.head.classes.join(" ")+'"':''); } getTableHeadID() { return (this.table.head.id != ""?' id="'+this.table.head.id+'"':''); } getTableHeadStyle() { return (this.table.head.style != ""?' style="'+this.table.head.style+'"':''); } getTableHeadAttributes() { var attrHTML = ''; var attr = this.table.head.attributes for (key in attr) { attrHTML+=' '+key+'="'+attr[key]+'"'; } return attrHTML; } getTableColumnValue(columnIdx) { return (this.table.head.data[columnIdx].value != "" && this.table.head.data[columnIdx].value != undefined ? this.table.head.data[columnIdx].value:''); } getTableColumnClasses(columnIdx) { return (this.table.head.data[columnIdx].classes != "" && this.table.head.data[columnIdx].classes != undefined ? ' class="'+this.table.head.data[columnIdx].classes.join(" ")+'"':''); } getTableColumnID(columnIdx) { return (this.table.head.data[columnIdx].id != "" && this.table.head.data[columnIdx].id != undefined ? ' id="'+this.table.head.data[columnIdx].id+'"':''); } getTableColumnStyle(columnIdx) { return (this.table.head.data[columnIdx].style != "" && this.table.head.data[columnIdx].style != undefined ? ' style="'+this.table.head.data[columnIdx].style+'"':''); } getTableColumnFormat(columnIdx) { return this.table.head.data[columnIdx].format; } getTableColumnType(columnIdx) { return this.table.head.data[columnIdx].type; } getTableColumnAttributes(columnIdx) { var attrHTML = ''; var attr = this.table.head.data[columnIdx].attributes; for (var key in attr) { attrHTML+=' '+key+'="'+attr[key]+'"'; } return attrHTML; } //Body getTableBodyClasses() { return (this.table.body.classes != ""?' class="'+this.table.body.classes.join(" ")+'"':''); } getTableBodyID() { return (this.table.body.id != ""?' id="'+this.table.body.id+'"':''); } getTableBodyStyle() { return (this.table.body.style != ""?' style="'+this.table.body.style+'"':''); } getTableBodyAttributes() { var attrHTML = ''; var attr = this.table.body.attributes; for (var key in attr) { attrHTML+=' '+key+'="'+attr[key]+'"'; } return attrHTML; } getTableRowClasses(rowIdx) { return (this.table.body.rows[rowIdx] !== undefined && this.table.body.rows[rowIdx].classes != "" && this.table.body.rows[rowIdx].classes != undefined ? " class='"+this.table.body.rows[rowIdx].classes.join(" ")+"'":''); } getTableRowID(rowIdx) { return (this.table.body.rows[rowIdx] !== undefined && this.table.body.rows[rowIdx].id != "" && this.table.body.rows[rowIdx].id != undefined ? " id='"+this.table.body.rows[rowIdx].id+"'":''); } getTableRowStyle(rowIdx) { return (this.table.body.rows[rowIdx] !== undefined && this.table.body.rows[rowIdx].style != "" && this.table.body.rows[rowIdx].style != undefined ? " style='"+this.table.body.rows[rowIdx].style+"'":''); } getTableRowAttributes(rowIdx) { var attrHTML = ''; if (this.table.body.rows[rowIdx] !== undefined) { var attr = this.table.body.rows[rowIdx].attributes; for (var key in attr) { attrHTML+=' '+key+'="'+attr[key]+'"'; } } return attrHTML; } getTableCellClasses(rowIdx,columnIdx) { return (this.table.body.rows[rowIdx].cells[columnIdx].classes != "" && this.table.body.rows[rowIdx].cells[columnIdx].classes != undefined ? " class='"+this.table.body.rows[rowIdx].cells[columnIdx].classes.join(" ")+"'":''); } getTableCellID(rowIdx,columnIdx) { return (this.table.body.rows[rowIdx].cells[columnIdx].id != "" && this.table.body.rows[rowIdx].cells[columnIdx].id != undefined ? " id='"+this.table.body.rows[rowIdx].cells[columnIdx].id+"'":''); } getTableCellStyle(rowIdx,columnIdx) { return (this.table.body.rows[rowIdx].cells[columnIdx].style != "" && this.table.body.rows[rowIdx].cells[columnIdx].style != undefined ? " style='"+this.table.body.rows[rowIdx].cells[columnIdx].style+"'":''); } getTableCellAttributes(rowIdx,columnIdx) { var attrHTML = ''; var attr = this.table.body.rows[rowIdx].cells[columnIdx].attributes; for (var key in attr) { attrHTML+=' '+key+'="'+attr[key]+'"'; } return attrHTML; } getTableCellValue(rowIdx,columnIdx) { return (this.table.body.rows[rowIdx].cells[columnIdx].value != "" && this.table.body.rows[rowIdx].cells[columnIdx].value != undefined ? this.table.body.rows[rowIdx].cells[columnIdx].value:''); } //Utility testJSON(text) { if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { return true; } else{ return false; } } }