File: core.info.js

package info (click to toggle)
datatables.js 1.10.21%2Bdfsg-2%2Bdeb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 22,604 kB
  • sloc: javascript: 64,254; xml: 10,441; php: 4,623; sh: 523; makefile: 21
file content (98 lines) | stat: -rw-r--r-- 2,451 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/**
 * Generate the node required for the info display
 *  @param {object} oSettings dataTables settings object
 *  @returns {node} Information element
 *  @memberof DataTable#oApi
 */
function _fnFeatureHtmlInfo ( settings )
{
	var
		tid = settings.sTableId,
		nodes = settings.aanFeatures.i,
		n = $('<div/>', {
			'class': settings.oClasses.sInfo,
			'id': ! nodes ? tid+'_info' : null
		} );

	if ( ! nodes ) {
		// Update display on each draw
		settings.aoDrawCallback.push( {
			"fn": _fnUpdateInfo,
			"sName": "information"
		} );

		n
			.attr( 'role', 'status' )
			.attr( 'aria-live', 'polite' );

		// Table is described by our info div
		$(settings.nTable).attr( 'aria-describedby', tid+'_info' );
	}

	return n[0];
}


/**
 * Update the information elements in the display
 *  @param {object} settings dataTables settings object
 *  @memberof DataTable#oApi
 */
function _fnUpdateInfo ( settings )
{
	/* Show information about the table */
	var nodes = settings.aanFeatures.i;
	if ( nodes.length === 0 ) {
		return;
	}

	var
		lang  = settings.oLanguage,
		start = settings._iDisplayStart+1,
		end   = settings.fnDisplayEnd(),
		max   = settings.fnRecordsTotal(),
		total = settings.fnRecordsDisplay(),
		out   = total ?
			lang.sInfo :
			lang.sInfoEmpty;

	if ( total !== max ) {
		/* Record set after filtering */
		out += ' ' + lang.sInfoFiltered;
	}

	// Convert the macros
	out += lang.sInfoPostFix;
	out = _fnInfoMacros( settings, out );

	var callback = lang.fnInfoCallback;
	if ( callback !== null ) {
		out = callback.call( settings.oInstance,
			settings, start, end, max, total, out
		);
	}

	$(nodes).html( out );
}


function _fnInfoMacros ( settings, str )
{
	// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
	// internally
	var
		formatter  = settings.fnFormatNumber,
		start      = settings._iDisplayStart+1,
		len        = settings._iDisplayLength,
		vis        = settings.fnRecordsDisplay(),
		all        = len === -1;

	return str.
		replace(/_START_/g, formatter.call( settings, start ) ).
		replace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).
		replace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).
		replace(/_TOTAL_/g, formatter.call( settings, vis ) ).
		replace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).
		replace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );
}