Guest User

Untitled

a guest
Jul 17th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. /**
  2. * Sort calculator results
  3. *
  4. * @return Void
  5. */
  6. $(document).on('click', '.divClass', function(e) {
  7. e.preventDefault();
  8.  
  9. setDataAttrToElement($(this));
  10.  
  11. let orderDir = $(this).attr('data-dir');
  12. let elements = [];
  13.  
  14. mapElementsFromClickedRow($(this), elements);
  15.  
  16. orderElements(elements, orderDir);
  17. });
  18.  
  19. /**
  20. * Remove all the other data attributes,
  21. * except on the clicked one.
  22. *
  23. * @param HtmlNode thisEl
  24. */
  25. function setDataAttrToElement(thisEl) {
  26. $('.divClass').not(thisEl).removeAttr('data-dir');
  27. thisEl.attr('data-dir') === 'asc' ? thisEl.attr('data-dir', 'desc') : thisEl.attr('data-dir', 'asc');
  28. }
  29.  
  30. /**
  31. * Map all the divs that are below
  32. * the chosen sorting.
  33. *
  34. * @param HtmlNode thisEl
  35. * @param Array elements
  36. * @return Void
  37. */
  38. function mapElementsFromClickedRow(thisEl, elements) {
  39. let indexOfElement = thisEl.index();
  40. let numOfRowsInTable = $('.calc-row > div:visible').length;
  41. let numOfRows = $('.calc-row:first > div:visible').length;
  42.  
  43. for (let i = indexOfElement; i < numOfRowsInTable; i += numOfRows) {
  44. putElementInArray(elements, i);
  45. }
  46. }
  47.  
  48. /**
  49. * Create object of the element with it's value,
  50. * and push it to array.
  51. *
  52. * @param Array elements
  53. * @param Integer i
  54. * @return Void
  55. */
  56. function putElementInArray(elements, i) {
  57. let {element, elValue} = elementValue(i);
  58.  
  59. elements.push({
  60. elementNode: element,
  61. value: elValue
  62. });
  63. }
  64.  
  65. /**
  66. * Get text (value) of the element.
  67. *
  68. * @param Integer i
  69. * @return Object
  70. */
  71. function elementValue(i) {
  72. let element = $('.calc-row > div:visible').eq(i);
  73. let elValue = element.children('p').text();
  74.  
  75. return {
  76. element,
  77. elValue: parseFloat(elValue)
  78. };
  79. }
  80.  
  81. /**
  82. * Order elements in ascending or descending order.
  83. *
  84. * @param Array elements
  85. * @param String orderDir
  86. * @return Void
  87. */
  88. function orderElements(elements, orderDir) {
  89. for (let i = elements.length - 1; i - 1 >= 0; i--) {
  90. let el1 = elements[i];
  91. let el2 = elements[i - 1];
  92.  
  93. if (el1.value > el2.value && orderDir === 'asc') {
  94. swap(el2, el1);
  95. } else if (orderDir === 'desc') {
  96. swap(el2, el1);
  97. }
  98. }
  99. }
  100.  
  101. /**
  102. * Swap divs of the elements.
  103. *
  104. * @param HtmlNode el1
  105. * @param HtmlNode el2
  106. * @return Void
  107. */
  108. function swap(el1, el2) {
  109. el1.elementNode.parent().before(el2.elementNode.parent());
  110. }
Add Comment
Please, Sign In to add comment