• Jump To … +
    search_facets.js search_query.js templates.js backbone_extensions.js hotkeys.js inflector.js jquery_extensions.js search_parser.js search_box.js search_facet.js search_input.js visualsearch.js
  • hotkeys.js

  • ¶
    (function() {
    
    var $ = jQuery; // Handle namespaced jQuery
  • ¶

    DocumentCloud workspace hotkeys. To tell if a key is currently being pressed, just ask VS.app.hotkeys.[key] on keypress, or ask VS.app.hotkeys.key(e) on keydown.

    For the most headache-free way to use this utility, check modifier keys, like shift and command, with VS.app.hotkeys.shift, and check every other key with VS.app.hotkeys.key(e) == 'key_name'.

    VS.app.hotkeys = {
  • ¶

    Keys that will be mapped to the hotkeys namespace.

      KEYS: {
        '16':  'shift',
        '17':  'command',
        '91':  'command',
        '93':  'command',
        '224': 'command',
        '13':  'enter',
        '37':  'left',
        '38':  'upArrow',
        '39':  'right',
        '40':  'downArrow',
        '46':  'delete',
        '8':   'backspace',
        '35':  'end',
        '36':  'home',
        '9':   'tab',
        '188': 'comma'
      },
  • ¶

    Binds global keydown and keyup events to listen for keys that match this.KEYS.

      initialize : function() {
        _.bindAll(this, 'down', 'up', 'blur');
        $(document).bind('keydown', this.down);
        $(document).bind('keyup', this.up);
        $(window).bind('blur', this.blur);
      },
  • ¶

    On keydown, turn on all keys that match.

      down : function(e) {
        var key = this.KEYS[e.which];
        if (key) this[key] = true;
      },
  • ¶

    On keyup, turn off all keys that match.

      up : function(e) {
        var key = this.KEYS[e.which];
        if (key) this[key] = false;
      },
  • ¶

    If an input is blurred, all keys need to be turned off, since they are no longer able to modify the document.

      blur : function(e) {
        for (var key in this.KEYS) this[this.KEYS[key]] = false;
      },
  • ¶

    Check a key from an event and return the common english name.

      key : function(e) {
        return this.KEYS[e.which];
      },
  • ¶

    Colon is special, since the value is different between browsers.

      colon : function(e) {
        var charCode = e.which;
        return charCode && String.fromCharCode(charCode) == ":";
      },
  • ¶

    Check a key from an event and match it against any known characters. The keyCode is different depending on the event type: keydown vs. keypress.

    These were determined by looping through every keyCode and charCode that resulted from keydown and keypress events and counting what was printable.

      printable : function(e) {
        var code = e.which;
        if (e.type == 'keydown') {
          if (code == 32 ||                      // space
              (code >= 48 && code <= 90) ||      // 0-1a-z
              (code >= 96 && code <= 111) ||     // 0-9+-/*.
              (code >= 186 && code <= 192) ||    // ;=,-./^
              (code >= 219 && code <= 222)) {    // (\)'
            return true;
          }
        } else {
  • ¶

    [space]!”#$%&’()*+,-.0-9:;<=>?@A-Z[]^_`a-z{|} and unicode characters

          if ((code >= 32 && code <= 126)  ||
              (code >= 160 && code <= 500) ||
              (String.fromCharCode(code) == ":")) {
            return true;
          }
        }
        return false;
      }
    
    };
    
    })();