/** * @author: aperez * @version: v2.0.0 * * @update Dennis Hernández * @update zhixin wen */ const Utils = $.fn.bootstrapTable.utils const theme = { bootstrap3: { icons: { advancedSearchIcon: 'glyphicon-chevron-down' }, classes: {}, html: { modal: ` ` } }, bootstrap4: { icons: { advancedSearchIcon: 'fa-chevron-down' }, classes: {}, html: { modal: ` ` } }, bootstrap5: { icons: { advancedSearchIcon: 'bi-chevron-down' }, classes: { formGroup: 'mb-3' }, html: { modal: ` ` } }, bulma: { icons: { advancedSearchIcon: 'fa-chevron-down' }, classes: {}, html: { modal: ` ` } }, foundation: { icons: { advancedSearchIcon: 'fa-chevron-down' }, classes: {}, html: { modal: `

` } }, materialize: { icons: { advancedSearchIcon: 'expand_more' }, classes: {}, html: { modal: ` ` } }, semantic: { icons: { advancedSearchIcon: 'fa-chevron-down' }, classes: {}, html: { modal: ` ` } } }[$.fn.bootstrapTable.theme] Object.assign($.fn.bootstrapTable.defaults, { advancedSearch: false, idForm: 'advancedSearch', actionForm: '', idTable: undefined, // eslint-disable-next-line no-unused-vars onColumnAdvancedSearch (field, text) { return false } }) Object.assign($.fn.bootstrapTable.defaults.icons, { advancedSearchIcon: theme.icons.advancedSearchIcon }) Object.assign($.fn.bootstrapTable.events, { 'column-advanced-search.bs.table': 'onColumnAdvancedSearch' }) Object.assign($.fn.bootstrapTable.locales, { formatAdvancedSearch () { return 'Advanced search' }, formatAdvancedCloseButton () { return 'Close' } }) Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales) $.BootstrapTable = class extends $.BootstrapTable { initToolbar () { this.showToolbar = this.showToolbar || this.options.search && this.options.advancedSearch && this.options.idTable if (this.showToolbar) { this.buttons = Object.assign(this.buttons, { advancedSearch: { text: this.options.formatAdvancedSearch(), icon: this.options.icons.advancedSearchIcon, event: this.showAdvancedSearch, attributes: { 'aria-label': this.options.formatAdvancedSearch(), title: this.options.formatAdvancedSearch() } } }) if (Utils.isEmptyObject(this.filterColumnsPartial)) { this.filterColumnsPartial = {} } } super.initToolbar() } showAdvancedSearch () { this.$toolbarModal = $(`#avdSearchModal_${this.options.idTable}`) if (this.$toolbarModal.length <= 0) { $('body').append(Utils.sprintf(theme.html.modal, this.options.idTable, this.options.buttonsClass)) this.$toolbarModal = $(`#avdSearchModal_${this.options.idTable}`) this.$toolbarModal.find('.toolbar-modal-close') .off('click') .on('click', () => this.hideToolbarModal()) } this.initToolbarModalBody() this.showToolbarModal() } initToolbarModalBody () { this.$toolbarModal.find('.toolbar-modal-title') .html(this.options.formatAdvancedSearch()) this.$toolbarModal.find('.toolbar-modal-footer .toolbar-modal-close') .html(this.options.formatAdvancedCloseButton()) this.$toolbarModal.find('.toolbar-modal-body') .html(this.createToolbarForm()) .off('keyup blur', 'input').on('keyup blur', 'input', e => { this.onColumnAdvancedSearch(e) }) } showToolbarModal () { const theme = $.fn.bootstrapTable.theme if (['bootstrap3', 'bootstrap4'].includes(theme)) { this.$toolbarModal.modal() } else if (theme === 'bootstrap5') { if (!this.toolbarModal) { this.toolbarModal = new window.bootstrap.Modal(this.$toolbarModal[0], {}) } this.toolbarModal.show() } else if (theme === 'bulma') { this.$toolbarModal.toggleClass('is-active') } else if (theme === 'foundation') { if (!this.toolbarModal) { this.toolbarModal = new window.Foundation.Reveal(this.$toolbarModal) } this.toolbarModal.open() } else if (theme === 'materialize') { this.$toolbarModal.modal().modal('open') } else if (theme === 'semantic') { this.$toolbarModal.modal('show') } } hideToolbarModal () { const theme = $.fn.bootstrapTable.theme if (['bootstrap3', 'bootstrap4'].includes(theme)) { this.$toolbarModal.modal('hide') } else if (theme === 'bootstrap5') { this.toolbarModal.hide() } else if (theme === 'bulma') { $('html').toggleClass('is-clipped') this.$toolbarModal.toggleClass('is-active') } else if (theme === 'foundation') { this.toolbarModal.close() } else if (theme === 'materialize') { this.$toolbarModal.modal('open') } else if (theme === 'semantic') { this.$toolbarModal.modal('close') } if (this.options.sidePagination === 'server') { this.options.pageNumber = 1 this.updatePagination() this.trigger('column-advanced-search', this.filterColumnsPartial) } } createToolbarForm () { const html = [ `
` ] for (const column of this.columns) { if (!column.checkbox && column.visible && column.searchable) { const title = $('
').html(column.title).text().trim() const value = this.filterColumnsPartial[column.field] || '' html.push(`
`) } } html.push('') return html.join('') } initSearch () { super.initSearch() if (!this.options.advancedSearch || this.options.sidePagination === 'server') { return } const fp = Utils.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial this.data = fp ? this.data.filter((item, i) => { for (const [key, v] of Object.entries(fp)) { const val = v.toLowerCase() let value = item[key] const index = this.header.fields.indexOf(key) value = Utils.calculateObjectValue(this.header, this.header.formatters[index], [value, item, i], value) if ( !(index !== -1 && (typeof value === 'string' || typeof value === 'number') && `${value}`.toLowerCase().includes(val)) ) { return false } } return true }) : this.data this.unsortedData = [...this.data] } onColumnAdvancedSearch (e) { const text = $(e.currentTarget).val().trim() const field = $(e.currentTarget).attr('name') if (text) { this.filterColumnsPartial[field] = text } else { delete this.filterColumnsPartial[field] } if (this.options.sidePagination !== 'server') { this.options.pageNumber = 1 this.initSearch() this.updatePagination() this.trigger('column-advanced-search', field, text) } } }