jquery-datatables-rails 1.11.0 → 1.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/lib/jquery-datatables-rails.rb +0 -0
  2. data/lib/jquery/datatables/rails/engine.rb +0 -0
  3. data/lib/jquery/datatables/rails/version.rb +1 -1
  4. data/vendor/assets/images/dataTables/back_disabled.png +0 -0
  5. data/vendor/assets/images/dataTables/back_enabled.png +0 -0
  6. data/vendor/assets/images/dataTables/back_enabled_hover.png +0 -0
  7. data/vendor/assets/images/dataTables/extras/background.png +0 -0
  8. data/vendor/assets/images/dataTables/extras/collection.png +0 -0
  9. data/vendor/assets/images/dataTables/extras/collection_hover.png +0 -0
  10. data/vendor/assets/images/dataTables/extras/copy.png +0 -0
  11. data/vendor/assets/images/dataTables/extras/copy_hover.png +0 -0
  12. data/vendor/assets/images/dataTables/extras/csv.png +0 -0
  13. data/vendor/assets/images/dataTables/extras/csv_hover.png +0 -0
  14. data/vendor/assets/images/dataTables/extras/pdf.png +0 -0
  15. data/vendor/assets/images/dataTables/extras/pdf_hover.png +0 -0
  16. data/vendor/assets/images/dataTables/extras/print.png +0 -0
  17. data/vendor/assets/images/dataTables/extras/print_hover.png +0 -0
  18. data/vendor/assets/images/dataTables/extras/xls.png +0 -0
  19. data/vendor/assets/images/dataTables/extras/xls_hover.png +0 -0
  20. data/vendor/assets/images/dataTables/favicon.ico +0 -0
  21. data/vendor/assets/images/dataTables/forward_disabled.png +0 -0
  22. data/vendor/assets/images/dataTables/forward_enabled.png +0 -0
  23. data/vendor/assets/images/dataTables/forward_enabled_hover.png +0 -0
  24. data/vendor/assets/images/dataTables/sort_asc.png +0 -0
  25. data/vendor/assets/images/dataTables/sort_asc_disabled.png +0 -0
  26. data/vendor/assets/images/dataTables/sort_both.png +0 -0
  27. data/vendor/assets/images/dataTables/sort_desc.png +0 -0
  28. data/vendor/assets/images/dataTables/sort_desc_disabled.png +0 -0
  29. data/vendor/assets/javascripts/dataTables/extras/AutoFill.js +0 -0
  30. data/vendor/assets/javascripts/dataTables/extras/ColReorder.js +0 -0
  31. data/vendor/assets/javascripts/dataTables/extras/ColVis.js +0 -0
  32. data/vendor/assets/javascripts/dataTables/extras/FixedColumns.js +0 -0
  33. data/vendor/assets/javascripts/dataTables/extras/FixedHeader.js +0 -0
  34. data/vendor/assets/javascripts/dataTables/extras/KeyTable.js +0 -0
  35. data/vendor/assets/javascripts/dataTables/extras/Scroller.js +0 -0
  36. data/vendor/assets/javascripts/dataTables/extras/TableTools.js +320 -302
  37. data/vendor/assets/javascripts/dataTables/extras/TableTools.min.js +76 -0
  38. data/vendor/assets/javascripts/dataTables/extras/ZeroClipboard.js +2 -2
  39. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnFilterOnReturn.js +1 -1
  40. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnGetColumnData.js +0 -0
  41. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnReloadAjax.js +0 -0
  42. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnSetFilteringDelay.js +32 -0
  43. data/vendor/assets/javascripts/dataTables/jquery.dataTables.bootstrap.js +0 -0
  44. data/vendor/assets/javascripts/dataTables/jquery.dataTables.js +0 -0
  45. data/vendor/assets/javascripts/dataTables/jquery.dataTables.sorting.numbersHtml.js +0 -0
  46. data/vendor/assets/javascripts/dataTables/jquery.dataTables.typeDetection.numbersHtml.js +0 -0
  47. data/vendor/assets/media/dataTables/extras/as3/ZeroClipboard.as +221 -0
  48. data/vendor/assets/media/dataTables/extras/as3/ZeroClipboardPdf.as +310 -0
  49. data/vendor/assets/media/dataTables/extras/as3/lib/AlivePDF.swc +0 -0
  50. data/vendor/assets/media/dataTables/extras/swf/copy_csv_xls.swf +0 -0
  51. data/vendor/assets/media/dataTables/extras/swf/copy_csv_xls_pdf.swf +0 -0
  52. data/vendor/assets/stylesheets/dataTables/extras/TableTools.css +314 -0
  53. data/vendor/assets/stylesheets/dataTables/extras/TableTools_JUI.css +185 -0
  54. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.bootstrap.css.scss +0 -0
  55. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.css.scss +11 -11
  56. data/vendor/assets/stylesheets/dataTables/src/demo_page.css +0 -0
  57. data/vendor/assets/stylesheets/dataTables/src/demo_table.css +11 -11
  58. data/vendor/assets/stylesheets/dataTables/src/demo_table_jui.css +17 -9
  59. data/vendor/assets/stylesheets/dataTables/src/jquery.dataTables_themeroller.css +6 -6
  60. metadata +25 -10
  61. data/.gitignore +0 -7
  62. data/Gemfile +0 -4
  63. data/LICENSE +0 -20
  64. data/Rakefile +0 -1
  65. data/Readme.md +0 -88
  66. data/jquery-datatables-rails.gemspec +0 -20
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  module Jquery
2
2
  module Datatables
3
3
  module Rails
4
- VERSION = "1.11.0"
4
+ VERSION = "1.11.1"
5
5
  end
6
6
  end
7
7
  end
@@ -1,12 +1,12 @@
1
1
  /*
2
2
  * File: TableTools.js
3
- * Version: 2.1.2
3
+ * Version: 2.1.3
4
4
  * Description: Tools and buttons for DataTables
5
5
  * Author: Allan Jardine (www.sprymedia.co.uk)
6
6
  * Language: Javascript
7
7
  * License: GPL v2 or BSD 3 point style
8
8
  * Project: DataTables
9
- *
9
+ *
10
10
  * Copyright 2009-2012 Allan Jardine, all rights reserved.
11
11
  *
12
12
  * This source file is free software, under either the GPL v2 license or a
@@ -20,7 +20,7 @@ var TableTools;
20
20
 
21
21
  (function($, window, document) {
22
22
 
23
- /**
23
+ /**
24
24
  * TableTools provides flexible buttons and other tools for a DataTables enhanced table
25
25
  * @class TableTools
26
26
  * @constructor
@@ -40,61 +40,61 @@ TableTools = function( oDT, oOpts )
40
40
  {
41
41
  alert( "Warning: TableTools must be initialised with the keyword 'new'" );
42
42
  }
43
-
44
-
43
+
44
+
45
45
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
46
46
  * Public class variables
47
47
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
48
-
48
+
49
49
  /**
50
50
  * @namespace Settings object which contains customisable information for TableTools instance
51
51
  */
52
52
  this.s = {
53
53
  /**
54
- * Store 'this' so the instance can be retreieved from the settings object
54
+ * Store 'this' so the instance can be retrieved from the settings object
55
55
  * @property that
56
56
  * @type object
57
57
  * @default this
58
58
  */
59
59
  "that": this,
60
-
61
- /**
60
+
61
+ /**
62
62
  * DataTables settings objects
63
63
  * @property dt
64
64
  * @type object
65
65
  * @default <i>From the oDT init option</i>
66
66
  */
67
67
  "dt": oDT.fnSettings(),
68
-
68
+
69
69
  /**
70
70
  * @namespace Print specific information
71
71
  */
72
72
  "print": {
73
- /**
73
+ /**
74
74
  * DataTables draw 'start' point before the printing display was shown
75
75
  * @property saveStart
76
76
  * @type int
77
77
  * @default -1
78
78
  */
79
79
  "saveStart": -1,
80
-
81
- /**
80
+
81
+ /**
82
82
  * DataTables draw 'length' point before the printing display was shown
83
83
  * @property saveLength
84
84
  * @type int
85
85
  * @default -1
86
86
  */
87
87
  "saveLength": -1,
88
-
89
- /**
88
+
89
+ /**
90
90
  * Page scrolling point before the printing display was shown so it can be restored
91
91
  * @property saveScroll
92
92
  * @type int
93
93
  * @default -1
94
94
  */
95
95
  "saveScroll": -1,
96
-
97
- /**
96
+
97
+ /**
98
98
  * Wrapped function to end the print display (to maintain scope)
99
99
  * @property funcEnd
100
100
  * @type Function
@@ -102,7 +102,7 @@ TableTools = function( oDT, oOpts )
102
102
  */
103
103
  "funcEnd": function () {}
104
104
  },
105
-
105
+
106
106
  /**
107
107
  * A unique ID is assigned to each button in each instance
108
108
  * @property buttonCounter
@@ -110,7 +110,7 @@ TableTools = function( oDT, oOpts )
110
110
  * @default 0
111
111
  */
112
112
  "buttonCounter": 0,
113
-
113
+
114
114
  /**
115
115
  * @namespace Select rows specific information
116
116
  */
@@ -122,7 +122,7 @@ TableTools = function( oDT, oOpts )
122
122
  * @default ""
123
123
  */
124
124
  "type": "",
125
-
125
+
126
126
  /**
127
127
  * Array of nodes which are currently selected
128
128
  * @property selected
@@ -130,7 +130,7 @@ TableTools = function( oDT, oOpts )
130
130
  * @default []
131
131
  */
132
132
  "selected": [],
133
-
133
+
134
134
  /**
135
135
  * Function to run before the selection can take place. Will cancel the select if the
136
136
  * function returns false
@@ -139,7 +139,7 @@ TableTools = function( oDT, oOpts )
139
139
  * @default null
140
140
  */
141
141
  "preRowSelect": null,
142
-
142
+
143
143
  /**
144
144
  * Function to run when a row is selected
145
145
  * @property postSelected
@@ -147,7 +147,7 @@ TableTools = function( oDT, oOpts )
147
147
  * @default null
148
148
  */
149
149
  "postSelected": null,
150
-
150
+
151
151
  /**
152
152
  * Function to run when a row is deselected
153
153
  * @property postDeselected
@@ -155,7 +155,7 @@ TableTools = function( oDT, oOpts )
155
155
  * @default null
156
156
  */
157
157
  "postDeselected": null,
158
-
158
+
159
159
  /**
160
160
  * Indicate if all rows are selected (needed for server-side processing)
161
161
  * @property all
@@ -163,7 +163,7 @@ TableTools = function( oDT, oOpts )
163
163
  * @default false
164
164
  */
165
165
  "all": false,
166
-
166
+
167
167
  /**
168
168
  * Class name to add to selected TR nodes
169
169
  * @property selectedClass
@@ -172,7 +172,7 @@ TableTools = function( oDT, oOpts )
172
172
  */
173
173
  "selectedClass": ""
174
174
  },
175
-
175
+
176
176
  /**
177
177
  * Store of the user input customisation object
178
178
  * @property custom
@@ -180,7 +180,7 @@ TableTools = function( oDT, oOpts )
180
180
  * @default {}
181
181
  */
182
182
  "custom": {},
183
-
183
+
184
184
  /**
185
185
  * SWF movie path
186
186
  * @property swfPath
@@ -188,7 +188,7 @@ TableTools = function( oDT, oOpts )
188
188
  * @default ""
189
189
  */
190
190
  "swfPath": "",
191
-
191
+
192
192
  /**
193
193
  * Default button set
194
194
  * @property buttonSet
@@ -196,24 +196,24 @@ TableTools = function( oDT, oOpts )
196
196
  * @default []
197
197
  */
198
198
  "buttonSet": [],
199
-
199
+
200
200
  /**
201
- * When there is more than one TableTools instance for a DataTable, there must be a
201
+ * When there is more than one TableTools instance for a DataTable, there must be a
202
202
  * master which controls events (row selection etc)
203
203
  * @property master
204
204
  * @type boolean
205
205
  * @default false
206
206
  */
207
207
  "master": false,
208
-
208
+
209
209
  /**
210
210
  * Tag names that are used for creating collections and buttons
211
211
  * @namesapce
212
212
  */
213
213
  "tags": {}
214
214
  };
215
-
216
-
215
+
216
+
217
217
  /**
218
218
  * @namespace Common and useful DOM elements for the class instance
219
219
  */
@@ -225,7 +225,7 @@ TableTools = function( oDT, oOpts )
225
225
  * @default null
226
226
  */
227
227
  "container": null,
228
-
228
+
229
229
  /**
230
230
  * The table node to which TableTools will be applied
231
231
  * @property table
@@ -233,7 +233,7 @@ TableTools = function( oDT, oOpts )
233
233
  * @default null
234
234
  */
235
235
  "table": null,
236
-
236
+
237
237
  /**
238
238
  * @namespace Nodes used for the print display
239
239
  */
@@ -245,16 +245,16 @@ TableTools = function( oDT, oOpts )
245
245
  * @default []
246
246
  */
247
247
  "hidden": [],
248
-
248
+
249
249
  /**
250
- * The information display saying tellng the user about the print display
250
+ * The information display saying telling the user about the print display
251
251
  * @property message
252
252
  * @type node
253
253
  * @default null
254
254
  */
255
255
  "message": null
256
256
  },
257
-
257
+
258
258
  /**
259
259
  * @namespace Nodes used for a collection display. This contains the currently used collection
260
260
  */
@@ -266,7 +266,7 @@ TableTools = function( oDT, oOpts )
266
266
  * @default null
267
267
  */
268
268
  "collection": null,
269
-
269
+
270
270
  /**
271
271
  * Background display to provide focus and capture events
272
272
  * @property background
@@ -286,12 +286,12 @@ TableTools = function( oDT, oOpts )
286
286
  {
287
287
  $.extend( true, this.classes, TableTools.classes_themeroller );
288
288
  }
289
-
290
-
289
+
290
+
291
291
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
292
292
  * Public class methods
293
293
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
294
-
294
+
295
295
  /**
296
296
  * Retreieve the settings object from an instance
297
297
  * @method fnSettings
@@ -300,16 +300,16 @@ TableTools = function( oDT, oOpts )
300
300
  this.fnSettings = function () {
301
301
  return this.s;
302
302
  };
303
-
304
-
303
+
304
+
305
305
  /* Constructor logic */
306
306
  if ( typeof oOpts == 'undefined' )
307
307
  {
308
308
  oOpts = {};
309
309
  }
310
-
310
+
311
311
  this._fnConstruct( oOpts );
312
-
312
+
313
313
  return this;
314
314
  };
315
315
 
@@ -319,7 +319,7 @@ TableTools.prototype = {
319
319
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
320
320
  * Public methods
321
321
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
322
-
322
+
323
323
  /**
324
324
  * Retreieve the settings object from an instance
325
325
  * @returns {array} List of TR nodes which are currently selected
@@ -363,8 +363,8 @@ TableTools.prototype = {
363
363
 
364
364
  return out;
365
365
  },
366
-
367
-
366
+
367
+
368
368
  /**
369
369
  * Check to see if a current row is selected or not
370
370
  * @param {Node} n TR node to check if it is currently selected or not
@@ -376,27 +376,41 @@ TableTools.prototype = {
376
376
  return (this.s.dt.aoData[pos]._DTTT_selected===true) ? true : false;
377
377
  },
378
378
 
379
-
379
+
380
380
  /**
381
381
  * Select all rows in the table
382
+ * @param {boolean} [filtered=false] Select only rows which are available
383
+ * given the filtering applied to the table. By default this is false -
384
+ * i.e. all rows, regardless of filtering are selected.
382
385
  */
383
- "fnSelectAll": function ()
386
+ "fnSelectAll": function ( filtered )
384
387
  {
385
388
  var s = this._fnGetMasterSettings();
386
- this._fnRowSelect( s.dt.aoData );
389
+
390
+ this._fnRowSelect( (filtered === true) ?
391
+ s.dt.aiDisplay :
392
+ s.dt.aoData
393
+ );
387
394
  },
388
395
 
389
-
396
+
390
397
  /**
391
398
  * Deselect all rows in the table
399
+ * @param {boolean} [filtered=false] Deselect only rows which are available
400
+ * given the filtering applied to the table. By default this is false -
401
+ * i.e. all rows, regardless of filtering are deselected.
392
402
  */
393
- "fnSelectNone": function ()
403
+ "fnSelectNone": function ( filtered )
394
404
  {
395
405
  var s = this._fnGetMasterSettings();
396
- this._fnRowDeselect( s.dt.aoData );
397
- },
398
406
 
407
+ this._fnRowDeselect( (filtered === true) ?
408
+ s.dt.aiDisplay :
409
+ s.dt.aoData
410
+ );
411
+ },
399
412
 
413
+
400
414
  /**
401
415
  * Select row(s)
402
416
  * @param {node|object|array} n The row(s) to select. Can be a single DOM
@@ -415,7 +429,7 @@ TableTools.prototype = {
415
429
  }
416
430
  },
417
431
 
418
-
432
+
419
433
  /**
420
434
  * Deselect row(s)
421
435
  * @param {node|object|array} n The row(s) to deselect. Can be a single DOM
@@ -425,8 +439,8 @@ TableTools.prototype = {
425
439
  {
426
440
  this._fnRowDeselect( n );
427
441
  },
428
-
429
-
442
+
443
+
430
444
  /**
431
445
  * Get the title of the document - useful for file names. The title is retrieved from either
432
446
  * the configuration object's 'title' parameter, or the HTML document title
@@ -445,7 +459,7 @@ TableTools.prototype = {
445
459
  sTitle = anTitle[0].innerHTML;
446
460
  }
447
461
  }
448
-
462
+
449
463
  /* Strip characters which the OS will object to - checking for UTF8 support in the scripting
450
464
  * engine
451
465
  */
@@ -455,8 +469,8 @@ TableTools.prototype = {
455
469
  return sTitle.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g, "");
456
470
  }
457
471
  },
458
-
459
-
472
+
473
+
460
474
  /**
461
475
  * Calculate a unity array with the column width by proportion for a set of columns to be
462
476
  * included for a button. This is particularly useful for PDF creation, where we can use the
@@ -471,7 +485,7 @@ TableTools.prototype = {
471
485
  aColumnsInc = this._fnColumnTargets( oConfig.mColumns ),
472
486
  aColWidths = [],
473
487
  iWidth = 0, iTotal = 0, i, iLen;
474
-
488
+
475
489
  for ( i=0, iLen=aColumnsInc.length ; i<iLen ; i++ )
476
490
  {
477
491
  if ( aColumnsInc[i] )
@@ -481,16 +495,16 @@ TableTools.prototype = {
481
495
  aColWidths.push( iWidth );
482
496
  }
483
497
  }
484
-
498
+
485
499
  for ( i=0, iLen=aColWidths.length ; i<iLen ; i++ )
486
500
  {
487
501
  aColWidths[i] = aColWidths[i] / iTotal;
488
502
  }
489
-
503
+
490
504
  return aColWidths.join('\t');
491
505
  },
492
-
493
-
506
+
507
+
494
508
  /**
495
509
  * Get the information contained in a table as a string
496
510
  * @param {Object} oConfig Button configuration object
@@ -504,8 +518,8 @@ TableTools.prototype = {
504
518
  return this._fnGetDataTablesData( oConfig );
505
519
  }
506
520
  },
507
-
508
-
521
+
522
+
509
523
  /**
510
524
  * Pass text to a flash button instance, which will be used on the button's click handler
511
525
  * @param {Object} clip Flash button object
@@ -515,8 +529,8 @@ TableTools.prototype = {
515
529
  {
516
530
  this._fnFlashSetText( clip, text );
517
531
  },
518
-
519
-
532
+
533
+
520
534
  /**
521
535
  * Resize the flash elements of the buttons attached to this TableTools instance - this is
522
536
  * useful for when initialising TableTools when it is hidden (display:none) since sizes can't
@@ -537,8 +551,8 @@ TableTools.prototype = {
537
551
  }
538
552
  }
539
553
  },
540
-
541
-
554
+
555
+
542
556
  /**
543
557
  * Check to see if any of the ZeroClipboard client's attached need to be resized
544
558
  */
@@ -559,8 +573,8 @@ TableTools.prototype = {
559
573
  }
560
574
  return false;
561
575
  },
562
-
563
-
576
+
577
+
564
578
  /**
565
579
  * Programmatically enable or disable the print view
566
580
  * @param {boolean} [bView=true] Show the print view if true or not given. If false, then
@@ -588,8 +602,8 @@ TableTools.prototype = {
588
602
  this._fnPrintEnd();
589
603
  }
590
604
  },
591
-
592
-
605
+
606
+
593
607
  /**
594
608
  * Show a message to the end user which is nicely styled
595
609
  * @param {string} message The HTML string to show to the user
@@ -601,46 +615,46 @@ TableTools.prototype = {
601
615
  nInfo.innerHTML = message;
602
616
 
603
617
  document.body.appendChild( nInfo );
604
-
618
+
605
619
  setTimeout( function() {
606
620
  $(nInfo).fadeOut( "normal", function() {
607
621
  document.body.removeChild( nInfo );
608
622
  } );
609
623
  }, time );
610
624
  },
611
-
612
-
613
-
625
+
626
+
627
+
614
628
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
615
629
  * Private methods (they are of course public in JS, but recommended as private)
616
630
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
617
-
631
+
618
632
  /**
619
633
  * Constructor logic
620
634
  * @method _fnConstruct
621
635
  * @param {Object} oOpts Same as TableTools constructor
622
636
  * @returns void
623
- * @private
637
+ * @private
624
638
  */
625
639
  "_fnConstruct": function ( oOpts )
626
640
  {
627
641
  var that = this;
628
-
642
+
629
643
  this._fnCustomiseSettings( oOpts );
630
-
644
+
631
645
  /* Container element */
632
646
  this.dom.container = document.createElement( this.s.tags.container );
633
647
  this.dom.container.className = this.classes.container;
634
-
648
+
635
649
  /* Row selection config */
636
650
  if ( this.s.select.type != 'none' )
637
651
  {
638
652
  this._fnRowSelectConfig();
639
653
  }
640
-
654
+
641
655
  /* Buttons */
642
656
  this._fnButtonDefinations( this.s.buttonSet, this.dom.container );
643
-
657
+
644
658
  /* Destructor - need to wipe the DOM for IE's garbage collector */
645
659
  this.s.dt.aoDestroyCallback.push( {
646
660
  "sName": "TableTools",
@@ -649,14 +663,14 @@ TableTools.prototype = {
649
663
  }
650
664
  } );
651
665
  },
652
-
653
-
666
+
667
+
654
668
  /**
655
669
  * Take the user defined settings and the default settings and combine them.
656
670
  * @method _fnCustomiseSettings
657
671
  * @param {Object} oOpts Same as TableTools constructor
658
672
  * @returns void
659
- * @private
673
+ * @private
660
674
  */
661
675
  "_fnCustomiseSettings": function ( oOpts )
662
676
  {
@@ -666,20 +680,20 @@ TableTools.prototype = {
666
680
  this.s.master = true;
667
681
  this.s.dt._TableToolsInit = true;
668
682
  }
669
-
683
+
670
684
  /* We can use the table node from comparisons to group controls */
671
685
  this.dom.table = this.s.dt.nTable;
672
-
686
+
673
687
  /* Clone the defaults and then the user options */
674
688
  this.s.custom = $.extend( {}, TableTools.DEFAULTS, oOpts );
675
-
689
+
676
690
  /* Flash file location */
677
691
  this.s.swfPath = this.s.custom.sSwfPath;
678
692
  if ( typeof ZeroClipboard_TableTools != 'undefined' )
679
693
  {
680
694
  ZeroClipboard_TableTools.moviePath = this.s.swfPath;
681
695
  }
682
-
696
+
683
697
  /* Table row selecting */
684
698
  this.s.select.type = this.s.custom.sRowSelect;
685
699
  this.s.select.preRowSelect = this.s.custom.fnPreRowSelect;
@@ -697,8 +711,8 @@ TableTools.prototype = {
697
711
  /* Button set */
698
712
  this.s.buttonSet = this.s.custom.aButtons;
699
713
  },
700
-
701
-
714
+
715
+
702
716
  /**
703
717
  * Take the user input arrays and expand them to be fully defined, and then add them to a given
704
718
  * DOM element
@@ -706,12 +720,12 @@ TableTools.prototype = {
706
720
  * @param {array} buttonSet Set of user defined buttons
707
721
  * @param {node} wrapper Node to add the created buttons to
708
722
  * @returns void
709
- * @private
723
+ * @private
710
724
  */
711
725
  "_fnButtonDefinations": function ( buttonSet, wrapper )
712
726
  {
713
727
  var buttonDef;
714
-
728
+
715
729
  for ( var i=0, iLen=buttonSet.length ; i<iLen ; i++ )
716
730
  {
717
731
  if ( typeof buttonSet[i] == "string" )
@@ -733,26 +747,26 @@ TableTools.prototype = {
733
747
  var o = $.extend( {}, TableTools.BUTTONS[ buttonSet[i].sExtends ], true );
734
748
  buttonDef = $.extend( o, buttonSet[i], true );
735
749
  }
736
-
737
- wrapper.appendChild( this._fnCreateButton(
738
- buttonDef,
750
+
751
+ wrapper.appendChild( this._fnCreateButton(
752
+ buttonDef,
739
753
  $(wrapper).hasClass(this.classes.collection.container)
740
754
  ) );
741
755
  }
742
756
  },
743
-
744
-
757
+
758
+
745
759
  /**
746
760
  * Create and configure a TableTools button
747
761
  * @method _fnCreateButton
748
762
  * @param {Object} oConfig Button configuration object
749
763
  * @returns {Node} Button element
750
- * @private
764
+ * @private
751
765
  */
752
766
  "_fnCreateButton": function ( oConfig, bCollectionButton )
753
767
  {
754
768
  var nButton = this._fnButtonBase( oConfig, bCollectionButton );
755
-
769
+
756
770
  if ( oConfig.sAction.match(/flash/) )
757
771
  {
758
772
  this._fnFlashConfig( nButton, oConfig );
@@ -770,17 +784,17 @@ TableTools.prototype = {
770
784
  this._fnTextConfig( nButton, oConfig );
771
785
  this._fnCollectionConfig( nButton, oConfig );
772
786
  }
773
-
787
+
774
788
  return nButton;
775
789
  },
776
-
777
-
790
+
791
+
778
792
  /**
779
793
  * Create the DOM needed for the button and apply some base properties. All buttons start here
780
794
  * @method _fnButtonBase
781
795
  * @param {o} oConfig Button configuration object
782
796
  * @returns {Node} DIV element for the button
783
- * @private
797
+ * @private
784
798
  */
785
799
  "_fnButtonBase": function ( o, bCollectionButton )
786
800
  {
@@ -803,25 +817,25 @@ TableTools.prototype = {
803
817
  nButton = document.createElement( sTag ),
804
818
  nSpan = document.createElement( sLiner ),
805
819
  masterS = this._fnGetMasterSettings();
806
-
820
+
807
821
  nButton.className = sClass+" "+o.sButtonClass;
808
822
  nButton.setAttribute('id', "ToolTables_"+this.s.dt.sInstance+"_"+masterS.buttonCounter );
809
823
  nButton.appendChild( nSpan );
810
824
  nSpan.innerHTML = o.sButtonText;
811
-
825
+
812
826
  masterS.buttonCounter++;
813
-
827
+
814
828
  return nButton;
815
829
  },
816
-
817
-
830
+
831
+
818
832
  /**
819
833
  * Get the settings object for the master instance. When more than one TableTools instance is
820
834
  * assigned to a DataTable, only one of them can be the 'master' (for the select rows). As such,
821
835
  * we will typically want to interact with that master for global properties.
822
836
  * @method _fnGetMasterSettings
823
837
  * @returns {Object} TableTools settings object
824
- * @private
838
+ * @private
825
839
  */
826
840
  "_fnGetMasterSettings": function ()
827
841
  {
@@ -842,15 +856,15 @@ TableTools.prototype = {
842
856
  }
843
857
  }
844
858
  },
845
-
846
-
847
-
859
+
860
+
861
+
848
862
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
849
863
  * Button collection functions
850
864
  */
851
-
865
+
852
866
  /**
853
- * Create a collection button, when activated will present a drop downlist of other buttons
867
+ * Create a collection button, when activated will present a drop down list of other buttons
854
868
  * @param {Node} nButton Button to use for the collection activation
855
869
  * @param {Object} oConfig Button configuration object
856
870
  * @returns void
@@ -863,11 +877,11 @@ TableTools.prototype = {
863
877
  nHidden.className = this.classes.collection.container;
864
878
  oConfig._collection = nHidden;
865
879
  document.body.appendChild( nHidden );
866
-
880
+
867
881
  this._fnButtonDefinations( oConfig.aButtons, nHidden );
868
882
  },
869
-
870
-
883
+
884
+
871
885
  /**
872
886
  * Show a button collection
873
887
  * @param {Node} nButton Button to use for the collection
@@ -885,13 +899,13 @@ TableTools.prototype = {
885
899
  iDivY = oPos.top + $(nButton).outerHeight(),
886
900
  iWinHeight = $(window).height(), iDocHeight = $(document).height(),
887
901
  iWinWidth = $(window).width(), iDocWidth = $(document).width();
888
-
902
+
889
903
  nHidden.style.position = "absolute";
890
904
  nHidden.style.left = iDivX+"px";
891
905
  nHidden.style.top = iDivY+"px";
892
906
  nHidden.style.display = "block";
893
907
  $(nHidden).css('opacity',0);
894
-
908
+
895
909
  var nBackground = document.createElement('div');
896
910
  nBackground.style.position = "absolute";
897
911
  nBackground.style.left = "0px";
@@ -900,27 +914,27 @@ TableTools.prototype = {
900
914
  nBackground.style.width = ((iWinWidth>iDocWidth)? iWinWidth : iDocWidth) +"px";
901
915
  nBackground.className = this.classes.collection.background;
902
916
  $(nBackground).css('opacity',0);
903
-
917
+
904
918
  document.body.appendChild( nBackground );
905
919
  document.body.appendChild( nHidden );
906
-
920
+
907
921
  /* Visual corrections to try and keep the collection visible */
908
922
  var iDivWidth = $(nHidden).outerWidth();
909
923
  var iDivHeight = $(nHidden).outerHeight();
910
-
924
+
911
925
  if ( iDivX + iDivWidth > iDocWidth )
912
926
  {
913
927
  nHidden.style.left = (iDocWidth-iDivWidth)+"px";
914
928
  }
915
-
929
+
916
930
  if ( iDivY + iDivHeight > iDocHeight )
917
931
  {
918
932
  nHidden.style.top = (iDivY-iDivHeight-$(nButton).outerHeight())+"px";
919
933
  }
920
-
934
+
921
935
  this.dom.collection.collection = nHidden;
922
936
  this.dom.collection.background = nBackground;
923
-
937
+
924
938
  /* This results in a very small delay for the end user but it allows the animation to be
925
939
  * much smoother. If you don't want the animation, then the setTimeout can be removed
926
940
  */
@@ -931,14 +945,14 @@ TableTools.prototype = {
931
945
 
932
946
  /* Resize the buttons to the Flash contents fit */
933
947
  this.fnResizeButtons();
934
-
948
+
935
949
  /* Event handler to remove the collection display */
936
950
  $(nBackground).click( function () {
937
951
  that._fnCollectionHide.call( that, null, null );
938
952
  } );
939
953
  },
940
-
941
-
954
+
955
+
942
956
  /**
943
957
  * Hide a button collection
944
958
  * @param {Node} nButton Button to use for the collection
@@ -952,59 +966,59 @@ TableTools.prototype = {
952
966
  {
953
967
  return;
954
968
  }
955
-
969
+
956
970
  if ( this.dom.collection.collection !== null )
957
971
  {
958
972
  $(this.dom.collection.collection).animate({"opacity": 0}, 500, function (e) {
959
973
  this.style.display = "none";
960
974
  } );
961
-
975
+
962
976
  $(this.dom.collection.background).animate({"opacity": 0}, 500, function (e) {
963
977
  this.parentNode.removeChild( this );
964
978
  } );
965
-
979
+
966
980
  this.dom.collection.collection = null;
967
981
  this.dom.collection.background = null;
968
982
  }
969
983
  },
970
-
971
-
972
-
984
+
985
+
986
+
973
987
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
974
988
  * Row selection functions
975
989
  */
976
-
990
+
977
991
  /**
978
992
  * Add event handlers to a table to allow for row selection
979
993
  * @method _fnRowSelectConfig
980
994
  * @returns void
981
- * @private
995
+ * @private
982
996
  */
983
997
  "_fnRowSelectConfig": function ()
984
998
  {
985
999
  if ( this.s.master )
986
1000
  {
987
1001
  var
988
- that = this,
989
- i, iLen,
1002
+ that = this,
1003
+ i, iLen,
990
1004
  dt = this.s.dt,
991
1005
  aoOpenRows = this.s.dt.aoOpenRows;
992
-
1006
+
993
1007
  $(dt.nTable).addClass( this.classes.select.table );
994
-
1008
+
995
1009
  $('tr', dt.nTBody).live( 'click', function(e) {
996
1010
  /* Sub-table must be ignored (odd that the selector won't do this with >) */
997
1011
  if ( this.parentNode != dt.nTBody )
998
1012
  {
999
1013
  return;
1000
1014
  }
1001
-
1015
+
1002
1016
  /* Check that we are actually working with a DataTables controlled row */
1003
1017
  if ( dt.oInstance.fnGetData(this) === null )
1004
1018
  {
1005
1019
  return;
1006
1020
  }
1007
-
1021
+
1008
1022
  /* User defined selection function */
1009
1023
  if ( that.s.select.preRowSelect !== null && !that.s.select.preRowSelect.call(that, e) )
1010
1024
  {
@@ -1040,7 +1054,7 @@ TableTools.prototype = {
1040
1054
  /**
1041
1055
  * Select rows
1042
1056
  * @param {*} src Rows to select - see _fnSelectData for a description of valid inputs
1043
- * @private
1057
+ * @private
1044
1058
  */
1045
1059
  "_fnRowSelect": function ( src )
1046
1060
  {
@@ -1068,7 +1082,7 @@ TableTools.prototype = {
1068
1082
  /**
1069
1083
  * Deselect rows
1070
1084
  * @param {*} src Rows to deselect - see _fnSelectData for a description of valid inputs
1071
- * @private
1085
+ * @private
1072
1086
  */
1073
1087
  "_fnRowDeselect": function ( src )
1074
1088
  {
@@ -1092,12 +1106,12 @@ TableTools.prototype = {
1092
1106
 
1093
1107
  TableTools._fnEventDispatch( this, 'select', firstTr );
1094
1108
  },
1095
-
1109
+
1096
1110
  /**
1097
1111
  * Take a data source for row selection and convert it into aoData points for the DT
1098
1112
  * @param {*} src Can be a single DOM TR node, an array of TR nodes (including a
1099
- * a jQuery object), a single aoData point from DataTables or an array of aoData
1100
- * points.
1113
+ * a jQuery object), a single aoData point from DataTables, an array of aoData
1114
+ * points or an array of aoData indexes
1101
1115
  * @returns {array} An array of aoData points
1102
1116
  */
1103
1117
  "_fnSelectData": function ( src )
@@ -1112,7 +1126,7 @@ TableTools.prototype = {
1112
1126
  }
1113
1127
  else if ( typeof src.length !== 'undefined' )
1114
1128
  {
1115
- // jQuery oject or an array of nodes, or aoData points
1129
+ // jQuery object or an array of nodes, or aoData points
1116
1130
  for ( i=0, iLen=src.length ; i<iLen ; i++ )
1117
1131
  {
1118
1132
  if ( src[i].nodeName )
@@ -1120,6 +1134,10 @@ TableTools.prototype = {
1120
1134
  pos = this.s.dt.oInstance.fnGetPosition( src[i] );
1121
1135
  out.push( this.s.dt.aoData[pos] );
1122
1136
  }
1137
+ else if ( typeof src[i] === 'number' )
1138
+ {
1139
+ out.push( this.s.dt.aoData[ src[i] ] );
1140
+ }
1123
1141
  else
1124
1142
  {
1125
1143
  out.push( src[i] );
@@ -1136,34 +1154,34 @@ TableTools.prototype = {
1136
1154
 
1137
1155
  return out;
1138
1156
  },
1139
-
1140
-
1157
+
1158
+
1141
1159
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1142
1160
  * Text button functions
1143
1161
  */
1144
-
1162
+
1145
1163
  /**
1146
1164
  * Configure a text based button for interaction events
1147
1165
  * @method _fnTextConfig
1148
1166
  * @param {Node} nButton Button element which is being considered
1149
1167
  * @param {Object} oConfig Button configuration object
1150
1168
  * @returns void
1151
- * @private
1169
+ * @private
1152
1170
  */
1153
1171
  "_fnTextConfig": function ( nButton, oConfig )
1154
1172
  {
1155
1173
  var that = this;
1156
-
1174
+
1157
1175
  if ( oConfig.fnInit !== null )
1158
1176
  {
1159
1177
  oConfig.fnInit.call( this, nButton, oConfig );
1160
1178
  }
1161
-
1179
+
1162
1180
  if ( oConfig.sToolTip !== "" )
1163
1181
  {
1164
1182
  nButton.title = oConfig.sToolTip;
1165
1183
  }
1166
-
1184
+
1167
1185
  $(nButton).hover( function () {
1168
1186
  if ( oConfig.fnMouseover !== null )
1169
1187
  {
@@ -1175,58 +1193,58 @@ TableTools.prototype = {
1175
1193
  oConfig.fnMouseout.call( this, nButton, oConfig, null );
1176
1194
  }
1177
1195
  } );
1178
-
1196
+
1179
1197
  if ( oConfig.fnSelect !== null )
1180
1198
  {
1181
1199
  TableTools._fnEventListen( this, 'select', function (n) {
1182
1200
  oConfig.fnSelect.call( that, nButton, oConfig, n );
1183
1201
  } );
1184
1202
  }
1185
-
1203
+
1186
1204
  $(nButton).click( function (e) {
1187
1205
  //e.preventDefault();
1188
-
1206
+
1189
1207
  if ( oConfig.fnClick !== null )
1190
1208
  {
1191
1209
  oConfig.fnClick.call( that, nButton, oConfig, null );
1192
1210
  }
1193
-
1211
+
1194
1212
  /* Provide a complete function to match the behaviour of the flash elements */
1195
1213
  if ( oConfig.fnComplete !== null )
1196
1214
  {
1197
1215
  oConfig.fnComplete.call( that, nButton, oConfig, null, null );
1198
1216
  }
1199
-
1217
+
1200
1218
  that._fnCollectionHide( nButton, oConfig );
1201
1219
  } );
1202
1220
  },
1203
-
1204
-
1205
-
1221
+
1222
+
1223
+
1206
1224
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1207
1225
  * Flash button functions
1208
1226
  */
1209
-
1227
+
1210
1228
  /**
1211
1229
  * Configure a flash based button for interaction events
1212
1230
  * @method _fnFlashConfig
1213
1231
  * @param {Node} nButton Button element which is being considered
1214
1232
  * @param {o} oConfig Button configuration object
1215
1233
  * @returns void
1216
- * @private
1234
+ * @private
1217
1235
  */
1218
1236
  "_fnFlashConfig": function ( nButton, oConfig )
1219
1237
  {
1220
1238
  var that = this;
1221
1239
  var flash = new ZeroClipboard_TableTools.Client();
1222
-
1240
+
1223
1241
  if ( oConfig.fnInit !== null )
1224
1242
  {
1225
1243
  oConfig.fnInit.call( this, nButton, oConfig );
1226
1244
  }
1227
-
1245
+
1228
1246
  flash.setHandCursor( true );
1229
-
1247
+
1230
1248
  if ( oConfig.sAction == "flash_save" )
1231
1249
  {
1232
1250
  flash.setAction( 'save' );
@@ -1243,28 +1261,28 @@ TableTools.prototype = {
1243
1261
  {
1244
1262
  flash.setAction( 'copy' );
1245
1263
  }
1246
-
1264
+
1247
1265
  flash.addEventListener('mouseOver', function(client) {
1248
1266
  if ( oConfig.fnMouseover !== null )
1249
1267
  {
1250
1268
  oConfig.fnMouseover.call( that, nButton, oConfig, flash );
1251
1269
  }
1252
1270
  } );
1253
-
1271
+
1254
1272
  flash.addEventListener('mouseOut', function(client) {
1255
1273
  if ( oConfig.fnMouseout !== null )
1256
1274
  {
1257
1275
  oConfig.fnMouseout.call( that, nButton, oConfig, flash );
1258
1276
  }
1259
1277
  } );
1260
-
1278
+
1261
1279
  flash.addEventListener('mouseDown', function(client) {
1262
1280
  if ( oConfig.fnClick !== null )
1263
1281
  {
1264
1282
  oConfig.fnClick.call( that, nButton, oConfig, flash );
1265
1283
  }
1266
1284
  } );
1267
-
1285
+
1268
1286
  flash.addEventListener('complete', function (client, text) {
1269
1287
  if ( oConfig.fnComplete !== null )
1270
1288
  {
@@ -1272,11 +1290,11 @@ TableTools.prototype = {
1272
1290
  }
1273
1291
  that._fnCollectionHide( nButton, oConfig );
1274
1292
  } );
1275
-
1293
+
1276
1294
  this._fnFlashGlue( flash, nButton, oConfig.sToolTip );
1277
1295
  },
1278
-
1279
-
1296
+
1297
+
1280
1298
  /**
1281
1299
  * Wait until the id is in the DOM before we "glue" the swf. Note that this function will call
1282
1300
  * itself (using setTimeout) until it completes successfully
@@ -1285,13 +1303,13 @@ TableTools.prototype = {
1285
1303
  * @param {Node} node node to glue swf to
1286
1304
  * @param {String} text title of the flash movie
1287
1305
  * @returns void
1288
- * @private
1306
+ * @private
1289
1307
  */
1290
1308
  "_fnFlashGlue": function ( flash, node, text )
1291
1309
  {
1292
1310
  var that = this;
1293
1311
  var id = node.getAttribute('id');
1294
-
1312
+
1295
1313
  if ( document.getElementById(id) )
1296
1314
  {
1297
1315
  flash.glue( node, text );
@@ -1303,62 +1321,62 @@ TableTools.prototype = {
1303
1321
  }, 100 );
1304
1322
  }
1305
1323
  },
1306
-
1307
-
1324
+
1325
+
1308
1326
  /**
1309
1327
  * Set the text for the flash clip to deal with
1310
- *
1311
- * This function is required for large information sets. There is a limit on the
1312
- * amount of data that can be transfered between Javascript and Flash in a single call, so
1328
+ *
1329
+ * This function is required for large information sets. There is a limit on the
1330
+ * amount of data that can be transferred between Javascript and Flash in a single call, so
1313
1331
  * we use this method to build up the text in Flash by sending over chunks. It is estimated
1314
- * that the data limit is around 64k, although it is undocuments, and appears to be different
1332
+ * that the data limit is around 64k, although it is undocumented, and appears to be different
1315
1333
  * between different flash versions. We chunk at 8KiB.
1316
1334
  * @method _fnFlashSetText
1317
1335
  * @param {Object} clip the ZeroClipboard object
1318
1336
  * @param {String} sData the data to be set
1319
1337
  * @returns void
1320
- * @private
1338
+ * @private
1321
1339
  */
1322
1340
  "_fnFlashSetText": function ( clip, sData )
1323
1341
  {
1324
1342
  var asData = this._fnChunkData( sData, 8192 );
1325
-
1343
+
1326
1344
  clip.clearText();
1327
1345
  for ( var i=0, iLen=asData.length ; i<iLen ; i++ )
1328
1346
  {
1329
1347
  clip.appendText( asData[i] );
1330
1348
  }
1331
1349
  },
1332
-
1333
-
1334
-
1350
+
1351
+
1352
+
1335
1353
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1336
1354
  * Data retrieval functions
1337
1355
  */
1338
-
1356
+
1339
1357
  /**
1340
1358
  * Convert the mixed columns variable into a boolean array the same size as the columns, which
1341
1359
  * indicates which columns we want to include
1342
1360
  * @method _fnColumnTargets
1343
- * @param {String|Array} mColumns The columns to be included in data retreieval. If a string
1361
+ * @param {String|Array} mColumns The columns to be included in data retrieval. If a string
1344
1362
  * then it can take the value of "visible" or "hidden" (to include all visible or
1345
1363
  * hidden columns respectively). Or an array of column indexes
1346
1364
  * @returns {Array} A boolean array the length of the columns of the table, which each value
1347
1365
  * indicating if the column is to be included or not
1348
- * @private
1366
+ * @private
1349
1367
  */
1350
1368
  "_fnColumnTargets": function ( mColumns )
1351
1369
  {
1352
1370
  var aColumns = [];
1353
1371
  var dt = this.s.dt;
1354
-
1372
+
1355
1373
  if ( typeof mColumns == "object" )
1356
1374
  {
1357
1375
  for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
1358
1376
  {
1359
1377
  aColumns.push( false );
1360
1378
  }
1361
-
1379
+
1362
1380
  for ( i=0, iLen=mColumns.length ; i<iLen ; i++ )
1363
1381
  {
1364
1382
  aColumns[ mColumns[i] ] = true;
@@ -1392,11 +1410,11 @@ TableTools.prototype = {
1392
1410
  aColumns.push( true );
1393
1411
  }
1394
1412
  }
1395
-
1413
+
1396
1414
  return aColumns;
1397
1415
  },
1398
-
1399
-
1416
+
1417
+
1400
1418
  /**
1401
1419
  * New line character(s) depend on the platforms
1402
1420
  * @method method
@@ -1414,21 +1432,21 @@ TableTools.prototype = {
1414
1432
  return oConfig.sNewLine;
1415
1433
  }
1416
1434
  },
1417
-
1418
-
1435
+
1436
+
1419
1437
  /**
1420
1438
  * Get data from DataTables' internals and format it for output
1421
1439
  * @method _fnGetDataTablesData
1422
1440
  * @param {Object} oConfig Button configuration object
1423
1441
  * @param {String} oConfig.sFieldBoundary Field boundary for the data cells in the string
1424
- * @param {String} oConfig.sFieldSeperator Field seperator for the data cells
1442
+ * @param {String} oConfig.sFieldSeperator Field separator for the data cells
1425
1443
  * @param {String} oConfig.sNewline New line options
1426
1444
  * @param {Mixed} oConfig.mColumns Which columns should be included in the output
1427
1445
  * @param {Boolean} oConfig.bHeader Include the header
1428
1446
  * @param {Boolean} oConfig.bFooter Include the footer
1429
1447
  * @param {Boolean} oConfig.bSelectedOnly Include only the selected rows in the output
1430
- * @returns {String} Concatinated string of data
1431
- * @private
1448
+ * @returns {String} Concatenated string of data
1449
+ * @private
1432
1450
  */
1433
1451
  "_fnGetDataTablesData": function ( oConfig )
1434
1452
  {
@@ -1438,28 +1456,28 @@ TableTools.prototype = {
1438
1456
  var regex = new RegExp(oConfig.sFieldBoundary, "g"); /* Do it here for speed */
1439
1457
  var aColumnsInc = this._fnColumnTargets( oConfig.mColumns );
1440
1458
  var bSelectedOnly = (typeof oConfig.bSelectedOnly != 'undefined') ? oConfig.bSelectedOnly : false;
1441
-
1459
+
1442
1460
  /*
1443
1461
  * Header
1444
1462
  */
1445
1463
  if ( oConfig.bHeader )
1446
1464
  {
1447
1465
  aRow = [];
1448
-
1466
+
1449
1467
  for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
1450
1468
  {
1451
1469
  if ( aColumnsInc[i] )
1452
1470
  {
1453
1471
  sLoopData = dt.aoColumns[i].sTitle.replace(/\n/g," ").replace( /<.*?>/g, "" ).replace(/^\s+|\s+$/g,"");
1454
1472
  sLoopData = this._fnHtmlDecode( sLoopData );
1455
-
1473
+
1456
1474
  aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );
1457
1475
  }
1458
1476
  }
1459
1477
 
1460
1478
  aData.push( aRow.join(oConfig.sFieldSeperator) );
1461
1479
  }
1462
-
1480
+
1463
1481
  /*
1464
1482
  * Body
1465
1483
  */
@@ -1473,12 +1491,12 @@ TableTools.prototype = {
1473
1491
  aDataIndex.push( dt.oInstance.fnGetPosition( aSelected[i] ) );
1474
1492
  }
1475
1493
  }
1476
-
1494
+
1477
1495
  for ( j=0, jLen=aDataIndex.length ; j<jLen ; j++ )
1478
1496
  {
1479
1497
  tr = dt.aoData[ aDataIndex[j] ].nTr;
1480
1498
  aRow = [];
1481
-
1499
+
1482
1500
  /* Columns */
1483
1501
  for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
1484
1502
  {
@@ -1503,23 +1521,23 @@ TableTools.prototype = {
1503
1521
  {
1504
1522
  sLoopData = mTypeData+"";
1505
1523
  }
1506
-
1524
+
1507
1525
  /* Trim and clean the data */
1508
1526
  sLoopData = sLoopData.replace(/^\s+/, '').replace(/\s+$/, '');
1509
1527
  sLoopData = this._fnHtmlDecode( sLoopData );
1510
-
1528
+
1511
1529
  /* Bound it and add it to the total data */
1512
1530
  aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );
1513
1531
  }
1514
1532
  }
1515
-
1533
+
1516
1534
  aData.push( aRow.join(oConfig.sFieldSeperator) );
1517
-
1535
+
1518
1536
  /* Details rows from fnOpen */
1519
1537
  if ( oConfig.bOpenRows )
1520
1538
  {
1521
1539
  arr = $.grep(dt.aoOpenRows, function(o) { return o.nParent === tr; });
1522
-
1540
+
1523
1541
  if ( arr.length === 1 )
1524
1542
  {
1525
1543
  sLoopData = this._fnBoundData( $('td', arr[0].nTr).html(), oConfig.sFieldBoundary, regex );
@@ -1527,42 +1545,42 @@ TableTools.prototype = {
1527
1545
  }
1528
1546
  }
1529
1547
  }
1530
-
1548
+
1531
1549
  /*
1532
1550
  * Footer
1533
1551
  */
1534
1552
  if ( oConfig.bFooter && dt.nTFoot !== null )
1535
1553
  {
1536
1554
  aRow = [];
1537
-
1555
+
1538
1556
  for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
1539
1557
  {
1540
1558
  if ( aColumnsInc[i] && dt.aoColumns[i].nTf !== null )
1541
1559
  {
1542
1560
  sLoopData = dt.aoColumns[i].nTf.innerHTML.replace(/\n/g," ").replace( /<.*?>/g, "" );
1543
1561
  sLoopData = this._fnHtmlDecode( sLoopData );
1544
-
1562
+
1545
1563
  aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );
1546
1564
  }
1547
1565
  }
1548
-
1566
+
1549
1567
  aData.push( aRow.join(oConfig.sFieldSeperator) );
1550
1568
  }
1551
-
1569
+
1552
1570
  _sLastData = aData.join( this._fnNewline(oConfig) );
1553
1571
  return _sLastData;
1554
1572
  },
1555
-
1556
-
1573
+
1574
+
1557
1575
  /**
1558
1576
  * Wrap data up with a boundary string
1559
1577
  * @method _fnBoundData
1560
1578
  * @param {String} sData data to bound
1561
1579
  * @param {String} sBoundary bounding char(s)
1562
- * @param {RegExp} regex search for the bounding chars - constructed outside for efficincy
1580
+ * @param {RegExp} regex search for the bounding chars - constructed outside for efficiency
1563
1581
  * in the loop
1564
1582
  * @returns {String} bound data
1565
- * @private
1583
+ * @private
1566
1584
  */
1567
1585
  "_fnBoundData": function ( sData, sBoundary, regex )
1568
1586
  {
@@ -1575,21 +1593,21 @@ TableTools.prototype = {
1575
1593
  return sBoundary + sData.replace(regex, sBoundary+sBoundary) + sBoundary;
1576
1594
  }
1577
1595
  },
1578
-
1579
-
1596
+
1597
+
1580
1598
  /**
1581
1599
  * Break a string up into an array of smaller strings
1582
1600
  * @method _fnChunkData
1583
1601
  * @param {String} sData data to be broken up
1584
1602
  * @param {Int} iSize chunk size
1585
1603
  * @returns {Array} String array of broken up text
1586
- * @private
1604
+ * @private
1587
1605
  */
1588
1606
  "_fnChunkData": function ( sData, iSize )
1589
1607
  {
1590
1608
  var asReturn = [];
1591
1609
  var iStrlen = sData.length;
1592
-
1610
+
1593
1611
  for ( var i=0 ; i<iStrlen ; i+=iSize )
1594
1612
  {
1595
1613
  if ( i+iSize < iStrlen )
@@ -1601,17 +1619,17 @@ TableTools.prototype = {
1601
1619
  asReturn.push( sData.substring( i, iStrlen ) );
1602
1620
  }
1603
1621
  }
1604
-
1622
+
1605
1623
  return asReturn;
1606
1624
  },
1607
-
1608
-
1625
+
1626
+
1609
1627
  /**
1610
1628
  * Decode HTML entities
1611
1629
  * @method _fnHtmlDecode
1612
1630
  * @param {String} sData encoded string
1613
1631
  * @returns {String} decoded string
1614
- * @private
1632
+ * @private
1615
1633
  */
1616
1634
  "_fnHtmlDecode": function ( sData )
1617
1635
  {
@@ -1619,13 +1637,13 @@ TableTools.prototype = {
1619
1637
  {
1620
1638
  return sData;
1621
1639
  }
1622
-
1623
- var
1640
+
1641
+ var
1624
1642
  aData = this._fnChunkData( sData, 2048 ),
1625
1643
  n = document.createElement('div'),
1626
1644
  i, iLen, iIndex,
1627
1645
  sReturn = "", sInner;
1628
-
1646
+
1629
1647
  /* nodeValue has a limit in browsers - so we chunk the data into smaller segments to build
1630
1648
  * up the string. Note that the 'trick' here is to remember than we might have split over
1631
1649
  * an HTML entity, so we backtrack a little to make sure this doesn't happen
@@ -1639,36 +1657,36 @@ TableTools.prototype = {
1639
1657
  sInner = aData[i].substr( iIndex );
1640
1658
  aData[i] = aData[i].substr( 0, iIndex );
1641
1659
  }
1642
-
1660
+
1643
1661
  n.innerHTML = aData[i];
1644
1662
  sReturn += n.childNodes[0].nodeValue;
1645
1663
  }
1646
-
1664
+
1647
1665
  return sReturn;
1648
1666
  },
1649
-
1650
-
1651
-
1667
+
1668
+
1669
+
1652
1670
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1653
1671
  * Printing functions
1654
1672
  */
1655
-
1673
+
1656
1674
  /**
1657
1675
  * Show print display
1658
1676
  * @method _fnPrintStart
1659
1677
  * @param {Event} e Event object
1660
1678
  * @param {Object} oConfig Button configuration object
1661
1679
  * @returns void
1662
- * @private
1680
+ * @private
1663
1681
  */
1664
1682
  "_fnPrintStart": function ( oConfig )
1665
1683
  {
1666
1684
  var that = this;
1667
1685
  var oSetDT = this.s.dt;
1668
-
1686
+
1669
1687
  /* Parse through the DOM hiding everything that isn't needed for the table */
1670
1688
  this._fnPrintHideNodes( oSetDT.nTable );
1671
-
1689
+
1672
1690
  /* Show the whole table */
1673
1691
  this.s.print.saveStart = oSetDT._iDisplayStart;
1674
1692
  this.s.print.saveLength = oSetDT._iDisplayLength;
@@ -1680,13 +1698,13 @@ TableTools.prototype = {
1680
1698
  oSetDT.oApi._fnCalculateEnd( oSetDT );
1681
1699
  oSetDT.oApi._fnDraw( oSetDT );
1682
1700
  }
1683
-
1701
+
1684
1702
  /* Adjust the display for scrolling which might be done by DataTables */
1685
1703
  if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" )
1686
1704
  {
1687
1705
  this._fnPrintScrollStart( oSetDT );
1688
1706
  }
1689
-
1707
+
1690
1708
  /* Remove the other DataTables feature nodes - but leave the table! and info div */
1691
1709
  var anFeature = oSetDT.aanFeatures;
1692
1710
  for ( var cFeature in anFeature )
@@ -1703,7 +1721,7 @@ TableTools.prototype = {
1703
1721
  }
1704
1722
  }
1705
1723
  }
1706
-
1724
+
1707
1725
  /* Print class can be used for styling */
1708
1726
  $(document.body).addClass( this.classes.print.body );
1709
1727
 
@@ -1721,8 +1739,8 @@ TableTools.prototype = {
1721
1739
  this.dom.print.message.innerHTML = oConfig.sMessage;
1722
1740
  document.body.insertBefore( this.dom.print.message, document.body.childNodes[0] );
1723
1741
  }
1724
-
1725
- /* Cache the scrolling and the jump to the top of the t=page */
1742
+
1743
+ /* Cache the scrolling and the jump to the top of the page */
1726
1744
  this.s.print.saveScroll = $(window).scrollTop();
1727
1745
  window.scrollTo( 0, 0 );
1728
1746
 
@@ -1738,14 +1756,14 @@ TableTools.prototype = {
1738
1756
  }
1739
1757
  } );
1740
1758
  },
1741
-
1742
-
1759
+
1760
+
1743
1761
  /**
1744
1762
  * Printing is finished, resume normal display
1745
1763
  * @method _fnPrintEnd
1746
1764
  * @param {Event} e Event object
1747
1765
  * @returns void
1748
- * @private
1766
+ * @private
1749
1767
  */
1750
1768
  "_fnPrintEnd": function ( e )
1751
1769
  {
@@ -1753,47 +1771,47 @@ TableTools.prototype = {
1753
1771
  var oSetDT = this.s.dt;
1754
1772
  var oSetPrint = this.s.print;
1755
1773
  var oDomPrint = this.dom.print;
1756
-
1774
+
1757
1775
  /* Show all hidden nodes */
1758
1776
  this._fnPrintShowNodes();
1759
-
1777
+
1760
1778
  /* Restore DataTables' scrolling */
1761
1779
  if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" )
1762
1780
  {
1763
1781
  this._fnPrintScrollEnd();
1764
1782
  }
1765
-
1783
+
1766
1784
  /* Restore the scroll */
1767
1785
  window.scrollTo( 0, oSetPrint.saveScroll );
1768
-
1786
+
1769
1787
  /* Drop the print message */
1770
1788
  if ( oDomPrint.message !== null )
1771
1789
  {
1772
1790
  document.body.removeChild( oDomPrint.message );
1773
1791
  oDomPrint.message = null;
1774
1792
  }
1775
-
1793
+
1776
1794
  /* Styling class */
1777
1795
  $(document.body).removeClass( 'DTTT_Print' );
1778
-
1796
+
1779
1797
  /* Restore the table length */
1780
1798
  oSetDT._iDisplayStart = oSetPrint.saveStart;
1781
1799
  oSetDT._iDisplayLength = oSetPrint.saveLength;
1782
1800
  oSetDT.oApi._fnCalculateEnd( oSetDT );
1783
1801
  oSetDT.oApi._fnDraw( oSetDT );
1784
-
1802
+
1785
1803
  $(document).unbind( "keydown.DTTT" );
1786
1804
  },
1787
-
1788
-
1805
+
1806
+
1789
1807
  /**
1790
1808
  * Take account of scrolling in DataTables by showing the full table
1791
1809
  * @returns void
1792
- * @private
1810
+ * @private
1793
1811
  */
1794
1812
  "_fnPrintScrollStart": function ()
1795
1813
  {
1796
- var
1814
+ var
1797
1815
  oSetDT = this.s.dt,
1798
1816
  nScrollHeadInner = oSetDT.nScrollHead.getElementsByTagName('div')[0],
1799
1817
  nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
@@ -1807,7 +1825,7 @@ TableTools.prototype = {
1807
1825
  {
1808
1826
  oSetDT.nTable.removeChild( nTheadSize[0] );
1809
1827
  }
1810
-
1828
+
1811
1829
  if ( oSetDT.nTFoot !== null )
1812
1830
  {
1813
1831
  var nTfootSize = oSetDT.nTable.getElementsByTagName('tfoot');
@@ -1816,16 +1834,16 @@ TableTools.prototype = {
1816
1834
  oSetDT.nTable.removeChild( nTfootSize[0] );
1817
1835
  }
1818
1836
  }
1819
-
1837
+
1820
1838
  nTheadSize = oSetDT.nTHead.cloneNode(true);
1821
1839
  oSetDT.nTable.insertBefore( nTheadSize, oSetDT.nTable.childNodes[0] );
1822
-
1840
+
1823
1841
  if ( oSetDT.nTFoot !== null )
1824
1842
  {
1825
1843
  nTfootSize = oSetDT.nTFoot.cloneNode(true);
1826
1844
  oSetDT.nTable.insertBefore( nTfootSize, oSetDT.nTable.childNodes[1] );
1827
1845
  }
1828
-
1846
+
1829
1847
  /* Now adjust the table's viewport so we can actually see it */
1830
1848
  if ( oSetDT.oScroll.sX !== "" )
1831
1849
  {
@@ -1833,71 +1851,71 @@ TableTools.prototype = {
1833
1851
  nScrollBody.style.width = $(oSetDT.nTable).outerWidth()+"px";
1834
1852
  nScrollBody.style.overflow = "visible";
1835
1853
  }
1836
-
1854
+
1837
1855
  if ( oSetDT.oScroll.sY !== "" )
1838
1856
  {
1839
1857
  nScrollBody.style.height = $(oSetDT.nTable).outerHeight()+"px";
1840
1858
  nScrollBody.style.overflow = "visible";
1841
1859
  }
1842
1860
  },
1843
-
1844
-
1861
+
1862
+
1845
1863
  /**
1846
1864
  * Take account of scrolling in DataTables by showing the full table. Note that the redraw of
1847
- * the DataTable that we do will actually deal with the majority of the hardword here
1865
+ * the DataTable that we do will actually deal with the majority of the hard work here
1848
1866
  * @returns void
1849
- * @private
1867
+ * @private
1850
1868
  */
1851
1869
  "_fnPrintScrollEnd": function ()
1852
1870
  {
1853
- var
1871
+ var
1854
1872
  oSetDT = this.s.dt,
1855
1873
  nScrollBody = oSetDT.nTable.parentNode;
1856
-
1874
+
1857
1875
  if ( oSetDT.oScroll.sX !== "" )
1858
1876
  {
1859
1877
  nScrollBody.style.width = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sX );
1860
1878
  nScrollBody.style.overflow = "auto";
1861
1879
  }
1862
-
1880
+
1863
1881
  if ( oSetDT.oScroll.sY !== "" )
1864
1882
  {
1865
1883
  nScrollBody.style.height = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sY );
1866
1884
  nScrollBody.style.overflow = "auto";
1867
1885
  }
1868
1886
  },
1869
-
1870
-
1887
+
1888
+
1871
1889
  /**
1872
1890
  * Resume the display of all TableTools hidden nodes
1873
1891
  * @method _fnPrintShowNodes
1874
1892
  * @returns void
1875
- * @private
1893
+ * @private
1876
1894
  */
1877
1895
  "_fnPrintShowNodes": function ( )
1878
1896
  {
1879
1897
  var anHidden = this.dom.print.hidden;
1880
-
1898
+
1881
1899
  for ( var i=0, iLen=anHidden.length ; i<iLen ; i++ )
1882
1900
  {
1883
1901
  anHidden[i].node.style.display = anHidden[i].display;
1884
1902
  }
1885
1903
  anHidden.splice( 0, anHidden.length );
1886
1904
  },
1887
-
1888
-
1905
+
1906
+
1889
1907
  /**
1890
1908
  * Hide nodes which are not needed in order to display the table. Note that this function is
1891
1909
  * recursive
1892
1910
  * @method _fnPrintHideNodes
1893
1911
  * @param {Node} nNode Element which should be showing in a 'print' display
1894
1912
  * @returns void
1895
- * @private
1913
+ * @private
1896
1914
  */
1897
1915
  "_fnPrintHideNodes": function ( nNode )
1898
1916
  {
1899
1917
  var anHidden = this.dom.print.hidden;
1900
-
1918
+
1901
1919
  var nParent = nNode.parentNode;
1902
1920
  var nChildren = nParent.childNodes;
1903
1921
  for ( var i=0, iLen=nChildren.length ; i<iLen ; i++ )
@@ -1917,7 +1935,7 @@ TableTools.prototype = {
1917
1935
  }
1918
1936
  }
1919
1937
  }
1920
-
1938
+
1921
1939
  if ( nParent.nodeName != "BODY" )
1922
1940
  {
1923
1941
  this._fnPrintHideNodes( nParent );
@@ -1987,7 +2005,7 @@ TableTools.fnGetInstance = function ( node )
1987
2005
  {
1988
2006
  node = document.getElementById(node);
1989
2007
  }
1990
-
2008
+
1991
2009
  for ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ )
1992
2010
  {
1993
2011
  if ( TableTools._aInstances[i].s.master && TableTools._aInstances[i].dom.table == node )
@@ -2017,15 +2035,15 @@ TableTools._fnEventListen = function ( that, type, fn )
2017
2035
  "fn": fn
2018
2036
  } );
2019
2037
  };
2020
-
2038
+
2021
2039
 
2022
2040
  /**
2023
- * An event has occured - look up every listener and fire it off. We check that the event we are
2041
+ * An event has occurred - look up every listener and fire it off. We check that the event we are
2024
2042
  * going to fire is attached to the same table (using the table node as reference) before firing
2025
2043
  * @method _fnEventDispatch
2026
2044
  * @param {Object} that Scope of the listening function (i.e. 'this' in the caller)
2027
2045
  * @param {String} type Event type
2028
- * @param {Node} node Element that the event occured on (may be null)
2046
+ * @param {Node} node Element that the event occurred on (may be null)
2029
2047
  * @returns void
2030
2048
  * @private
2031
2049
  * @static
@@ -2142,7 +2160,7 @@ TableTools.BUTTONS = {
2142
2160
  "sPdfSize": "A4",
2143
2161
  "sPdfMessage": "",
2144
2162
  "fnClick": function( nButton, oConfig, flash ) {
2145
- this.fnSetText( flash,
2163
+ this.fnSetText( flash,
2146
2164
  "title:"+ this.fnGetTitle(oConfig) +"\n"+
2147
2165
  "message:"+ oConfig.sPdfMessage +"\n"+
2148
2166
  "colWidth:"+ this.fnCalcColRatios(oConfig) +"\n"+
@@ -2241,7 +2259,7 @@ TableTools.BUTTONS = {
2241
2259
  ],
2242
2260
  "success": oConfig.fnAjaxComplete,
2243
2261
  "dataType": "json",
2244
- "type": "POST",
2262
+ "type": "POST",
2245
2263
  "cache": false,
2246
2264
  "error": function () {
2247
2265
  alert( "Error detected when sending table data to server" );
@@ -2280,7 +2298,7 @@ TableTools.BUTTONS = {
2280
2298
 
2281
2299
 
2282
2300
  /**
2283
- * @namespace Classes used by TableTools - allows the styles to be overriden easily.
2301
+ * @namespace Classes used by TableTools - allows the styles to be override easily.
2284
2302
  * Note that when TableTools initialises it will take a copy of the classes object
2285
2303
  * and will use its internal copy for the remainder of its run time.
2286
2304
  */
@@ -2311,7 +2329,7 @@ TableTools.classes = {
2311
2329
 
2312
2330
 
2313
2331
  /**
2314
- * @namespace ThemeRoller classes - built in for compability with DataTables'
2332
+ * @namespace ThemeRoller classes - built in for compatibility with DataTables'
2315
2333
  * bJQueryUI option.
2316
2334
  */
2317
2335
  TableTools.classes_themeroller = {
@@ -2329,7 +2347,7 @@ TableTools.classes_themeroller = {
2329
2347
  * @namespace TableTools default settings for initialisation
2330
2348
  */
2331
2349
  TableTools.DEFAULTS = {
2332
- "sSwfPath": "media/swf/copy_csv_xls_pdf.swf",
2350
+ "sSwfPath": "/assets/dataTables/extras/swf/copy_csv_xls_pdf.swf",
2333
2351
  "sRowSelect": "none",
2334
2352
  "sSelectedClass": null,
2335
2353
  "fnPreRowSelect": null,
@@ -2365,7 +2383,7 @@ TableTools.prototype.CLASS = "TableTools";
2365
2383
  * @type String
2366
2384
  * @default See code
2367
2385
  */
2368
- TableTools.VERSION = "2.1.2";
2386
+ TableTools.VERSION = "2.1.3";
2369
2387
  TableTools.prototype.VERSION = TableTools.VERSION;
2370
2388
 
2371
2389
 
@@ -2384,12 +2402,12 @@ if ( typeof $.fn.dataTable == "function" &&
2384
2402
  {
2385
2403
  $.fn.dataTableExt.aoFeatures.push( {
2386
2404
  "fnInit": function( oDTSettings ) {
2387
- var oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ?
2405
+ var oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ?
2388
2406
  oDTSettings.oInit.oTableTools : {};
2389
-
2407
+
2390
2408
  var oTT = new TableTools( oDTSettings.oInstance, oOpts );
2391
2409
  TableTools._aInstances.push( oTT );
2392
-
2410
+
2393
2411
  return oTT.dom.container;
2394
2412
  },
2395
2413
  "cFeature": "T",
@@ -2403,4 +2421,4 @@ else
2403
2421
 
2404
2422
  $.fn.DataTable.TableTools = TableTools;
2405
2423
 
2406
- })(jQuery, window, document);
2424
+ })(jQuery, window, document);