836 lines
34 KiB
JavaScript
836 lines
34 KiB
JavaScript
/*
|
|
* Cms table JavaScript Library v1.0
|
|
*/
|
|
(function() {
|
|
CTable = (function() {
|
|
|
|
function CTable(id, sUrl){
|
|
var _this = this;
|
|
|
|
_this.url = ($.isDefined(sUrl) ? sUrl : CBase.url.path);
|
|
_this.isVisible = true;
|
|
_this.disableSort = false;
|
|
_this.addNewUrl = _this.url + _this.addNewUrl;
|
|
_this.containerId = ($.isDefined(id) ? "#" + id + " " : "");
|
|
_this.jqTable = $(_this.containerId + ".table-data");
|
|
|
|
_this.chkedRows = {};
|
|
_this.preserveChkedRows = false;
|
|
_this.bInitEdit = (CBase.dt && CBase.dt.initEdit ? CBase.dt.initEdit : false);
|
|
|
|
_this.params = {};
|
|
_this.jqSearchPan = {};
|
|
|
|
_this.oPager = new Pager(_this);
|
|
_this.oBlank = new CBlank(id, _this);
|
|
|
|
CBase.oTable = _this;
|
|
|
|
_this.bindTableActionKeys();
|
|
}
|
|
|
|
CTable.prototype = {
|
|
url : "",
|
|
isVisible : false,
|
|
disableSort : false,
|
|
addNewUrl : "/action:new",
|
|
containerId : "",
|
|
jqTable : {},
|
|
|
|
headers : false,
|
|
|
|
chkedRows : {},
|
|
preserveChkedRows : false,
|
|
bInitEdit : false,
|
|
|
|
params : {},
|
|
jqSearchPan : {},
|
|
|
|
oPager : {},
|
|
oBlank : {},
|
|
|
|
oMessage : false,
|
|
bArrowKeysUsed : false,
|
|
bDisableMouseHover : false
|
|
};
|
|
|
|
CTable.prototype.show = function(reload){
|
|
this.isVisible = true;
|
|
if($.isDefined(reload) && reload){
|
|
this.loadTableData();
|
|
}else{
|
|
this.oBlank.hide();
|
|
if(this.jqTable.parent().is(":visible")){
|
|
this.jqTable.add(this.addElementsOnTableShow()).show();
|
|
}else{
|
|
this.jqTable
|
|
.add(this.addElementsOnTableShow()).show();
|
|
}
|
|
}
|
|
//CBase.resizeForm();
|
|
|
|
this.jqTable.parent().removeClass("cnt-shadow-hidden").fadeIn();
|
|
};
|
|
CTable.prototype.hide = function(){
|
|
this.isVisible = false;
|
|
this.jqTable.parent().addClass("cnt-shadow-hidden").hide();
|
|
this.jqTable.add(this.addElementsOnTableShow()).hide();
|
|
};
|
|
CTable.prototype.addElementsOnTableShow = function(){
|
|
return {};
|
|
};
|
|
CTable.prototype.loadTableData = function(callback){
|
|
var _this = this;
|
|
_this.isVisible = false;
|
|
CBase.ajax($.extend(this.getTableData(), {headers : 1}), this.url, function(d){
|
|
_this.headers = d && d.header;
|
|
_this.populateSearchHeader(d.header);
|
|
_this.loadTableCallback(d);
|
|
if($.isFunction(callback)) callback();
|
|
if(_this.bInitEdit) _this.loadRecord();
|
|
});
|
|
};
|
|
CTable.prototype.filterTableData = function(pswitch, forceAjaxClose, callback, onComplete, bHeaders){
|
|
var _this = this, page = 1;
|
|
|
|
// Read searched data or use existing
|
|
if(pswitch){
|
|
page = _this.oPager.page;
|
|
}else{
|
|
_this.oPager.reset(false);
|
|
}
|
|
|
|
var oAjax = $.extend(_this.getTableData(), {
|
|
page : page,
|
|
filter :$.toJSON(_this.filterCheckIfAnyValueSet(CBase.getFields(_this.jqSearchPan))), // Check if any value in filter set
|
|
sortBy : _this.oPager.sortName.substring(2),
|
|
sortWay : _this.oPager.sortWay ? 1 : 0
|
|
});
|
|
|
|
if(_this.preserveChkedRows){
|
|
$.extend(oAjax, {
|
|
chkRows : $.toJSON(_this.getCheckedRows())
|
|
});
|
|
}
|
|
if($.isDefined(bHeaders) && bHeaders){
|
|
$.extend(oAjax, {
|
|
headers : 1
|
|
});
|
|
}
|
|
|
|
CBase.ajax($.extend(oAjax, _this.params), _this.url, function(d){
|
|
if($.isDefined(d.header))
|
|
_this.populateSearchHeader(d.header);
|
|
_this.loadTableCallback(d);
|
|
if($.isFunction(callback))
|
|
callback(d);
|
|
}, function(){
|
|
CBase.ajaxLoader.hide(($.isDefined(forceAjaxClose) ? forceAjaxClose : true));
|
|
if($.isFunction(onComplete))
|
|
onComplete();
|
|
});
|
|
};
|
|
CTable.prototype.getTableData = function(){
|
|
return {
|
|
action : "filter_table"
|
|
}
|
|
};
|
|
CTable.prototype.loadTableCallback = function(d){
|
|
this.bindTableActions(d);
|
|
};
|
|
CTable.prototype.tableObjectCallback = function(oTable){
|
|
|
|
};
|
|
CTable.prototype.tableShowCallback = function(oTable, d){
|
|
|
|
};
|
|
CTable.prototype.filterCheckIfAnyValueSet = function(oFilterValues){
|
|
var bSet = false;
|
|
for(var i in oFilterValues){
|
|
if(oFilterValues[i].length){
|
|
bSet = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(bSet)
|
|
this.jqSearchPan.find("#tclear").addClass("cc");
|
|
else
|
|
this.jqSearchPan.find("#tclear").removeClass("cc");
|
|
|
|
return oFilterValues;
|
|
};
|
|
CTable.prototype.bindTableActions = function(d){
|
|
|
|
var _this = this, oTable = $(d.data);
|
|
|
|
_this.jqTable.find("#cms-table-drop-marker").html("").append(oTable);
|
|
_this.oTable = _this.jqTable.find(".table-rows");
|
|
_this.tableObjectCallback(oTable, d);
|
|
|
|
// Set message class
|
|
if(d.header)
|
|
_this.oMessage = new FormMsg(".search > h2");
|
|
|
|
// Reposition actions
|
|
oTable.find("li.actions").each(function(){
|
|
$(this).siblings(":first").before($(this).clone(true));
|
|
$(this).remove();
|
|
});
|
|
|
|
|
|
// Style
|
|
oTable.find(".dxr:not(.thead):odd").addClass("odd");
|
|
oTable.find(".dxr:not(.thead)").each(function(){
|
|
$(this).find("li:even").addClass("even");
|
|
});
|
|
|
|
|
|
// Hoverer
|
|
oTable.find(".dxr:not(.thead)").bind({
|
|
mouseover : function(){
|
|
if(!_this.bDisableMouseHover) $(this).addClass("hover");
|
|
},
|
|
mouseout : function(){
|
|
$(this).removeClass("hover hovero");
|
|
}
|
|
});
|
|
|
|
// Bind mouse move action & clear hover class
|
|
_this.jqTable.mousemove(function(){
|
|
if(_this.bArrowKeysUsed){
|
|
_this.jqTable.find(".dxr.hover").removeClass("hover");
|
|
_this.bArrowKeysUsed = false;
|
|
_this.bDisableMouseHover = false;
|
|
}
|
|
});
|
|
|
|
// Scroll table row body area
|
|
if(_this.oTable.find(".thead.scroll-e").length){
|
|
var iScrollbar = _this.oTable.find(".tbody").width() - _this.oTable.find(".tbody").prop("scrollWidth");
|
|
if(iScrollbar > 0){
|
|
_this.oTable.find(".thead li:last-child").css({"padding-right" : iScrollbar});
|
|
}
|
|
}
|
|
|
|
// Bind checkboxes
|
|
_this.linkChkAllRows();
|
|
_this.oTable.find(".tbody .ncheckbox .chk").click(function(e){
|
|
e.stopPropagation();
|
|
if($(this).hasClass("chked")){
|
|
$(this).removeClass("chked");
|
|
|
|
// Unticks mark tick all rows marker
|
|
if(_this.oTable.find(".thead .chkall").hasClass("chkedall")){
|
|
_this.oTable.find(".thead").find(".chkedall, .chked").removeClass("chkedall chked");
|
|
}
|
|
}else{
|
|
$(this).addClass("chked");
|
|
|
|
// Ticks mark tick all rows marker
|
|
if(!_this.oTable.find(".thead .chkall").hasClass("chkedall")){
|
|
if(_this.oTable.find(".tbody > ul.dxr:not(.sample,.thead)").length == _this.oTable.find(".tbody > ul.dxr:not(.sample,.thead) li.rchk .chked").length){
|
|
_this.oTable.find(".thead .chkall").addClass("chkedall").find(".chk").addClass("chked");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
// Pager
|
|
_this.oPager.init($.isDefined(d.rlimit)?d.rlimit:2, $.isDefined(d.pcount)?d.pcount:0);
|
|
_this.oPager.bInfinite = ($.isDefined(d.inf) && d.inf ? true : false);
|
|
|
|
if(oTable.find(".noresults").length && _this.oPager.pages <= 1)
|
|
_this.jqTable.find(".rcount").html(" ");
|
|
|
|
_this.oPager.addPagerBottom(oTable);
|
|
|
|
|
|
|
|
// Setup default sort column
|
|
if(d.header){
|
|
var sortDefault = oTable.find(".thead li.sort:first");
|
|
if(sortDefault.length){
|
|
_this.oPager.sortName = sortDefault.attr("id");
|
|
_this.oPager.sortWay = (sortDefault.hasClass("sortDesc") ? false : true);
|
|
}
|
|
}
|
|
|
|
// Bind sort columns & reformat sort cols
|
|
oTable.find(".thead .csort").mouseup(function(){
|
|
if(!_this.disableSort){
|
|
if($(this).attr("id") == _this.oPager.sortName){
|
|
_this.oPager.sortWay = !_this.oPager.sortWay;
|
|
}else{
|
|
_this.oPager.sortName = $(this).attr("id");
|
|
_this.oPager.sortWay = true;
|
|
}
|
|
|
|
// Filter data
|
|
_this.resetSortWay();
|
|
_this.filterTableData(true);
|
|
}
|
|
});
|
|
_this.resetSortWay();
|
|
|
|
// Bind table column sort
|
|
if(jQuery().sortable){
|
|
var oldOrder = [];
|
|
oTable.find(".thead > li:not(#h_buttons,#h_checkbox)").each(function(){
|
|
oldOrder.push($(this).attr("id"));
|
|
});
|
|
oTable.find(".thead").sortable({
|
|
axis: 'x',
|
|
items: "> li:not(.actions, .rchk)",
|
|
stop: function(){
|
|
|
|
var data = {};
|
|
_this.disableSort = false;
|
|
var order = oTable.find(".thead").sortable('toArray');
|
|
|
|
// If data not in the same order send to save
|
|
if(order.toString() != oldOrder.toString()){
|
|
oldOrder = order.slice();
|
|
|
|
data[CBase.getObjectClass()] = order;
|
|
CBase.settings.addin = {table: 1};
|
|
CBase.settings.saveProperty(data, function(){
|
|
// Reload view
|
|
_this.filterTableData(true, false, false, false, true);
|
|
});
|
|
}
|
|
},
|
|
start: function(){
|
|
_this.disableSort = true;
|
|
}
|
|
}).disableSelection();
|
|
}
|
|
|
|
// Link actions & calculate top dropdown position
|
|
_this.linkTableActionBtn(oTable);
|
|
|
|
|
|
// Create button links for edit & delete
|
|
oTable.find(".actionbtn a.ledit, .actionbtn a.lview").each(function(){
|
|
$(this)
|
|
.attr("href", _this.url + "/" + $(this).attr("href"))
|
|
.click(function(event){
|
|
if(!event.ctrlKey && !event.metaKey && !event.altKey){
|
|
event.stopPropagation();
|
|
_this.loadRecord(false, $(this).attr("href"));
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
oTable.find(".actionbtn a#ldelete, a#idelete").click(function(){
|
|
_this.deleteSelectedRecords($(this));
|
|
});
|
|
oTable.find("a#bButtonNew, a#inew").click(function(){
|
|
_this.loadRecord(true);
|
|
});
|
|
oTable.find(".dxr:not(.thead) .chk.status, a#istatus").click(function(){
|
|
_this.changeSelectedRecordsStatus($(this).attr("id") == "istatus"?"h_status":$(this));
|
|
});
|
|
|
|
var jqReqT = $("a.req_time");
|
|
if(jqReqT.length)
|
|
jqReqT.html(time);
|
|
|
|
/// Hide content & append to fade in
|
|
if(!_this.bInitEdit){
|
|
_this.show();
|
|
_this.tableShowCallback(oTable, d);
|
|
}
|
|
};
|
|
// Reset sort way icons
|
|
CTable.prototype.setActionColWidth = function(){
|
|
var ww = $(window).width();
|
|
var width = $(".table-rows ul.dxr:not(.thead):first li.actions").width();
|
|
$(".table-rows .thead li.actions").width(width?width:"auto");
|
|
|
|
// Fixed row width
|
|
var jqTbl = $(".flTable");
|
|
if(jqTbl.length){
|
|
width = 0;
|
|
$(".table-rows ul.dxr:not(.thead):first li").each(function(){
|
|
width += $(this).width() + 1;
|
|
});
|
|
|
|
width += 42 + 5; // Inner margin + 5px overhead
|
|
if(ww < width){
|
|
jqTbl.addClass("ftable");
|
|
$(".table-data, .form-data").css({
|
|
width : width,
|
|
"margin-right": -5
|
|
});
|
|
}
|
|
}
|
|
};
|
|
// Reset sort way icons
|
|
CTable.prototype.resetSortWay = function(){
|
|
var _this = this;
|
|
if(_this.oPager.sortName){
|
|
_this.jqTable.find(".thead").find(".sort, .sortDesc").removeClass("sort sortDesc");
|
|
_this.jqTable.find(".thead #" + _this.oPager.sortName).addClass((_this.oPager.sortWay?"sort":"sortDesc"));
|
|
}
|
|
};
|
|
// Ajax load populate blank buttons
|
|
CTable.prototype.populateSearchHeader = function(h, oDocPanel){
|
|
var _this = this;
|
|
|
|
if(!$.isDefined(h))
|
|
return false;
|
|
|
|
var bShowSearch = $("#tSearch:visible").length;
|
|
if($.isDefined(oDocPanel))
|
|
_this.jqSearchPan = oDocPanel.find(".search");
|
|
else
|
|
_this.jqSearchPan = $(this.containerId + ".search");
|
|
|
|
// Append data
|
|
_this.jqSearchPan.html(h);
|
|
_this.jqSearchPan.find("label, .dropBox span, .dropBox ul li").disableSelection();
|
|
|
|
// Show search when old one is visible
|
|
if(bShowSearch)
|
|
_this.jqSearchPan.find("#tSearch").show();
|
|
|
|
// Bind default table buttons like - search, clear search
|
|
_this.jqSearchPan.find("#tsearch").click(function(){
|
|
_this.filterTableData(false);
|
|
});
|
|
_this.jqSearchPan.find("#tclear").click(function(){
|
|
_this.clearTableFilter();
|
|
_this.filterTableData(false);
|
|
});
|
|
_this.jqSearchPan.find("a.close").click(function(){
|
|
$("#tSearch").slideUp("fast", function(){
|
|
if(_this.jqSearchPan.find("a.cc").length){
|
|
_this.clearTableFilter();
|
|
_this.filterTableData(false);
|
|
}
|
|
});
|
|
});
|
|
_this.jqSearchPan.find("#btnSearch").click(function(){
|
|
var jqSearch = $("#tSearch");
|
|
if(jqSearch.is(":visible"))
|
|
jqSearch.slideUp("fast");
|
|
else
|
|
jqSearch.slideDown("fast");
|
|
});
|
|
|
|
// Bind events
|
|
if(_this.jqSearchPan.find("li.dropBox").length){
|
|
_this.jqSearchPan.find("li.dropBox").bind({
|
|
click : function(e){
|
|
var _subThis = $(this);
|
|
|
|
if(!_subThis.hasClass("blur"))
|
|
_subThis.closest(".search").find("input:focus").blur();
|
|
_subThis.removeClass("blur");
|
|
|
|
e.stopImmediatePropagation();
|
|
|
|
if(_subThis.hasClass("ddAct")){
|
|
_subThis.find("> ul").stop(true, true).slideUp(100, function(){
|
|
_subThis.removeClass("ddAct");
|
|
});
|
|
}else{
|
|
_subThis.addClass("ddAct");
|
|
|
|
// Hide other open drop downs
|
|
var dd = $(".ddAct").not(_subThis);
|
|
if(dd.find("> ul:visible").length)
|
|
dd.click();
|
|
|
|
_subThis.find("> ul").stop(true, true).slideDown("fast");
|
|
}
|
|
}
|
|
}).find("ul li").click(function(e){
|
|
var el = $(this);
|
|
var ip = el.closest(".dropBox").find("input:hidden");
|
|
if(ip.val() == el.attr("id")){
|
|
e.stopImmediatePropagation();
|
|
return false;
|
|
}
|
|
|
|
el.closest(".dropBox").find("span").html(el.html());
|
|
ip.val(el.attr("id"));
|
|
|
|
_this.filterTableData(false);
|
|
});
|
|
|
|
// Bind document mouse up
|
|
$(window).click(function(e){
|
|
var dd = $(".ddAct");
|
|
if(dd.find("> ul:visible").length && !$(e.target).not(dd).hasClass("dropBox")){
|
|
dd.addClass("blur").click();
|
|
}
|
|
});
|
|
}
|
|
|
|
_this.jqSearchPan.find("input:text").bind({
|
|
keyup : function(event){
|
|
if(event.which == CBase.iKeys.ENTER){
|
|
_this.filterTableData(false);
|
|
}else if(event.which == CBase.iKeys.ESC){
|
|
$(this).val("").blur();
|
|
if($(this).hasClass("hasDatepicker"))
|
|
$(this).datepicker("hide");
|
|
$(this).next().fadeIn("fast").closest("li").removeClass("csearchAct");
|
|
}
|
|
},
|
|
focus : function(){
|
|
$(this)
|
|
.next().hide()
|
|
.closest("li").addClass("csearchAct");
|
|
},
|
|
blur : function(){
|
|
if(!$(this).val().length){
|
|
|
|
var dpw = false;
|
|
if($(this).hasClass("hasDatepicker"))
|
|
dpw = $(this).datepicker("widget").is(":visible");
|
|
|
|
if(!dpw) $(this).next().fadeIn("fast").closest("li").removeClass("csearchAct");
|
|
}
|
|
}
|
|
});
|
|
|
|
if(jQuery.datepicker)
|
|
_this.jqSearchPan.find("input:text.date, li.date > div > input:text").datepicker({
|
|
dateFormat: 'dd/mm/yy',
|
|
onClose: function(e, x){
|
|
if(e && e.length)
|
|
x.input.next().hide().closest("li").addClass("csearchAct");
|
|
else
|
|
x.input.next().fadeIn("fast").closest("li").removeClass("csearchAct");
|
|
}
|
|
});
|
|
|
|
_this.setActionColWidth();
|
|
|
|
};
|
|
CTable.prototype.linkTableActionBtn = function(obj){
|
|
|
|
var _this = this;
|
|
var jqActions = _this.jqTable.find(".table-actions");
|
|
|
|
if(jqActions.length){
|
|
_this.iMenuTimeout = 0;
|
|
var jqActionBtn = _this.jqTable.find(".thead .actions a.dd");
|
|
jqActionBtn.append(jqActions);
|
|
|
|
// iDevice mode
|
|
|
|
jqActionBtn.bind({
|
|
click : function(e){
|
|
e.stopPropagation();
|
|
var jqParLi = $(this).closest("li");
|
|
var clk = jqParLi.hasClass("click"), act = jqParLi.hasClass("active");
|
|
if(!clk && act || !clk && !act){
|
|
jqParLi.addClass("click");
|
|
if(jqActions.is(":hidden")){
|
|
jqParLi.addClass("active");
|
|
_this.recTableActionContainerCordinates(jqActions);
|
|
jqActions.stop(true, true).fadeIn("fast");
|
|
}
|
|
}else{
|
|
if(CBase.browser.idevice)
|
|
jqParLi.removeClass("click active");
|
|
else
|
|
jqParLi.removeClass("click");
|
|
if(jqActions.is(":visible")) jqActions.stop(true, true).fadeOut("fast");
|
|
}
|
|
}
|
|
});
|
|
|
|
// Default mode
|
|
if(!CBase.browser.idevice) {
|
|
jqActionBtn.bind({
|
|
mouseenter : function(e){
|
|
e.stopPropagation();
|
|
$(this).closest("li").addClass("active");
|
|
if(_this.iMenuTimeout) window.clearTimeout(_this.iMenuTimeout);
|
|
|
|
_this.recTableActionContainerCordinates(jqActions);
|
|
_this.iMenuTimeout = window.setTimeout(function(){
|
|
if(jqActions.is(":hidden")) jqActions.stop(true, true).fadeIn("fast");
|
|
}, 100);
|
|
},
|
|
mouseleave : function(e){
|
|
var jqElement = $(this).closest("li");
|
|
if(_this.iMenuTimeout) window.clearTimeout(_this.iMenuTimeout);
|
|
_this.iMenuTimeout = window.setTimeout(function(){
|
|
jqElement.removeClass("active click");
|
|
if(jqActions.is(":visible")) jqActions.stop(true, true).fadeOut("fast");
|
|
}, 200);
|
|
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
};
|
|
CTable.prototype.recTableActionContainerCordinates = function(jqActions){
|
|
var jqHeader = jqActions.closest(".thead");
|
|
jqActions.css({"top" : jqHeader.position().top + jqHeader.height() + 1 + "px", "right" : jqHeader.position().left + "px"});
|
|
};
|
|
CTable.prototype.linkChkAllRows = function(){
|
|
var _this = this;
|
|
_this.oTable.find("li.chkall:first").click(function(e){
|
|
e.stopImmediatePropagation();
|
|
var val = ($(this).hasClass("chkedall")?false:true);
|
|
if(!val){
|
|
$(this).removeClass("chkedall").find(".chk").removeClass("chked");
|
|
_this.oTable.find(".tbody li.rchk .chk").removeClass("chked");
|
|
}else{
|
|
$(this).addClass("chkedall").find(".chk").addClass("chked");
|
|
_this.oTable.find(".tbody li.rchk .chk").addClass("chked");
|
|
}
|
|
});
|
|
};
|
|
CTable.prototype.clearTableFilter = function(){
|
|
this.jqSearchPan.find("input:text").val("")
|
|
.next().show()
|
|
.parent().parent().removeClass("csearchAct");
|
|
this.jqSearchPan.find("li.dropBox").each(function(){
|
|
var def = $(this).find("li.default, li[id='']").first();
|
|
$(this)
|
|
.find("span").html(def.html())
|
|
.next().val(def.attr("id"));
|
|
});
|
|
};
|
|
CTable.prototype.getSelectedTableRows = function(obj){
|
|
var i = 1, rows = {}, _this = this;
|
|
// Send individual object to delete
|
|
if($.isDefined(obj)){
|
|
var rid = $(obj).closest("ul").attr("id");
|
|
if(rid)
|
|
rows[i++] = rid;
|
|
}else{
|
|
// Get all marked rows & send for delete
|
|
_this.oTable.find("ul.dxr:not(.thead) .rchk .chked").each(function(){
|
|
var rid = $(this).closest("ul").attr("id");
|
|
if(rid)
|
|
rows[i++] = rid;
|
|
});
|
|
}
|
|
return rows;
|
|
};
|
|
// Send table ajax action
|
|
CTable.prototype.sendAjaxAction = function(sAction, oParams, callback){
|
|
if(Object.keys(oParams).length){
|
|
var params = {
|
|
action : sAction,
|
|
fields : $.toJSON(oParams)
|
|
};
|
|
|
|
CBase.ajax(params, this.url, function(d){
|
|
if($.isFunction(callback)) callback(d);
|
|
});
|
|
}
|
|
};
|
|
// Send table ajax action
|
|
CTable.prototype.sendAjaxActionAdvanced = function(oData, callback){
|
|
if(Object.keys(oData).length && $.isDefined(oData.action)){
|
|
CBase.ajax(oData, this.url, function(d){
|
|
if($.isFunction(callback)) callback(d);
|
|
});
|
|
}
|
|
};
|
|
// Delete selected table records
|
|
CTable.prototype.deleteSelectedRecords = function(button){
|
|
var oRows, _this = this;
|
|
var idelete = (button.attr("id") == "idelete");
|
|
|
|
if(button.attr("id") == "idelete")
|
|
oRows = _this.getSelectedTableRows();
|
|
else
|
|
oRows = _this.getSelectedTableRows(button);
|
|
if(Object.keys(oRows).length){
|
|
CBase.oDialog.show({
|
|
closeBtn: true,
|
|
title : $.isDefined(CBase.gM.delTitle)?CBase.gM.delTitle:"...",
|
|
message :$.isDefined(CBase.gM.delMessage)?CBase.gM.delMessage:"-",
|
|
buttons : {
|
|
1 : {
|
|
lbl : $.isDefined(CBase.gM.buttonYes)?CBase.gM.buttonYes:"Ok",
|
|
id : "buttonYes",
|
|
click : function(){
|
|
CBase.oDialog.hide();
|
|
_this.sendAjaxAction("deleteRecords", oRows, function(d){
|
|
if(d && $.isDefined(d.jsonok)){
|
|
_this.filterTableData(true);
|
|
_this.oMessage.show(false, true, CBase.getMessageTranslation("Record successfully deleted"), "");
|
|
}else if(d && $.isDefined(d.error))
|
|
_this.oMessage.show(true, false, CBase.getMessageTranslation("An error occurred"), "");
|
|
});
|
|
}
|
|
},
|
|
2 : {
|
|
lbl :$.isDefined(CBase.gM.buttonCancel)?CBase.gM.buttonCancel:"Cancel",
|
|
id : "buttonNo",
|
|
click : function(){
|
|
CBase.oDialog.hide();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
// Change selected table records status
|
|
CTable.prototype.changeSelectedRecordsStatus = function(object){
|
|
var oRows, _this = this, $bField = "";
|
|
if($.isDefined(object) && $.isObject(object)){
|
|
oRows = _this.getSelectedTableRows(object);
|
|
var index = $(object).closest("li").index()+1;
|
|
$bField = object.closest(".table-rows").find(".thead > li:nth-child("+index+")").attr("id");
|
|
}else{
|
|
$bField = object;
|
|
oRows = _this.getSelectedTableRows();
|
|
}
|
|
|
|
var oParams = {
|
|
action : "changeRecordsStatus",
|
|
baseField : $bField,
|
|
fields : $.toJSON(oRows)
|
|
};
|
|
|
|
if(Object.keys(oRows).length){
|
|
_this.sendAjaxActionAdvanced(oParams, function(d){
|
|
if(d && $.isDefined(d.jsonok))
|
|
_this.filterTableData(true);
|
|
else if(d && $.isDefined(d.error))
|
|
_this.oMessage.show(true, true, false, "");
|
|
});
|
|
}
|
|
};
|
|
// Edit / add new records
|
|
CTable.prototype.loadRecord = function(empty, url){
|
|
var _this = this;
|
|
if($.isDefined(empty) && empty)
|
|
_this.oBlank.url = _this.addNewUrl;
|
|
else
|
|
if($.isDefined(url))
|
|
_this.oBlank.url = url;
|
|
|
|
_this.oBlank.loadBlankView();
|
|
};
|
|
CTable.prototype.getCheckedRows = function(){
|
|
var _this = this;
|
|
|
|
// Get all marked rows & mark as checked
|
|
_this.oTable.find("ul.dxr:not(.thead) .rchk .chk").each(function(){
|
|
var rid = $(this).closest("ul").attr("id");
|
|
if($(this).hasClass("chked"))
|
|
_this.chkedRows[rid] = 1;
|
|
else
|
|
delete _this.chkedRows[rid];
|
|
});
|
|
|
|
return _this.chkedRows;
|
|
};
|
|
CTable.prototype.resetCheckedRows = function(newRows){
|
|
var _this = this;
|
|
|
|
if(typeof newRows !== "undefined")
|
|
_this.chkedRows = newRows;
|
|
};
|
|
// Bind table action keys - shortcuts
|
|
CTable.prototype.bindTableActionKeys = function(){
|
|
|
|
var _this = this;
|
|
$(document).bind('keydown', function(event){
|
|
if(CBase.os.win || CBase.os.mac || CBase.os.linux){
|
|
|
|
if(!event.altKey){
|
|
// Set control button
|
|
var ctrl = (event.ctrlKey || CBase.os.mac && event.metaKey);
|
|
|
|
// Ctrl + s - save form
|
|
if(event.which === CBase.iKeys.KEY_S && ctrl){
|
|
if(_this.oBlank.isVisible){
|
|
event.preventDefault();
|
|
_this.oBlank.saveBlankView();
|
|
return false;
|
|
}
|
|
}
|
|
// Ctrl + f - search form
|
|
if(event.which === CBase.iKeys.KEY_F && ctrl){
|
|
var jqSearch = _this.jqSearchPan.find("#tSearch");
|
|
if(jqSearch.length && !jqSearch.is(":visible") && _this.jqSearchPan.is(":visible")){
|
|
event.preventDefault();
|
|
jqSearch.slideDown("fast");
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!$("input:focus, textarea:focus").length){
|
|
|
|
// Edit record on hover & space
|
|
if(event.which === CBase.iKeys.SPACE){
|
|
event.preventDefault();
|
|
if(_this.jqTable.is(":visible")){
|
|
var href = _this.jqTable.find(".dxr.hover:not(.thead)").find("#ledit,#lview").first();
|
|
if(href.length)
|
|
_this.loadRecord(false, href.attr("href"));
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(event.which === CBase.iKeys.BACKSPACE){
|
|
event.preventDefault();
|
|
|
|
// Close record edit mode on click
|
|
var button = _this.oBlank.jqBlank.find("#tback, #fcancel").first();
|
|
if(button.length) button.click();
|
|
return false;
|
|
}
|
|
|
|
var jqHover = {};
|
|
var jqHtml = $("html");
|
|
if(event.which === CBase.iKeys.ARROW_UP){
|
|
event.preventDefault();
|
|
jqHover = _this.jqTable.find(".dxr.hover:not(.thead):first");
|
|
if(jqHover.length && jqHover.prev().length && jqHover.prev().hasClass("dxr")) jqHover = jqHover.prev(); // Prev after selection
|
|
if(!jqHover.length) jqHover = $(document.elementFromPoint((CBase.xPos - jqHtml.scrollLeft()), (CBase.yPos - jqHtml.scrollTop()))).closest(".dxr"); // Last cursor position
|
|
if(!jqHover.length) jqHover = _this.jqTable.find(".table-rows .tbody > ul.dxr:last"); // Last row of table
|
|
|
|
_this.bArrowKeysUsed = true;
|
|
if(jqHover.length){
|
|
_this.bDisableMouseHover = true;
|
|
CBase.scrollToSeeElement(jqHover);
|
|
jqHover.addClass("hover");
|
|
jqHover.next().removeClass("hover");
|
|
}
|
|
}
|
|
|
|
if(event.which === CBase.iKeys.ARROW_DOWN){
|
|
event.preventDefault();
|
|
jqHover = _this.jqTable.find(".dxr.hover:not(.thead):first");
|
|
if(jqHover.length && jqHover.next().length && jqHover.next().hasClass("dxr")) jqHover = jqHover.next(); // Next after selection
|
|
if(!jqHover.length) jqHover = $(document.elementFromPoint((CBase.xPos - jqHtml.scrollLeft()), (CBase.yPos - jqHtml.scrollTop()))).closest(".dxr"); // Last cursor position
|
|
if(!jqHover.length) jqHover = _this.jqTable.find(".table-rows .tbody > ul.dxr:first"); // First row of table
|
|
|
|
_this.bArrowKeysUsed = true;
|
|
if(jqHover.length){
|
|
_this.bDisableMouseHover = true;
|
|
CBase.scrollToSeeElement(jqHover);
|
|
jqHover.prev().removeClass("hover");
|
|
jqHover.addClass("hover");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
return CTable;
|
|
})();
|
|
|
|
}).call(this);
|
|
|