197 lines
5.1 KiB
HTML
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>
|