blob: 60a0a015e674b59d801ef8d39a8f83a43889bcd5 [file] [log] [blame]
// 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
});
},
});