Advertisement
tenaciousd93

Custom Sorting List.js

Aug 18th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     /**
  2.      * Sort a List.js list by 4 level of sort
  3.      * order must be: category, source, date, page, title,
  4.      *
  5.      * es:
  6.      * list = pressReviewList;
  7.      * orders = [0=>"category", 1=>"source", 2=>"date", 3=>"page"]
  8.      * sorts  = [0=>"asc",      1=>"desc",   2=>"asc",  3=>"desc"]
  9.      *
  10.      * @param  {Object} list        [List.js instance]
  11.      * @param  {Array} orders       [Array with orders]
  12.      * @param  {Array} sorts        [Array with sorts]
  13.      * @return {}              []
  14.      */
  15.     var sortList = function(list, orders, sorts) {
  16.         console.log("ListManager sortList");
  17.         console.log(orders);
  18.         console.log(sorts);
  19.         // If list not defined
  20.         if (Utility.empty(list)) {
  21.             console.error("ListManager: can't sort, list is undefined!");
  22.             // Error no list!
  23.             return false;
  24.         }
  25.  
  26.         // If first order id not defined
  27.         if (Utility.empty(orders[0])) {
  28.             // Set category
  29.             orders[0] = "category";
  30.         }
  31.  
  32.         // If second order id not defined
  33.         if (Utility.empty(orders[1])) {
  34.             // Set source
  35.             orders[1] = "source";
  36.         }
  37.  
  38.         // If third order id not defined
  39.         if (Utility.empty(orders[2])) {
  40.             // Set date
  41.             orders[2] = "date";
  42.         }
  43.  
  44.         // If fourth order id not defined
  45.         if (Utility.empty(orders[3])) {
  46.             // Set page
  47.             orders[3] = "page";
  48.         }
  49.  
  50.         // Check order if asc or desc
  51.         if (Utility.empty(sorts[0])) {
  52.             // Set order
  53.             sorts[0] = "desc";
  54.         }
  55.  
  56.         // Check order if asc or desc
  57.         if (Utility.empty(sorts[1])) {
  58.             // Set order
  59.             sorts[1] = "desc";
  60.         }
  61.  
  62.         // Check order if asc or desc
  63.         if (Utility.empty(sorts[2])) {
  64.             // Set order
  65.             sorts[2] = "desc";
  66.         }
  67.  
  68.         // Check order if asc or desc
  69.         if (Utility.empty(sorts[3])) {
  70.             // Set order
  71.             sorts[3] = "desc";
  72.         }
  73.  
  74.         // Make list compatible
  75.         first = "order_" + orders[0];
  76.         second = "order_" + orders[1];
  77.         third = "order_" + orders[2];
  78.         fourth = "order_" + orders[3];
  79.         // Make ascending descending compatible
  80.         firstAsc = sorts[0] === "asc" ? true : false;
  81.         secondAsc = sorts[1] === "asc" ? true : false;
  82.         thirdAsc = sorts[2] === "asc" ? true : false;
  83.         fourthAsc = sorts[3] === "asc" ? true : false;
  84.  
  85.         console.log("List Sort: ", first, second, third, fourth);
  86.         console.log("List Asc: ", firstAsc, secondAsc, thirdAsc, fourthAsc);
  87.  
  88.         // Call sort method of List.js
  89.         list.sort('', {order: '',
  90.             sortFunction:
  91.                 function(a, b) {
  92.                     // Compare values with field requested
  93.                     return _compareIntegerStringDate(a, b, first, firstAsc)
  94.                         || _compareIntegerStringDate(a, b, second, secondAsc)
  95.                         || _compareIntegerStringDate(a, b, third, thirdAsc)
  96.                         || _compareIntegerStringDate(a, b, fourth, fourthAsc);
  97.                 }
  98.             }
  99.         );
  100.     }
  101.  
  102.  
  103.  
  104.     /**
  105.      * Compare list.js items value based on filed request.
  106.      * Get correct comparison between integers, strings, or dates.
  107.      *
  108.      * @param  {Object}  a           [List.js item instance]
  109.      * @param  {Object}  b           [List.js item instance]
  110.      * @param  {String}  field       [Field to compare]
  111.      * @param  {Boolean} isAscending [Determinate if is ascending order]
  112.      * @return {Integer}             [-X || 0 || +X]
  113.      */
  114.     var _compareIntegerStringDate = function(a, b, field, isAscending) {
  115.         console.log(field + " isAscending " + isAscending);
  116.         if (Utility.isInt(a.values()[field])) {
  117.             // Compare integer
  118.             return isAscending
  119.                 ? a.values()[field] - b.values()[field]
  120.                 : b.values()[field] - a.values()[field];
  121.         }
  122.         else if(Utility.isDate(a.values()[field], "YYYY-MM-DD HH:mm:ss")){
  123.             // Compare Date
  124.             return isAscending
  125.                 ? Date.parse(a.values()[field]) - Date.parse(b.values()[field])
  126.                 : Date.parse(b.values()[field]) - Date.parse(a.values()[field]);
  127.         }
  128.         else {
  129.             // Compare strings
  130.             return isAscending
  131.                 ? b.values()[field].localeCompare(a.values()[field])
  132.                 : a.values()[field].localeCompare(b.values()[field]);
  133.         }
  134.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement