2 -- Copyright 2013 The Chromium Authors. All rights reserved.
3 -- Use of this source code is governed by a BSD-style license that can be
4 -- found in the LICENSE file.
7 <polymer-element name="kb-keyset"
8 attributes="align isDefault nextKeyset pitch weightRight
9 weightTop weightBottom"
10 on-key-up="{{keyUp}}" on-key-longpress="{{keyLongpress}}">
15 :host:not(.activeKeyset) {
19 <content select="kb-row"></content>
20 <content select="kb-altkey-container" id="altkeyContainer"
21 touch-action="none"></content>
22 <kb-altkey-data id="altkeyMetadata"></kb-altkey-data>
25 Polymer('kb-keyset', {
28 nextKeyset: undefined,
29 // Weight offsets for positioning the keyset.
36 * Weight assigned to space between keys, of the form "xPitch yPitch".
37 * Defaults to xPitch = yPitch if it's only a single number.
42 // TODO(bshe): support select keyset on down, long and dbl events.
43 keyUp: function(event, detail) {
44 switch (detail.char) {
54 detail.toKeyset = this.nextKeyset;
56 keyLongpress: function(event, detail) {
60 var altkeyContainer = this.$.altkeyContainer.getDistributedNodes()[0];
64 var altkeyMetadata = this.$.altkeyMetadata;
65 var altkeys = altkeyMetadata.getAltkeys(detail.char,
71 var activeAltKeySet = altkeyContainer.querySelector('#' + id);
72 if (!activeAltKeySet) {
73 var keyWidth = event.target.clientWidth;
74 var leftMargin = event.target.offsetLeft;
75 var maxLeftOffset = Math.round(leftMargin / keyWidth);
76 var rightMargin = this.clientWidth - leftMargin - keyWidth;
77 var maxRightOffset = Math.round(rightMargin / keyWidth);
78 activeAltKeySet = altkeyMetadata.createAltkeySet(detail.char,
82 altkeyContainer.appendChild(activeAltKeySet);
85 altkeyContainer.keyset = id;
86 event.target.dropKey();
87 activeAltKeySet.style.width = event.target.clientWidth *
88 activeAltKeySet.childElementCount + 'px';
89 activeAltKeySet.style.height = event.target.clientHeight + 'px';
90 activeAltKeySet.style.top = event.target.offsetTop + 'px';
91 var leftOffset = activeAltKeySet.offset * event.target.clientWidth;
92 activeAltKeySet.style.left = event.target.offsetLeft - leftOffset +
94 var nodes = activeAltKeySet.childNodes;
95 nodes[activeAltKeySet.offset].classList.add('active');
96 altkeyContainer.hidden = false;
100 var old = $('keyboard').querySelector('.activeKeyset');
101 if (old && old != this)
102 old.classList.remove('activeKeyset');
103 this.classList.add('activeKeyset');
104 this.fire('stateChange', {
105 state: 'keysetChanged',
110 enteredView: function() {
112 Platform.endOfMicrotask(function(){
113 self.fire('realign');