Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | {* |
2 | +--------------------------------------------------------------------+ | |
fee14197 | 3 | | CiviCRM version 5 | |
6a488035 | 4 | +--------------------------------------------------------------------+ |
6b83d5bd | 5 | | Copyright CiviCRM LLC (c) 2004-2019 | |
6a488035 TO |
6 | +--------------------------------------------------------------------+ |
7 | | This file is a part of CiviCRM. | | |
8 | | | | |
9 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
10 | | under the terms of the GNU Affero General Public License | | |
11 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | | |
12 | | | | |
13 | | CiviCRM is distributed in the hope that it will be useful, but | | |
14 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
15 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
16 | | See the GNU Affero General Public License for more details. | | |
17 | | | | |
18 | | You should have received a copy of the GNU Affero General Public | | |
19 | | License and the CiviCRM Licensing Exception along | | |
20 | | with this program; if not, contact CiviCRM LLC | | |
21 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
22 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
23 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
24 | +--------------------------------------------------------------------+ | |
25 | *} | |
26 | {literal} | |
27 | <script type="text/javascript"> | |
ae8f569f | 28 | CRM.$(function($) { |
6a488035 | 29 | |
ae8f569f CW |
30 | function getElementClass(element) { |
31 | return $(element).attr('class') || ''; | |
32 | } | |
6a488035 | 33 | |
ae8f569f | 34 | // fetch the occurrence of element |
a44340a5 | 35 | function getRowId(row, str) { |
ae8f569f | 36 | var optionId; |
a44340a5 CW |
37 | $.each(row, function(i, n) { |
38 | if (str === $(n).attr('class')) { | |
ae8f569f CW |
39 | optionId = i; |
40 | } | |
41 | }); | |
42 | return optionId; | |
43 | } | |
ebf2b57b | 44 | |
ae8f569f | 45 | // for date sorting see http://wiki.civicrm.org/confluence/display/CRMDOC/Sorting+Date+Fields+in+dataTables+Widget |
8bf54226 CW |
46 | var useAjax = {/literal}{if $useAjax}1{else}0{/if}{literal}, |
47 | sourceUrl = '', | |
48 | useClass = 'display', | |
49 | tcount = 1, | |
50 | tableId = []; | |
6a488035 | 51 | |
ae8f569f CW |
52 | if ( useAjax ) { |
53 | {/literal}{if isset($sourceUrl)}sourceUrl = "{$sourceUrl}";{/if}{literal} | |
54 | useClass = 'pagerDisplay'; | |
a44340a5 | 55 | tcount = 5; |
ae8f569f CW |
56 | } |
57 | ||
f25b7142 | 58 | CRM.dataTableCount = CRM.dataTableCount || 1; |
a44340a5 | 59 | |
8bf54226 | 60 | // FIXME: Rewriting DOM ids is probably a bad idea, and could be avoided |
f25b7142 CW |
61 | $('table.' + useClass).not('.dataTable').each(function() { |
62 | $(this).attr('id','option' + tcount + CRM.dataTableCount); | |
63 | tableId.push(CRM.dataTableCount); | |
64 | CRM.dataTableCount++; | |
ae8f569f | 65 | }); |
6a488035 | 66 | |
ae8f569f | 67 | $.each(tableId, function(i,n){ |
a44340a5 | 68 | var tabId = '#option' + tcount + n; |
ae8f569f | 69 | //get the object of first tr data row. |
a44340a5 | 70 | var tdObject = $(tabId + ' tr:nth(1) td'); |
ae8f569f CW |
71 | var id = -1; var count = 0; var columns=''; var sortColumn = ''; |
72 | //build columns array for sorting or not sorting | |
73 | $(tabId + ' th').each( function( ) { | |
74 | var option = $(this).prop('id').split("_"); | |
6a488035 | 75 | option = ( option.length > 1 ) ? option[1] : option[0]; |
a44340a5 | 76 | var stype = 'numeric'; |
6a488035 | 77 | switch( option ) { |
ae8f569f CW |
78 | case 'sortable': |
79 | sortColumn += '[' + count + ', "asc" ],'; | |
80 | columns += '{"sClass": "'+ getElementClass( this ) +'"},'; | |
6a488035 | 81 | break; |
ae8f569f CW |
82 | case 'date': |
83 | stype = 'date'; | |
84 | case 'order': | |
85 | if ( $(this).attr('class') == 'sortable' ){ | |
86 | sortColumn += '[' + count + ', "asc" ],'; | |
87 | } | |
a44340a5 | 88 | var sortId = getRowId(tdObject, $(this).attr('id') +' hiddenElement' ); |
ae8f569f | 89 | columns += '{ "render": function ( data, type, row ) { return "<div style=\'display:none\'>"+ data +"</div>" + row[sortId] ; }, "targets": sortColumn,"bUseRendered": false},'; |
6a488035 | 90 | break; |
ae8f569f CW |
91 | case 'nosort': |
92 | columns += '{ "bSortable": false, "sClass": "'+ getElementClass( this ) +'"},'; | |
6a488035 | 93 | break; |
ae8f569f CW |
94 | case 'currency': |
95 | columns += '{ "sType": "currency" },'; | |
6a488035 | 96 | break; |
ae8f569f CW |
97 | case 'link': |
98 | columns += '{"sType": "html"},'; | |
6a488035 | 99 | break; |
ae8f569f CW |
100 | default: |
101 | if ( $(this).text() ) { | |
102 | columns += '{"sClass": "'+ getElementClass( this ) +'"},'; | |
103 | } else { | |
104 | columns += '{ "bSortable": false },'; | |
105 | } | |
6a488035 TO |
106 | break; |
107 | } | |
108 | count++; | |
ae8f569f | 109 | }); |
a44340a5 CW |
110 | // Fixme: this could be done without eval |
111 | columns = columns.substring(0, columns.length - 1 ); | |
112 | sortColumn = sortColumn.substring(0, sortColumn.length - 1 ); | |
113 | eval('sortColumn =[' + sortColumn + ']'); | |
114 | eval('columns =[' + columns + ']'); | |
6a488035 | 115 | |
29bc93ee | 116 | var noRecordFoundMsg = {/literal}'{ts escape="js"}None found.{/ts}'{literal}; |
6a488035 | 117 | |
a44340a5 | 118 | var oTable; |
ae8f569f CW |
119 | if ( useAjax ) { |
120 | oTable = $(tabId).dataTable({ | |
a0def08c | 121 | "iDisplayLength": 25, |
a44340a5 CW |
122 | "bFilter": false, |
123 | "bAutoWidth": false, | |
124 | "aaSorting": sortColumn, | |
125 | "aoColumns": columns, | |
ae8f569f | 126 | "bProcessing": true, |
a44340a5 CW |
127 | "bJQueryUI": true, |
128 | "asStripClasses": [ "odd-row", "even-row" ], | |
ae8f569f | 129 | "sPaginationType": "full_numbers", |
a44340a5 | 130 | "sDom": '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>', |
ae8f569f CW |
131 | "bServerSide": true, |
132 | "sAjaxSource": sourceUrl, | |
634598a1 | 133 | "oLanguage":{ |
a44340a5 CW |
134 | "sEmptyTable": noRecordFoundMsg, |
135 | "sZeroRecords": noRecordFoundMsg | |
634598a1 | 136 | }, |
ae8f569f CW |
137 | "fnServerData": function ( sSource, aoData, fnCallback ) { |
138 | $.ajax( { | |
139 | "dataType": 'json', | |
140 | "type": "POST", | |
141 | "url": sSource, | |
142 | "data": aoData, | |
143 | "success": fnCallback | |
144 | }); | |
145 | } | |
146 | }); | |
147 | } else { | |
148 | oTable = $(tabId).dataTable({ | |
a44340a5 CW |
149 | "aaSorting": sortColumn, |
150 | "bPaginate": false, | |
ae8f569f | 151 | "bLengthChange": true, |
a44340a5 CW |
152 | "bFilter": false, |
153 | "bInfo": false, | |
154 | "asStripClasses": [ "odd-row", "even-row" ], | |
155 | "bAutoWidth": false, | |
156 | "aoColumns": columns, | |
157 | "bSort": true, | |
8f70219a | 158 | "sDom": 'ti', |
634598a1 | 159 | "oLanguage":{ |
a44340a5 CW |
160 | "sEmptyTable": noRecordFoundMsg, |
161 | "sZeroRecords": noRecordFoundMsg | |
634598a1 | 162 | } |
ae8f569f CW |
163 | }); |
164 | } | |
6a488035 | 165 | }); |
ae8f569f | 166 | }); |
6a488035 | 167 | |
ae8f569f | 168 | //plugin to sort on currency |
ae8f569f | 169 | cj.fn.dataTableExt.oSort['currency-asc'] = function(a,b) { |
3692ee93 | 170 | var symbol = "{/literal}{$config->defaultCurrencySymbol()}{literal}"; |
ae8f569f CW |
171 | var x = (a == "-") ? 0 : a.replace( symbol, "" ); |
172 | var y = (b == "-") ? 0 : b.replace( symbol, "" ); | |
173 | x = parseFloat( x ); | |
174 | y = parseFloat( y ); | |
175 | return ((x < y) ? -1 : ((x > y) ? 1 : 0)); | |
176 | }; | |
6a488035 | 177 | |
ae8f569f | 178 | cj.fn.dataTableExt.oSort['currency-desc'] = function(a,b) { |
3692ee93 | 179 | var symbol = "{/literal}{$config->defaultCurrencySymbol()}{literal}"; |
ae8f569f CW |
180 | var x = (a == "-") ? 0 : a.replace( symbol, "" ); |
181 | var y = (b == "-") ? 0 : b.replace( symbol, "" ); | |
182 | x = parseFloat( x ); | |
183 | y = parseFloat( y ); | |
184 | return ((x < y) ? 1 : ((x > y) ? -1 : 0)); | |
185 | }; | |
6a488035 TO |
186 | </script> |
187 | {/literal} |