Blame | Letzte Änderung | Log anzeigen | RSS feed
/***Wrapper/Helper Class for datagrid based on jQuery Datatable Plugin***/var Datatable = function() {var tableOptions; // main optionsvar dataTable; // datatable objectvar table; // actual table jquery objectvar tableContainer; // actual table container objectvar tableWrapper; // actual table wrapper jquery objectvar tableInitialized = false;var ajaxParams = {}; // set filter modevar the;var countSelectedRecords = function() {var selected = $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();var text = tableOptions.dataTable.language.metronicGroupActions;if (selected > 0) {$('.table-group-actions > span', tableWrapper).text(text.replace("_TOTAL_", selected));} else {$('.table-group-actions > span', tableWrapper).text("");}};return {//main function to initiate the moduleinit: function(options) {if (!$().dataTable) {return;}the = this;// default settingsoptions = $.extend(true, {src: "", // actual tablefilterApplyAction: "filter",filterCancelAction: "filter_cancel",resetGroupActionInputOnSuccess: true,loadingMessage: 'Loading...',dataTable: {"dom": "<'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'<'table-group-actions pull-right'>>r><'table-responsive't><'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'>>", // datatable layout"pageLength": 10, // default records per page"language": { // language settings// metronic spesific"metronicGroupActions": "_TOTAL_ records selected: ","metronicAjaxRequestGeneralError": "Could not complete request. Please check your internet connection",// data tables spesific"lengthMenu": "<span class='seperator'>|</span>View _MENU_ records","info": "<span class='seperator'>|</span>Found total _TOTAL_ records","infoEmpty": "No records found to show","emptyTable": "No data available in table","zeroRecords": "No matching records found","paginate": {"previous": "Prev","next": "Next","last": "Last","first": "First","page": "Page","pageOf": "of"}},"orderCellsTop": true,"columnDefs": [{ // define columns sorting options(by default all columns are sortable extept the first checkbox column)'orderable': false,'targets': [0]}],"pagingType": "bootstrap_extended", // pagination type(bootstrap, bootstrap_full_number or bootstrap_extended)"autoWidth": false, // disable fixed width and enable fluid table"processing": false, // enable/disable display message box on record load"serverSide": true, // enable/disable server side ajax loading"ajax": { // define ajax settings"url": "", // ajax URL"type": "POST", // request type"timeout": 20000,"data": function(data) { // add request parameters before submit$.each(ajaxParams, function(key, value) {data[key] = value;});App.blockUI({message: tableOptions.loadingMessage,target: tableContainer,overlayColor: 'none',cenrerY: true,boxed: true});},"dataSrc": function(res) { // Manipulate the data returned from the serverif (res.customActionMessage) {App.alert({type: (res.customActionStatus == 'OK' ? 'success' : 'danger'),icon: (res.customActionStatus == 'OK' ? 'check' : 'warning'),message: res.customActionMessage,container: tableWrapper,place: 'prepend'});}if (res.customActionStatus) {if (tableOptions.resetGroupActionInputOnSuccess) {$('.table-group-action-input', tableWrapper).val("");}}if ($('.group-checkable', table).size() === 1) {$('.group-checkable', table).attr("checked", false);}if (tableOptions.onSuccess) {tableOptions.onSuccess.call(undefined, the, res);}App.unblockUI(tableContainer);return res.data;},"error": function() { // handle general connection errorsif (tableOptions.onError) {tableOptions.onError.call(undefined, the);}App.alert({type: 'danger',icon: 'warning',message: tableOptions.dataTable.language.metronicAjaxRequestGeneralError,container: tableWrapper,place: 'prepend'});App.unblockUI(tableContainer);}},"drawCallback": function(oSettings) { // run some code on table redrawif (tableInitialized === false) { // check if table has been initializedtableInitialized = true; // set table initializedtable.show(); // display table}countSelectedRecords(); // reset selected records indicator// callback for ajax data loadif (tableOptions.onDataLoad) {tableOptions.onDataLoad.call(undefined, the);}}}}, options);tableOptions = options;// create table's jquery objecttable = $(options.src);tableContainer = table.parents(".table-container");// apply the special class that used to restyle the default datatablevar tmp = $.fn.dataTableExt.oStdClasses;$.fn.dataTableExt.oStdClasses.sWrapper = $.fn.dataTableExt.oStdClasses.sWrapper + " dataTables_extended_wrapper";$.fn.dataTableExt.oStdClasses.sFilterInput = "form-control input-xs input-sm input-inline";$.fn.dataTableExt.oStdClasses.sLengthSelect = "form-control input-xs input-sm input-inline";// initialize a datatabledataTable = table.DataTable(options.dataTable);// revert back to default$.fn.dataTableExt.oStdClasses.sWrapper = tmp.sWrapper;$.fn.dataTableExt.oStdClasses.sFilterInput = tmp.sFilterInput;$.fn.dataTableExt.oStdClasses.sLengthSelect = tmp.sLengthSelect;// get table wrappertableWrapper = table.parents('.dataTables_wrapper');// build table group actions panelif ($('.table-actions-wrapper', tableContainer).size() === 1) {$('.table-group-actions', tableWrapper).html($('.table-actions-wrapper', tableContainer).html()); // place the panel inside the wrapper$('.table-actions-wrapper', tableContainer).remove(); // remove the template container}// handle group checkboxes check/uncheck$('.group-checkable', table).change(function() {var set = table.find('tbody > tr > td:nth-child(1) input[type="checkbox"]');var checked = $(this).prop("checked");$(set).each(function() {$(this).prop("checked", checked);});countSelectedRecords();});// handle row's checkbox clicktable.on('change', 'tbody > tr > td:nth-child(1) input[type="checkbox"]', function() {countSelectedRecords();});// handle filter submit button clicktable.on('click', '.filter-submit', function(e) {e.preventDefault();the.submitFilter();});// handle filter cancel button clicktable.on('click', '.filter-cancel', function(e) {e.preventDefault();the.resetFilter();});},submitFilter: function() {the.setAjaxParam("action", tableOptions.filterApplyAction);// get all typeable inputs$('textarea.form-filter, select.form-filter, input.form-filter:not([type="radio"],[type="checkbox"])', table).each(function() {the.setAjaxParam($(this).attr("name"), $(this).val());});// get all checkboxes$('input.form-filter[type="checkbox"]:checked', table).each(function() {the.addAjaxParam($(this).attr("name"), $(this).val());});// get all radio buttons$('input.form-filter[type="radio"]:checked', table).each(function() {the.setAjaxParam($(this).attr("name"), $(this).val());});dataTable.ajax.reload();},resetFilter: function() {$('textarea.form-filter, select.form-filter, input.form-filter', table).each(function() {$(this).val("");});$('input.form-filter[type="checkbox"]', table).each(function() {$(this).attr("checked", false);});the.clearAjaxParams();the.addAjaxParam("action", tableOptions.filterCancelAction);dataTable.ajax.reload();},getSelectedRowsCount: function() {return $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();},getSelectedRows: function() {var rows = [];$('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).each(function() {rows.push($(this).val());});return rows;},setAjaxParam: function(name, value) {ajaxParams[name] = value;},addAjaxParam: function(name, value) {if (!ajaxParams[name]) {ajaxParams[name] = [];}skip = false;for (var i = 0; i < (ajaxParams[name]).length; i++) { // check for duplicatesif (ajaxParams[name][i] === value) {skip = true;}}if (skip === false) {ajaxParams[name].push(value);}},clearAjaxParams: function(name, value) {ajaxParams = {};},getDataTable: function() {return dataTable;},getTableWrapper: function() {return tableWrapper;},gettableContainer: function() {return tableContainer;},getTable: function() {return table;}};};