define [ "base" ], (App) -> App.directive "selectAllList", () -> return { controller: ["$scope", ($scope) -> # Selecting or deselecting all should apply to all projects selectAll = () -> $scope.$broadcast "select-all:select" deselectAll = () -> $scope.$broadcast "select-all:deselect" clearSelectAllState = () -> $scope.$broadcast "select-all:clear" return { clearSelectAllState: clearSelectAllState selectAll: selectAll deselectAll: deselectAll } ] link: (scope, element, attrs) -> } App.directive "selectAll", () -> return { require: "^selectAllList" link: (scope, element, attrs, selectAllListController) -> scope.$on "select-all:clear", () -> element.prop("checked", false) element.change () -> if element.is(":checked") selectAllListController.selectAll() else selectAllListController.deselectAll() return true } App.directive "selectIndividual", () -> return { require: "^selectAllList" scope: { ngModel: "=" } link: (scope, element, attrs, selectAllListController) -> ignoreChanges = false scope.$watch "ngModel", (value) -> if value? and !ignoreChanges selectAllListController.clearSelectAllState() scope.$on "select-all:select", () -> ignoreChanges = true scope.$apply () -> scope.ngModel = true ignoreChanges = false scope.$on "select-all:deselect", () -> ignoreChanges = true scope.$apply () -> scope.ngModel = false ignoreChanges = false }