selectAll.coffee 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. define [
  2. "base"
  3. ], (App) ->
  4. App.directive "selectAllList", () ->
  5. return {
  6. controller: ["$scope", ($scope) ->
  7. # Selecting or deselecting all should apply to all projects
  8. selectAll = () ->
  9. $scope.$broadcast "select-all:select"
  10. deselectAll = () ->
  11. $scope.$broadcast "select-all:deselect"
  12. clearSelectAllState = () ->
  13. $scope.$broadcast "select-all:clear"
  14. return {
  15. clearSelectAllState: clearSelectAllState
  16. selectAll: selectAll
  17. deselectAll: deselectAll
  18. }
  19. ]
  20. link: (scope, element, attrs) ->
  21. }
  22. App.directive "selectAll", () ->
  23. return {
  24. require: "^selectAllList"
  25. link: (scope, element, attrs, selectAllListController) ->
  26. scope.$on "select-all:clear", () ->
  27. element.prop("checked", false)
  28. element.change () ->
  29. if element.is(":checked")
  30. selectAllListController.selectAll()
  31. else
  32. selectAllListController.deselectAll()
  33. return true
  34. }
  35. App.directive "selectIndividual", () ->
  36. return {
  37. require: "^selectAllList"
  38. scope: {
  39. ngModel: "="
  40. }
  41. link: (scope, element, attrs, selectAllListController) ->
  42. ignoreChanges = false
  43. scope.$watch "ngModel", (value) ->
  44. if value? and !ignoreChanges
  45. selectAllListController.clearSelectAllState()
  46. scope.$on "select-all:select", () ->
  47. ignoreChanges = true
  48. scope.$apply () ->
  49. scope.ngModel = true
  50. ignoreChanges = false
  51. scope.$on "select-all:deselect", () ->
  52. ignoreChanges = true
  53. scope.$apply () ->
  54. scope.ngModel = false
  55. ignoreChanges = false
  56. }