// 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. Polymer('kb-keyset', { align: "center", // Propagate flick gestures to keys in this keyset. flick: true, isDefault: false, nextKeyset: undefined, // Weight offsets for positioning the keyset. weightBottom: 15, weightLeft: 10, weightRight: 10, weightTop: 6, /** * Weight assigned to space between keys, of the form "xPitch yPitch". * Defaults to xPitch = yPitch if it's only a single number. * @type {string} */ pitch: "10", /** * Expands kb-key-sequences into individual keys. */ flattenKeyset: function() { var keySequences = this.querySelectorAll('kb-key-sequence'); if (keySequences.length != 0) { keySequences.array().forEach(function(element) { var generatedDom = element.generateDom(); element.parentNode.replaceChild(generatedDom, element); }); } }, // TODO(bshe): support select keyset on down, long and dbl events. keyUp: function(event, detail) { switch (detail.char) { case 'Shift': case 'Alt': case 'Ctrl': case 'Invalid': 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; }, show: function() { var old = $('keyboard').querySelector('.activeKeyset'); if (old && old != this) old.classList.remove('activeKeyset'); this.classList.add('activeKeyset'); this.fire('stateChange', { state: 'keysetChanged', value: this.id }); }, });