selectAll.coffee 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. ]
  16. link: (scope, element, attrs) ->
  17. }
  18. App.directive "selectAll", () ->
  19. return {
  20. require: "^selectAllList"
  21. link: (scope, element, attrs, selectAllListController) ->
  22. scope.$on "select-all:clear", () ->
  23. element.prop("checked", false)
  24. element.change () ->
  25. if element.is(":checked")
  26. selectAllListController.selectAll()
  27. else
  28. selectAllListController.deselectAll()
  29. return true
  30. }
  31. App.directive "selectIndividual", () ->
  32. return {
  33. require: "^selectAllList"
  34. scope: {
  35. ngModel: "="
  36. }
  37. link: (scope, element, attrs, selectAllListController) ->
  38. ignoreChanges = false
  39. scope.$watch "ngModel", (value) ->
  40. if value? and !ignoreChanges
  41. selectAllListController.clearSelectAllState()
  42. scope.$on "select-all:select", () ->
  43. ignoreChanges = true
  44. scope.$apply () ->
  45. scope.ngModel = true
  46. ignoreChanges = false
  47. scope.$on "select-all:deselect", () ->
  48. ignoreChanges = true
  49. scope.$apply () ->
  50. scope.ngModel = false
  51. ignoreChanges = false
  52. scope.$on "select-all:row-clicked", () ->
  53. ignoreChanges = true
  54. scope.$apply () ->
  55. scope.ngModel = !scope.ngModel
  56. if !scope.ngModel
  57. selectAllListController.clearSelectAllState()
  58. ignoreChanges = false
  59. }
  60. App.directive "selectRow", () ->
  61. return {
  62. scope: true
  63. link: (scope, element, attrs) ->
  64. element.on "click", (e) ->
  65. scope.$broadcast "select-all:row-clicked"
  66. }