automizy-js-api
Version:
JavaScript API library for Automizy Marketing Automation software
1,179 lines (1,113 loc) • 47.2 kB
JavaScript
define([
'automizy/core',
'automizy/modules/button',
'automizy/modules/i18n',
'automizy/functions/getUniqueString',
'automizy/functions/initBasicFunctions',
'automizy/images/icons'
], function () {
var Table = function (obj) {
var t = this;
var d = $A.default.table;
t.d = {
$widget:$('<div class="automizy-table-box"></div>'),
$tableContainerBox:$('<div class="automizy-table-container-box"></div>'),
$tableContainer:$('<div class="automizy-table-container"></div>'),
$table: $('<table cellpadding="0" cellspacing="0" border="0" class="automizy-table collapsed"></table>'),
$header: $('<tr class="automizy-table-header"></tr>'),
$title: $('<div class="automizy-table-title"></div>'),
$actions: $('<div class="automizy-table-actions"></div>'),
$buttons: $('<div class="automizy-table-buttons"></div>'),
$perPageBox: $('<div class="automizy-table-perpage-box"></div>'),
perPageSelect: $A.newInput(),
$stepPageBox: $('<div class="automizy-table-steppage-box"></div>'),
$stepFirst: $('<div class="automizy-table-stepfirst automizy-noselect"></div>'),
$stepBack: $('<div class="automizy-table-stepback automizy-noselect"></div>'),
$stepNext: $('<div class="automizy-table-stepnext automizy-noselect"></div>'),
$stepLast: $('<div class="automizy-table-steplast automizy-noselect"></div>'),
$pageBox: $('<div class="automizy-table-pagenumber-box"></div>'),
$page: $('<input type="number" pattern="[0-9]*" class="automizy-table-pagenumber" value="1">'),
$pageMax: $('<span class="automizy-table-pagenumber-max">1</span>'),
$stepPageBoxBottom: $('<div class="automizy-table-steppage-box"></div>'),
$stepFirstBottom: $('<div class="automizy-table-stepfirst automizy-noselect"></div>'),
$stepBackBottom: $('<div class="automizy-table-stepback automizy-noselect"></div>'),
$stepNextBottom: $('<div class="automizy-table-stepnext automizy-noselect"></div>'),
$stepLastBottom: $('<div class="automizy-table-steplast automizy-noselect"></div>'),
$pageBoxBottom: $('<div class="automizy-table-pagenumber-box"></div>'),
$pageBottom: $('<input type="number" pattern="[0-9]*" class="automizy-table-pagenumber" value="1">'),
$pageMaxBottom: $('<span class="automizy-table-pagenumber-max">1</span>'),
$panel:$('<div class="automizy-table-panel automizy-noselect"></div>'),
$settingsIcon: $('<div class="automizy-table-settings-icon automizy-noselect"></div>'),
$settingsBox: $('<div class="automizy-table-settings-box"></div>'),
$settingsBoxTitle: $('<div class="automizy-table-settings-box-title"></div>'),
$settingsBoxContent: $('<form class="automizy-table-settings-box-content"></form>'),
$searchIcon: $('<div class="automizy-table-search-icon automizy-noselect"></div>'),
$searchBox: $('<div class="automizy-table-search-box"></div>'),
$searchBoxContent: $('<div class="automizy-table-search-box-content"></div>'),
$searchInput:$A.newInput(),
$exportIcon: $('<div class="automizy-table-export-icon automizy-noselect"></div>'),
$inlineButtons: $('<td class="automizy-table-inline-buttons"></td>'),
$inlineButtonsBox: $('<tr class="automizy-table-inline-buttons-box"></tr>'),
$checkboxCheckAll: $('<input type="checkbox" class="automizy-table-checkall" />'),
$automizyTableBorderCss: $('<style></style>'),
$loadingCellContent:$('<div class="automizy-table-loading-cell-content"></div>'),
loadingCellContent:$A.translate('<b>Loading...</b>'),
openedRow:false,
buttons: [],
inlineButtons:[],
title: '',
border: 'none',
perPage: 10,
perPageList: [5, 10, 50, 100, 1000],
perPageLabel: $A.translate('Results per page'),
page: 1,
pageMax: 1,
searchValue:'',
borderCollapse: true,
settings:{
cols:[]
},
orderBy:false,
orderDir:'asc',
hasObject: false,
selectable:false,
exportable:true,
openableInlineBox:true,
storeData:false,
id: 'automizy-table-' + $A.getUniqueString(),
onPerPage: function(){},
onPageFirst: function(){},
onPagePrev: function(){},
onPageNext: function(){},
onPageLast: function(){},
onSetPage: function(){},
onSearch:function(){},
onHideCol:function(){},
onShowCol:function(){},
onSort:function(){},
onExport:function(){},
beforeOpenInlineBox:function(){},
stepFunction: function(){
if(t.d.page <= 1){
t.d.$stepFirst.add(t.d.$stepBack).add(t.d.$stepFirstBottom).add(t.d.$stepBackBottom).stop().fadeTo(250, 0.5);
}else{
t.d.$stepFirst.add(t.d.$stepBack).add(t.d.$stepFirstBottom).add(t.d.$stepBackBottom).stop().fadeTo(250, 1);
}
if(t.d.page >= t.d.pageMax){
t.d.$stepNext.add(t.d.$stepLast).add(t.d.$stepNextBottom).add(t.d.$stepLastBottom).stop().fadeTo(250, 0.5);
}else{
t.d.$stepNext.add(t.d.$stepLast).add(t.d.$stepNextBottom).add(t.d.$stepLastBottom).stop().fadeTo(250, 1);
}
t.d.$page.add(t.d.$pageBottom).val(t.d.page);
}
};
t.init();
t.d.$stepFirst.add(t.d.$stepFirstBottom).append('<img src="'+$A.images.pageStepFirst+'" />').click(function(){
if(t.d.page <= 1)return false;
t.page(1);
t.d.stepFunction();
t.d.onPageFirst.apply(t, [t, t.d.$widget]);
});
t.d.$stepFirst.appendTo(t.d.$stepPageBox);
t.d.$stepFirstBottom.appendTo(t.d.$stepPageBoxBottom);
t.d.$stepBack.add(t.d.$stepBackBottom).append('<img src="'+$A.images.pageStepBack+'" />').click(function(){
if(t.d.page <= 1)return false;
t.page(Math.max(t.d.page-1, 1));
t.d.stepFunction();
t.d.onPagePrev.apply(t, [t, t.d.$widget]);
});
t.d.$stepBack.appendTo(t.d.$stepPageBox);
t.d.$stepBackBottom.appendTo(t.d.$stepPageBoxBottom);
t.d.$page.appendTo(t.d.$pageBox);
t.d.$pageBottom.appendTo(t.d.$pageBoxBottom);
t.d.$page.add(t.d.$pageBottom).attr({
max:1,
min:1
}).keydown(function (e) {
var $t = $(this);
// Allow: backspace, delete, tab, escape and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 110, 190]) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode == 67 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode == 88 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
// Enter
if(e.keyCode === 13){
t.d.stepFunction();
t.d.onSetPage.apply(t, [t, t.d.$widget]);
$t.data('old-val', $t.val());
}
}).keyup(function() {
var $t = $(this);
var val = parseInt($t.val());
var max = parseInt($t.attr('max'));
var min = parseInt($t.attr('min'));
if (isNaN(val)) {
$t.val(min);
}
if (val > max) {
$t.val(max);
} else if (val < min) {
$t.val(min);
}
t.d.page = parseInt($t.val());
}).focus(function(){
var $t = $(this);
$t.data('old-val', $t.val());
}).focusout(function(){
var $t = $(this);
if($t.data('old-val') != $t.val()) {
t.d.stepFunction();
t.d.onSetPage.apply(t, [t, t.d.$widget]);
}
}).on('mousewheel', function(e){
e.preventDefault();
});
t.d.$pageBox.add(t.d.$pageBoxBottom).append('/');
t.d.$pageMax.appendTo(t.d.$pageBox);
t.d.$pageMaxBottom.appendTo(t.d.$pageBoxBottom);
t.d.$pageBox.appendTo(t.d.$stepPageBox);
t.d.$pageBoxBottom.appendTo(t.d.$stepPageBoxBottom);
t.d.$stepNext.add(t.d.$stepNextBottom).append('<img src="'+$A.images.pageStepNext+'" />').click(function(){
if(t.d.page >= t.d.pageMax)return false;
t.page(Math.min(t.d.page+1, t.d.pageMax));
t.d.stepFunction();
t.d.onPageNext.apply(t, [t, t.d.$widget]);
});
t.d.$stepNext.appendTo(t.d.$stepPageBox);
t.d.$stepNextBottom.appendTo(t.d.$stepPageBoxBottom);
t.d.$stepLast.add(t.d.$stepLastBottom).append('<img src="'+$A.images.pageStepLast+'" />').click(function(){
if(t.d.page >= t.d.pageMax)return false;
t.page(t.d.pageMax);
t.d.stepFunction();
t.d.onPageLast.apply(t, [t, t.d.$widget]);
});
t.d.$stepLast.appendTo(t.d.$stepPageBox);
t.d.$stepLastBottom.appendTo(t.d.$stepPageBoxBottom);
t.d.$stepPageBox.appendTo(t.d.$actions);
t.d.$perPageBox.appendTo(t.d.$actions);
t.d.perPageSelect.type('select').multiple(false).multiselect(true).options(t.d.perPageList).val(t.d.perPage).label(t.d.perPageLabel).width('83px').change(function(){
t.d.perPage = this.val();
if(t.d.storeData){
$A.store.set(t.id()+'PerPage', t.d.perPage);
}
t.d.onPerPage.apply(this, [t, t.d.$widget]);
}).drawTo(t.d.$perPageBox);
t.d.$widget.attr('id', t.id());
t.d.$header.appendTo(t.d.$table);
t.d.$title.html(t.d.title).appendTo(t.d.$widget);
t.d.$actions.appendTo(t.d.$widget);
t.d.$buttons.appendTo(t.d.$actions);
t.d.$tableContainerBox.appendTo(t.d.$widget);
t.d.$tableContainer.appendTo(t.d.$tableContainerBox);
t.d.$table.appendTo(t.d.$tableContainer);
t.d.$panel.appendTo(t.d.$tableContainerBox);
t.d.$stepPageBoxBottom.appendTo(t.d.$widget);
t.d.$settingsBox.appendTo(t.d.$panel).click(function(){
t.d.settingsBoxCanClose = false;
});
t.d.$settingsBoxContent.appendTo(t.d.$settingsBox);
t.d.$settingsBoxTitle.text($A.translate('Displayed columns')).appendTo(t.d.$settingsBoxContent);
t.d.$searchBox.appendTo(t.d.$panel).click(function(){
t.d.searchBoxCanClose = false;
});
t.d.$searchBoxContent.appendTo(t.d.$searchBox);
t.d.$searchInput.placeholder($A.translate('Search in this list...')).enter(function(){
t.d.searchValue = this.val();
t.d.onSearch.apply(this, [t, t.d.$widget]);
t.d.$searchBoxContent.stop().slideUp(250);
}).drawTo(t.d.$searchBoxContent);
setTimeout(function() {
t.d.$settingsIcon.append('<img src="' + $A.images.settingsIcon + '" />').insertAfter(t.d.$settingsBox).click(function () {
t.d.$settingsBoxContent.stop().slideToggle();
t.d.settingsBoxCanClose = false;
});
t.d.$searchIcon.append('<img src="' + $A.images.searchIcon + '" />').insertAfter(t.d.$searchBox).click(function () {
t.d.$searchBoxContent.stop().slideToggle();
t.d.searchBoxCanClose = false;
t.d.$searchInput.focus();
});
t.d.$exportIcon.append('<img src="' + $A.images.exportIcon + '" />').appendTo(t.d.$panel).click(function () {
t.d.onExport.apply(t, [t, t.d.$widget]);
});
}, 1);
$(window).click(function(){
if(t.d.settingsBoxCanClose){
t.d.$settingsBoxContent.stop().slideUp(250);
}
if(t.d.searchBoxCanClose){
t.d.$searchBoxContent.stop().slideUp(250);
}
t.d.settingsBoxCanClose = true;
t.d.searchBoxCanClose = true;
});
t.d.$searchBox.appendTo(t.d.$panel);
t.d.$inlineButtons.appendTo(t.d.$inlineButtonsBox);
t.d.$automizyTableBorderCss.appendTo('head:first');
t.d.$checkboxCheckAll.change(function(){
AutomizyJs.d.tableRowCheckBoxClick = true;
var checked = this.checked;
var cells = t.getColByIndex(0).$cells().find('input:enabled').prop('checked', checked);
});
t.border(t.d.border);
t.borderCollapse(t.d.borderCollapse);
var oSelectable = false;
if(t.d.selectable) {
t.d.selectable = false;
oSelectable = true;
}
t.d.$loadingCellContent.html(t.d.loadingCellContent);
if (typeof obj !== 'undefined') {
if (obj instanceof HTMLElement) {
obj = $(obj);
}
if (obj instanceof jQuery) {
t.d.$widget = obj;
if(obj.find('.automizy-table-title').length === 1)t.title(obj.find('.automizy-table-title').html());
if(obj.find('.automizy-table th:first input').length === 1)t.d.selectable = true;
} else {
if (typeof obj.id !== 'undefined')
t.id(obj.id);
if (typeof obj.storeData !== 'undefined')
t.storeData(obj.storeData);
if (typeof obj.title !== 'undefined')
t.title(obj.title);
if (typeof obj.border !== 'undefined')
t.border(obj.border || t.d.border);
if (typeof obj.borderCollapse !== 'undefined')
t.borderCollapse(obj.borderCollapse);
if (typeof obj.cols !== 'undefined')
t.cols(obj.cols);
if (typeof obj.rows !== 'undefined')
t.rows(obj.rows);
if (typeof obj.exportable !== 'undefined')
t.exportable(obj.exportable);
if (typeof obj.selectable !== 'undefined')
setTimeout(function(){t.selectable(obj.selectable)}, 10);
if (typeof obj.perPageList !== 'undefined')
t.perPageList(obj.perPageList);
if (typeof obj.perPage !== 'undefined')
t.perPage(obj.perPage);
if (typeof obj.perPageLabel !== 'undefined')
t.perPageLabel(obj.perPageLabel);
if (typeof obj.page !== 'undefined')
t.page(obj.page);
if (typeof obj.pageMax !== 'undefined')
t.pageMax(obj.pageMax);
if (typeof obj.searchValue !== 'undefined')
t.searchValue(obj.searchValue);
if (typeof obj.onPageFirst === 'function')
t.onPageFirst(obj.onPageFirst);
if (typeof obj.onPagePrev === 'function')
t.onPagePrev(obj.onPagePrev);
if (typeof obj.onPageNext === 'function')
t.onPageNext(obj.onPageNext);
if (typeof obj.onPageLast === 'function')
t.onPageLast(obj.onPageLast);
if (typeof obj.onSetPage === 'function')
t.onSetPage(obj.onSetPage);
if (typeof obj.onSort === 'function')
t.onSort(obj.onSort);
if (typeof obj.onPerPage === 'function')
t.onPerPage(obj.onPerPage);
if (typeof obj.onShowCol === 'function')
t.onShowCol(obj.onShowCol);
if (typeof obj.onExport === 'function')
t.onExport(obj.onExport);
if (typeof obj.buttons !== 'undefined')
t.tableButtons(obj.buttons);
if (typeof obj.inlineButtons !== 'undefined')
t.inlineButtons(obj.inlineButtons);
if (typeof obj.openableInlineBox !== 'undefined')
t.openableInlineBox(obj.openableInlineBox);
if (typeof obj.beforeOpenInlineBox === 'function')
t.beforeOpenInlineBox(obj.beforeOpenInlineBox);
if (typeof obj.loadingCellContent !== 'undefined')
t.loadingCellContent(obj.loadingCellContent);
t.initParameter(obj);
}
}
if(oSelectable) {
t.selectable(true);
}
t.d.stepFunction();
};
var p = Table.prototype;
p.table = function () {
return this.d.$table;
};
p.storeData = function(storeData){
var t = this;
if (typeof storeData !== 'undefined') {
t.d.storeData = $A.parseBoolean(storeData);
return t
}
return t.d.storeData;
};
p.onPageFirst = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onPageFirst = func;
} else {
t.d.stepFunction();
if(t.d.hasObject)t.d.onPageFirst.apply(t, [t, t.d.$widget]);
}
return t;
};
p.onPagePrev = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onPagePrev = func;
} else {
t.d.stepFunction();
if(t.d.hasObject)t.d.onPagePrev.apply(t, [t, t.d.$widget]);
}
return t;
};
p.onPageNext = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onPageNext = func;
} else {
t.d.stepFunction();
if(t.d.hasObject)t.d.onPageNext.apply(t, [t, t.d.$widget]);
}
return t;
};
p.onPageLast = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onPageLast = func;
} else {
t.d.stepFunction();
if(t.d.hasObject)t.d.onPageLast.apply(t, [t, t.d.$widget]);
}
return t;
};
p.onSetPage = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onSetPage = func;
} else {
t.d.stepFunction();
if(t.d.hasObject)t.d.onSetPage.apply(t, [t, t.d.$widget]);
}
return t;
};
p.onPerPage = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onPerPage = func;
} else {
return t.d.onPerPage.apply(t, [t, t.d.$widget]);
}
return this;
};
p.onHideCol = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onHideCol = func;
} else {
return t.d.onHideCol.apply(t, [t, t.d.$widget]);
}
return this;
};
p.onShowCol = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onShowCol = func;
} else {
return t.d.onShowCol.apply(t, [t, t.d.$widget]);
}
return this;
};
p.onSort = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onSort = func;
} else {
if(t.d.hasObject)t.d.onSort.apply(t, [t, t.d.$widget]);
}
return t;
};
p.onExport = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.onExport = func;
} else {
if(t.d.hasObject)t.d.onExport.apply(t, [t, t.d.$widget]);
}
return t;
};
p.border = function(border){
var t = this;
if (typeof border !== 'undefined') {
t.d.border = border;
t.d.$automizyTableBorderCss.text('#'+t.id()+' .automizy-table, #'+t.id()+' .automizy-table td, #'+t.id()+' .automizy-table th{border: '+border+'}');
return t;
}
return t.d.border;
};
//nem megy, mindig collapsed
p.borderCollapse = function (borderCollapse) {
var t = this;
if (typeof borderCollapse !== 'undefined') {
t.d.borderCollapse = $A.parseBoolean(borderCollapse);
t.table().removeClass('collapsed');
if(t.d.borderCollapse){
t.table().addClass('collapsed');
}
return t;
}
return t.d.borderCollapse;
};
p.title = function (title) {
var t = this;
if (typeof title !== 'undefined') {
t.d.title = title;
t.d.$title.html(title);
return t;
}
return t.d.title;
};
p.searchValue = function (searchValue) {
var t = this;
if (typeof searchValue !== 'undefined') {
t.d.searchValue = searchValue;
t.d.$searchInput.value(t.d.searchValue);
return t;
}
return t.d.searchValue;
};
p.perPageList = function (perPageList) {
var t = this;
if (typeof perPageList !== 'undefined') {
t.d.perPageList = perPageList;
t.d.perPageSelect.options(perPageList);
t.perPage(t.perPage());
return t;
}
return t.d.perPageList;
};
p.perPage = function (perPage) {
var t = this;
if (typeof perPage !== 'undefined') {
perPage = parseInt(perPage);
if($.inArray(perPage, t.d.perPageList) < 0){
perPage = t.d.perPageList[0] || 0;
}
t.d.perPage = perPage;
t.d.perPageSelect.val(perPage);
if(t.d.storeData){
$A.store.set(t.id()+'PerPage', t.d.perPage);
}
if(t.d.hasObject)t.d.onPerPage.apply(t.d.perPageSelect, [t, t.d.$widget]);
return t;
}
return t.d.perPage;
};
p.perPageLabel = function (perPageLabel) {
var t = this;
if (typeof perPageLabel !== 'undefined') {
t.d.perPageLabel = perPageLabel;
t.d.perPageSelect.label(perPageLabel);
return t;
}
return t.d.perPageLabel;
};
p.page = function (page) {
var t = this;
if (typeof page !== 'undefined') {
t.d.page = parseInt(page);
t.d.$page.add(t.d.$pageBottom).val(t.d.page);
return t;
}
return t.d.page;
};
p.pageMax = function (pageMax) {
var t = this;
if (typeof pageMax !== 'undefined') {
t.d.pageMax = parseInt(pageMax);
t.d.$pageMax.add(t.d.$pageMaxBottom).text($A.numberFormat(t.d.pageMax));
t.d.$page.add(t.d.$pageBottom).attr('max', t.d.pageMax);
return t;
}
return t.d.pageMax;
};
p.selectable = function (selectable) {
var t = this;
if (typeof selectable !== 'undefined') {
var oSelectable = t.d.selectable;
t.d.selectable = $A.parseBoolean(selectable);
if(t.d.selectable && !oSelectable){
t.table().addClass('checkboxed');
var cbcagac = t.addCol({name:'checkbox-column', html:t.d.$checkboxCheckAll, index:0});
cbcagac.$cells().eq(0).click(function(){
if(!AutomizyJs.d.tableRowCheckBoxClick){
$(this).find('input:first').each(function(){
this.checked = !this.checked;
$(this).trigger('change');
});
}
AutomizyJs.d.tableRowCheckBoxClick = false;
});
var $cbcagac = cbcagac.$cells().slice(1);
$cbcagac.html(function(){
var id = $(this).closest('tr').data('recordId') || 0;
return $('<input type="checkbox" class="automizy-table-rowcheck" onClick="console.log(2)" value="'+id+'" />');
}).click(function(){
});
}else if(!t.d.selectable && oSelectable){
t.table().removeClass('checkboxed');
t.deleteCol(0);
}
return t;
}
return t.d.selectable;
};
p.exportable = function (exportable) {
var t = this;
if (typeof exportable !== 'undefined') {
t.d.exportable = $A.parseBoolean(exportable);
if (exportable === false)
t.d.$exportIcon.hide();
return t;
}
return t.d.exportable;
};
p.openableInlineBox = function (openableInlineBox) {
var t = this;
if (typeof openableInlineBox !== 'undefined') {
t.d.openableInlineBox = $A.parseBoolean(openableInlineBox);
if (openableInlineBox===false)
t.d.$inlineButtonsBox.hide();
return t;
}
return t.d.openableInlineBox;
};
p.beforeOpenInlineBox = function (func) {
var t = this;
if (typeof func === 'function') {
t.d.beforeOpenInlineBox = func;
return this;
}
return this;
};
p.selectedRows = function(){
var t = this;
var rows = [];
var ids = t.selectedIds();
for(var i = 0; i < ids.length; i++){
rows.push(t.getRowByRecordId(ids[i]));
}
return rows;
};
p.selectedRow = function(){
var t = this;
if (typeof t.selectedId()==='undefined')
return false;
return t.getRowByRecordId(t.selectedId());
};
p.selectedIds = function(){
var t = this;
return t.getColByIndex(0).$cells().find('input[type="checkbox"][value]:checked').map(function(){return this.value}).get()
};
p.selectedId = function(){
var t = this;
return t.getColByIndex(0).$cells().find('input[type="checkbox"][value]:checked:first').val();
};
p.openedRow = function(openedRow){
var t = this;
if (typeof openedRow !== 'undefined') {
t.d.openedRow = openedRow;
return t;
}
return t.d.openedRow;
};
p.openedId = function(){
var t = this;
if (t.d.openedRow!==false)
return t.d.openedRow.recordId();
return false;
};
p.getCell = function (colIndex, rowIndex) {
var t = this;
var $cell = t.table().find('tr:first').siblings().andSelf().eq(rowIndex).find('td, th').eq(colIndex);
return $A.tableCell($cell);
};
p.getCells = function (type) {
var t = this;
var tableId = t.id();
var type = type || 'Automizy';
if (type === 'jQuery') {
return t.table().find('th, td');
} else {
var tableDom = t.table()[0];
var cells = [];
for(var i = 0; i < tableDom.rows.length; i++){
for(var j = 0; j < tableDom.rows[i].cells.length; j++){
var cell = tableDom.rows[i].cells[j];
if (type === 'DOM'){
cells.push(cell);
}else{
cells.push($A.tableCell(cell));
}
}
}
return cells;
}
};
p.$getCells = function () {
return this.getCells('jQuery');
};
p.getDomCells = function () {
return this.getCells('DOM');
};
p.getRowByIndex = function (index) {
var $row = this.table().find('tr:first').siblings().andSelf().eq(index);
if($row.length === 0){
return false;
}
return $A.tableRow($row);
};
p.getRowByRecordId = function (recordId) {
var t = this;
var $row = t.table().find('tr:first').siblings().andSelf().filter(function(){
return $(this).data('recordId') == recordId;
});
if($row.length === 0){
return false;
}
return $A.tableRow($row);
};
p.getColByIndex = function (index) {
var $col = this.table().find('th:first').siblings().andSelf().eq(index);
if($col.length === 0){
return false;
}
return $A.tableCol($col);
};
p.getColByName = function (name) {
var t = this;
var $col = t.table().find('th:first').siblings().andSelf().filter(function(){
return $(this).data('name') == name;
});
if($col.length === 0){
return false;
}
return $A.tableCol($col);
};
p.addCols = function (arr) {
var t = this;
if (!$.isArray(arr))
return t.addCols([arr]);
var table = t.table()[0];
t.d.settings.cols = [];
for(var i = 0; i < arr.length; i++){
var obj = arr[i];
var index = -1;
if(typeof obj.index !== 'undefined'){
index = parseInt(obj.index);
}
for (var j = 0; j < table.rows.length; j++) {
var cell = table.rows[j].insertCell(index);
var visibility = (obj.visibility === false)?false:true;
if(t.d.storeData && typeof $A.store.get(t.id()+"ActiveCols") !== 'undefined'){
var activeCols = $A.store.get(t.id()+"ActiveCols");
if(typeof activeCols[obj.name] !== 'undefined') {
visibility = $A.parseBoolean(activeCols[obj.name]);
}
}
if(visibility === false){
cell.style.display = 'none';
}
if(j === 0){
var $cell = $(cell);
if(t.d.selectable && $cell.siblings().length <= 0){
$(table.rows[0].insertCell(0)).replaceWith(function(){
var $th = $("<th />");
t.d.$checkboxCheckAll.appendTo($th);
/*var th = $th[0];
th.automizyData = th.automizyData || {};
th.automizyData.name = 'automizyCheckboxCheckAll';*/
return $th;
});
}
if(typeof obj.name === 'undefined'){
obj.name = $A.getUniqueString();
}
if(obj.hideable !== false){
$A.input({
id:t.id()+'-settings-checkbox-'+obj.name,
type:'checkbox',
label:obj.text || obj.name,
name:obj.name,
labelPosition:'right',
checked:visibility,
target:t.d.$settingsBoxContent,
change:function(){
var name = this.name();
var col = t.getColByName(name);
if(!this.checked()){
col.hide();
t.d.onHideCol.apply(col, [t, t.widget()]);
}else{
col.show();
t.d.onShowCol.apply(col, [t, t.widget()]);
}
if(t.d.storeData){
$A.store.set(t.id()+'ActiveCols', t.d.$settingsBoxContent.serializeObject(true));
}
}
});
}
$cell.replaceWith(function(){
var $th = $("<th />").append($(this).contents());
if(visibility === false){
$th.hide();
}
$th.data('name', obj.name);
var th = $th[0];
th.automizyData = th.automizyData || {};
th.automizyData.name = obj.name;
if (typeof obj.order !== 'undefined') {
t.d.orderBy = obj.name;
t.d.orderDir = obj.order;
}
if(typeof obj.text !== 'undefined'){
$th.append(obj.text);
}
if(typeof obj.html !== 'undefined'){
if(obj.html instanceof jQuery){
obj.html.appendTo($th);
}else{
$th.append(obj.html);
}
}
if(obj.sortable !== false) {
var $sort = $('<span class="automizy-table-sort-arrow automizy-noselect"></span>');
$th.click(function(){
var $thth = $(this);
$thth.siblings().find('.automizy-table-sort-arrow').removeClass('asc desc');
var thObj = t.d.settings.cols.filter(function ( elem ) {return elem.name === $thth.data('name');})[0];
if(thObj.order === 'asc'){
thObj.order = 'desc';
$sort.switchClass( "asc", "desc", 250, "linear" );
}else{
thObj.order = 'asc';
$sort.switchClass( "desc", "asc", 250, "linear" );
}
t.d.orderBy = thObj.name;
t.d.orderDir = thObj.order;
t.d.onSort.apply(thObj, [t, t.d.$widget]);
});
if (typeof obj.order !== 'undefined') {
$sort.addClass(obj.order);
}
$sort.appendTo($th);
}
obj.col = $A.tableCol($th);
t.d.settings.cols.push(obj);
return $th;
});
}
}
}
return t;
};
p.addCol = function (obj) {
var t = this;
if (typeof obj === 'undefined') {
return $A.newTableCol();
}
obj.table = obj.table || t;
obj.newCol = true;
return $A.tableCol(obj);
};
p.cols = function(arr){
var t = this;
if (typeof arr === 'undefined') {
var cols = [];
this.table().find('th:first').siblings().andSelf().each(function(){
cols.push($A.tableCol($(this)));
})
return cols;
}
t.deleteCols();
return t.addCols(arr);
};
p.deleteCols = function(arr){
var t = this;
var table = t.table()[0];
if (typeof arr !== 'undefined'){
var sortArr = arr.sort();
for (var i = 0; i < table.rows.length; i++) {
for (var j = sortArr.length - 1; j >= 0; j--) {
if(i === 0){
$A.input('table-settings-checkbox-'+$(table.rows[i].cells[j]).attr('name')).remove();
}
table.rows[i].deleteCell(sortArr[j]);
}
}
return t;
}
var cols = t.cols();
for(var i = 0; i < cols.length; i++){
$A.input(t.id()+'-settings-checkbox-'+cols[i].name()).remove();
}
$A.input(t.id()+'-settings-checkbox-'+$(table.rows[i].cells[j]).attr('name')).remove();
var lastCol = table.rows[0].cells.length - 1;
for (var i = 0; i < table.rows.length; i++) {
for (var j = lastCol; j > 0; j--) {
table.rows[i].deleteCell(j);
}
}
return t;
};
p.deleteCol = function(index){
var t = this;
return t.deleteCols([index]);
};
p.addRows = function (arr) {
var t = this;
if (!$.isArray(arr)){
return t.addRows([arr]);
}
var table = t.table()[0];
for(var i = 0; i < arr.length; i++){
var recordId = 0;
var rowArr = arr[i];
var rowIndex = table.rows.length;
if (!$.isArray(arr[i])){
if(typeof rowArr.index !== 'undefined'){
rowIndex = parseInt(rowArr.index);
if(rowIndex < 1)rowIndex = 1;
}
recordId = rowArr.recordId || recordId;
rowArr = rowArr.values || [];
}
var row = table.insertRow(rowIndex);
$(row).data('recordId', recordId).click(function(){
var $t = $(this);
setTimeout(function(){
if(!t.d.isCheckboxClick) {
t.openedRow($A.tableRow($t));
t.d.beforeOpenInlineBox.apply($t, [t.openedRow(), t.d.openedRow.recordId()]);
if (t.d.openableInlineBox) {
t.d.$inlineButtons.attr('colspan', t.table()[0].rows[0].cells.length - t.table().find('tr:first th:not(:visible)').length);
t.d.$inlineButtonsBox.insertAfter($t);
t.d.$inlineButtonsBox.show();
}
}
t.d.isCheckboxClick = false;
}, 10);
});
if (!$.isArray(rowArr)){
var newArr = [];
for (var j = t.d.selectable?1:0; j < table.rows[0].cells.length; j++) {
var ad = table.rows[0].cells[j].automizyData;
if(typeof ad === 'undefined'){
ad = {};
}
var a = rowArr[ad.name];
newArr.push((typeof a !== 'undefined')?a:'');
}
rowArr = newArr;
}
if(t.d.selectable){
rowArr.unshift({
html:'<input type="checkbox" class="automizy-table-rowcheck" onClick="AutomizyJs.d.tableRowCheckBoxClick = true" value="'+recordId+'" />',
click:function () {
t.d.isCheckboxClick = true;
if(!AutomizyJs.d.tableRowCheckBoxClick){
$(this).find('input:first').each(function(){
this.checked = !this.checked;
$(this).trigger('change');
});
}
AutomizyJs.d.tableRowCheckBoxClick = false;
}
});
}
for (var j = 0; j < table.rows[0].cells.length; j++) {
var cell = row.insertCell(j);
var value = rowArr[j];
if(typeof value === 'undefined'){
value = '';
}
if (value instanceof $A.m.Input) {
value.drawTo($(cell));
}else if(value instanceof jQuery){
value.appendTo($(cell));
}else if(value !== null && typeof value === 'object'){
if(typeof value.html !== 'undefined'){
cell.innerHTML = value.html;
}
if(typeof value.text !== 'undefined'){
cell.textContent = value.text;
}
cell.onclick = value.click || function(){};
}else{
cell.textContent = value;
}
var jMod = t.d.selectable ? j-1 : j;
if(typeof t.d.settings.cols[jMod] !== 'undefined'){
if(typeof t.d.settings.cols[jMod].cellFunction === 'function') {
t.d.settings.cols[jMod].cellFunction.apply(cell, [cell, value]);
}
}
if(table.rows[0].cells[j].style.display === 'none'){
cell.style.display = 'none'
}
}
}
return t;
};
p.addRow = function (arr) {
var t = this;
if (typeof arr === 'undefined') {
return $A.newTableRow();
} else if (typeof arr === 'object' || typeof arr === 'array') {
return t.addRows(arr);
}
return t;
};
p.rows = function(arr){
var t = this;
if (typeof arr === 'undefined') {
var rows = [];
this.table().find('tr:first').siblings().andSelf().each(function(){
rows.push($A.tableRow($(this)));
});
return rows;
}
t.deleteRows();
return t.addRows(arr);
};
p.rowCount = function(){
return this.rows().length-1;
};
p.deleteRows = function(arr){
var t = this;
var table = t.table()[0];
if (typeof arr !== 'undefined'){
var sortArr = arr.sort();
for (var i = sortArr.length - 1; i >= 0; i--) {
table.deleteRow(sortArr[i]);
}
return t;
}
var lastRow = table.rows.length - 1;
for (var i = lastRow; i > 0; i--) {
table.deleteRow(i);
}
return t;
};
p.deleteRow = function(index){
var t = this;
return t.deleteRows([index]);
};
p.setButtonsStatus = function(){
var t = this;
var buttons = t.buttons();
for(var i = 0; i < buttons.length; i++){
var button = buttons[i];
if(button.data('condition') !== 'undefined'){
var condition = button.data('condition');
if(condition === 'select-one'){
if(t.selectedIds().length === 1){
button.enable();
}else{
button.disable();
}
}else if(condition === 'select-more-than-zero'){
if(t.selectedIds().length >= 1){
button.enable();
}else{
button.disable();
}
}else if(condition === 'select-between-two-and-four'){
if(t.selectedIds().length >= 2 && t.selectedIds().length <= 4){
button.enable();
}else{
button.disable();
}
}
}
}
return t;
};
p.tableButtons = function(arr){
var t = this;
if (typeof arr === 'undefined')
return t.d.buttons;
for(var i = 0; i < arr.length; i++){
if(arr[i].condition !== 'undefined'){
arr[i].data = arr[i].data || {};
arr[i].data.condition = arr[i].condition;
}
}
t.buttons(arr);
t.table().on('change', 'input.automizy-table-rowcheck, input.automizy-table-checkall', function(){
t.setButtonsStatus();
});
return t;
};
p.inlineButtons = function(inlineButtons){
var t = this;
if(typeof inlineButtons !== 'undefined'){
t.d.inlineButtons = inlineButtons;
for(var i = 0; i < inlineButtons.length; i++){
var inlineButton = inlineButtons[i];
$('<a>'+inlineButton.text+'</a>').data('click', inlineButton.click || function(){}).click(function(){
var $t = $(this);
var $row = $t.closest('tr').prev();
var row = $A.tableRow($row);
t.openedRow(row);
$t.data('click').apply(row, [t, t.d.$widget]);
}).appendTo(t.d.$inlineButtons);
}
return t;
}
return t.d.inlineButtons;
};
p.loading = function(){
var t = this;
if(t.table().find('tr.automizy-table-loading-row').length > 0){
return t;
}
setTimeout(function(){
t.deleteRows();
t.setButtonsStatus();
var $tr = $('<tr class="automizy-table-loading-row"></tr>');
var $td = $('<td colspan="'+t.getRowByIndex(0).$cells().length+'"></td>').appendTo($tr);
t.d.$loadingCellContent.appendTo($td);
$tr.appendTo(t.table());
}, 10);
return t;
};
p.loadingCellContent = function(loadingCellContent){
var t = this;
if (typeof loadingCellContent !== 'undefined') {
if (loadingCellContent instanceof jQuery) {
var loadingCellContent = loadingCellContent.clone();
}
t.d.loadingCellContent = loadingCellContent;
t.d.$loadingCellContent.html(loadingCellContent);
return t;
}
return t.d.loadingCellContent;
};
$A.initBasicFunctions(Table, "Table");
});