From b9168b0759f36c4c1c19404fb3ab73a06fcdbeb3 Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Mon, 7 Mar 2016 09:44:55 +0000
Subject: [PATCH] Affix the build scroll controls

Closes #4709
---
 app/assets/javascripts/ci_build.js.coffee   | 14 +++++++++++++
 app/assets/javascripts/dispatcher.js.coffee |  2 ++
 app/assets/stylesheets/pages/builds.scss    | 23 +++++++++++++++++----
 app/views/projects/builds/show.html.haml    |  2 +-
 4 files changed, 36 insertions(+), 5 deletions(-)
 create mode 100644 app/assets/javascripts/ci_build.js.coffee

diff --git a/app/assets/javascripts/ci_build.js.coffee b/app/assets/javascripts/ci_build.js.coffee
new file mode 100644
index 00000000000..e110eece16b
--- /dev/null
+++ b/app/assets/javascripts/ci_build.js.coffee
@@ -0,0 +1,14 @@
+class @CiBuild
+  constructor: ->
+    @initScrollButtonAffix()
+
+  initScrollButtonAffix: ->
+    buildScroll = $('#js-build-scroll')
+    body = $('body')
+    buildTrace = $('#build-trace')
+
+    buildScroll.affix(
+      offset:
+        bottom: ->
+          body.outerHeight() - (buildTrace.outerHeight() + buildTrace.offset().top)
+    )
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee
index d7feb5d5c87..f5e5c7c75c7 100644
--- a/app/assets/javascripts/dispatcher.js.coffee
+++ b/app/assets/javascripts/dispatcher.js.coffee
@@ -103,6 +103,8 @@ class Dispatcher
         new ProjectFork()
       when 'projects:artifacts:browse'
         new BuildArtifacts()
+      when 'projects:builds:show'
+        new CiBuild()
 
     switch path.first()
       when 'admin'
diff --git a/app/assets/stylesheets/pages/builds.scss b/app/assets/stylesheets/pages/builds.scss
index 3c2997c1d5a..75f298019e3 100644
--- a/app/assets/stylesheets/pages/builds.scss
+++ b/app/assets/stylesheets/pages/builds.scss
@@ -27,10 +27,25 @@
   }
 
   .scroll-controls {
-    position: fixed;
-    bottom: 10px;
-    left: 250px;
-    z-index: 100;
+    &.affix-top {
+      position: absolute;
+      top: 10px;
+      right: 25px;
+    }
+
+    &.affix-bottom {
+      position: absolute;
+      right: 25px;
+    }
+
+    &.affix {
+      right: 30px;
+      bottom: 15px;
+
+      @media (min-width: $screen-md-min) {
+        right: 26%;
+      }
+    }
 
     a {
       display: block;
diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml
index 8eec78a557c..be7cc0f256c 100644
--- a/app/views/projects/builds/show.html.haml
+++ b/app/views/projects/builds/show.html.haml
@@ -70,7 +70,7 @@
           .autoscroll-container
             %button.btn.btn-success.btn-sm#autoscroll-button{:type => "button", :data => {:state => 'disabled'}} enable autoscroll
           .clearfix
-      .scroll-controls
+      #js-build-scroll.scroll-controls
         = link_to '#up-build-trace', class: 'btn' do
           %i.fa.fa-angle-up
         = link_to '#down-build-trace', class: 'btn' do
-- 
2.30.9