Javascript  |  53行  |  1.39 KB

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Filter out mouse/touch movements internal to this node. When moving
 * inside a node, the event should be filter out.
 * @param {Node} node The accent key node which receives event.
 * @param {event} event A pointer move event.
 * @return {boolean} True if event is external to node.
 */
 function isRelevantEvent(node, event) {
  return !(node.compareDocumentPosition(event.relatedTarget)
    & Node.DOCUMENT_POSITION_CONTAINED_BY);
};
Polymer('kb-altkey', {
  over: function(event) {
    if (isRelevantEvent(this, event)) {
      // Dragging over an accent key is equivalent to pressing on the accent
      // key.
      this.fire('key-down', {});
    }
  },

  out: function(event) {
    if (isRelevantEvent(this, event)) {
      this.classList.remove('active');
    }
  },

  up: function(event) {
    var detail = {
      char: this.charValue
    };
    this.fire('key-up', detail);
  },

  // TODO(bshe): kb-altkey should extend from kb-key-base.
  autoRelease: function() {
  },

  /**
   * Character value associated with the key. Typically, the value is a
   * single character, but may be multi-character in cases like a ".com"
   * button.
   * @return {string}
   */
   get charValue() {
    return this.char || this.textContent;
  }
});