NRuby

Форк
0
104 строки · 2.7 Кб
1
/*
2
 * Navigation allows movement using the arrow keys through the search results.
3
 *
4
 * When using this library you will need to set scrollIntoView to the
5
 * appropriate function for your layout.  Use scrollInWindow if the container
6
 * is not scrollable and scrollInElement if the container is a separate
7
 * scrolling region.
8
 */
9
Navigation = new function() {
10
  this.initNavigation = function() {
11
    var _this = this;
12

13
    document.addEventListener('keydown', function(e) {
14
      _this.onkeydown(e);
15
    });
16

17
    this.navigationActive = true;
18
  }
19

20
  this.setNavigationActive = function(state) {
21
    this.navigationActive = state;
22
  }
23

24
  this.onkeydown = function(e) {
25
    if (!this.navigationActive) return;
26
    switch(e.keyCode) {
27
      case 37: //Event.KEY_LEFT:
28
        if (this.moveLeft()) e.preventDefault();
29
        break;
30
      case 38: //Event.KEY_UP:
31
        if (e.keyCode == 38 || e.ctrlKey) {
32
          if (this.moveUp()) e.preventDefault();
33
        }
34
        break;
35
      case 39: //Event.KEY_RIGHT:
36
        if (this.moveRight()) e.preventDefault();
37
        break;
38
      case 40: //Event.KEY_DOWN:
39
        if (e.keyCode == 40 || e.ctrlKey) {
40
          if (this.moveDown()) e.preventDefault();
41
        }
42
        break;
43
      case 13: //Event.KEY_RETURN:
44
        if (this.current) e.preventDefault();
45
        this.select(this.current);
46
        break;
47
    }
48
    if (e.ctrlKey && e.shiftKey) this.select(this.current);
49
  }
50

51
  this.moveRight = function() {
52
  }
53

54
  this.moveLeft = function() {
55
  }
56

57
  this.move = function(isDown) {
58
  }
59

60
  this.moveUp = function() {
61
    return this.move(false);
62
  }
63

64
  this.moveDown = function() {
65
    return this.move(true);
66
  }
67

68
  /*
69
   * Scrolls to the given element in the scrollable element view.
70
   */
71
  this.scrollInElement = function(element, view) {
72
    var offset, viewHeight, viewScroll, height;
73
    offset = element.offsetTop;
74
    height = element.offsetHeight;
75
    viewHeight = view.offsetHeight;
76
    viewScroll = view.scrollTop;
77

78
    if (offset - viewScroll + height > viewHeight) {
79
      view.scrollTop = offset - viewHeight + height;
80
    }
81
    if (offset < viewScroll) {
82
      view.scrollTop = offset;
83
    }
84
  }
85

86
  /*
87
   * Scrolls to the given element in the window.  The second argument is
88
   * ignored
89
   */
90
  this.scrollInWindow = function(element, ignored) {
91
    var offset, viewHeight, viewScroll, height;
92
    offset = element.offsetTop;
93
    height = element.offsetHeight;
94
    viewHeight = window.innerHeight;
95
    viewScroll = window.scrollY;
96

97
    if (offset - viewScroll + height > viewHeight) {
98
      window.scrollTo(window.scrollX, offset - viewHeight + height);
99
    }
100
    if (offset < viewScroll) {
101
      window.scrollTo(window.scrollX, offset);
102
    }
103
  }
104
}
105

106

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.