blob: 75121e87e85828d54d107e52d530fae9f22464cb [file] [log] [blame]
<!-- TODO(crbug.com/603217): Use i18n instead of string literals. Figure out
what i18n to use for keypad, ie, does 1 ABC make
sense in every scenario? -->
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/html/i18n_behavior.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-iconset-svg/iron-iconset-svg.html">
<iron-iconset-svg name="pin-keyboard" size="24">
<svg>
<defs>
<!--
Inlined from Polymer's iron-icons to avoid importing everything.
See http://goo.gl/Y1OdAq for instructions on adding additional icons.
-->
<g id="arrow-forward">
<path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z">
</path>
</g>
<g id="backspace">
<path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z">
</g>
</defs>
</svg>
</iron-iconset-svg>
<dom-module id="pin-keyboard">
<template>
<style include="cr-shared-style">
:host {
--backspace-button-ripple-left: calc((var(--backspace-button-width) -
var(--pin-button-ripple-width)) / 2);
--backspace-button-width: calc(var(--pin-button-width) +
var(--pin-button-horizontal-margin) * 2);
--pin-button-height: 40px;
--pin-button-horizontal-margin: 20px;
--pin-button-ripple-height: 48px;
--pin-button-ripple-left: calc((var(--pin-button-width) -
var(--pin-button-ripple-width)) / 2);
--pin-button-ripple-top: calc((var(--pin-button-height) -
var(--pin-button-ripple-height)) / 2);
--pin-button-ripple-width: 48px;
--pin-button-vertical-margin: 8px;
--pin-button-width: 40px;
outline: none;
}
#root {
align-items: center;
display: flex;
flex-direction: column;
min-height: 0;
}
#rowsContainer {
direction: ltr;
display: block;
width: calc((var(--pin-button-width) +
var(--pin-button-horizontal-margin) * 2) * 3);
}
.row {
display: flex;
margin-bottom: calc(var(--pin-button-vertical-margin) * 2);
min-height: 0;
}
:host([enable-password]) #pinInputDiv {
display: none;
}
.bottom-row {
margin-bottom: 6px;
}
#backspaceButton {
--cr-icon-button-color: var(--pin-keyboard-backspace-color,
var(--google-grey-700));
--cr-icon-button-icon-size: 16px;
--cr-icon-button-size: 48px;
left: 0;
opacity: var(--pin-keyboard-backspace-opacity, --dark-primary-opacity);
position: relative;
top: -4px;
}
#backspaceButton[disabled] {
opacity: 0.34;
}
.digit-button {
align-items: center;
background: none;
border: 0;
box-shadow: none;
box-sizing: border-box;
color: var(--google-grey-900);
display: flex;
flex-direction: column;
font-weight: 400;
height: var(--pin-button-height);
justify-content: center;
margin: 0 var(--pin-button-horizontal-margin);
min-height: 0;
min-width: 0;
opacity: 0.87;
padding: 0;
width: var(--pin-button-width);
@apply --pin-keyboard-digit-button;
--ink-color: var(--google-grey-900);
--paper-ripple-height: var(--pin-button-ripple-height);
--paper-ripple-left: var(--pin-button-ripple-left);
--paper-ripple-opacity: .15;
--paper-ripple-top: var(--pin-button-ripple-top);
--paper-ripple-width: var(--pin-button-ripple-width);
@apply --pin-keyboard-paper-ripple;
}
:host-context(.focus-outline-visible) .digit-button:focus {
font-weight: 500;
}
.digit-button inner-text {
font-family: 'Roboto';
}
inner-text.letter {
color: var(--pin-keyboard-letter-color, var(--google-grey-700));
font-size: 12px;
margin-top: 8px;
@apply --pin-keyboard-digit-button-letter;
}
.number {
color: var(--pin-keyboard-number-color, var(--paper-blue-grey-700));
font-size: 18px;
height: 16px;
}
#pinInput {
--cr-input-error-display: none;
--cr-input-input: {
font-size: 28px;
letter-spacing: 18px;
};
--cr-input-padding-bottom: 1px;
--cr-input-padding-end: 0;
--cr-input-padding-start: 0;
--cr-input-padding-top: 1px;
background-color: white;
border: 0;
box-sizing: border-box;
font-face: Roboto-Regular;
font-size: 13px;
left: 0;
opacity: var(--dark-secondary-opacity);
outline: 0;
position: relative;
text-align: center;
width: 200px;
@apply --pin-keyboard-pin-input-style;
}
#pinInput[has-content] {
--cr-disabled-opacity: var(--dark-primary-opacity);
opacity: var(--dark-primary-opacity);
}
#pinInput[is-input-rtl] {
direction: rtl;
}
/* Ensure that all children of cr-button do not consume events. This
* simplifies the event handler code. */
cr-button * {
pointer-events: none;
}
</style>
<div id="root" on-contextmenu="onContextMenu_" on-tap="onRootTap_">
<div id="pinInputDiv">
<cr-input id="pinInput" type="password" value="{{value}}"
is-input-rtl$="[[isInputRtl_(value)]]" aria-label="[[ariaLabel]]"
has-content$="[[hasInput_(value)]]" invalid="[[hasError]]"
placeholder="[[getInputPlaceholder_(enablePassword,
enablePlaceholder)]]"
on-keydown="onInputKeyDown_" force-underline$="[[forceUnderline_]]"
disabled="[[isIncognitoUi]]">
</cr-input>
</div>
<slot select="[problem]"></slot>
<div id="rowsContainer">
<div class="row">
<cr-button class="digit-button" on-tap="onNumberTap_" value="1"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard1')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">&nbsp;</inner-text>
</cr-button>
<cr-button class="digit-button" on-tap="onNumberTap_" value="2"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard2')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">ABC</inner-text>
</cr-button>
<cr-button class="digit-button" on-tap="onNumberTap_" value="3"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard3')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">DEF</inner-text>
</cr-button>
</div>
<div class="row">
<cr-button class="digit-button" on-tap="onNumberTap_" value="4"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard4')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">GHI</inner-text>
</cr-button>
<cr-button class="digit-button" on-tap="onNumberTap_" value="5"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard5')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">JKL</inner-text>
</cr-button>
<cr-button class="digit-button" on-tap="onNumberTap_" value="6"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard6')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">MNO</inner-text>
</cr-button>
</div>
<div class="row">
<cr-button class="digit-button" on-tap="onNumberTap_" value="7"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard7')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">PQRS</inner-text>
</cr-button>
<cr-button class="digit-button" on-tap="onNumberTap_" value="8"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard8')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">TUV</inner-text>
</cr-button>
<cr-button class="digit-button" on-tap="onNumberTap_" value="9"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard9')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">WXYZ</inner-text>
</cr-button>
</div>
<div class="row bottom-row">
<div class="digit-button"></div>
<cr-button class="digit-button" on-tap="onNumberTap_" value="0"
circle-ripple>
<inner-text class="number">[[i18n('pinKeyboard0')]]</inner-text>
<inner-text class="letter"
hidden="[[!enableLetters]]">+</inner-text>
</cr-button>
<cr-icon-button id="backspaceButton"
disabled$="[[!hasInput_(value)]]"
iron-icon="pin-keyboard:backspace"
on-tap="onBackspaceTap_"
on-pointerdown="onBackspacePointerDown_"
on-pointerout="clearAndReset_"
on-pointerup="onBackspacePointerUp_"
title="[[i18n('pinKeyboardDeleteAccessibleName')]]">
</cr-icon-button>
</div>
</div>
</div>
</template>
<script src="pin_keyboard.js"></script>
</dom-module>