// 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-key', {
/**
* The background image to display on this key. Does not display an
* image if this is the empty string.
* @type {string}
*/
image: "",
/**
* The background image size to use if an image is specified. The size
* is provided as a string, for example, "50%".
* @type {string}
*/
imageSize: "",
/**
* Key codes have been deprecated in DOM3 key events, but are required
* for legacy web content. The key codes depend on the position of the
* key on the keyboard and is independent of which modifier keys (shift,
* alt, ...) are active.
* @type {number|undefined}
*/
keyCode: undefined,
/**
* Name of the key as defined in the DOM3 specification for key events.
* Like the keyCode, the keyName is independent of the state of the
* modifier keys.
* @type {string|undefined}
*/
keyName: undefined,
/**
* Whether the shift key is pressed when producing the key value.
* @type {boolean}
*/
shiftModifier: false,
/**
* The sound to play when this key is pressed.
* @type {Sound}
*/
sound: Sound.DEFAULT,
/**
* Whether the key can be stretched to accomodate pixel rounding errors.
*/
stretch: false,
/**
* Weighting to use for layout in order to properly size the key.
* Keys with a high weighting are wider than normal keys.
* @type {number}
*/
weight: DEFAULT_KEY_WEIGHT,
/**
* Called when the image attribute changes. This is used to set the
* background image of the key.
* TODO(rsadam): Remove when polymer {{}} syntax regression is fixed.
*/
imageChanged: function() {
if (!this.image) {
this.$.key.style.backgroundImage = "none";
} else {
// If no extension provided, default to svg.
var image =
this.image.split('.').length > 1 ? this.image : this.image + ".svg";
this.$.key.style.backgroundImage =
"url(images/" + image + ")";
}
},
/**
* Returns a subset of the key attributes.
* @param {string} caller The id of the function that called
* populateDetails.
* @return {Object} Mapping of attributes for the key element.
*/
populateDetails: function(caller) {
var details = this.super([caller]);
details.keyCode = this.keyCode;
details.keyName = this.keyName;
details.shiftModifier = this.shiftModifier;
details.sound = this.sound;
return details;
},
});
;
Polymer('kb-abc-key', {
populateDetails: function(caller) {
var detail = this.super([caller]);
switch (caller) {
case ('down'):
detail.relegateToShift = true;
break;
default:
break;
}
return detail;
}
});
;
Polymer('kb-hide-keyboard-key', {
up: function(event) {
hideKeyboard();
},
});