1 |
|
2 |
|
3 |
/** |
4 |
* DataTables extension options and plug-ins. This namespace acts as a collection "area" |
5 |
* for plug-ins that can be used to extend the default DataTables behaviour - indeed many |
6 |
* of the build in methods use this method to provide their own capabilities (sorting methods |
7 |
* for example). |
8 |
* |
9 |
* Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed |
10 |
* and modified by plug-ins. |
11 |
* @namespace |
12 |
*/ |
13 |
DataTable.models.ext = { |
14 |
/** |
15 |
* Plug-in filtering functions - this method of filtering is complimentary to the default |
16 |
* type based filtering, and a lot more comprehensive as it allows you complete control |
17 |
* over the filtering logic. Each element in this array is a function (parameters |
18 |
* described below) that is called for every row in the table, and your logic decides if |
19 |
* it should be included in the filtered data set or not. |
20 |
* <ul> |
21 |
* <li> |
22 |
* Function input parameters: |
23 |
* <ul> |
24 |
* <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> |
25 |
* <li>{array|object} Data for the row to be processed (same as the original format |
26 |
* that was passed in as the data source, or an array from a DOM data source</li> |
27 |
* <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can |
28 |
* be useful to retrieve the TR element if you need DOM interaction.</li> |
29 |
* </ul> |
30 |
* </li> |
31 |
* <li> |
32 |
* Function return: |
33 |
* <ul> |
34 |
* <li>{boolean} Include the row in the filtered result set (true) or not (false)</li> |
35 |
* </ul> |
36 |
* </il> |
37 |
* </ul> |
38 |
* @type array |
39 |
* @default [] |
40 |
* |
41 |
* @example |
42 |
* // The following example shows custom filtering being applied to the fourth column (i.e. |
43 |
* // the aData[3] index) based on two input values from the end-user, matching the data in |
44 |
* // a certain range. |
45 |
* $.fn.dataTableExt.afnFiltering.push( |
46 |
* function( oSettings, aData, iDataIndex ) { |
47 |
* var iMin = document.getElementById('min').value * 1; |
48 |
* var iMax = document.getElementById('max').value * 1; |
49 |
* var iVersion = aData[3] == "-" ? 0 : aData[3]*1; |
50 |
* if ( iMin == "" && iMax == "" ) { |
51 |
* return true; |
52 |
* } |
53 |
* else if ( iMin == "" && iVersion < iMax ) { |
54 |
* return true; |
55 |
* } |
56 |
* else if ( iMin < iVersion && "" == iMax ) { |
57 |
* return true; |
58 |
* } |
59 |
* else if ( iMin < iVersion && iVersion < iMax ) { |
60 |
* return true; |
61 |
* } |
62 |
* return false; |
63 |
* } |
64 |
* ); |
65 |
*/ |
66 |
"afnFiltering": [], |
67 |
|
68 |
|
69 |
/** |
70 |
* Plug-in sorting functions - this method of sorting is complimentary to the default type |
71 |
* based sorting that DataTables does automatically, allowing much greater control over the |
72 |
* the data that is being used to sort a column. This is useful if you want to do sorting |
73 |
* based on live data (for example the contents of an 'input' element) rather than just the |
74 |
* static string that DataTables knows of. The way these plug-ins work is that you create |
75 |
* an array of the values you wish to be sorted for the column in question and then return |
76 |
* that array. Which pre-sorting function is run here depends on the sSortDataType parameter |
77 |
* that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort |
78 |
* data. |
79 |
* <ul> |
80 |
* <li> |
81 |
* Function input parameters: |
82 |
* <ul> |
83 |
* <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> |
84 |
* <li>{int} Target column index</li> |
85 |
* </ul> |
86 |
* </li> |
87 |
* <li> |
88 |
* Function return: |
89 |
* <ul> |
90 |
* <li>{array} Data for the column to be sorted upon</li> |
91 |
* </ul> |
92 |
* </il> |
93 |
* </ul> |
94 |
* |
95 |
* Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for |
96 |
* the different uses that DataTables can put the data to. Specifically <i>mData</i> when |
97 |
* used as a function will give you a 'type' (sorting, filtering etc) that you can use to |
98 |
* prepare the data as required for the different types. As such, this method is deprecated. |
99 |
* @type array |
100 |
* @default [] |
101 |
* @deprecated |
102 |
* |
103 |
* @example |
104 |
* // Updating the cached sorting information with user entered values in HTML input elements |
105 |
* jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn ) |
106 |
* { |
107 |
* var aData = []; |
108 |
* $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { |
109 |
* aData.push( this.value ); |
110 |
* } ); |
111 |
* return aData; |
112 |
* } |
113 |
*/ |
114 |
"afnSortData": [], |
115 |
|
116 |
|
117 |
/** |
118 |
* Feature plug-ins - This is an array of objects which describe the feature plug-ins that are |
119 |
* available to DataTables. These feature plug-ins are accessible through the sDom initialisation |
120 |
* option. As such, each feature plug-in must describe a function that is used to initialise |
121 |
* itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name |
122 |
* of the feature (sFeature). Thus the objects attached to this method must provide: |
123 |
* <ul> |
124 |
* <li>{function} fnInit Initialisation of the plug-in |
125 |
* <ul> |
126 |
* <li> |
127 |
* Function input parameters: |
128 |
* <ul> |
129 |
* <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> |
130 |
* </ul> |
131 |
* </li> |
132 |
* <li> |
133 |
* Function return: |
134 |
* <ul> |
135 |
* <li>{node|null} The element which contains your feature. Note that the return |
136 |
* may also be void if your plug-in does not require to inject any DOM elements |
137 |
* into DataTables control (sDom) - for example this might be useful when |
138 |
* developing a plug-in which allows table control via keyboard entry.</li> |
139 |
* </ul> |
140 |
* </il> |
141 |
* </ul> |
142 |
* </li> |
143 |
* <li>{character} cFeature Character that will be matched in sDom - case sensitive</li> |
144 |
* <li>{string} sFeature Feature name</li> |
145 |
* </ul> |
146 |
* @type array |
147 |
* @default [] |
148 |
* |
149 |
* @example |
150 |
* // How TableTools initialises itself. |
151 |
* $.fn.dataTableExt.aoFeatures.push( { |
152 |
* "fnInit": function( oSettings ) { |
153 |
* return new TableTools( { "oDTSettings": oSettings } ); |
154 |
* }, |
155 |
* "cFeature": "T", |
156 |
* "sFeature": "TableTools" |
157 |
* } ); |
158 |
*/ |
159 |
"aoFeatures": [], |
160 |
|
161 |
|
162 |
/** |
163 |
* Type detection plug-in functions - DataTables utilises types to define how sorting and |
164 |
* filtering behave, and types can be either be defined by the developer (sType for the |
165 |
* column) or they can be automatically detected by the methods in this array. The functions |
166 |
* defined in the array are quite simple, taking a single parameter (the data to analyse) |
167 |
* and returning the type if it is a known type, or null otherwise. |
168 |
* <ul> |
169 |
* <li> |
170 |
* Function input parameters: |
171 |
* <ul> |
172 |
* <li>{*} Data from the column cell to be analysed</li> |
173 |
* </ul> |
174 |
* </li> |
175 |
* <li> |
176 |
* Function return: |
177 |
* <ul> |
178 |
* <li>{string|null} Data type detected, or null if unknown (and thus pass it |
179 |
* on to the other type detection functions.</li> |
180 |
* </ul> |
181 |
* </il> |
182 |
* </ul> |
183 |
* @type array |
184 |
* @default [] |
185 |
* |
186 |
* @example |
187 |
* // Currency type detection plug-in: |
188 |
* jQuery.fn.dataTableExt.aTypes.push( |
189 |
* function ( sData ) { |
190 |
* var sValidChars = "0123456789.-"; |
191 |
* var Char; |
192 |
* |
193 |
* // Check the numeric part |
194 |
* for ( i=1 ; i<sData.length ; i++ ) { |
195 |
* Char = sData.charAt(i); |
196 |
* if (sValidChars.indexOf(Char) == -1) { |
197 |
* return null; |
198 |
* } |
199 |
* } |
200 |
* |
201 |
* // Check prefixed by currency |
202 |
* if ( sData.charAt(0) == '$' || sData.charAt(0) == '£' ) { |
203 |
* return 'currency'; |
204 |
* } |
205 |
* return null; |
206 |
* } |
207 |
* ); |
208 |
*/ |
209 |
"aTypes": [], |
210 |
|
211 |
|
212 |
/** |
213 |
* Provide a common method for plug-ins to check the version of DataTables being used, |
214 |
* in order to ensure compatibility. |
215 |
* @type function |
216 |
* @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note |
217 |
* that the formats "X" and "X.Y" are also acceptable. |
218 |
* @returns {boolean} true if this version of DataTables is greater or equal to the |
219 |
* required version, or false if this version of DataTales is not suitable |
220 |
* |
221 |
* @example |
222 |
* $(document).ready(function() { |
223 |
* var oTable = $('#example').dataTable(); |
224 |
* alert( oTable.fnVersionCheck( '1.9.0' ) ); |
225 |
* } ); |
226 |
*/ |
227 |
"fnVersionCheck": DataTable.fnVersionCheck, |
228 |
|
229 |
|
230 |
/** |
231 |
* Index for what 'this' index API functions should use |
232 |
* @type int |
233 |
* @default 0 |
234 |
*/ |
235 |
"iApiIndex": 0, |
236 |
|
237 |
|
238 |
/** |
239 |
* Pre-processing of filtering data plug-ins - When you assign the sType for a column |
240 |
* (or have it automatically detected for you by DataTables or a type detection plug-in), |
241 |
* you will typically be using this for custom sorting, but it can also be used to provide |
242 |
* custom filtering by allowing you to pre-processing the data and returning the data in |
243 |
* the format that should be filtered upon. This is done by adding functions this object |
244 |
* with a parameter name which matches the sType for that target column. This is the |
245 |
* corollary of <i>afnSortData</i> for filtering data. |
246 |
* <ul> |
247 |
* <li> |
248 |
* Function input parameters: |
249 |
* <ul> |
250 |
* <li>{*} Data from the column cell to be prepared for filtering</li> |
251 |
* </ul> |
252 |
* </li> |
253 |
* <li> |
254 |
* Function return: |
255 |
* <ul> |
256 |
* <li>{string|null} Formatted string that will be used for the filtering.</li> |
257 |
* </ul> |
258 |
* </il> |
259 |
* </ul> |
260 |
* |
261 |
* Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for |
262 |
* the different uses that DataTables can put the data to. Specifically <i>mData</i> when |
263 |
* used as a function will give you a 'type' (sorting, filtering etc) that you can use to |
264 |
* prepare the data as required for the different types. As such, this method is deprecated. |
265 |
* @type object |
266 |
* @default {} |
267 |
* @deprecated |
268 |
* |
269 |
* @example |
270 |
* $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) { |
271 |
* return sData.replace(/\n/g," ").replace( /<.*?>/g, "" ); |
272 |
* } |
273 |
*/ |
274 |
"ofnSearch": {}, |
275 |
|
276 |
|
277 |
/** |
278 |
* Container for all private functions in DataTables so they can be exposed externally |
279 |
* @type object |
280 |
* @default {} |
281 |
*/ |
282 |
"oApi": {}, |
283 |
|
284 |
|
285 |
/** |
286 |
* Storage for the various classes that DataTables uses |
287 |
* @type object |
288 |
* @default {} |
289 |
*/ |
290 |
"oStdClasses": {}, |
291 |
|
292 |
|
293 |
/** |
294 |
* Storage for the various classes that DataTables uses - jQuery UI suitable |
295 |
* @type object |
296 |
* @default {} |
297 |
*/ |
298 |
"oJUIClasses": {}, |
299 |
|
300 |
|
301 |
/** |
302 |
* Pagination plug-in methods - The style and controls of the pagination can significantly |
303 |
* impact on how the end user interacts with the data in your table, and DataTables allows |
304 |
* the addition of pagination controls by extending this object, which can then be enabled |
305 |
* through the <i>sPaginationType</i> initialisation parameter. Each pagination type that |
306 |
* is added is an object (the property name of which is what <i>sPaginationType</i> refers |
307 |
* to) that has two properties, both methods that are used by DataTables to update the |
308 |
* control's state. |
309 |
* <ul> |
310 |
* <li> |
311 |
* fnInit - Initialisation of the paging controls. Called only during initialisation |
312 |
* of the table. It is expected that this function will add the required DOM elements |
313 |
* to the page for the paging controls to work. The element pointer |
314 |
* 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging |
315 |
* controls (note that this is a 2D array to allow for multiple instances of each |
316 |
* DataTables DOM element). It is suggested that you add the controls to this element |
317 |
* as children |
318 |
* <ul> |
319 |
* <li> |
320 |
* Function input parameters: |
321 |
* <ul> |
322 |
* <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> |
323 |
* <li>{node} Container into which the pagination controls must be inserted</li> |
324 |
* <li>{function} Draw callback function - whenever the controls cause a page |
325 |
* change, this method must be called to redraw the table.</li> |
326 |
* </ul> |
327 |
* </li> |
328 |
* <li> |
329 |
* Function return: |
330 |
* <ul> |
331 |
* <li>No return required</li> |
332 |
* </ul> |
333 |
* </il> |
334 |
* </ul> |
335 |
* </il> |
336 |
* <li> |
337 |
* fnInit - This function is called whenever the paging status of the table changes and is |
338 |
* typically used to update classes and/or text of the paging controls to reflex the new |
339 |
* status. |
340 |
* <ul> |
341 |
* <li> |
342 |
* Function input parameters: |
343 |
* <ul> |
344 |
* <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> |
345 |
* <li>{function} Draw callback function - in case you need to redraw the table again |
346 |
* or attach new event listeners</li> |
347 |
* </ul> |
348 |
* </li> |
349 |
* <li> |
350 |
* Function return: |
351 |
* <ul> |
352 |
* <li>No return required</li> |
353 |
* </ul> |
354 |
* </il> |
355 |
* </ul> |
356 |
* </il> |
357 |
* </ul> |
358 |
* @type object |
359 |
* @default {} |
360 |
* |
361 |
* @example |
362 |
* $.fn.dataTableExt.oPagination.four_button = { |
363 |
* "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) { |
364 |
* nFirst = document.createElement( 'span' ); |
365 |
* nPrevious = document.createElement( 'span' ); |
366 |
* nNext = document.createElement( 'span' ); |
367 |
* nLast = document.createElement( 'span' ); |
368 |
* |
369 |
* nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) ); |
370 |
* nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) ); |
371 |
* nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) ); |
372 |
* nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) ); |
373 |
* |
374 |
* nFirst.className = "paginate_button first"; |
375 |
* nPrevious.className = "paginate_button previous"; |
376 |
* nNext.className="paginate_button next"; |
377 |
* nLast.className = "paginate_button last"; |
378 |
* |
379 |
* nPaging.appendChild( nFirst ); |
380 |
* nPaging.appendChild( nPrevious ); |
381 |
* nPaging.appendChild( nNext ); |
382 |
* nPaging.appendChild( nLast ); |
383 |
* |
384 |
* $(nFirst).click( function () { |
385 |
* oSettings.oApi._fnPageChange( oSettings, "first" ); |
386 |
* fnCallbackDraw( oSettings ); |
387 |
* } ); |
388 |
* |
389 |
* $(nPrevious).click( function() { |
390 |
* oSettings.oApi._fnPageChange( oSettings, "previous" ); |
391 |
* fnCallbackDraw( oSettings ); |
392 |
* } ); |
393 |
* |
394 |
* $(nNext).click( function() { |
395 |
* oSettings.oApi._fnPageChange( oSettings, "next" ); |
396 |
* fnCallbackDraw( oSettings ); |
397 |
* } ); |
398 |
* |
399 |
* $(nLast).click( function() { |
400 |
* oSettings.oApi._fnPageChange( oSettings, "last" ); |
401 |
* fnCallbackDraw( oSettings ); |
402 |
* } ); |
403 |
* |
404 |
* $(nFirst).bind( 'selectstart', function () { return false; } ); |
405 |
* $(nPrevious).bind( 'selectstart', function () { return false; } ); |
406 |
* $(nNext).bind( 'selectstart', function () { return false; } ); |
407 |
* $(nLast).bind( 'selectstart', function () { return false; } ); |
408 |
* }, |
409 |
* |
410 |
* "fnUpdate": function ( oSettings, fnCallbackDraw ) { |
411 |
* if ( !oSettings.aanFeatures.p ) { |
412 |
* return; |
413 |
* } |
414 |
* |
415 |
* // Loop over each instance of the pager |
416 |
* var an = oSettings.aanFeatures.p; |
417 |
* for ( var i=0, iLen=an.length ; i<iLen ; i++ ) { |
418 |
* var buttons = an[i].getElementsByTagName('span'); |
419 |
* if ( oSettings._iDisplayStart === 0 ) { |
420 |
* buttons[0].className = "paginate_disabled_previous"; |
421 |
* buttons[1].className = "paginate_disabled_previous"; |
422 |
* } |
423 |
* else { |
424 |
* buttons[0].className = "paginate_enabled_previous"; |
425 |
* buttons[1].className = "paginate_enabled_previous"; |
426 |
* } |
427 |
* |
428 |
* if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) { |
429 |
* buttons[2].className = "paginate_disabled_next"; |
430 |
* buttons[3].className = "paginate_disabled_next"; |
431 |
* } |
432 |
* else { |
433 |
* buttons[2].className = "paginate_enabled_next"; |
434 |
* buttons[3].className = "paginate_enabled_next"; |
435 |
* } |
436 |
* } |
437 |
* } |
438 |
* }; |
439 |
*/ |
440 |
"oPagination": {}, |
441 |
|
442 |
|
443 |
/** |
444 |
* Sorting plug-in methods - Sorting in DataTables is based on the detected type of the |
445 |
* data column (you can add your own type detection functions, or override automatic |
446 |
* detection using sType). With this specific type given to the column, DataTables will |
447 |
* apply the required sort from the functions in the object. Each sort type must provide |
448 |
* two mandatory methods, one each for ascending and descending sorting, and can optionally |
449 |
* provide a pre-formatting method that will help speed up sorting by allowing DataTables |
450 |
* to pre-format the sort data only once (rather than every time the actual sort functions |
451 |
* are run). The two sorting functions are typical Javascript sort methods: |
452 |
* <ul> |
453 |
* <li> |
454 |
* Function input parameters: |
455 |
* <ul> |
456 |
* <li>{*} Data to compare to the second parameter</li> |
457 |
* <li>{*} Data to compare to the first parameter</li> |
458 |
* </ul> |
459 |
* </li> |
460 |
* <li> |
461 |
* Function return: |
462 |
* <ul> |
463 |
* <li>{int} Sorting match: <0 if first parameter should be sorted lower than |
464 |
* the second parameter, ===0 if the two parameters are equal and >0 if |
465 |
* the first parameter should be sorted height than the second parameter.</li> |
466 |
* </ul> |
467 |
* </il> |
468 |
* </ul> |
469 |
* @type object |
470 |
* @default {} |
471 |
* |
472 |
* @example |
473 |
* // Case-sensitive string sorting, with no pre-formatting method |
474 |
* $.extend( $.fn.dataTableExt.oSort, { |
475 |
* "string-case-asc": function(x,y) { |
476 |
* return ((x < y) ? -1 : ((x > y) ? 1 : 0)); |
477 |
* }, |
478 |
* "string-case-desc": function(x,y) { |
479 |
* return ((x < y) ? 1 : ((x > y) ? -1 : 0)); |
480 |
* } |
481 |
* } ); |
482 |
* |
483 |
* @example |
484 |
* // Case-insensitive string sorting, with pre-formatting |
485 |
* $.extend( $.fn.dataTableExt.oSort, { |
486 |
* "string-pre": function(x) { |
487 |
* return x.toLowerCase(); |
488 |
* }, |
489 |
* "string-asc": function(x,y) { |
490 |
* return ((x < y) ? -1 : ((x > y) ? 1 : 0)); |
491 |
* }, |
492 |
* "string-desc": function(x,y) { |
493 |
* return ((x < y) ? 1 : ((x > y) ? -1 : 0)); |
494 |
* } |
495 |
* } ); |
496 |
*/ |
497 |
"oSort": {}, |
498 |
|
499 |
|
500 |
/** |
501 |
* Version string for plug-ins to check compatibility. Allowed format is |
502 |
* a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and |
503 |
* e are optional |
504 |
* @type string |
505 |
* @default Version number |
506 |
*/ |
507 |
"sVersion": DataTable.version, |
508 |
|
509 |
|
510 |
/** |
511 |
* How should DataTables report an error. Can take the value 'alert' or 'throw' |
512 |
* @type string |
513 |
* @default alert |
514 |
*/ |
515 |
"sErrMode": "alert", |
516 |
|
517 |
|
518 |
/** |
519 |
* Store information for DataTables to access globally about other instances |
520 |
* @namespace |
521 |
* @private |
522 |
*/ |
523 |
"_oExternConfig": { |
524 |
/* int:iNextUnique - next unique number for an instance */ |
525 |
"iNextUnique": 0 |
526 |
} |
527 |
}; |