TrackChangesListController.coffee 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. define [
  2. "base"
  3. ], (App) ->
  4. App.controller "TrackChangesListController", ["$scope", "ide", ($scope, ide) ->
  5. $scope.hoveringOverListSelectors = false
  6. $scope.loadMore = () =>
  7. ide.trackChangesManager.fetchNextBatchOfUpdates()
  8. $scope.recalculateSelectedUpdates = () ->
  9. beforeSelection = true
  10. afterSelection = false
  11. $scope.trackChanges.selection.updates = []
  12. for update in $scope.trackChanges.updates
  13. if update.selectedTo
  14. inSelection = true
  15. beforeSelection = false
  16. update.beforeSelection = beforeSelection
  17. update.inSelection = inSelection
  18. update.afterSelection = afterSelection
  19. if inSelection
  20. $scope.trackChanges.selection.updates.push update
  21. if update.selectedFrom
  22. inSelection = false
  23. afterSelection = true
  24. $scope.recalculateHoveredUpdates = () ->
  25. hoverSelectedFrom = false
  26. hoverSelectedTo = false
  27. for update in $scope.trackChanges.updates
  28. # Figure out whether the to or from selector is hovered over
  29. if update.hoverSelectedFrom
  30. hoverSelectedFrom = true
  31. if update.hoverSelectedTo
  32. hoverSelectedTo = true
  33. if hoverSelectedFrom
  34. # We want to 'hover select' everything between hoverSelectedFrom and selectedTo
  35. inHoverSelection = false
  36. for update in $scope.trackChanges.updates
  37. if update.selectedTo
  38. update.hoverSelectedTo = true
  39. inHoverSelection = true
  40. update.inHoverSelection = inHoverSelection
  41. if update.hoverSelectedFrom
  42. inHoverSelection = false
  43. if hoverSelectedTo
  44. # We want to 'hover select' everything between hoverSelectedTo and selectedFrom
  45. inHoverSelection = false
  46. for update in $scope.trackChanges.updates
  47. if update.hoverSelectedTo
  48. inHoverSelection = true
  49. update.inHoverSelection = inHoverSelection
  50. if update.selectedFrom
  51. update.hoverSelectedFrom = true
  52. inHoverSelection = false
  53. $scope.resetHoverState = () ->
  54. for update in $scope.trackChanges.updates
  55. delete update.hoverSelectedFrom
  56. delete update.hoverSelectedTo
  57. delete update.inHoverSelection
  58. $scope.$watch "trackChanges.updates.length", () ->
  59. $scope.recalculateSelectedUpdates()
  60. ]
  61. App.controller "TrackChangesListItemController", ["$scope", ($scope) ->
  62. $scope.$watch "update.selectedFrom", (selectedFrom, oldSelectedFrom) ->
  63. if selectedFrom
  64. for update in $scope.trackChanges.updates
  65. update.selectedFrom = false unless update == $scope.update
  66. $scope.recalculateSelectedUpdates()
  67. $scope.$watch "update.selectedTo", (selectedTo, oldSelectedTo) ->
  68. if selectedTo
  69. for update in $scope.trackChanges.updates
  70. update.selectedTo = false unless update == $scope.update
  71. $scope.recalculateSelectedUpdates()
  72. $scope.select = () ->
  73. $scope.update.selectedTo = true
  74. $scope.update.selectedFrom = true
  75. $scope.mouseOverSelectedFrom = () ->
  76. $scope.trackChanges.hoveringOverListSelectors = true
  77. $scope.update.hoverSelectedFrom = true
  78. $scope.recalculateHoveredUpdates()
  79. $scope.mouseOutSelectedFrom = () ->
  80. $scope.trackChanges.hoveringOverListSelectors = false
  81. $scope.resetHoverState()
  82. $scope.mouseOverSelectedTo = () ->
  83. $scope.trackChanges.hoveringOverListSelectors = true
  84. $scope.update.hoverSelectedTo = true
  85. $scope.recalculateHoveredUpdates()
  86. $scope.mouseOutSelectedTo = () ->
  87. $scope.trackChanges.hoveringOverListSelectors = false
  88. $scope.resetHoverState()
  89. ]