eventman/angular_app/js/filters.js
2015-04-18 15:23:20 +02:00

66 lines
2.2 KiB
JavaScript

'use strict';
/* Filters for EventMan(ager) lists of objects. */
/* Filter for events that have (or not) information about a registered person. */
eventManApp.filter('eventWithPersonData', ['$filter',
function($filter) {
return function(inputArray, mustBePresent) {
if (mustBePresent === undefined) {
mustBePresent = true;
}
inputArray = inputArray || [];
var returnArray = [];
for (var x=0; x < inputArray.length; x++) {
var found = inputArray[x].person_data && inputArray[x].person_data.person_id;
if ((found && mustBePresent) || (!found && !mustBePresent)) {
returnArray.push(inputArray[x]);
}
}
return returnArray;
};
}]
);
/* Filter for persons (not) registered for a given event. */
eventManApp.filter('personRegistered', ['$filter',
function($filter) {
return function(inputArray, data) {
if (data.present === undefined) {
data.present = true;
}
inputArray = inputArray || [];
var returnArray = [];
var registeredIDs = [];
if (!(data.event && data.event.persons && data.event.persons.length)) {
return inputArray;
}
for (var x=0; x < data.event.persons.length; x++) {
registeredIDs.push(data.event.persons[x].person_id);
}
for (var x=0; x < inputArray.length; x++) {
var found = registeredIDs.indexOf(inputArray[x]._id) != -1;
if ((found && data.present) || (!found && !data.present)) {
returnArray.push(inputArray[x]);
}
}
return returnArray;
}
}]
);
/* Filter that handles splitted words. */
eventManApp.filter('splittedFilter', ['$filter',
function($filter) {
return function(inputArray, searchText) {
var wordArray = searchText ? searchText.toLowerCase().split(/\s+/) : [];
for (var x=0; x < wordArray.length; x++) {
inputArray = $filter('filter')(inputArray, wordArray[x]);
}
return inputArray;
};
}]
);