summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/lib/utils/logoutput_behaviours.js
blob: 1bf99d935eff3386bbc7aa02725e1a9386de7916 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import $ from 'jquery';
import { canScroll, isScrolledToBottom, toggleDisableButton } from './scroll_utils';

export default class LogOutputBehaviours {
  constructor() {
    // Scroll buttons
    this.$scrollTopBtn = $('.js-scroll-up');
    this.$scrollBottomBtn = $('.js-scroll-down');

    this.$scrollTopBtn.off('click').on('click', this.scrollToTop.bind(this));
    this.$scrollBottomBtn.off('click').on('click', this.scrollToBottom.bind(this));
  }

  toggleScroll() {
    const $document = $(document);
    const currentPosition = $document.scrollTop();
    const scrollHeight = $document.height();

    const windowHeight = $(window).height();
    if (canScroll()) {
      if (currentPosition > 0 && scrollHeight - currentPosition !== windowHeight) {
        // User is in the middle of the log

        toggleDisableButton(this.$scrollTopBtn, false);
        toggleDisableButton(this.$scrollBottomBtn, false);
      } else if (currentPosition === 0) {
        // User is at Top of  Log

        toggleDisableButton(this.$scrollTopBtn, true);
        toggleDisableButton(this.$scrollBottomBtn, false);
      } else if (isScrolledToBottom()) {
        // User is at the bottom of the build log.

        toggleDisableButton(this.$scrollTopBtn, false);
        toggleDisableButton(this.$scrollBottomBtn, true);
      }
    } else {
      toggleDisableButton(this.$scrollTopBtn, true);
      toggleDisableButton(this.$scrollBottomBtn, true);
    }
  }

  toggleScrollAnimation(toggle) {
    this.$scrollBottomBtn.toggleClass('animate', toggle);
  }
}