// TODO // - Styling for selected // - Styling for container / header // - Styling for clear option (function(factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery', 'datatables.net'], function($) { return factory($, window, document); }); } else if (typeof exports === 'object') { // CommonJS module.exports = function(root, $) { if (!root) { root = window; } if (!$ || !$.fn.dataTable) { $ = require('datatables.net')(root, $).$; } return factory($, root, root.document); }; } else { // Browser factory(jQuery, window, document); } })(function($, window, document, undefined) { 'use strict'; var DataTable = $.fn.dataTable; function SearchPanes(settings, opts) { var that = this; var table = new DataTable.Api(settings); this.classes = $.extend(true, {}, SearchPanes.classes); this.dom = { container: $('
').addClass(this.classes.container) }; this.c = $.extend( true, {}, SearchPanes.defaults, opts ); this.s = { dt: table }; table.settings()[0].searchPane = this; table .columns(this.c.columns) .eq(0) .each(function(idx) { that._pane(idx); }); $(this.dom.container) .on('click', 'li', function() { that._toggle(this); }) .on('click', 'button.' + this.classes.clear, function() { that._clear($(this).closest('div.' + that.classes.pane.container)); }); this._attach(); } $.extend(SearchPanes.prototype, { rebuild: function () { var that = this; this.s.dt .columns(this.c.columns) .eq(0) .each(function(idx) { that._pane(idx); }); }, _attach: function () { var container = this.c.container; var host = typeof container === 'function' ? container( this.s.dt ) : container; if ( this.c.insert === 'prepend' ) { $(this.dom.container).prependTo( host ); } else { $(this.dom.container).appendTo( host ); } }, _binData: function(data) { var out = {}; data.each(function(d) { if (!d) { return; } if (!out[d]) { out[d] = 1; } else { out[d]++; } }); return out; }, _clear: function(pane) { var classes = this.classes; var itemSelected = classes.item.selected; pane.find('li.' + itemSelected).removeClass(itemSelected); pane.removeClass(classes.pane.active); this.s.dt .column(pane.data('column')) .search('') .draw(); }, _pane: function(idx) { var classes = this.classes; var itemClasses = classes.item; var paneClasses = classes.pane; var table = this.s.dt; var column = table.column(idx); var list = $('