filters.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. 'use strict';
  2. /* Filters for EventMan(ager) lists of objects. */
  3. /* Filter for persons (not) registered for a given event. */
  4. eventManApp.filter('personRegistered', ['$filter',
  5. function($filter) {
  6. return function(inputArray, data) {
  7. if (data.present === undefined) {
  8. data.present = true;
  9. }
  10. inputArray = inputArray || [];
  11. var returnArray = [];
  12. var registeredIDs = [];
  13. if (!(data.event && data.event.tickets && data.event.tickets.length)) {
  14. return inputArray;
  15. }
  16. for (var x=0; x < data.event.tickets.length; x++) {
  17. if (!data.includeCancelled && data.event.tickets[x].cancelled) {
  18. continue;
  19. }
  20. registeredIDs.push(data.event.tickets[x]._id);
  21. }
  22. for (var x=0; x < inputArray.length; x++) {
  23. var found = registeredIDs.indexOf(inputArray[x]._id) != -1;
  24. if ((found && data.present) || (!found && !data.present)) {
  25. returnArray.push(inputArray[x]);
  26. }
  27. }
  28. return returnArray;
  29. }
  30. }]
  31. );
  32. /* Filter that handles splitted words. */
  33. eventManApp.filter('splittedFilter', ['$filter',
  34. function($filter) {
  35. var negate = function(actual, expected) {
  36. if (expected == 'false') {
  37. expected = false;
  38. } else if (expected == 'true') {
  39. expected = true;
  40. }
  41. if (actual.toLowerCase) {
  42. actual = actual.toLowerCase();
  43. }
  44. return actual != expected;
  45. };
  46. return function(inputArray, searchText) {
  47. var wordArray = searchText ? searchText.toLowerCase().split(/\s+/) : [];
  48. var comparator = false;
  49. for (var x=0; x < wordArray.length; x++) {
  50. var filter_item = wordArray[x];
  51. comparator = false;
  52. if (!filter_item) {
  53. continue;
  54. }
  55. if (filter_item.indexOf(':') != -1) {
  56. if (filter_item[0] == '!') {
  57. comparator = negate;
  58. filter_item = filter_item.slice(1);
  59. }
  60. var filter_item_split = filter_item.split(':', 2);
  61. filter_item = {};
  62. filter_item[filter_item_split[0]] = filter_item_split[1];
  63. }
  64. inputArray = $filter('filter')(inputArray, filter_item, comparator);
  65. }
  66. return inputArray;
  67. };
  68. }]
  69. );
  70. /* Filter that returns only the (not) registered tickets at an event. */
  71. eventManApp.filter('registeredFilter', ['$filter',
  72. function($filter) {
  73. return function(inputArray, data) {
  74. if (!data) {
  75. data = {};
  76. }
  77. var returnArray = [];
  78. for (var x=0; x < inputArray.length; x++) {
  79. if ((!data.onlyCancelled && !inputArray[x]['cancelled']) ||
  80. (data.onlyCancelled && inputArray[x]['cancelled']) ||
  81. data.all) {
  82. returnArray.push(inputArray[x]);
  83. }
  84. }
  85. return returnArray;
  86. };
  87. }]
  88. );
  89. /* Filter that implements a generic pagination. */
  90. eventManApp.filter('pagination', ['$filter',
  91. function($filter) {
  92. return function(inputArray, page, itemsPerPage) {
  93. var begin = (page - 1) * itemsPerPage;
  94. var end = begin + itemsPerPage;
  95. return inputArray.slice(begin, end);;
  96. };
  97. }]
  98. );
  99. /* Filter that returns only the attendees at an event. */
  100. eventManApp.filter('attendeesFilter', ['$filter',
  101. function($filter) {
  102. return function(inputArray) {
  103. var returnArray = [];
  104. for (var x=0; x < inputArray.length; x++) {
  105. if (inputArray[x]['attended'] && !inputArray[x]['cancelled']) {
  106. returnArray.push(inputArray[x]);
  107. }
  108. }
  109. return returnArray;
  110. };
  111. }]
  112. );