/*!
* controlTable
* https://github.com/Voliware/Template
* Licensed under the MIT license.
*/
/**
* A table that has view/update/delete support.
* Buttons are added to the incoming data objects
* as if they were part of the data.
* @extends RenderTable
* @deprecated Use RenderTable
*/
class ControlTable extends RenderTable {
/**
* Constructor
* @param {object} [options]
* @param {object} [options.buttons]
* @param {boolean} [options.buttons.deleteButton=true]
* @param {boolean} [options.buttons.updateButton=true]
* @param {boolean} [options.buttons.viewButton=true]
* @returns {ControlTable}
*/
constructor(options){
var defaults = {
buttons : {
deleteButton : true,
viewButton : true,
updateButton : true
}
};
super($Util.opts(defaults, options));
this._setupButtons();
this.$wrapper.addClass('controlTable');
return this;
}
// buttons
/**
* Add headers and tds for
* each button that is enabled
* @private
*/
_setupButtons(){
var self = this;
$.each(this.settings.buttons, function(i, e){
if(e && !findTd(i)){
addHeader();
addTd(i);
}
});
/**
* Determine if an element has already been
* created in the template for this button
* @param {string} i - button name
*/
function findTd(i){
var $btnName = self.$tr.find('[data-name="'+i+'"]');
var $btnDataName = self.$tr.find('[name="'+i+'"]');
return $btnName.length || $btnDataName.length;
}
/**
* Add a blank header
*/
function addHeader(){
self.$thead.find('tr').append('<th></th>');
}
/**
* Add a td for a button
* @param {string} dataName - the data-name attr
*/
function addTd(dataName){
self.$tr.append('<td data-name="'+dataName+'"></td>');
}
}
/**
* Add each enabled button
* @param {object} data - row data
* @returns {object}
* @private
*/
_processRow(data){
if(this.settings.buttons.deleteButton)
this._addDeleteButton(data);
if(this.settings.buttons.updateButton)
this._addUpdateButton(data);
if(this.settings.buttons.viewButton)
this._addViewButton(data);
return data;
}
// delete button
/**
* Add a delete button
* @param {object} data - row data
* @returns {ControlTable}
* @private
*/
_addDeleteButton(data){
data.deleteButton = this._createDeleteButton(data);
return this;
}
/**
* Create a delete button
* @param {object} data - row data
* @returns {jQuery}
* @private
*/
_createDeleteButton(data){
var self = this;
var $btn = $('<button type="button" title="Delete">Delete</button>');
$btn.click(function(){
self.deleteRow(data);
});
return $btn;
}
// update button
/**
* Add an update button
* @param {object} data - row data
* @returns {ControlTable}
* @private
*/
_addUpdateButton(data){
data.updateButton = this._createUpdateButton(data);
return this;
}
/**
* Create an update button
* @param {object} data - row data
* @returns {jQuery}
* @private
*/
_createUpdateButton(data){
return $('<button type="button" title="Update">Update</button>');
}
// view button
/**
* Add a view button
* @param {object} data - row data
* @returns {ControlTable}
* @private
*/
_addViewButton(data){
data.viewButton = this._createViewButton(data);
return this;
}
/**
* Create a view button
* @param {object} data - row data
* @returns {jQuery}
* @private
*/
_createViewButton(data){
return $('<button type="button" title="View">View</button>');
}
}