aboutsummaryrefslogtreecommitdiff
path: root/catapult/third_party/polymer/components/paper-tabs/paper-tab.html
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/third_party/polymer/components/paper-tabs/paper-tab.html')
-rw-r--r--catapult/third_party/polymer/components/paper-tabs/paper-tab.html175
1 files changed, 175 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/paper-tabs/paper-tab.html b/catapult/third_party/polymer/components/paper-tabs/paper-tab.html
new file mode 100644
index 00000000..b2dd2c05
--- /dev/null
+++ b/catapult/third_party/polymer/components/paper-tabs/paper-tab.html
@@ -0,0 +1,175 @@
+<!--
+@license
+Copyright (c) 2015 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
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-button-state.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-behaviors/paper-ripple-behavior.html">
+
+<!--
+`paper-tab` is styled to look like a tab. It should be used in conjunction with
+`paper-tabs`.
+
+Example:
+
+ <paper-tabs selected="0">
+ <paper-tab>TAB 1</paper-tab>
+ <paper-tab>TAB 2</paper-tab>
+ <paper-tab>TAB 3</paper-tab>
+ </paper-tabs>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-tab-ink` | Ink color | `--paper-yellow-a100`
+`--paper-tab` | Mixin applied to the tab | `{}`
+`--paper-tab-content` | Mixin applied to the tab content | `{}`
+`--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}`
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+-->
+
+<dom-module id="paper-tab">
+ <template>
+ <style>
+ :host {
+ @apply(--layout-inline);
+ @apply(--layout-center);
+ @apply(--layout-center-justified);
+ @apply(--layout-flex-auto);
+
+ position: relative;
+ padding: 0 12px;
+ overflow: hidden;
+ cursor: pointer;
+ vertical-align: middle;
+
+ @apply(--paper-font-common-base);
+ @apply(--paper-tab);
+ }
+
+ :host(:focus) {
+ outline: none;
+ }
+
+ :host([link]) {
+ padding: 0;
+ }
+
+ .tab-content {
+ height: 100%;
+ transform: translateZ(0);
+ -webkit-transform: translateZ(0);
+ transition: opacity 0.1s cubic-bezier(0.4, 0.0, 1, 1);
+ @apply(--layout-horizontal);
+ @apply(--layout-center-center);
+ @apply(--layout-flex-auto);
+ @apply(--paper-tab-content);
+ }
+
+ :host(:not(.iron-selected)) > .tab-content {
+ opacity: 0.8;
+
+ @apply(--paper-tab-content-unselected);
+ }
+
+ :host(:focus) .tab-content {
+ opacity: 1;
+ font-weight: 700;
+ }
+
+ paper-ripple {
+ color: var(--paper-tab-ink, --paper-yellow-a100);
+ }
+
+ .tab-content > ::content > a {
+ @apply(--layout-flex-auto);
+
+ height: 100%;
+ }
+ </style>
+
+ <div class="tab-content">
+ <content></content>
+ </div>
+ </template>
+</dom-module>
+<script>
+Polymer({
+ is: 'paper-tab',
+
+ behaviors: [
+ Polymer.IronControlState,
+ Polymer.IronButtonState,
+ Polymer.PaperRippleBehavior
+ ],
+
+ properties: {
+
+ /**
+ * If true, the tab will forward keyboard clicks (enter/space) to
+ * the first anchor element found in its descendants
+ */
+ link: {
+ type: Boolean,
+ value: false,
+ reflectToAttribute: true
+ }
+
+ },
+
+ hostAttributes: {
+ role: 'tab'
+ },
+
+ listeners: {
+ down: '_updateNoink',
+ tap: '_onTap'
+ },
+
+ attached: function() {
+ this._updateNoink();
+ },
+
+ get _parentNoink () {
+ var parent = Polymer.dom(this).parentNode;
+ return !!parent && !!parent.noink;
+ },
+
+ _updateNoink: function() {
+ this.noink = !!this.noink || !!this._parentNoink;
+ },
+
+ _onTap: function(event) {
+ if (this.link) {
+ var anchor = this.queryEffectiveChildren('a');
+
+ if (!anchor) {
+ return;
+ }
+
+ // Don't get stuck in a loop delegating
+ // the listener from the child anchor
+ if (event.target === anchor) {
+ return;
+ }
+
+ anchor.click();
+ }
+ }
+
+});
+</script>