|
- /*!
- * Column visibility buttons for Buttons and DataTables.
- * 2016 SpryMedia Ltd - datatables.net/license
- */
-
- (function( factory ){
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery', 'datatables.net', 'datatables.net-buttons'], 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, $).$;
- }
-
- if ( ! $.fn.dataTable.Buttons ) {
- require('datatables.net-buttons')(root, $);
- }
-
- return factory( $, root, root.document );
- };
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
- }(function( $, window, document, undefined ) {
- 'use strict';
- var DataTable = $.fn.dataTable;
-
-
- $.extend( DataTable.ext.buttons, {
- // A collection of column visibility buttons
- colvis: function ( dt, conf ) {
- var node = null;
- var buttonConf = {
- extend: 'collection',
- init: function ( dt, n ) {
- node = n;
- },
- text: function ( dt ) {
- return dt.i18n( 'buttons.colvis', 'Column visibility' );
- },
- className: 'buttons-colvis',
- closeButton: false,
- buttons: [ {
- extend: 'columnsToggle',
- columns: conf.columns,
- columnText: conf.columnText
- } ]
- };
-
- // Rebuild the collection with the new column structure if columns are reordered
- dt.on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) {
- // console.log(node);
- // console.log('node', dt.button(null, node).node());
- dt.button(null, dt.button(null, node).node()).collectionRebuild([{
- extend: 'columnsToggle',
- columns: conf.columns,
- columnText: conf.columnText
- }]);
- });
-
- return buttonConf;
- },
-
- // Selected columns with individual buttons - toggle column visibility
- columnsToggle: function ( dt, conf ) {
- var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) {
- return {
- extend: 'columnToggle',
- columns: idx,
- columnText: conf.columnText
- };
- } ).toArray();
-
- return columns;
- },
-
- // Single button to toggle column visibility
- columnToggle: function ( dt, conf ) {
- return {
- extend: 'columnVisibility',
- columns: conf.columns,
- columnText: conf.columnText
- };
- },
-
- // Selected columns with individual buttons - set column visibility
- columnsVisibility: function ( dt, conf ) {
- var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) {
- return {
- extend: 'columnVisibility',
- columns: idx,
- visibility: conf.visibility,
- columnText: conf.columnText
- };
- } ).toArray();
-
- return columns;
- },
-
- // Single button to set column visibility
- columnVisibility: {
- columns: undefined, // column selector
- text: function ( dt, button, conf ) {
- return conf._columnText( dt, conf );
- },
- className: 'buttons-columnVisibility',
- action: function ( e, dt, button, conf ) {
- var col = dt.columns( conf.columns );
- var curr = col.visible();
-
- col.visible( conf.visibility !== undefined ?
- conf.visibility :
- ! (curr.length ? curr[0] : false )
- );
- },
- init: function ( dt, button, conf ) {
- var that = this;
- button.attr( 'data-cv-idx', conf.columns );
-
- dt
- .on( 'column-visibility.dt'+conf.namespace, function (e, settings) {
- if ( ! settings.bDestroying && settings.nTable == dt.settings()[0].nTable ) {
- that.active( dt.column( conf.columns ).visible() );
- }
- } )
- .on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) {
- // Button has been removed from the DOM
- if ( conf.destroying ) {
- return;
- }
-
- if ( dt.columns( conf.columns ).count() !== 1 ) {
- return;
- }
-
- // This button controls the same column index but the text for the column has
- // changed
- that.text( conf._columnText( dt, conf ) );
-
- // Since its a different column, we need to check its visibility
- that.active( dt.column( conf.columns ).visible() );
- } );
-
- this.active( dt.column( conf.columns ).visible() );
- },
- destroy: function ( dt, button, conf ) {
- dt
- .off( 'column-visibility.dt'+conf.namespace )
- .off( 'column-reorder.dt'+conf.namespace );
- },
-
- _columnText: function ( dt, conf ) {
- // Use DataTables' internal data structure until this is presented
- // is a public API. The other option is to use
- // `$( column(col).node() ).text()` but the node might not have been
- // populated when Buttons is constructed.
- var idx = dt.column( conf.columns ).index();
- var title = dt.settings()[0].aoColumns[ idx ].sTitle;
-
- if (! title) {
- title = dt.column(idx).header().innerHTML;
- }
-
- title = title
- .replace(/\n/g," ") // remove new lines
- .replace(/<br\s*\/?>/gi, " ") // replace line breaks with spaces
- .replace(/<select(.*?)<\/select>/g, "") // remove select tags, including options text
- .replace(/<!\-\-.*?\-\->/g, "") // strip HTML comments
- .replace(/<.*?>/g, "") // strip HTML
- .replace(/^\s+|\s+$/g,""); // trim
-
- return conf.columnText ?
- conf.columnText( dt, idx, title ) :
- title;
- }
- },
-
-
- colvisRestore: {
- className: 'buttons-colvisRestore',
-
- text: function ( dt ) {
- return dt.i18n( 'buttons.colvisRestore', 'Restore visibility' );
- },
-
- init: function ( dt, button, conf ) {
- conf._visOriginal = dt.columns().indexes().map( function ( idx ) {
- return dt.column( idx ).visible();
- } ).toArray();
- },
-
- action: function ( e, dt, button, conf ) {
- dt.columns().every( function ( i ) {
- // Take into account that ColReorder might have disrupted our
- // indexes
- var idx = dt.colReorder && dt.colReorder.transpose ?
- dt.colReorder.transpose( i, 'toOriginal' ) :
- i;
-
- this.visible( conf._visOriginal[ idx ] );
- } );
- }
- },
-
-
- colvisGroup: {
- className: 'buttons-colvisGroup',
-
- action: function ( e, dt, button, conf ) {
- dt.columns( conf.show ).visible( true, false );
- dt.columns( conf.hide ).visible( false, false );
-
- dt.columns.adjust();
- },
-
- show: [],
-
- hide: []
- }
- } );
-
-
- return DataTable.Buttons;
- }));
|