Merge pull request #5943 from eileenmcnaughton/master
[civicrm-core.git] / templates / CRM / common / jsortable.tpl
index 44da77eec7a1e01ba57b183518985ff96681d19a..58139f21ed15e359b7543ce3eebbc71ea50cff1f 100644 (file)
@@ -1,8 +1,8 @@
 {*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.5                                                |
+ | CiviCRM version 4.6                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2014                                |
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
     }
 
     // fetch the occurrence of element
-    function getRowId(row,str) {
+    function getRowId(row, str) {
       var optionId;
-      $.each( row, function(i, n) {
-        if( str === $(n).attr('class') ) {
+      $.each(row, function(i, n) {
+        if (str === $(n).attr('class')) {
           optionId = i;
         }
       });
       return optionId;
     }
-    
+
     // for date sorting see http://wiki.civicrm.org/confluence/display/CRMDOC/Sorting+Date+Fields+in+dataTables+Widget
-    var useAjax = {/literal}{if $useAjax}1{else}0{/if}{literal};
-    var sortEnabled = true;
-    var sourceUrl = '';
-    var useClass  = 'display';
+    var useAjax = {/literal}{if $useAjax}1{else}0{/if}{literal},
+      sourceUrl = '',
+      useClass  = 'display',
+      tcount = 1,
+      tableId = [];
 
-    var tcount =1;
     if ( useAjax ) {
       {/literal}{if isset($sourceUrl)}sourceUrl = "{$sourceUrl}";{/if}{literal}
       useClass = 'pagerDisplay';
-      tcount =5;
+      tcount = 5;
     }
 
-    var tableId = '';
-    var count   = 1;
-    
-    //rename id of table with sequence
-    //and create the object for navigation
-    $('table.' + useClass).each(function(){
-      $(this).attr('id','option' + tcount + count);
-      tableId += count + ',';
-      count++;
-    });
+    CRM.dataTableCount = CRM.dataTableCount || 1;
 
-    //remove last comma
-    tableId = tableId.substring(0, tableId.length - 1 );
-    eval('tableId =[' + tableId + ']');
+    // FIXME: Rewriting DOM ids is probably a bad idea, and could be avoided
+    $('table.' + useClass).not('.dataTable').each(function() {
+      $(this).attr('id','option' + tcount + CRM.dataTableCount);
+      tableId.push(CRM.dataTableCount);
+      CRM.dataTableCount++;
+    });
 
     $.each(tableId, function(i,n){
-      tabId = '#option' + tcount + n;
+      var tabId = '#option' + tcount + n;
       //get the object of first tr data row.
-      tdObject = $(tabId + ' tr:nth(1) td');
+      var tdObject = $(tabId + ' tr:nth(1) td');
       var id = -1; var count = 0; var columns=''; var sortColumn = '';
       //build columns array for sorting or not sorting
       $(tabId + ' th').each( function( ) {
         var option = $(this).prop('id').split("_");
         option  = ( option.length > 1 ) ? option[1] : option[0];
-        stype   = 'numeric';
+        var stype   = 'numeric';
         switch( option ) {
           case 'sortable':
             sortColumn += '[' + count + ', "asc" ],';
@@ -91,8 +85,7 @@
             if ( $(this).attr('class') == 'sortable' ){
               sortColumn += '[' + count + ', "asc" ],';
             }
-            sortId   = getRowId(tdObject, $(this).attr('id') +' hiddenElement' );
-            sortEnabled = true;
+            var sortId   = getRowId(tdObject, $(this).attr('id') +' hiddenElement' );
             columns += '{ "render": function ( data, type, row ) { return "<div style=\'display:none\'>"+ data +"</div>" + row[sortId] ; }, "targets": sortColumn,"bUseRendered": false},';
             break;
           case 'nosort':
         }
         count++;
       });
+      // Fixme: this could be done without eval
       columns    = columns.substring(0, columns.length - 1 );
       sortColumn = sortColumn.substring(0, sortColumn.length - 1 );
       eval('sortColumn =[' + sortColumn + ']');
       eval('columns =[' + columns + ']');
 
-      var currTable = $(tabId);
-      if (currTable) {
-        // contains the dataTables master records
-        var s = $(document).dataTableSettings;
-        if (s != 'undefined') {
-          var len = s.length;
-          for (var i=0; i < len; i++) {
-            // if already exists, remove from the array
-            if (s[i].sInstance = tabId) {
-              s.splice(i,1);
-            }
-          }
-        }
-      }
-
-      var noRecordFoundMsg  = {/literal}'{ts escape="js"}There are no records.{/ts}'{literal};
+      var noRecordFoundMsg  = {/literal}'{ts escape="js"}None found.{/ts}'{literal};
 
-      oTable = null;
+      var oTable;
       if ( useAjax ) {
         oTable = $(tabId).dataTable({
-          "bFilter"    : false,
-          "bAutoWidth" : false,
-          "aaSorting"  : sortColumn,
-          "aoColumns"  : columns,
+          "bFilter": false,
+          "bAutoWidth": false,
+          "aaSorting": sortColumn,
+          "aoColumns": columns,
           "bProcessing": true,
-          "bJQueryUI"  : true,
-          "asStripClasses" : [ "odd-row", "even-row" ],
+          "bJQueryUI": true,
+          "asStripClasses": [ "odd-row", "even-row" ],
           "sPaginationType": "full_numbers",
-          "sDom"       : '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
+          "sDom": '<"crm-datatable-pager-top"lfp>rt<"crm-datatable-pager-bottom"ip>',
           "bServerSide": true,
           "sAjaxSource": sourceUrl,
-          "oLanguage":{"sEmptyTable"  : noRecordFoundMsg,
-            "sZeroRecords" : noRecordFoundMsg },
-
-          {/literal}{if !empty($callBack)}{literal}
-          "fnDrawCallback": function() { checkSelected(); },
-          {/literal}{/if}{literal}
-
+          "oLanguage":{
+            "sEmptyTable": noRecordFoundMsg,
+            "sZeroRecords": noRecordFoundMsg
+          },
           "fnServerData": function ( sSource, aoData, fnCallback ) {
             $.ajax( {
               "dataType": 'json',
         });
       } else {
         oTable = $(tabId).dataTable({
-          "aaSorting"    : sortColumn,
-          "bPaginate"    : false,
+          "aaSorting": sortColumn,
+          "bPaginate": false,
           "bLengthChange": true,
-          "bFilter"      : false,
-          "bInfo"        : false,
-          "asStripClasses" : [ "odd-row", "even-row" ],
-          "bAutoWidth"   : false,
-          "aoColumns"   : columns,
-          "bSort" : sortEnabled,
-          "oLanguage":{"sEmptyTable"  : noRecordFoundMsg,
-            "sZeroRecords" : noRecordFoundMsg }
+          "bFilter": false,
+          "bInfo": false,
+          "asStripClasses": [ "odd-row", "even-row" ],
+          "bAutoWidth": false,
+          "aoColumns": columns,
+          "bSort": true,
+          "oLanguage":{
+            "sEmptyTable": noRecordFoundMsg,
+            "sZeroRecords": noRecordFoundMsg
+          }
         });
       }
-      var object;
-
     });
   });
 
   //plugin to sort on currency
-  var symbol = "{/literal}{$config->defaultCurrencySymbol($config->defaultSymbol)}{literal}";
   cj.fn.dataTableExt.oSort['currency-asc']  = function(a,b) {
+    var symbol = "{/literal}{$config->defaultCurrencySymbol($config->defaultSymbol)}{literal}";
     var x = (a == "-") ? 0 : a.replace( symbol, "" );
     var y = (b == "-") ? 0 : b.replace( symbol, "" );
     x = parseFloat( x );
   };
 
   cj.fn.dataTableExt.oSort['currency-desc'] = function(a,b) {
+    var symbol = "{/literal}{$config->defaultCurrencySymbol($config->defaultSymbol)}{literal}";
     var x = (a == "-") ? 0 : a.replace( symbol, "" );
     var y = (b == "-") ? 0 : b.replace( symbol, "" );
     x = parseFloat( x );