// TODO // - Option to have vertical layout class // - Number of horizontal panels class options // - Threshold option - require that there is duplicate information in a column before it is used // - Styling for selected // - Styling for container / header // - Styling for clear option // - State saving integration // - Fix regex characters - (CEO) for example (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 ) .appendTo( opts.container ) }; this.s = { dt: table }; table.columns(opts.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) ); } ); } $.extend( SearchPanes.prototype, { _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 = $('