angular.module("eventTypeFilterGroup", [])
.directive('eventTypeFilterGroup', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {
selectedGroupName: '=',
filterExpressionSet: '='
},
template: '
' +
'
{{groupLabel}}
' +
'
' +
'
',
link: function(scope, elem, attrs) {
scope.groupName = attrs['name'];
scope.groupLabel = attrs['label'];
}, // end of link
controller: function ($rootScope, $scope) {
this.addFilter =function (filter) {
if (typeof $scope.filters === 'undefined') {
$scope.filters = {};
}
$scope.filters[filter.expression] = filter;
}
this.updateFilterSelection = function(filterExpression) {
if ($scope.filters[filterExpression].isExclusive) {
$scope.filterExpressionSet = [$scope.filters[filterExpression].expression];
} else if ($scope.selectedGroupName != $scope.groupName || ($scope.filterExpressionSet.length == 1 && $scope.filters[$scope.filterExpressionSet[0]] && $scope.filters[$scope.filterExpressionSet[0]].isExclusive)) {
$scope.filterExpressionSet = [$scope.filters[filterExpression].expression];
} else {
var index = $scope.filterExpressionSet.indexOf(filterExpression);
if (index == -1) {
$scope.filterExpressionSet.push($scope.filters[filterExpression].expression);
} else {
$scope.filterExpressionSet.splice(index, 1);
}
}
$scope.selectedGroupName = $scope.groupName;
$rootScope.$broadcast('eventSelection::Reset');
};
this.isFilterActive = function(filterExpression) {
var isActive = false;
if ($scope.selectedGroupName == $scope.groupName) {
for (var i=0;i<$scope.filterExpressionSet.length;i++) {
if ($scope.filterExpressionSet[i] == filterExpression) {
isActive = true;
}
}
}
return isActive;
};
} // end of controller
}; // end of directoive factory
})
.directive('eventTypeFilter', function() {
return {
restrict: 'E',
require: '^eventTypeFilterGroup',
scope: {},
replace: true,
template: '',
link: function(scope, elem, attrs, parentController) {
scope.name = attrs['name'];
scope.label = attrs['label'];
scope.expression = attrs['filterExpression'];
scope.isExclusive = typeof attrs['isExclusive'] !== 'undefined' ? true : false;
parentController.addFilter({
name: scope.name,
label: scope.label,
expression: scope.expression,
isExclusive: scope.isExclusive
});
scope.updateFilterSelection = function(filterExpression) {
parentController.updateFilterSelection(filterExpression);
};
scope.isFilterActive = function(filterExpression) {
return parentController.isFilterActive(filterExpression);
};
}, // end of link
controller: function ($scope) {
$scope.blurMe = function ($event) {
$event.target.blur();
}
} // end of controller
}; // end of directoive factory
});