vtenext/include/js/SimpleListView.js
2021-04-28 20:10:26 +02:00

267 lines
7.6 KiB
JavaScript

/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
/* crmv@43611 crmv@43864 crmv@56603 */
SLV = {
search_submitted: [],
loading: [],
show_activity: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid);
listCont.find('#slv_busy_indicator').show();
listCont.find('#SLVGreyLayer').css({
'width': listCont.width(),
'height': listCont.height(),
}).show();
},
hide_activity: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid);
listCont.find('#SLVGreyLayer').hide();
listCont.find('#slv_busy_indicator').hide();
},
load: function(listid, module, viewid, searchstr, page, sortcol, sortdir) {
var me = this,
listCont = jQuery('#SLVContainer_'+listid),
search_plc = listCont.find('#search_placeholder').val(),
extraInputs = me.get_extra_inputs(listid),
selids = me.get_selected_ids(listid) || [];
if (!viewid) viewid = '';
if (!searchstr || searchstr == search_plc) searchstr = '';
if (!page) page = 1;
if (!sortcol) sortcol = '';
if (!sortdir) sortdir = '';
var postParams = {
'listid' : listid,
'mod' : module,
'viewid' : viewid,
'searchstr' : searchstr,
'page' : page,
'sortcol' : sortcol,
'sortdir' : sortdir,
'selected_ids' : selids.join(':'),
};
jQuery.extend(postParams, extraInputs);
me.show_activity(listid);
me.loading[listid] = true;
jQuery.ajax({
url: 'index.php?module=Utilities&action=UtilitiesAjax&file=SimpleListViewAjax',
type: 'POST',
data: jQuery.param(postParams),
complete: function() {
me.hide_activity(listid);
me.loading[listid] = false;
},
success: function(data) {
listCont.hide();
listCont.html(data).fadeIn('fast');
}
});
},
get_module: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
module = listCont.find('#mod').val();
return module;
},
add_selected: function(listid) {
var crmids = this.get_selected_ids(listid);
// now crmids contains a list of ids
// you can call this function from your js to optain the id list
return crmids;
},
get_extra_inputs: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
extraInputs = listCont.find('.extraInputs input'),
ret = {};
extraInputs.each(function(index, item) {
ret[item.name] = item.value;
});
return ret;
},
change_filter: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
module = listCont.find('#mod').val(),
viewid = listCont.find('#viewname').val(),
search = listCont.find('#basic_search_text').val();
// removed, so it works like vte 4, remembering the selection even when changing filter
//this.remove_all_selected_ids(listid);
return this.load(listid, module, viewid, search);
},
change_sorting: function(listid, sortcol, sortdir) {
if (!sortdir) sortdir = 'ASC';
var listCont = jQuery('#SLVContainer_'+listid),
module = listCont.find('#mod').val(),
viewid = listCont.find('#viewname').val(),
search = listCont.find('#basic_search_text').val();
return this.load(listid, module, viewid, search, 1, sortcol, sortdir);
},
go_to_page: function(listid, page) {
var listCont = jQuery('#SLVContainer_'+listid),
module = listCont.find('#mod').val(),
viewid = listCont.find('#viewname').val(),
currPage = parseInt(listCont.find('#navigationPageOrig').val()),
totPages = parseInt(listCont.find('#navigationPageTotal').val()),
search_plc = listCont.find('#search_placeholder').val(),
search = listCont.find('#basic_search_text').val();
// crmv@107991
var sortcol = listCont.find('input[name=slv_sortcol]').val();
var sortdir = listCont.find('input[name=slv_sortdir]').val();
// crmv@107991e
if (page === undefined || page === null || page === '') {
// get the page from, the text box
page = parseInt(listCont.find('#navigationPage').val());
}
page = Math.max(1, Math.min(parseInt(page), totPages));
if (page == currPage) return false;
if (search == search_plc) search = '';
this.load(listid, module, viewid, search, page, sortcol, sortdir); // crmv@107991
return false;
},
go_to_next_page: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
currPage = parseInt(listCont.find('#navigationPageOrig').val());
return this.go_to_page(listid, currPage + 1);
},
go_to_prev_page: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
currPage = parseInt(listCont.find('#navigationPageOrig').val());
return this.go_to_page(listid, currPage - 1);
},
search: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
module = listCont.find('#mod').val(),
viewid = listCont.find('#viewname').val(),
search = listCont.find('#basic_search_text').val();
this.load(listid, module, viewid, search);
this.search_submitted[listid] = true;
return false;
},
clear_search: function(listid) {
var listCont = jQuery('#SLVContainer_'+listid),
jelem = listCont.find('#basic_search_text'),
rest = jQuery.data(jelem.get(), 'restored');
if (rest === undefined || rest == true) {
jelem.val('');
listCont.find('#basic_search_icn_canc').show();
jQuery.data(jelem.get(), 'restored', false);
}
return false;
},
restore_search: function(listid, text) {
var listCont = jQuery('#SLVContainer_'+listid),
jelem = listCont.find('#basic_search_text');
if (this.loading[listid] === true) return false;
if (jelem.val() == '') {
jQuery('#basic_search_icn_canc').hide();
jQuery.data(jelem.get(), 'restored', true);
if (this.search_submitted[listid] === true) {
this.search(listid);
}
jelem.val(text);
}
return false;
},
cancel_search: function(listid, text) {
var listCont = jQuery('#SLVContainer_'+listid),
jelem = listCont.find('#basic_search_text');
listCont.find('#basic_search_text').val('');
this.restore_search(listid, text);
if (this.search_submitted[listid] === true) {
//this.change_filter(listid);
this.search_submitted[listid] = false;
}
return false;
},
// this function should be replaced with custom handler
select: function(listid, module, crmid, entityname) {
//window.alert('click on '+crmid);
},
create_new: function(listid) {
//window.alert('create new record');
},
get_selected_ids: function(listid) {
var cont = jQuery('#SLVPersistentCont_'+listid).find('input[name=selected_ids]');
if (cont.length == 0) var idlist = []; //crmv@58410
else var idlist = cont.val().split(':') || [];
if (idlist.length == 1 && !idlist[0]) idlist = [];
return idlist;
},
add_selected_id: function(listid, crmid) {
var cont = jQuery('#SLVPersistentCont_'+listid).find('input[name=selected_ids]'),
idlist = this.get_selected_ids(listid);
if (idlist.indexOf(crmid) == -1) {
idlist.push(crmid);
cont.val(idlist.join(':'));
}
},
remove_selected_id: function(listid, crmid) {
var cont = jQuery('#SLVPersistentCont_'+listid).find('input[name=selected_ids]'),
idlist = this.get_selected_ids(listid),
idx = idlist.indexOf(crmid);
if (idx >= 0) {
idlist.splice(idx, 1);
cont.val(idlist.join(':'));
}
},
remove_all_selected_ids: function(listid) {
var cont = jQuery('#SLVPersistentCont_'+listid).find('input[name=selected_ids]');
cont.val('');
},
click_checkbox: function(listid, crmid, self) {
if (self.checked) {
this.add_selected_id(listid, crmid);
} else {
this.remove_selected_id(listid, crmid);
}
},
click_tdcheckbox: function(listid, crmid, self) {
jQuery(self).find('input').prop('checked', !jQuery('#list_cbox_'+crmid).prop('checked'));
this.click_checkbox(listid, crmid, jQuery('#list_cbox_'+crmid).get(0));
},
};