Home | History | Annotate | Download | only in elements
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 /**
      6  * Filter out mouse/touch movements internal to this node. When moving
      7  * inside a node, the event should be filter out.
      8  * @param {Node} node The accent key node which receives event.
      9  * @param {event} event A pointer move event.
     10  * @return {boolean} True if event is external to node.
     11  */
     12  function isRelevantEvent(node, event) {
     13   return !(node.compareDocumentPosition(event.relatedTarget)
     14     & Node.DOCUMENT_POSITION_CONTAINED_BY);
     15 };
     16 Polymer('kb-altkey', {
     17   over: function(event) {
     18     if (isRelevantEvent(this, event)) {
     19       // Dragging over an accent key is equivalent to pressing on the accent
     20       // key.
     21       this.fire('key-down', {});
     22     }
     23   },
     24 
     25   out: function(event) {
     26     if (isRelevantEvent(this, event)) {
     27       this.classList.remove('active');
     28     }
     29   },
     30 
     31   up: function(event) {
     32     var detail = {
     33       char: this.charValue
     34     };
     35     this.fire('key-up', detail);
     36   },
     37 
     38   // TODO(bshe): kb-altkey should extend from kb-key-base.
     39   autoRelease: function() {
     40   },
     41 
     42   /**
     43    * Character value associated with the key. Typically, the value is a
     44    * single character, but may be multi-character in cases like a ".com"
     45    * button.
     46    * @return {string}
     47    */
     48    get charValue() {
     49     return this.char || this.textContent;
     50   }
     51 });
     52 
     53