effective_datatables 3.2.7 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/dataTables/buttons/buttons.bootstrap.js +3 -1
- data/app/assets/javascripts/dataTables/buttons/buttons.colVis.js +19 -10
- data/app/assets/javascripts/dataTables/buttons/buttons.html5.js +126 -77
- data/app/assets/javascripts/dataTables/buttons/buttons.print.js +45 -35
- data/app/assets/javascripts/dataTables/buttons/dataTables.buttons.js +177 -9
- data/app/assets/javascripts/dataTables/dataTables.bootstrap.js +1 -1
- data/app/assets/javascripts/dataTables/jquery.dataTables.js +15217 -15281
- data/app/assets/javascripts/dataTables/responsive/dataTables.responsive.js +1183 -1065
- data/app/assets/javascripts/dataTables/responsive/responsive.bootstrap.js +59 -55
- data/app/assets/stylesheets/dataTables/buttons/buttons.bootstrap.css +56 -0
- data/app/assets/stylesheets/dataTables/dataTables.bootstrap.css +10 -7
- data/app/assets/stylesheets/dataTables/responsive/responsive.bootstrap.css +10 -11
- data/app/assets/stylesheets/effective_datatables/_filters.scss +1 -0
- data/app/assets/stylesheets/effective_datatables/_overrides.scss +13 -15
- data/app/assets/stylesheets/effective_datatables.scss +0 -1
- data/app/helpers/effective_datatables_helper.rb +1 -1
- data/lib/effective_datatables/version.rb +1 -1
- metadata +1 -2
- data/app/assets/stylesheets/dataTables/colReorder/colReorder.bootstrap.css +0 -11
@@ -1,5 +1,5 @@
|
|
1
|
-
/*! Buttons for DataTables 1.2
|
2
|
-
* ©2016 SpryMedia Ltd - datatables.net/license
|
1
|
+
/*! Buttons for DataTables 1.4.2
|
2
|
+
* ©2016-2017 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
(function( factory ){
|
@@ -48,6 +48,11 @@ var _dtButtons = DataTable.ext.buttons;
|
|
48
48
|
*/
|
49
49
|
var Buttons = function( dt, config )
|
50
50
|
{
|
51
|
+
// If there is no config set it to an empty object
|
52
|
+
if ( typeof( config ) === 'undefined' ) {
|
53
|
+
config = {};
|
54
|
+
}
|
55
|
+
|
51
56
|
// Allow a boolean true for defaults
|
52
57
|
if ( config === true ) {
|
53
58
|
config = {};
|
@@ -194,7 +199,7 @@ $.extend( Buttons.prototype, {
|
|
194
199
|
// needed). Take a copy as the array is modified by `remove`
|
195
200
|
var buttons = this.s.buttons.slice();
|
196
201
|
var i, ien;
|
197
|
-
|
202
|
+
|
198
203
|
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
|
199
204
|
this.remove( buttons[i].node );
|
200
205
|
}
|
@@ -253,6 +258,24 @@ $.extend( Buttons.prototype, {
|
|
253
258
|
return $(button.node);
|
254
259
|
},
|
255
260
|
|
261
|
+
/**
|
262
|
+
* Set / get a processing class on the selected button
|
263
|
+
* @param {boolean} flag true to add, false to remove, undefined to get
|
264
|
+
* @return {boolean|Buttons} Getter value or this if a setter.
|
265
|
+
*/
|
266
|
+
processing: function ( node, flag )
|
267
|
+
{
|
268
|
+
var button = this._nodeToButton( node );
|
269
|
+
|
270
|
+
if ( flag === undefined ) {
|
271
|
+
return $(button.node).hasClass( 'processing' );
|
272
|
+
}
|
273
|
+
|
274
|
+
$(button.node).toggleClass( 'processing', flag );
|
275
|
+
|
276
|
+
return this;
|
277
|
+
},
|
278
|
+
|
256
279
|
/**
|
257
280
|
* Remove a button.
|
258
281
|
* @param {node} node Button node
|
@@ -410,6 +433,7 @@ $.extend( Buttons.prototype, {
|
|
410
433
|
|
411
434
|
for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
|
412
435
|
container.append( buttons[i].inserter );
|
436
|
+
container.append( ' ' );
|
413
437
|
|
414
438
|
if ( buttons[i].buttons && buttons[i].buttons.length ) {
|
415
439
|
this._draw( buttons[i].collection, buttons[i].buttons );
|
@@ -462,7 +486,8 @@ $.extend( Buttons.prototype, {
|
|
462
486
|
if ( built.conf.buttons ) {
|
463
487
|
var collectionDom = this.c.dom.collection;
|
464
488
|
built.collection = $('<'+collectionDom.tag+'/>')
|
465
|
-
.addClass( collectionDom.className )
|
489
|
+
.addClass( collectionDom.className )
|
490
|
+
.attr( 'role', 'menu') ;
|
466
491
|
built.conf._collection = built.collection;
|
467
492
|
|
468
493
|
this._expandButton( built.buttons, built.conf.buttons, true, attachPoint );
|
@@ -515,7 +540,7 @@ $.extend( Buttons.prototype, {
|
|
515
540
|
config.action.call( dt.button( button ), e, dt, button, config );
|
516
541
|
|
517
542
|
$(dt.table().node()).triggerHandler( 'buttons-action.dt', [
|
518
|
-
dt.button( button ), dt, button, config
|
543
|
+
dt.button( button ), dt, button, config
|
519
544
|
] );
|
520
545
|
};
|
521
546
|
|
@@ -569,7 +594,7 @@ $.extend( Buttons.prototype, {
|
|
569
594
|
}
|
570
595
|
|
571
596
|
if ( config.titleAttr ) {
|
572
|
-
button.attr( 'title', config.titleAttr );
|
597
|
+
button.attr( 'title', text( config.titleAttr ) );
|
573
598
|
}
|
574
599
|
|
575
600
|
if ( ! config.namespace ) {
|
@@ -860,7 +885,7 @@ $.extend( Buttons.prototype, {
|
|
860
885
|
/**
|
861
886
|
* Show / hide a background layer behind a collection
|
862
887
|
* @param {boolean} Flag to indicate if the background should be shown or
|
863
|
-
* hidden
|
888
|
+
* hidden
|
864
889
|
* @param {string} Class to assign to the background
|
865
890
|
* @static
|
866
891
|
*/
|
@@ -938,7 +963,7 @@ Buttons.instanceSelector = function ( group, buttons )
|
|
938
963
|
ret.push( buttons[ input ].inst );
|
939
964
|
}
|
940
965
|
};
|
941
|
-
|
966
|
+
|
942
967
|
process( group );
|
943
968
|
|
944
969
|
return ret;
|
@@ -1118,7 +1143,7 @@ Buttons.defaults = {
|
|
1118
1143
|
* @type {string}
|
1119
1144
|
* @static
|
1120
1145
|
*/
|
1121
|
-
Buttons.version = '1.2
|
1146
|
+
Buttons.version = '1.4.2';
|
1122
1147
|
|
1123
1148
|
|
1124
1149
|
$.extend( _dtButtons, {
|
@@ -1159,6 +1184,21 @@ $.extend( _dtButtons, {
|
|
1159
1184
|
left: hostOffset.left
|
1160
1185
|
} );
|
1161
1186
|
|
1187
|
+
// calculate overflow when positioned beneath
|
1188
|
+
var tableBottom = tableContainer.offset().top + tableContainer.height();
|
1189
|
+
var listBottom = hostOffset.top + host.outerHeight() + config._collection.outerHeight();
|
1190
|
+
var bottomOverflow = listBottom - tableBottom;
|
1191
|
+
|
1192
|
+
// calculate overflow when positioned above
|
1193
|
+
var listTop = hostOffset.top - config._collection.outerHeight();
|
1194
|
+
var tableTop = tableContainer.offset().top;
|
1195
|
+
var topOverflow = tableTop - listTop;
|
1196
|
+
|
1197
|
+
// if bottom overflow is larger, move to the top because it fits better
|
1198
|
+
if (bottomOverflow > topOverflow) {
|
1199
|
+
config._collection.css( 'top', hostOffset.top - config._collection.outerHeight() - 5);
|
1200
|
+
}
|
1201
|
+
|
1162
1202
|
var listRight = hostOffset.left + config._collection.outerWidth();
|
1163
1203
|
var tableRight = tableContainer.offset().left + tableContainer.width();
|
1164
1204
|
if ( listRight > tableRight ) {
|
@@ -1399,6 +1439,19 @@ DataTable.Api.registerPlural( 'buttons().nodes()', 'button().node()', function (
|
|
1399
1439
|
return jq;
|
1400
1440
|
} );
|
1401
1441
|
|
1442
|
+
// Get / set button processing state
|
1443
|
+
DataTable.Api.registerPlural( 'buttons().processing()', 'button().processing()', function ( flag ) {
|
1444
|
+
if ( flag === undefined ) {
|
1445
|
+
return this.map( function ( set ) {
|
1446
|
+
return set.inst.processing( set.node );
|
1447
|
+
} );
|
1448
|
+
}
|
1449
|
+
|
1450
|
+
return this.each( function ( set ) {
|
1451
|
+
set.inst.processing( set.node, flag );
|
1452
|
+
} );
|
1453
|
+
} );
|
1454
|
+
|
1402
1455
|
// Get / set button text (i.e. the button labels)
|
1403
1456
|
DataTable.Api.registerPlural( 'buttons().text()', 'button().text()', function ( label ) {
|
1404
1457
|
if ( label === undefined ) {
|
@@ -1522,6 +1575,118 @@ DataTable.Api.register( 'buttons.exportData()', function ( options ) {
|
|
1522
1575
|
}
|
1523
1576
|
} );
|
1524
1577
|
|
1578
|
+
// Get information about the export that is common to many of the export data
|
1579
|
+
// types (DRY)
|
1580
|
+
DataTable.Api.register( 'buttons.exportInfo()', function ( conf ) {
|
1581
|
+
if ( ! conf ) {
|
1582
|
+
conf = {};
|
1583
|
+
}
|
1584
|
+
|
1585
|
+
return {
|
1586
|
+
filename: _filename( conf ),
|
1587
|
+
title: _title( conf ),
|
1588
|
+
messageTop: _message(this, conf.messageTop || conf.message, 'top'),
|
1589
|
+
messageBottom: _message(this, conf.messageBottom, 'bottom')
|
1590
|
+
};
|
1591
|
+
} );
|
1592
|
+
|
1593
|
+
|
1594
|
+
|
1595
|
+
/**
|
1596
|
+
* Get the file name for an exported file.
|
1597
|
+
*
|
1598
|
+
* @param {object} config Button configuration
|
1599
|
+
* @param {boolean} incExtension Include the file name extension
|
1600
|
+
*/
|
1601
|
+
var _filename = function ( config )
|
1602
|
+
{
|
1603
|
+
// Backwards compatibility
|
1604
|
+
var filename = config.filename === '*' && config.title !== '*' && config.title !== undefined ?
|
1605
|
+
config.title :
|
1606
|
+
config.filename;
|
1607
|
+
|
1608
|
+
if ( typeof filename === 'function' ) {
|
1609
|
+
filename = filename();
|
1610
|
+
}
|
1611
|
+
|
1612
|
+
if ( filename === undefined || filename === null ) {
|
1613
|
+
return null;
|
1614
|
+
}
|
1615
|
+
|
1616
|
+
if ( filename.indexOf( '*' ) !== -1 ) {
|
1617
|
+
filename = $.trim( filename.replace( '*', $('title').text() ) );
|
1618
|
+
}
|
1619
|
+
|
1620
|
+
// Strip characters which the OS will object to
|
1621
|
+
filename = filename.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, "");
|
1622
|
+
|
1623
|
+
var extension = _stringOrFunction( config.extension );
|
1624
|
+
if ( ! extension ) {
|
1625
|
+
extension = '';
|
1626
|
+
}
|
1627
|
+
|
1628
|
+
return filename + extension;
|
1629
|
+
};
|
1630
|
+
|
1631
|
+
/**
|
1632
|
+
* Simply utility method to allow parameters to be given as a function
|
1633
|
+
*
|
1634
|
+
* @param {undefined|string|function} option Option
|
1635
|
+
* @return {null|string} Resolved value
|
1636
|
+
*/
|
1637
|
+
var _stringOrFunction = function ( option )
|
1638
|
+
{
|
1639
|
+
if ( option === null || option === undefined ) {
|
1640
|
+
return null;
|
1641
|
+
}
|
1642
|
+
else if ( typeof option === 'function' ) {
|
1643
|
+
return option();
|
1644
|
+
}
|
1645
|
+
return option;
|
1646
|
+
};
|
1647
|
+
|
1648
|
+
/**
|
1649
|
+
* Get the title for an exported file.
|
1650
|
+
*
|
1651
|
+
* @param {object} config Button configuration
|
1652
|
+
*/
|
1653
|
+
var _title = function ( config )
|
1654
|
+
{
|
1655
|
+
var title = _stringOrFunction( config.title );
|
1656
|
+
|
1657
|
+
return title === null ?
|
1658
|
+
null : title.indexOf( '*' ) !== -1 ?
|
1659
|
+
title.replace( '*', $('title').text() || 'Exported data' ) :
|
1660
|
+
title;
|
1661
|
+
};
|
1662
|
+
|
1663
|
+
var _message = function ( dt, option, position )
|
1664
|
+
{
|
1665
|
+
var message = _stringOrFunction( option );
|
1666
|
+
if ( message === null ) {
|
1667
|
+
return null;
|
1668
|
+
}
|
1669
|
+
|
1670
|
+
var caption = $('caption', dt.table().container()).eq(0);
|
1671
|
+
if ( message === '*' ) {
|
1672
|
+
var side = caption.css( 'caption-side' );
|
1673
|
+
if ( side !== position ) {
|
1674
|
+
return null;
|
1675
|
+
}
|
1676
|
+
|
1677
|
+
return caption.length ?
|
1678
|
+
caption.text() :
|
1679
|
+
'';
|
1680
|
+
}
|
1681
|
+
|
1682
|
+
return message;
|
1683
|
+
};
|
1684
|
+
|
1685
|
+
|
1686
|
+
|
1687
|
+
|
1688
|
+
|
1689
|
+
|
1525
1690
|
|
1526
1691
|
var _exportTextarea = $('<textarea/>')[0];
|
1527
1692
|
var _exportData = function ( dt, inOpts )
|
@@ -1556,6 +1721,9 @@ var _exportData = function ( dt, inOpts )
|
|
1556
1721
|
return str;
|
1557
1722
|
}
|
1558
1723
|
|
1724
|
+
// Always remove script tags
|
1725
|
+
str = str.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
|
1726
|
+
|
1559
1727
|
if ( config.stripHtml ) {
|
1560
1728
|
str = str.replace( /<[^>]*>/g, '' );
|
1561
1729
|
}
|
@@ -155,7 +155,7 @@ DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, bu
|
|
155
155
|
};
|
156
156
|
|
157
157
|
// IE9 throws an 'unknown error' if document.activeElement is used
|
158
|
-
// inside an iframe or frame.
|
158
|
+
// inside an iframe or frame.
|
159
159
|
var activeEl;
|
160
160
|
|
161
161
|
try {
|