Add datatables-1.9.4 and jquery-1.10.2 libraries
[proteocache.git] / webapp / resources / datatables-1.9.4 / media / src / core / core.ajax.js
1
2
3 /**
4  * Update the table using an Ajax call
5  *  @param {object} oSettings dataTables settings object
6  *  @returns {boolean} Block the table drawing or not
7  *  @memberof DataTable#oApi
8  */
9 function _fnAjaxUpdate( oSettings )
10 {
11         if ( oSettings.bAjaxDataGet )
12         {
13                 oSettings.iDraw++;
14                 _fnProcessingDisplay( oSettings, true );
15                 var iColumns = oSettings.aoColumns.length;
16                 var aoData = _fnAjaxParameters( oSettings );
17                 _fnServerParams( oSettings, aoData );
18                 
19                 oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData,
20                         function(json) {
21                                 _fnAjaxUpdateDraw( oSettings, json );
22                         }, oSettings );
23                 return false;
24         }
25         else
26         {
27                 return true;
28         }
29 }
30
31
32 /**
33  * Build up the parameters in an object needed for a server-side processing request
34  *  @param {object} oSettings dataTables settings object
35  *  @returns {bool} block the table drawing or not
36  *  @memberof DataTable#oApi
37  */
38 function _fnAjaxParameters( oSettings )
39 {
40         var iColumns = oSettings.aoColumns.length;
41         var aoData = [], mDataProp, aaSort, aDataSort;
42         var i, j;
43         
44         aoData.push( { "name": "sEcho",          "value": oSettings.iDraw } );
45         aoData.push( { "name": "iColumns",       "value": iColumns } );
46         aoData.push( { "name": "sColumns",       "value": _fnColumnOrdering(oSettings) } );
47         aoData.push( { "name": "iDisplayStart",  "value": oSettings._iDisplayStart } );
48         aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ?
49                 oSettings._iDisplayLength : -1 } );
50                 
51         for ( i=0 ; i<iColumns ; i++ )
52         {
53           mDataProp = oSettings.aoColumns[i].mData;
54                 aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } );
55         }
56         
57         /* Filtering */
58         if ( oSettings.oFeatures.bFilter !== false )
59         {
60                 aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } );
61                 aoData.push( { "name": "bRegex",  "value": oSettings.oPreviousSearch.bRegex } );
62                 for ( i=0 ; i<iColumns ; i++ )
63                 {
64                         aoData.push( { "name": "sSearch_"+i,     "value": oSettings.aoPreSearchCols[i].sSearch } );
65                         aoData.push( { "name": "bRegex_"+i,      "value": oSettings.aoPreSearchCols[i].bRegex } );
66                         aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } );
67                 }
68         }
69         
70         /* Sorting */
71         if ( oSettings.oFeatures.bSort !== false )
72         {
73                 var iCounter = 0;
74
75                 aaSort = ( oSettings.aaSortingFixed !== null ) ?
76                         oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
77                         oSettings.aaSorting.slice();
78                 
79                 for ( i=0 ; i<aaSort.length ; i++ )
80                 {
81                         aDataSort = oSettings.aoColumns[ aaSort[i][0] ].aDataSort;
82                         
83                         for ( j=0 ; j<aDataSort.length ; j++ )
84                         {
85                                 aoData.push( { "name": "iSortCol_"+iCounter,  "value": aDataSort[j] } );
86                                 aoData.push( { "name": "sSortDir_"+iCounter,  "value": aaSort[i][1] } );
87                                 iCounter++;
88                         }
89                 }
90                 aoData.push( { "name": "iSortingCols",   "value": iCounter } );
91                 
92                 for ( i=0 ; i<iColumns ; i++ )
93                 {
94                         aoData.push( { "name": "bSortable_"+i,  "value": oSettings.aoColumns[i].bSortable } );
95                 }
96         }
97         
98         return aoData;
99 }
100
101
102 /**
103  * Add Ajax parameters from plug-ins
104  *  @param {object} oSettings dataTables settings object
105  *  @param array {objects} aoData name/value pairs to send to the server
106  *  @memberof DataTable#oApi
107  */
108 function _fnServerParams( oSettings, aoData )
109 {
110         _fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] );
111 }
112
113
114 /**
115  * Data the data from the server (nuking the old) and redraw the table
116  *  @param {object} oSettings dataTables settings object
117  *  @param {object} json json data return from the server.
118  *  @param {string} json.sEcho Tracking flag for DataTables to match requests
119  *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
120  *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
121  *  @param {array} json.aaData The data to display on this page
122  *  @param {string} [json.sColumns] Column ordering (sName, comma separated)
123  *  @memberof DataTable#oApi
124  */
125 function _fnAjaxUpdateDraw ( oSettings, json )
126 {
127         if ( json.sEcho !== undefined )
128         {
129                 /* Protect against old returns over-writing a new one. Possible when you get
130                  * very fast interaction, and later queries are completed much faster
131                  */
132                 if ( json.sEcho*1 < oSettings.iDraw )
133                 {
134                         return;
135                 }
136                 else
137                 {
138                         oSettings.iDraw = json.sEcho * 1;
139                 }
140         }
141         
142         if ( !oSettings.oScroll.bInfinite ||
143                    (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) )
144         {
145                 _fnClearTable( oSettings );
146         }
147         oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10);
148         oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10);
149         
150         /* Determine if reordering is required */
151         var sOrdering = _fnColumnOrdering(oSettings);
152         var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering );
153         var aiIndex;
154         if ( bReOrder )
155         {
156                 aiIndex = _fnReOrderIndex( oSettings, json.sColumns );
157         }
158         
159         var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json );
160         for ( var i=0, iLen=aData.length ; i<iLen ; i++ )
161         {
162                 if ( bReOrder )
163                 {
164                         /* If we need to re-order, then create a new array with the correct order and add it */
165                         var aDataSorted = [];
166                         for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
167                         {
168                                 aDataSorted.push( aData[i][ aiIndex[j] ] );
169                         }
170                         _fnAddData( oSettings, aDataSorted );
171                 }
172                 else
173                 {
174                         /* No re-order required, sever got it "right" - just straight add */
175                         _fnAddData( oSettings, aData[i] );
176                 }
177         }
178         oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
179         
180         oSettings.bAjaxDataGet = false;
181         _fnDraw( oSettings );
182         oSettings.bAjaxDataGet = true;
183         _fnProcessingDisplay( oSettings, false );
184 }
185