UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

178 lines (138 loc) 6.13 kB
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } import $ from '../../shared/dom7'; import { extend, deleteProps } from '../../shared/utils'; import Framework7Class from '../../shared/class'; var DataTable = /*#__PURE__*/function (_Framework7Class) { _inheritsLoose(DataTable, _Framework7Class); function DataTable(app, params) { var _this; if (params === void 0) { params = {}; } _this = _Framework7Class.call(this, params, [app]) || this; var table = _assertThisInitialized(_this); var defaults = {}; // Extend defaults with modules params table.useModulesParams(defaults); table.params = extend(defaults, params); // El var $el = $(table.params.el); if ($el.length === 0) return undefined || _assertThisInitialized(_this); table.$el = $el; table.el = $el[0]; if (table.$el[0].f7DataTable) { var instance = table.$el[0].f7DataTable; table.destroy(); return instance || _assertThisInitialized(_this); } table.$el[0].f7DataTable = table; extend(table, { collapsible: $el.hasClass('data-table-collapsible'), // Headers $headerEl: $el.find('.data-table-header'), $headerSelectedEl: $el.find('.data-table-header-selected') }); // Events function handleChange(e) { if (e.detail && e.detail.sentByF7DataTable) { // Scripted event, don't do anything return; } var $inputEl = $(this); var checked = $inputEl[0].checked; var columnIndex = $inputEl.parents('td,th').index(); if ($inputEl.parents('thead').length > 0) { if (columnIndex === 0) { $el.find('tbody tr')[checked ? 'addClass' : 'removeClass']('data-table-row-selected'); } $el.find("tbody tr td:nth-child(" + (columnIndex + 1) + ") input").prop('checked', checked).trigger('change', { sentByF7DataTable: true }); $inputEl.prop('indeterminate', false); } else { if (columnIndex === 0) { $inputEl.parents('tr')[checked ? 'addClass' : 'removeClass']('data-table-row-selected'); } var checkedRows = $el.find("tbody .checkbox-cell:nth-child(" + (columnIndex + 1) + ") input[type=\"checkbox\"]:checked").length; var totalRows = $el.find('tbody tr').length; var $headCheckboxEl = $el.find("thead .checkbox-cell:nth-child(" + (columnIndex + 1) + ") input[type=\"checkbox\"]"); if (!checked) { $headCheckboxEl.prop('checked', false); } else if (checkedRows === totalRows) { $headCheckboxEl.prop('checked', true).trigger('change', { sentByF7DataTable: true }); } $headCheckboxEl.prop('indeterminate', checkedRows > 0 && checkedRows < totalRows); } table.checkSelectedHeader(); } function handleSortableClick() { var $cellEl = $(this); var isActive = $cellEl.hasClass('sortable-cell-active'); var currentSort = $cellEl.hasClass('sortable-desc') ? 'desc' : 'asc'; var newSort; if (isActive) { newSort = currentSort === 'desc' ? 'asc' : 'desc'; $cellEl.removeClass('sortable-desc sortable-asc').addClass("sortable-" + newSort); } else { $el.find('thead .sortable-cell-active').removeClass('sortable-cell-active'); $cellEl.addClass('sortable-cell-active'); newSort = currentSort; } $cellEl.trigger('datatable:sort', newSort); table.emit('local::sort dataTableSort', table, newSort); } table.attachEvents = function attachEvents() { table.$el.on('change', '.checkbox-cell input[type="checkbox"]', handleChange); table.$el.find('thead .sortable-cell').on('click', handleSortableClick); }; table.detachEvents = function detachEvents() { table.$el.off('change', '.checkbox-cell input[type="checkbox"]', handleChange); table.$el.find('thead .sortable-cell').off('click', handleSortableClick); }; // Install Modules table.useModules(); // Init table.init(); return table || _assertThisInitialized(_this); } var _proto = DataTable.prototype; _proto.setCollapsibleLabels = function setCollapsibleLabels() { var table = this; if (!table.collapsible) return; table.$el.find('tbody td:not(.checkbox-cell)').each(function (el) { var $el = $(el); var elIndex = $el.index(); var collpsibleTitle = $el.attr('data-collapsible-title'); if (!collpsibleTitle && collpsibleTitle !== '') { $el.attr('data-collapsible-title', table.$el.find('thead th').eq(elIndex).text()); } }); }; _proto.checkSelectedHeader = function checkSelectedHeader() { var table = this; if (table.$headerEl.length > 0 && table.$headerSelectedEl.length > 0) { var checkedItems = table.$el.find('tbody .checkbox-cell input:checked').length; table.$el[checkedItems > 0 ? 'addClass' : 'removeClass']('data-table-has-checked'); table.$headerSelectedEl.find('.data-table-selected-count').text(checkedItems); } }; _proto.init = function init() { var table = this; table.attachEvents(); table.setCollapsibleLabels(); table.checkSelectedHeader(); }; _proto.destroy = function destroy() { var table = this; table.$el.trigger('datatable:beforedestroy'); table.emit('local::beforeDestroy dataTableBeforeDestroy', table); table.attachEvents(); if (table.$el[0]) { table.$el[0].f7DataTable = null; delete table.$el[0].f7DataTable; } deleteProps(table); table = null; }; return DataTable; }(Framework7Class); export default DataTable;