2 +--------------------------------------------------------------------+
4 +--------------------------------------------------------------------+
5 | Copyright CiviCRM LLC (c) 2004-2018 |
6 +--------------------------------------------------------------------+
7 | This file is a part of CiviCRM. |
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. |
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. |
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 +--------------------------------------------------------------------+
27 <script type="text/javascript">
30 function getElementClass(element) {
31 return $(element).attr('class') || '';
34 // fetch the occurrence of element
35 function getRowId(row, str) {
37 $.each(row, function(i, n) {
38 if (str === $(n).attr('class')) {
45 // for date sorting see http://wiki.civicrm.org/confluence/display/CRMDOC/Sorting+Date+Fields+in+dataTables+Widget
46 var useAjax = {/literal}{if $useAjax}1{else}0{/if}{literal},
53 {/literal}{if isset($sourceUrl)}sourceUrl = "{$sourceUrl}";{/if}{literal}
54 useClass = 'pagerDisplay';
58 CRM.dataTableCount = CRM.dataTableCount || 1;
60 // FIXME: Rewriting DOM ids is probably a bad idea, and could be avoided
61 $('table.' + useClass).not('.dataTable').each(function() {
62 $(this).attr('id','option' + tcount + CRM.dataTableCount);
63 tableId.push(CRM.dataTableCount);
67 $.each(tableId, function(i,n){
68 var tabId = '#option' + tcount + n;
69 //get the object of first tr data row.
70 var tdObject = $(tabId + ' tr:nth(1) td');
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("_");
75 option = ( option.length > 1 ) ? option[1] : option[0];
76 var stype = 'numeric';
79 sortColumn += '[' + count + ', "asc" ],';
80 columns += '{"sClass": "'+ getElementClass( this ) +'"},';
85 if ( $(this).attr('class') == 'sortable' ){
86 sortColumn += '[' + count + ', "asc" ],';
88 var sortId = getRowId(tdObject, $(this).attr('id') +' hiddenElement' );
89 columns += '{ "render": function ( data, type, row ) { return "<div style=\'display:none\'>"+ data +"</div>" + row[sortId] ; }, "targets": sortColumn,"bUseRendered": false},';
92 columns += '{ "bSortable": false, "sClass": "'+ getElementClass( this ) +'"},';
95 columns += '{ "sType": "currency" },';
98 columns += '{"sType": "html"},';
101 if ( $(this).text() ) {
102 columns += '{"sClass": "'+ getElementClass( this ) +'"},';
104 columns += '{ "bSortable": false },';
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 + ']');
116 var noRecordFoundMsg = {/literal}'{ts escape="js"}None found.{/ts}'{literal};
120 oTable = $(tabId).dataTable({
121 "iDisplayLength": 25,
124 "aaSorting": sortColumn,
125 "aoColumns": columns,
128 "asStripClasses": [ "odd-row", "even-row" ],
129 "sPaginationType": "full_numbers",
130 "sDom": '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
132 "sAjaxSource": sourceUrl,
134 "sEmptyTable": noRecordFoundMsg,
135 "sZeroRecords": noRecordFoundMsg
137 "fnServerData": function ( sSource, aoData, fnCallback ) {
143 "success": fnCallback
148 oTable = $(tabId).dataTable({
149 "aaSorting": sortColumn,
151 "bLengthChange": true,
154 "asStripClasses": [ "odd-row", "even-row" ],
156 "aoColumns": columns,
160 "sEmptyTable": noRecordFoundMsg,
161 "sZeroRecords": noRecordFoundMsg
168 //plugin to sort on currency
169 cj.fn.dataTableExt.oSort['currency-asc'] = function(a,b) {
170 var symbol = "{/literal}{$config->defaultCurrencySymbol()}{literal}";
171 var x = (a == "-") ? 0 : a.replace( symbol, "" );
172 var y = (b == "-") ? 0 : b.replace( symbol, "" );
175 return ((x < y) ? -1 : ((x > y) ? 1 : 0));
178 cj.fn.dataTableExt.oSort['currency-desc'] = function(a,b) {
179 var symbol = "{/literal}{$config->defaultCurrencySymbol()}{literal}";
180 var x = (a == "-") ? 0 : a.replace( symbol, "" );
181 var y = (b == "-") ? 0 : b.replace( symbol, "" );
184 return ((x < y) ? 1 : ((x > y) ? -1 : 0));