blob: 0157f93e330e5b50615c848bc2978f0baa7597bc [file] [log] [blame]
<!--
-- 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-key-sequence"
attributes="keys hintTexts keyCodes invert">
<template>
<style>
:host {
display: none;
}
</style>
</template>
<script>
(function() {
var metadata = null;
function getKeyCodeAndModifiers(keyCodeIndex) {
if (!metadata)
metadata = document.createElement('kb-key-codes');
return metadata.GetKeyCodeAndModifiers(keyCodeIndex);
}
Polymer('kb-key-sequence', {
/**
* Generates the DOM structure to replace (expand) this kb-key-sequence.
*/
generateDom: function() {
var replacement = document.createDocumentFragment();
var newKeys = this.getAttribute('keys');
var newHintTexts = this.getAttribute('hintTexts');
var keyCodes = this.getAttribute('hintCodes') || newKeys;
if (newKeys) {
if (newHintTexts && newKeys.length != newHintTexts.length) {
console.error('keys and hintTexts do not match');
return;
}
if (keyCodes && newKeys.length != keyCodes.length) {
console.error('keys and keyCodes do not match');
return;
}
for (var i = 0; i < newKeys.length; i++) {
var key = document.createElement('kb-key');
key.innerText = newKeys[i];
key.accents = newKeys[i];
if (newHintTexts)
key.hintText = newHintTexts[i];
var keyCodeIndex = keyCodes[i];
if (this.invert) {
key.invert = true;
key.char = newKeys[i];
keyCodeIndex = key.hintText;
}
var state = getKeyCodeAndModifiers(keyCodeIndex);
if (state) {
key.keyCode = state.keyCode;
key.keyName = state.keyName;
key.shiftModifier = state.shiftModifier;
}
replacement.appendChild(key);
}
}
return replacement;
}
});
})();
</script>
</polymer-element>