UNPKG

@beauraines/rtm-cli

Version:
283 lines (238 loc) 5.34 kB
'use strict'; module.exports = { // ==== LIST SORTING FUNCTIONS ==== // lists: { /** * Sort the RTM Lists by the rtm-api added index field * @param {RTMList} a RTM List a * @param {RTMList} b RTM List b * @returns {number} */ index: function(a, b) { return a.index - b.index; }, /** * Sort the RTM Lists by the RTM List id * @param {RTMList} a RTM List a * @param {RTMList} b RTM List b * @returns {number} */ id: function(a, b) { return a.id - b.id; }, /** * Sort the RTM Lists by the RTM List name * @param {RTMList} a RTM List a * @param {RTMList} b RTM List b * @returns {number} */ name: function(a, b) { if ( a.name.toLowerCase() < b.name.toLowerCase() ) { return -1; } else if ( a.name.toLowerCase() > b.name.toLowerCase() ) { return 1; } else { return 0; } } }, // ==== TASK SORTING FUNCTIONS ==== // tasks: { /** * Sort Tasks by Index * @param a * @param b * @returns {number} */ index: function(a, b) { return a.index - b.index; }, /** * Sort Tasks By Priority: 1,2,3,0 * @param a * @param b * @returns {number} * @private */ priority: function(a, b) { let ap = a.priority === 0 ? 4 : a.priority; let bp = b.priority === 0 ? 4 : b.priority; return ap - bp; }, /** * Sort by Task Due Date (no due date first) * @param a * @param b */ due: function(a, b) { if ( a.due && !b.due ) { return 1; } else if ( !a.due && b.due ) { return -1; } else if ( a.due < b.due ) { return -1; } else if ( a.due > b.due ) { return 1; } else { return 0; } }, /** * Sort by Task Due Date (no due date last) * @param a * @param b */ dueLast: function(a, b) { if ( a.due && !b.due ) { return -1; } else if ( !a.due && b.due ) { return 1; } else if ( a.due < b.due ) { return -1; } else if ( a.due > b.due ) { return 1; } else { return 0; } }, /** * Sort by task completed status: uncompleted, completed * @param a * @param b * @returns {number} */ completed: function(a, b) { if ( a.isCompleted && !b.isCompleted ) { return 1; } else if ( !a.isCompleted && b.isCompleted ) { return -1; } else { return 0; } }, /** * Sort Tasks By List Name (case insensitive) * @param a * @param b * @returns {number} * @private */ listName: function(a, b) { if ( a._list && b._list ) { if ( a._list.name.toLowerCase() < b._list.name.toLowerCase() ) { return -1; } else if ( a._list.name.toLowerCase() > b._list.name.toLowerCase() ) { return 1; } else { return 0; } } return 0; }, /** * Sort Tasks for `ls` display (list name, priority) * @param a * @param b * @returns {number} * @private */ ls: function(a, b) { let sort = require(__filename); // Sort by list let list = sort.tasks.listName(a, b); if ( list === 0 ) { // Sort by completed status let comp = sort.tasks.completed(a, b); if ( comp === 0 ) { // Sort by priority let pri = sort.tasks.priority(a, b); if ( pri === 0 ) { // Sort by Due date return sort.tasks.dueLast(a, b); } else { return pri; } } else { return comp; } } else { return list; } }, /** * Sort tasks for `lsd` display (due date, priority, list name) * @param a * @param b * @returns {number} * @private */ lsd: function(a, b) { let sort = require(__filename); // Sort by Due Date let due = sort.tasks.dueLast(a, b); if ( due === 0 ) { // Sort by Completed Status let comp = sort.tasks.completed(a, b); if ( comp === 0 ) { // Sort By Priority let pri = sort.tasks.priority(a, b); if ( pri === 0 ) { // Sort by List Name return sort.tasks.listName(a, b); } else { return pri; } } else { return comp; } } else { return due; } }, /** * Sort tasks for `lsp` display (priority, due date) * @param a * @param b * @returns {*} */ lsp: function(a, b) { let sort = require(__filename); // Sort by Completed Status let comp = sort.tasks.completed(a, b); if ( comp === 0 ) { // Sort by Priority let pri = sort.tasks.priority(a, b); if ( pri === 0 ) { // Sort by Due Date return sort.tasks.dueLast(a, b); } else { return pri; } } else { return comp; } } } };