| Index: polymer_0.5.0/bower_components/paper-tabs/paper-tabs.html
|
| diff --git a/polymer_0.5.0/bower_components/paper-tabs/paper-tabs.html b/polymer_0.5.0/bower_components/paper-tabs/paper-tabs.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bc664f1019dec7819b162128442475377ec32168
|
| --- /dev/null
|
| +++ b/polymer_0.5.0/bower_components/paper-tabs/paper-tabs.html
|
| @@ -0,0 +1,343 @@
|
| +<!--
|
| +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
|
| +-->
|
| +
|
| +<!--
|
| +`paper-tabs` is a `core-selector` styled to look like tabs. Tabs make it easy to
|
| +explore and switch between different views or functional aspects of an app, or
|
| +to browse categorized data sets.
|
| +
|
| +Use `selected` property to get or set the selected tab.
|
| +
|
| +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>
|
| +
|
| +See <a href="#paper-tab">paper-tab</a> for more information about
|
| +`paper-tab`.
|
| +
|
| +A common usage for `paper-tabs` is to use it along with `core-pages` to switch
|
| +between different views.
|
| +
|
| + <paper-tabs selected="{{selected}}">
|
| + <paper-tab>Tab 1</paper-tab>
|
| + <paper-tab>Tab 2</paper-tab>
|
| + <paper-tab>Tab 3</paper-tab>
|
| + </paper-tabs>
|
| +
|
| + <core-pages selected="{{selected}}">
|
| + <div>Page 1</div>
|
| + <div>Page 2</div>
|
| + <div>Page 3</div>
|
| + </core-pages>
|
| +
|
| +`paper-tabs` adapt to mobile/narrow layout when there is a `core-narrow` class set
|
| +on itself or any of its ancestors.
|
| +
|
| +To use links in tabs, add `link` attribute to `paper-tabs` and put an `<a>`
|
| +element in `paper-tab`.
|
| +
|
| +Example:
|
| +
|
| + <paper-tabs selected="0" link>
|
| + <paper-tab>
|
| + <a href="#link1" horizontal center-center layout>TAB ONE</a>
|
| + </paper-tab>
|
| + <paper-tab>
|
| + <a href="#link2" horizontal center-center layout>TAB TWO</a>
|
| + </paper-tab>
|
| + <paper-tab>
|
| + <a href="#link3" horizontal center-center layout>TAB THREE</a>
|
| + </paper-tab>
|
| + </paper-tabs>
|
| +
|
| +Styling tabs:
|
| +
|
| +To change the sliding bar color:
|
| +
|
| + paper-tabs.pink::shadow #selectionBar {
|
| + background-color: #ff4081;
|
| + }
|
| +
|
| +To change the ink ripple color:
|
| +
|
| + paper-tabs.pink paper-tab::shadow #ink {
|
| + color: #ff4081;
|
| + }
|
| +
|
| +@group Paper Elements
|
| +@element paper-tabs
|
| +@extends core-selector
|
| +@homepage github.io
|
| +-->
|
| +
|
| +<link rel="import" href="../core-selector/core-selector.html">
|
| +<link rel="import" href="../paper-icon-button/paper-icon-button.html">
|
| +<link rel="import" href="../core-resizable/core-resizable.html">
|
| +<link rel="import" href="paper-tab.html">
|
| +
|
| +<polymer-element name="paper-tabs" extends="core-selector" attributes="noink nobar noslide scrollable hideScrollButton" role="tablist" horizontal center layout>
|
| +<template>
|
| +
|
| + <link rel="stylesheet" href="paper-tabs.css">
|
| +
|
| + <div class="scroll-button" hidden?="{{!scrollable || hideScrollButton}}">
|
| + <paper-icon-button icon="chevron-left" class="{{ {hidden: leftHidden} | tokenList }}" on-down="{{holdLeft}}" on-up="{{releaseHold}}"></paper-icon-button>
|
| + </div>
|
| +
|
| + <div id="tabsContainer" class="{{ {scrollable: scrollable} | tokenList }}" flex on-scroll="{{scroll}}" on-trackstart="{{trackStart}}">
|
| +
|
| + <div id="tabsContent" horizontal layout?="{{!scrollable}}">
|
| + <shadow></shadow>
|
| + <div id="selectionBar" hidden?="{{nobar}}" on-transitionend="{{barTransitionEnd}}"></div>
|
| + </div>
|
| +
|
| + </div>
|
| +
|
| + <div class="scroll-button" hidden?="{{!scrollable || hideScrollButton}}">
|
| + <paper-icon-button icon="chevron-right" class="{{ {hidden: rightHidden} | tokenList }}" on-down="{{holdRight}}" on-up="{{releaseHold}}"></paper-icon-button>
|
| + </div>
|
| +
|
| +</template>
|
| +<script>
|
| +
|
| + Polymer(Polymer.mixin({
|
| +
|
| + /**
|
| + * If true, ink ripple effect is disabled.
|
| + *
|
| + * @attribute noink
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + noink: false,
|
| +
|
| + /**
|
| + * If true, the bottom bar to indicate the selected tab will not be shown.
|
| + *
|
| + * @attribute nobar
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + nobar: false,
|
| +
|
| + /**
|
| + * If true, the slide effect for the bottom bar is disabled.
|
| + *
|
| + * @attribute noslide
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + noslide: false,
|
| +
|
| + /**
|
| + * If true, tabs are scrollable and the tab width is based on the label width.
|
| + *
|
| + * @attribute scrollable
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + scrollable: false,
|
| +
|
| + /**
|
| + * If true, dragging on the tabs to scroll is disabled.
|
| + *
|
| + * @attribute disableDrag
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + disableDrag: false,
|
| +
|
| + /**
|
| + * If true, scroll buttons (left/right arrow) will be hidden for scrollable tabs.
|
| + *
|
| + * @attribute hideScrollButton
|
| + * @type boolean
|
| + * @default false
|
| + */
|
| + hideScrollButton: false,
|
| +
|
| + eventDelegates: {
|
| + 'core-resize': 'resizeHandler'
|
| + },
|
| +
|
| + activateEvent: 'tap',
|
| +
|
| + step: 10,
|
| +
|
| + holdDelay: 10,
|
| +
|
| + ready: function() {
|
| + this.super();
|
| + this._trackxHandler = this.trackx.bind(this);
|
| + Polymer.addEventListener(this.$.tabsContainer, 'trackx', this._trackxHandler);
|
| + this._tabsObserver = new MutationObserver(this.updateBar.bind(this));
|
| + },
|
| +
|
| + domReady: function() {
|
| + this.async('resizeHandler');
|
| + this._tabsObserver.observe(this, {childList: true, subtree: true, characterData: true});
|
| + },
|
| +
|
| + attached: function() {
|
| + this.resizableAttachedHandler();
|
| + },
|
| +
|
| + detached: function() {
|
| + Polymer.removeEventListener(this.$.tabsContainer, 'trackx', this._trackxHandler);
|
| + this._tabsObserver.disconnect();
|
| + this.resizableDetachedHandler();
|
| + },
|
| +
|
| + trackStart: function(e) {
|
| + if (!this.scrollable || this.disableDrag) {
|
| + return;
|
| + }
|
| + var t = e.target;
|
| + if (t && t.cancelRipple) {
|
| + t.cancelRipple();
|
| + }
|
| + this._startx = this.$.tabsContainer.scrollLeft;
|
| + e.preventTap();
|
| + },
|
| +
|
| + trackx: function(e) {
|
| + if (!this.scrollable || this.disableDrag) {
|
| + return;
|
| + }
|
| + this.$.tabsContainer.scrollLeft = this._startx - e.dx;
|
| + },
|
| +
|
| + resizeHandler: function() {
|
| + this.scroll();
|
| + this.updateBar();
|
| + },
|
| +
|
| + scroll: function() {
|
| + if (!this.scrollable) {
|
| + return;
|
| + }
|
| + var tc = this.$.tabsContainer;
|
| + var l = tc.scrollLeft;
|
| + this.leftHidden = l === 0;
|
| + this.rightHidden = l === (tc.scrollWidth - tc.clientWidth);
|
| + },
|
| +
|
| + holdLeft: function() {
|
| + this.holdJob = setInterval(this.scrollToLeft.bind(this), this.holdDelay);
|
| + },
|
| +
|
| + holdRight: function() {
|
| + this.holdJob = setInterval(this.scrollToRight.bind(this), this.holdDelay);
|
| + },
|
| +
|
| + releaseHold: function() {
|
| + clearInterval(this.holdJob);
|
| + this.holdJob = null;
|
| + },
|
| +
|
| + scrollToLeft: function() {
|
| + this.$.tabsContainer.scrollLeft -= this.step;
|
| + },
|
| +
|
| + scrollToRight: function() {
|
| + this.$.tabsContainer.scrollLeft += this.step;
|
| + },
|
| +
|
| + /**
|
| + * Invoke this to update the size and position of the bottom bar. Usually
|
| + * you only need to call this if the `paper-tabs` is initially hidden and
|
| + * later becomes visible.
|
| + *
|
| + * @method updateBar
|
| + */
|
| + updateBar: function() {
|
| + this.async('selectedItemChanged');
|
| + },
|
| +
|
| + selectedItemChanged: function(old) {
|
| + var oldIndex = this.selectedIndex;
|
| + this.super(arguments);
|
| + var s = this.$.selectionBar.style;
|
| +
|
| + if (!this.selectedItem) {
|
| + s.width = 0;
|
| + s.left = 0;
|
| + return;
|
| + }
|
| +
|
| + var r = this.$.tabsContent.getBoundingClientRect();
|
| + this._w = r.width;
|
| + this._l = r.left;
|
| +
|
| + r = this.selectedItem.getBoundingClientRect();
|
| + this._sw = r.width;
|
| + this._sl = r.left;
|
| + this._sOffsetLeft = this._sl - this._l;
|
| +
|
| + if (this.noslide || old == null) {
|
| + this.positionBarForSelected();
|
| + return;
|
| + }
|
| +
|
| + var oldRect = old.getBoundingClientRect();
|
| +
|
| + var m = 5;
|
| + this.$.selectionBar.classList.add('expand');
|
| + if (oldIndex < this.selectedIndex) {
|
| + s.width = this.calcPercent(this._sl + this._sw - oldRect.left) - m + '%';
|
| + this._transitionCounter = 1;
|
| + } else {
|
| + s.width = this.calcPercent(oldRect.left + oldRect.width - this._sl) - m + '%';
|
| + s.left = this.calcPercent(this._sOffsetLeft) + m + '%';
|
| + this._transitionCounter = 2;
|
| + }
|
| + if (this.scrollable) {
|
| + this.scrollToSelectedIfNeeded();
|
| + }
|
| + },
|
| +
|
| + scrollToSelectedIfNeeded: function() {
|
| + var scrollLeft = this.$.tabsContainer.scrollLeft;
|
| + // scroll to selected if needed
|
| + if (this._sOffsetLeft + this._sw < scrollLeft ||
|
| + this._sOffsetLeft - scrollLeft > this.$.tabsContainer.offsetWidth) {
|
| + this.$.tabsContainer.scrollLeft = this._sOffsetLeft;
|
| + }
|
| + },
|
| +
|
| + positionBarForSelected: function() {
|
| + var s = this.$.selectionBar.style;
|
| + s.width = this.calcPercent(this._sw) + '%';
|
| + s.left = this.calcPercent(this._sOffsetLeft) + '%';
|
| + },
|
| +
|
| + calcPercent: function(w) {
|
| + return 100 * w / this._w;
|
| + },
|
| +
|
| + barTransitionEnd: function(e) {
|
| + this._transitionCounter--;
|
| + var cl = this.$.selectionBar.classList;
|
| + if (cl.contains('expand') && !this._transitionCounter) {
|
| + cl.remove('expand');
|
| + cl.add('contract');
|
| + this.positionBarForSelected();
|
| + } else if (cl.contains('contract')) {
|
| + cl.remove('contract');
|
| + }
|
| + }
|
| +
|
| + }, Polymer.CoreResizable));
|
| +
|
| +</script>
|
| +</polymer-element>
|
|
|