datatables and myslice ajax js
[myslice.git] / portal / static / js / bootstrap.datatables.js
1 /* Set the defaults for DataTables initialisation */
2 $.extend( true, $.fn.dataTable.defaults, {
3         "sDom": "<'row'<'col-sm-12'<'pull-right'f><'pull-left'l>r<'clearfix'>>>t<'row'<'col-sm-12'<'pull-left'i><'pull-right'p><'clearfix'>>>",
4     "sPaginationType": "bs_normal",
5     "oLanguage": {
6         "sLengthMenu": "Show _MENU_ Rows",
7         "sSearch": ""
8     }
9 } );
10
11 /* Default class modification */
12 $.extend( $.fn.dataTableExt.oStdClasses, {
13         "sWrapper": "dataTables_wrapper form-inline"
14 } );
15
16 /* API method to get paging information */
17 $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
18 {
19         return {
20                 "iStart":         oSettings._iDisplayStart,
21                 "iEnd":           oSettings.fnDisplayEnd(),
22                 "iLength":        oSettings._iDisplayLength,
23                 "iTotal":         oSettings.fnRecordsTotal(),
24                 "iFilteredTotal": oSettings.fnRecordsDisplay(),
25                 "iPage":          oSettings._iDisplayLength === -1 ?
26                         0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
27                 "iTotalPages":    oSettings._iDisplayLength === -1 ?
28                         0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
29         };
30 };
31
32 /* Bootstrap style pagination control */
33 $.extend( $.fn.dataTableExt.oPagination, {
34         "bs_normal": {
35                 "fnInit": function( oSettings, nPaging, fnDraw ) {
36                         var oLang = oSettings.oLanguage.oPaginate;
37                         var fnClickHandler = function ( e ) {
38                                 e.preventDefault();
39                                 if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
40                                         fnDraw( oSettings );
41                                 }
42                         };
43                         $(nPaging).append(
44                                 '<ul class="pagination">'+
45                                         '<li class="prev disabled"><a href="#"><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;'+oLang.sPrevious+'</a></li>'+
46                                         '<li class="next disabled"><a href="#">'+oLang.sNext+'&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
47                                 '</ul>'
48                         );
49                         var els = $('a', nPaging);
50                         $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
51                         $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
52                 },
53                 "fnUpdate": function ( oSettings, fnDraw ) {
54                         var iListLength = 5;
55                         var oPaging = oSettings.oInstance.fnPagingInfo();
56                         var an = oSettings.aanFeatures.p;
57                         var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
58                         if ( oPaging.iTotalPages < iListLength) {
59                                 iStart = 1;
60                                 iEnd = oPaging.iTotalPages;
61                         }
62                         else if ( oPaging.iPage <= iHalf ) {
63                                 iStart = 1;
64                                 iEnd = iListLength;
65                         } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
66                                 iStart = oPaging.iTotalPages - iListLength + 1;
67                                 iEnd = oPaging.iTotalPages;
68                         } else {
69                                 iStart = oPaging.iPage - iHalf + 1;
70                                 iEnd = iStart + iListLength - 1;
71                         }
72                         for ( i=0, ien=an.length ; i<ien ; i++ ) {
73                                 $('li:gt(0)', an[i]).filter(':not(:last)').remove();
74                                 for ( j=iStart ; j<=iEnd ; j++ ) {
75                                         sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
76                                         $('<li '+sClass+'><a href="#">'+j+'</a></li>')
77                                                 .insertBefore( $('li:last', an[i])[0] )
78                                                 .bind('click', function (e) {
79                                                         e.preventDefault();
80                                                         if ( oSettings.oApi._fnPageChange(oSettings, parseInt($('a', this).text(),10)-1) ) {
81                                                                 fnDraw( oSettings );
82                                                         }
83                                                 } );
84                                 }
85                                 if ( oPaging.iPage === 0 ) {
86                                         $('li:first', an[i]).addClass('disabled');
87                                 } else {
88                                         $('li:first', an[i]).removeClass('disabled');
89                                 }
90
91                                 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
92                                         $('li:last', an[i]).addClass('disabled');
93                                 } else {
94                                         $('li:last', an[i]).removeClass('disabled');
95                                 }
96                         }
97                 }
98         },      
99         "bs_two_button": {
100                 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
101                 {
102                         var oLang = oSettings.oLanguage.oPaginate;
103                         var oClasses = oSettings.oClasses;
104                         var fnClickHandler = function ( e ) {
105                                 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
106                                 {
107                                         fnCallbackDraw( oSettings );
108                                 }
109                         };
110                         var sAppend = '<ul class="pagination">'+
111                                 '<li class="prev"><a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;'+oLang.sPrevious+'</a></li>'+
112                                 '<li class="next"><a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
113                                 '</ul>';
114                         $(nPaging).append( sAppend );
115                         var els = $('a', nPaging);
116                         var nPrevious = els[0],
117                                 nNext = els[1];
118                         oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
119                         oSettings.oApi._fnBindAction( nNext,     {action: "next"},     fnClickHandler );
120                         if ( !oSettings.aanFeatures.p )
121                         {
122                                 nPaging.id = oSettings.sTableId+'_paginate';
123                                 nPrevious.id = oSettings.sTableId+'_previous';
124                                 nNext.id = oSettings.sTableId+'_next';
125                                 nPrevious.setAttribute('aria-controls', oSettings.sTableId);
126                                 nNext.setAttribute('aria-controls', oSettings.sTableId);
127                         }
128                 },
129                 "fnUpdate": function ( oSettings, fnCallbackDraw )
130                 {
131                         if ( !oSettings.aanFeatures.p )
132                         {
133                                 return;
134                         }
135                         var oPaging = oSettings.oInstance.fnPagingInfo();
136                         var oClasses = oSettings.oClasses;
137                         var an = oSettings.aanFeatures.p;
138                         var nNode;
139                         for ( var i=0, iLen=an.length ; i<iLen ; i++ )
140                         {
141                                 if ( oPaging.iPage === 0 ) {
142                                         $('li:first', an[i]).addClass('disabled');
143                                 } else {
144                                         $('li:first', an[i]).removeClass('disabled');
145                                 }
146
147                                 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
148                                         $('li:last', an[i]).addClass('disabled');
149                                 } else {
150                                         $('li:last', an[i]).removeClass('disabled');
151                                 }
152                         }
153                 }
154         },
155         "bs_four_button": {
156                 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
157                         {
158                                 var oLang = oSettings.oLanguage.oPaginate;
159                                 var oClasses = oSettings.oClasses;
160                                 var fnClickHandler = function ( e ) {
161                                         e.preventDefault()
162                                         if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
163                                         {
164                                                 fnCallbackDraw( oSettings );
165                                         }
166                                 };
167                                 $(nPaging).append(
168                                         '<ul class="pagination">'+
169                                         '<li class="disabled"><a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'"><span class="glyphicon glyphicon-backward"></span>&nbsp;'+oLang.sFirst+'</a></li>'+
170                                         '<li class="disabled"><a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'"><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;'+oLang.sPrevious+'</a></li>'+
171                                         '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
172                                         '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'&nbsp;<span class="glyphicon glyphicon-forward"></span></a></li>'+
173                                         '</ul>'
174                                 );
175                                 var els = $('a', nPaging);
176                                 var nFirst = els[0],
177                                         nPrev = els[1],
178                                         nNext = els[2],
179                                         nLast = els[3];
180                                 oSettings.oApi._fnBindAction( nFirst, {action: "first"},    fnClickHandler );
181                                 oSettings.oApi._fnBindAction( nPrev,  {action: "previous"}, fnClickHandler );
182                                 oSettings.oApi._fnBindAction( nNext,  {action: "next"},     fnClickHandler );
183                                 oSettings.oApi._fnBindAction( nLast,  {action: "last"},     fnClickHandler );
184                                 if ( !oSettings.aanFeatures.p )
185                                 {
186                                         nPaging.id = oSettings.sTableId+'_paginate';
187                                         nFirst.id =oSettings.sTableId+'_first';
188                                         nPrev.id =oSettings.sTableId+'_previous';
189                                         nNext.id =oSettings.sTableId+'_next';
190                                         nLast.id =oSettings.sTableId+'_last';
191                                 }
192                         },
193                 "fnUpdate": function ( oSettings, fnCallbackDraw )
194                         {
195                                 if ( !oSettings.aanFeatures.p )
196                                 {
197                                         return;
198                                 }
199                                 var oPaging = oSettings.oInstance.fnPagingInfo();
200                                 var oClasses = oSettings.oClasses;
201                                 var an = oSettings.aanFeatures.p;
202                                 var nNode;
203                                 for ( var i=0, iLen=an.length ; i<iLen ; i++ )
204                                 {
205                                         if ( oPaging.iPage === 0 ) {
206                                                 $('li:eq(0)', an[i]).addClass('disabled');
207                                                 $('li:eq(1)', an[i]).addClass('disabled');
208                                         } else {
209                                                 $('li:eq(0)', an[i]).removeClass('disabled');
210                                                 $('li:eq(1)', an[i]).removeClass('disabled');
211                                         }
212
213                                         if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
214                                                 $('li:eq(2)', an[i]).addClass('disabled');
215                                                 $('li:eq(3)', an[i]).addClass('disabled');
216                                         } else {
217                                                 $('li:eq(2)', an[i]).removeClass('disabled');
218                                                 $('li:eq(3)', an[i]).removeClass('disabled');
219                                         }
220                                 }
221                         }
222         },
223         "bs_full": {
224                 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
225                         {
226                                 var oLang = oSettings.oLanguage.oPaginate;
227                                 var oClasses = oSettings.oClasses;
228                                 var fnClickHandler = function ( e ) {
229                                         if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
230                                         {
231                                                 fnCallbackDraw( oSettings );
232                                         }
233                                 };
234                                 $(nPaging).append(
235                                         '<ul class="pagination">'+
236                                         '<li class="disabled"><a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a></li>'+
237                                         '<li class="disabled"><a  tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a></li>'+
238                                         '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a></li>'+
239                                         '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a></li>'+
240                                         '</ul>'
241                                 );
242                                 var els = $('a', nPaging);
243                                 var nFirst = els[0],
244                                         nPrev = els[1],
245                                         nNext = els[2],
246                                         nLast = els[3];
247                                 oSettings.oApi._fnBindAction( nFirst, {action: "first"},    fnClickHandler );
248                                 oSettings.oApi._fnBindAction( nPrev,  {action: "previous"}, fnClickHandler );
249                                 oSettings.oApi._fnBindAction( nNext,  {action: "next"},     fnClickHandler );
250                                 oSettings.oApi._fnBindAction( nLast,  {action: "last"},     fnClickHandler );
251                                 if ( !oSettings.aanFeatures.p )
252                                 {
253                                         nPaging.id = oSettings.sTableId+'_paginate';
254                                         nFirst.id =oSettings.sTableId+'_first';
255                                         nPrev.id =oSettings.sTableId+'_previous';
256                                         nNext.id =oSettings.sTableId+'_next';
257                                         nLast.id =oSettings.sTableId+'_last';
258                                 }
259                         },
260                 "fnUpdate": function ( oSettings, fnCallbackDraw )
261                         {
262                                 if ( !oSettings.aanFeatures.p )
263                                 {
264                                         return;
265                                 }
266                                 var oPaging = oSettings.oInstance.fnPagingInfo();
267                                 var iPageCount = $.fn.dataTableExt.oPagination.iFullNumbersShowPages;
268                                 var iPageCountHalf = Math.floor(iPageCount / 2);
269                                 var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
270                                 var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
271                                 var sList = "";
272                                 var iStartButton, iEndButton, i, iLen;
273                                 var oClasses = oSettings.oClasses;
274                                 var anButtons, anStatic, nPaginateList, nNode;
275                                 var an = oSettings.aanFeatures.p;
276                                 var fnBind = function (j) {
277                                         oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
278                                                 if( oSettings.oApi._fnPageChange( oSettings, e.data.page ) ){
279                                                         fnCallbackDraw( oSettings );
280                                                 }
281                                                 e.preventDefault();
282                                         } );
283                                 };
284                                 if ( oSettings._iDisplayLength === -1 )
285                                 {
286                                         iStartButton = 1;
287                                         iEndButton = 1;
288                                         iCurrentPage = 1;
289                                 }
290                                 else if (iPages < iPageCount)
291                                 {
292                                         iStartButton = 1;
293                                         iEndButton = iPages;
294                                 }
295                                 else if (iCurrentPage <= iPageCountHalf)
296                                 {
297                                         iStartButton = 1;
298                                         iEndButton = iPageCount;
299                                 }
300                                 else if (iCurrentPage >= (iPages - iPageCountHalf))
301                                 {
302                                         iStartButton = iPages - iPageCount + 1;
303                                         iEndButton = iPages;
304                                 }
305                                 else
306                                 {
307                                         iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
308                                         iEndButton = iStartButton + iPageCount - 1;
309                                 }
310                                 for ( i=iStartButton ; i<=iEndButton ; i++ )
311                                 {
312                                         sList += (iCurrentPage !== i) ?
313                                                 '<li><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>' :
314                                                 '<li class="active"><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>';
315                                 }
316                                 for ( i=0, iLen=an.length ; i<iLen ; i++ )
317                                 {
318                                         nNode = an[i];
319                                         if ( !nNode.hasChildNodes() )
320                                         {
321                                                 continue;
322                                         }
323                                         $('li:gt(1)', an[i]).filter(':not(li:eq(-2))').filter(':not(li:eq(-1))').remove();
324                                         if ( oPaging.iPage === 0 ) {
325                                                 $('li:eq(0)', an[i]).addClass('disabled');
326                                                 $('li:eq(1)', an[i]).addClass('disabled');
327                                         } else {
328                                                 $('li:eq(0)', an[i]).removeClass('disabled');
329                                                 $('li:eq(1)', an[i]).removeClass('disabled');
330                                         }
331                                         if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
332                                                 $('li:eq(-1)', an[i]).addClass('disabled');
333                                                 $('li:eq(-2)', an[i]).addClass('disabled');
334                                         } else {
335                                                 $('li:eq(-1)', an[i]).removeClass('disabled');
336                                                 $('li:eq(-2)', an[i]).removeClass('disabled');
337                                         }
338                                         $(sList)
339                                                 .insertBefore($('li:eq(-2)', an[i]))
340                                                 .bind('click', function (e) {
341                                                         e.preventDefault();
342                                                         if ( oSettings.oApi._fnPageChange(oSettings, parseInt($('a', this).text(),10)-1) ) {
343                                                                 fnCallbackDraw( oSettings );
344                                                         }
345                                                 });
346                                 }
347                         }
348         }       
349 } );
350
351
352 /*
353  * TableTools Bootstrap compatibility
354  * Required TableTools 2.1+
355  */
356 if ( $.fn.DataTable.TableTools ) {
357         // Set the classes that TableTools uses to something suitable for Bootstrap
358         $.extend( true, $.fn.DataTable.TableTools.classes, {
359                 "container": "DTTT btn-group",
360                 "buttons": {
361                         "normal": "btn",
362                         "disabled": "disabled"
363                 },
364                 "collection": {
365                         "container": "DTTT_dropdown dropdown-menu",
366                         "buttons": {
367                                 "normal": "",
368                                 "disabled": "disabled"
369                         }
370                 },
371                 "print": {
372                         "info": "DTTT_print_info modal"
373                 },
374                 "select": {
375                         "row": "active"
376                 }
377         } );
378
379         // Have the collection use a bootstrap compatible dropdown
380         $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
381                 "collection": {
382                         "container": "ul",
383                         "button": "li",
384                         "liner": "a"
385                 }
386         } );
387 }