summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/shortcuts_find_file.js
blob: 8469837533bcba84369494aebeff4022ffc824a4 (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
/* eslint-disable func-names, space-before-function-paren, max-len, one-var, no-var, no-restricted-syntax, vars-on-top, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, wrap-iife */
/* global Mousetrap */
/* global ShortcutsNavigation */

/*= require shortcuts_navigation */

(function() {
  var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    hasProp = {}.hasOwnProperty;

  this.ShortcutsFindFile = (function(superClass) {
    extend(ShortcutsFindFile, superClass);

    function ShortcutsFindFile(projectFindFile) {
      var _oldStopCallback;
      this.projectFindFile = projectFindFile;
      ShortcutsFindFile.__super__.constructor.call(this);
      _oldStopCallback = Mousetrap.stopCallback;
      Mousetrap.stopCallback = (function(_this) {
        // override to fire shortcuts action when focus in textbox
        return function(event, element, combo) {
          if (element === _this.projectFindFile.inputElement[0] && (combo === 'up' || combo === 'down' || combo === 'esc' || combo === 'enter')) {
            // when press up/down key in textbox, cusor prevent to move to home/end
            event.preventDefault();
            return false;
          }
          return _oldStopCallback(event, element, combo);
        };
      })(this);
      Mousetrap.bind('up', this.projectFindFile.selectRowUp);
      Mousetrap.bind('down', this.projectFindFile.selectRowDown);
      Mousetrap.bind('esc', this.projectFindFile.goToTree);
      Mousetrap.bind('enter', this.projectFindFile.goToBlob);
    }

    return ShortcutsFindFile;
  })(ShortcutsNavigation);
}).call(this);