| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /*!
- * 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) {
- return {
- extend: 'collection',
- text: function (dt) {
- return dt.i18n('buttons.colvis', 'Column visibility');
- },
- className: 'buttons-colvis',
- buttons: [{
- extend: 'columnsToggle',
- columns: conf.columns,
- columnText: conf.columnText
- }]
- };
- },
-
- // 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) {
- 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;
- }));
|