Browse Source

Improved scrolling behaviour if article id is given in url.

Martin Edenhofer 8 years ago
parent
commit
5ed7359d60
1 changed files with 17 additions and 3 deletions
  1. 17 3
      app/assets/javascripts/app/controllers/ticket_zoom.coffee

+ 17 - 3
app/assets/javascripts/app/controllers/ticket_zoom.coffee

@@ -203,9 +203,22 @@ class App.TicketZoom extends App.Controller
     # set all notifications to seen
     App.OnlineNotification.seen('Ticket', @ticket_id)
 
+    scrollToPosition = (position, delay) =>
+      scrollToDelay = =>
+        if position is 'article'
+          @scrollToArticle(@last_article_id)
+          return
+        @scrollToBottom()
+      @delay(scrollToDelay, delay, 'scrollToPosition')
+
+    # scroll to article if given
+    if params.article_id && params.article_id isnt @last_article_id
+      @last_article_id = params.article_id
+      scrollToPosition('article', 300)
+
     # if controller is executed twice, go to latest article (e. g. click on notification)
     if @activeState
-      @scrollToBottom()
+      scrollToPosition('bottom', 300)
       return
     @activeState = true
 
@@ -217,7 +230,7 @@ class App.TicketZoom extends App.Controller
       App.Event.trigger('ui::ticket::shown', { ticket_id: @ticket_id })
 
       # scroll to end of page
-      @scrollToBottom()
+      scrollToPosition('bottom', 100)
 
     @positionPageHeaderStart()
     @autosaveStart()
@@ -434,7 +447,8 @@ class App.TicketZoom extends App.Controller
     if @shown
 
       # scroll to article if given
-      if @article_id
+      if @article_id && @article_id isnt @last_article_id
+        @last_article_id = @article_id
         scrollTo = =>
           @scrollToArticle(@article_id)
         @delay(scrollTo, 300)