TrackChangesListController.coffee 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. define [
  2. "base"
  3. ], (App) ->
  4. App.controller "TrackChangesPremiumPopup", ($scope, ide, sixpack)->
  5. $scope.$watch "ui.view", ->
  6. if $scope.ui.view == "track-changes"
  7. if $scope.project?.features?.versioning
  8. $scope.versioningPopupType = "default"
  9. else if $scope.ui.view == "track-changes"
  10. sixpack.participate 'track-changes-discount', ['default', 'discount'], (chosenVariation, rawResponse)->
  11. $scope.versioningPopupType = chosenVariation
  12. App.controller "TrackChangesListController", ["$scope", "ide", ($scope, ide) ->
  13. $scope.hoveringOverListSelectors = false
  14. $scope.loadMore = () =>
  15. ide.trackChangesManager.fetchNextBatchOfUpdates()
  16. $scope.recalculateSelectedUpdates = () ->
  17. beforeSelection = true
  18. afterSelection = false
  19. $scope.trackChanges.selection.updates = []
  20. for update in $scope.trackChanges.updates
  21. if update.selectedTo
  22. inSelection = true
  23. beforeSelection = false
  24. update.beforeSelection = beforeSelection
  25. update.inSelection = inSelection
  26. update.afterSelection = afterSelection
  27. if inSelection
  28. $scope.trackChanges.selection.updates.push update
  29. if update.selectedFrom
  30. inSelection = false
  31. afterSelection = true
  32. $scope.recalculateHoveredUpdates = () ->
  33. hoverSelectedFrom = false
  34. hoverSelectedTo = false
  35. for update in $scope.trackChanges.updates
  36. # Figure out whether the to or from selector is hovered over
  37. if update.hoverSelectedFrom
  38. hoverSelectedFrom = true
  39. if update.hoverSelectedTo
  40. hoverSelectedTo = true
  41. if hoverSelectedFrom
  42. # We want to 'hover select' everything between hoverSelectedFrom and selectedTo
  43. inHoverSelection = false
  44. for update in $scope.trackChanges.updates
  45. if update.selectedTo
  46. update.hoverSelectedTo = true
  47. inHoverSelection = true
  48. update.inHoverSelection = inHoverSelection
  49. if update.hoverSelectedFrom
  50. inHoverSelection = false
  51. if hoverSelectedTo
  52. # We want to 'hover select' everything between hoverSelectedTo and selectedFrom
  53. inHoverSelection = false
  54. for update in $scope.trackChanges.updates
  55. if update.hoverSelectedTo
  56. inHoverSelection = true
  57. update.inHoverSelection = inHoverSelection
  58. if update.selectedFrom
  59. update.hoverSelectedFrom = true
  60. inHoverSelection = false
  61. $scope.resetHoverState = () ->
  62. for update in $scope.trackChanges.updates
  63. delete update.hoverSelectedFrom
  64. delete update.hoverSelectedTo
  65. delete update.inHoverSelection
  66. $scope.$watch "trackChanges.updates.length", () ->
  67. $scope.recalculateSelectedUpdates()
  68. ]
  69. App.controller "TrackChangesListItemController", ["$scope", ($scope) ->
  70. $scope.$watch "update.selectedFrom", (selectedFrom, oldSelectedFrom) ->
  71. if selectedFrom
  72. for update in $scope.trackChanges.updates
  73. update.selectedFrom = false unless update == $scope.update
  74. $scope.recalculateSelectedUpdates()
  75. $scope.$watch "update.selectedTo", (selectedTo, oldSelectedTo) ->
  76. if selectedTo
  77. for update in $scope.trackChanges.updates
  78. update.selectedTo = false unless update == $scope.update
  79. $scope.recalculateSelectedUpdates()
  80. $scope.select = () ->
  81. console.log("track-changes-view")
  82. $scope.update.selectedTo = true
  83. $scope.update.selectedFrom = true
  84. $scope.mouseOverSelectedFrom = () ->
  85. $scope.trackChanges.hoveringOverListSelectors = true
  86. $scope.update.hoverSelectedFrom = true
  87. $scope.recalculateHoveredUpdates()
  88. $scope.mouseOutSelectedFrom = () ->
  89. $scope.trackChanges.hoveringOverListSelectors = false
  90. $scope.resetHoverState()
  91. $scope.mouseOverSelectedTo = () ->
  92. $scope.trackChanges.hoveringOverListSelectors = true
  93. $scope.update.hoverSelectedTo = true
  94. $scope.recalculateHoveredUpdates()
  95. $scope.mouseOutSelectedTo = () ->
  96. $scope.trackChanges.hoveringOverListSelectors = false
  97. $scope.resetHoverState()
  98. $scope.displayName = (user) ->
  99. full_name = "#{user.first_name} #{user.last_name}"
  100. fallback_name = "Unknown"
  101. if !user?
  102. fallback_name
  103. else if full_name != " "
  104. full_name
  105. else if user.email
  106. user.email
  107. else
  108. fallback_name
  109. ]