Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Sort a List.js list by 4 level of sort
- * order must be: category, source, date, page, title,
- *
- * es:
- * list = pressReviewList;
- * orders = [0=>"category", 1=>"source", 2=>"date", 3=>"page"]
- * sorts = [0=>"asc", 1=>"desc", 2=>"asc", 3=>"desc"]
- *
- * @param {Object} list [List.js instance]
- * @param {Array} orders [Array with orders]
- * @param {Array} sorts [Array with sorts]
- * @return {} []
- */
- var sortList = function(list, orders, sorts) {
- console.log("ListManager sortList");
- console.log(orders);
- console.log(sorts);
- // If list not defined
- if (Utility.empty(list)) {
- console.error("ListManager: can't sort, list is undefined!");
- // Error no list!
- return false;
- }
- // If first order id not defined
- if (Utility.empty(orders[0])) {
- // Set category
- orders[0] = "category";
- }
- // If second order id not defined
- if (Utility.empty(orders[1])) {
- // Set source
- orders[1] = "source";
- }
- // If third order id not defined
- if (Utility.empty(orders[2])) {
- // Set date
- orders[2] = "date";
- }
- // If fourth order id not defined
- if (Utility.empty(orders[3])) {
- // Set page
- orders[3] = "page";
- }
- // Check order if asc or desc
- if (Utility.empty(sorts[0])) {
- // Set order
- sorts[0] = "desc";
- }
- // Check order if asc or desc
- if (Utility.empty(sorts[1])) {
- // Set order
- sorts[1] = "desc";
- }
- // Check order if asc or desc
- if (Utility.empty(sorts[2])) {
- // Set order
- sorts[2] = "desc";
- }
- // Check order if asc or desc
- if (Utility.empty(sorts[3])) {
- // Set order
- sorts[3] = "desc";
- }
- // Make list compatible
- first = "order_" + orders[0];
- second = "order_" + orders[1];
- third = "order_" + orders[2];
- fourth = "order_" + orders[3];
- // Make ascending descending compatible
- firstAsc = sorts[0] === "asc" ? true : false;
- secondAsc = sorts[1] === "asc" ? true : false;
- thirdAsc = sorts[2] === "asc" ? true : false;
- fourthAsc = sorts[3] === "asc" ? true : false;
- console.log("List Sort: ", first, second, third, fourth);
- console.log("List Asc: ", firstAsc, secondAsc, thirdAsc, fourthAsc);
- // Call sort method of List.js
- list.sort('', {order: '',
- sortFunction:
- function(a, b) {
- // Compare values with field requested
- return _compareIntegerStringDate(a, b, first, firstAsc)
- || _compareIntegerStringDate(a, b, second, secondAsc)
- || _compareIntegerStringDate(a, b, third, thirdAsc)
- || _compareIntegerStringDate(a, b, fourth, fourthAsc);
- }
- }
- );
- }
- /**
- * Compare list.js items value based on filed request.
- * Get correct comparison between integers, strings, or dates.
- *
- * @param {Object} a [List.js item instance]
- * @param {Object} b [List.js item instance]
- * @param {String} field [Field to compare]
- * @param {Boolean} isAscending [Determinate if is ascending order]
- * @return {Integer} [-X || 0 || +X]
- */
- var _compareIntegerStringDate = function(a, b, field, isAscending) {
- console.log(field + " isAscending " + isAscending);
- if (Utility.isInt(a.values()[field])) {
- // Compare integer
- return isAscending
- ? a.values()[field] - b.values()[field]
- : b.values()[field] - a.values()[field];
- }
- else if(Utility.isDate(a.values()[field], "YYYY-MM-DD HH:mm:ss")){
- // Compare Date
- return isAscending
- ? Date.parse(a.values()[field]) - Date.parse(b.values()[field])
- : Date.parse(b.values()[field]) - Date.parse(a.values()[field]);
- }
- else {
- // Compare strings
- return isAscending
- ? b.values()[field].localeCompare(a.values()[field])
- : a.values()[field].localeCompare(b.values()[field]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement