awips2/components/paper-button/paper-button.html
2016-04-03 22:04:09 -05:00

197 lines
5.1 KiB
HTML

<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<!--
@group Paper Elements
Material Design: <a href="http://www.google.com/design/spec/components/buttons.html">Buttons</a>
`paper-button` is a button. When the user touches the button, a ripple effect emanates
from the point of contact. It may be flat or raised. A raised button is styled with a
shadow.
Example:
<paper-button>flat button</paper-button>
<paper-button raised>raised button</paper-button>
<paper-button noink>No ripple effect</paper-button>
You may use custom DOM in the button body to create a variety of buttons. For example, to
create a button with an icon and some text:
<paper-button>
<core-icon icon="favorite"></core-icon>
custom button content
</paper-button>
## Styling
Style the button with CSS as you would a normal DOM element.
/* make #my-button green with yellow text */
#my-button {
background: green;
color: yellow;
}
By default, the ripple is the same color as the foreground at 25% opacity. You may
customize the color using this selector:
/* make #my-button use a blue ripple instead of foreground color */
#my-button::shadow #ripple {
color: blue;
}
The opacity of the ripple is not customizable via CSS.
@element paper-button
@extends paper-button-base
@status unstable
-->
<link href="../polymer/polymer.html" rel="import">
<link href="../paper-shadow/paper-shadow.html" rel="import">
<link href="../core-a11y-keys/core-a11y-keys.html" rel="import">
<link href="paper-button-base.html" rel="import">
<polymer-element name="paper-button" extends="paper-button-base" attributes="raised recenteringTouch fill"
role="button">
<template>
<style>
:host {
display: inline-block;
position: relative;
box-sizing: border-box;
min-width: 5.14em;
margin: 0 0.29em;
background: transparent;
text-align: center;
font: inherit;
text-transform: uppercase;
outline: none;
border-radius: 3px;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none;
cursor: pointer;
z-index: 0;
}
:host([disabled]) {
background: #eaeaea;
color: #a8a8a8;
cursor: auto;
pointer-events: none;
}
::content * {
text-transform: inherit;
}
#bg, #shadow {
border-radius: inherit;
}
#ripple {
pointer-events: none;
z-index: -1;
}
.button-content {
padding: 0.7em 0.57em
}
polyfill-next-selector { content: '.button-content > a'; }
::content > a {
height: 100%;
padding: 0.7em 0.57em;
margin: -0.7em -0.57em;
/* flex */
-ms-flex: 1 1 0.000000001px;
-webkit-flex: 1;
flex: 1;
-webkit-flex-basis: 0.000000001px;
flex-basis: 0.000000001px;
}
</style>
<template if="{{raised}}">
<paper-shadow id="shadow" fit animated></paper-shadow>
</template>
<!-- this div is needed to position the ripple behind text content -->
<div class="button-content" relative layout horizontal center-center>
<content></content>
</div>
<core-a11y-keys keys="space enter" target="{{}}" on-keys-pressed="{{_activate}}"></core-a11y-keys>
</template>
<script>
Polymer({
publish: {
/**
* If true, the button will be styled with a shadow.
*
* @attribute raised
* @type boolean
* @default false
*/
raised: false,
/**
* By default the ripple emanates from where the user touched the button.
* Set this to true to always center the ripple.
*
* @attribute recenteringTouch
* @type boolean
* @default false
*/
recenteringTouch: false,
/**
* By default the ripple expands to fill the button. Set this to true to
* constrain the ripple to a circle within the button.
*
* @attribute fill
* @type boolean
* @default true
*/
fill: true
},
_activate: function() {
this.click();
this.fire('tap');
if (!this.pressed) {
var bcr = this.getBoundingClientRect();
var x = bcr.left + (bcr.width / 2);
var y = bcr.top + (bcr.height / 2);
this.downAction({x: x, y: y});
var fn = function fn() {
this.upAction();
this.removeEventListener('keyup', fn);
}.bind(this);
this.addEventListener('keyup', fn);
}
}
});
</script>
</polymer-element>