<!-- -- Copyright 2013 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. --> <polymer-element name="kb-keyset" attributes="nextKeyset isDefault" on-key-up="{{keyUp}}" on-key-longpress="{{keyLongpress}}"> <template> <style> :host { -webkit-box-flex: 1; -webkit-box-orient: vertical; display: -webkit-box; } </style> <content select="kb-row"></content> <content select="kb-altkey-container" id="altkeyContainer" touch-action="none"></content> <kb-altkey-data id="altkeyMetadata"></kb-altkey-data> </template> <script> Polymer('kb-keyset', { isDefault: false, nextKeyset: undefined, // TODO(bshe): support select keyset on down, long and dbl events. keyUp: function(event, detail) { switch (detail.char) { case 'Shift': case 'Alt': case 'Ctrl': return; default: break; } if (!detail.toKeyset) detail.toKeyset = this.nextKeyset; }, keyLongpress: function(event, detail) { if (!detail.char) return; var altkeyContainer = this.$.altkeyContainer.getDistributedNodes()[0]; if (!altkeyContainer) return; var altkeyMetadata = this.$.altkeyMetadata; var altkeys = altkeyMetadata.getAltkeys(detail.char, !!detail.hintText); if (!altkeys) return; var id = altkeys.id; var activeAltKeySet = altkeyContainer.querySelector('#' + id); if (!activeAltKeySet) { var keyWidth = event.target.clientWidth; var leftMargin = event.target.offsetLeft; var maxLeftOffset = Math.round(leftMargin / keyWidth); var rightMargin = this.clientWidth - leftMargin - keyWidth; var maxRightOffset = Math.round(rightMargin / keyWidth); activeAltKeySet = altkeyMetadata.createAltkeySet(detail.char, maxLeftOffset, maxRightOffset, detail.hintText); altkeyContainer.appendChild(activeAltKeySet); } altkeyContainer.keyset = id; event.target.dropKey(); activeAltKeySet.style.width = event.target.clientWidth * activeAltKeySet.childElementCount + 'px'; activeAltKeySet.style.height = event.target.clientHeight + 'px'; activeAltKeySet.style.top = event.target.offsetTop + 'px'; var leftOffset = activeAltKeySet.offset * event.target.clientWidth; activeAltKeySet.style.left = event.target.offsetLeft - leftOffset + 'px'; var nodes = activeAltKeySet.childNodes; nodes[activeAltKeySet.offset].classList.add('active'); altkeyContainer.hidden = false; } }); </script> </polymer-element>