UNPKG

npm-polymer-elements

Version:

Polymer Elements package for npm

256 lines (216 loc) 7.19 kB
<!-- @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-a11y-announcer/iron-a11y-announcer.html"> <link rel="import" href="../iron-overlay-behavior/iron-overlay-behavior.html"> <link rel="import" href="../paper-styles/typography.html"> <!-- Material design: [Snackbards & toasts](https://www.google.com/design/spec/components/snackbars-toasts.html) `paper-toast` provides a subtle notification toast. Only one `paper-toast` will be visible on screen. Use `opened` to show the toast: Example: <paper-toast text="Hello world!" opened></paper-toast> Also `open()` or `show()` can be used to show the toast: Example: <paper-button on-click="openToast">Open Toast</paper-button> <paper-toast id="toast" text="Hello world!"></paper-toast> ... openToast: function() { this.$.toast.open(); } Set `duration` to 0, a negative number or Infinity to persist the toast on screen: Example: <paper-toast text="Terms and conditions" opened duration="0"> <a href="#">Show more</a> </paper-toast> ### Styling The following custom properties and mixins are available for styling: Custom property | Description | Default ----------------|-------------|---------- `--paper-toast-background-color` | The paper-toast background-color | `#323232` `--paper-toast-color` | The paper-toast color | `#f1f1f1` @group Paper Elements @element paper-toast @demo demo/index.html @hero hero.svg --> <dom-module id="paper-toast"> <template> <style> :host { display: block; position: fixed; background-color: var(--paper-toast-background-color, #323232); color: var(--paper-toast-color, #f1f1f1); min-height: 48px; min-width: 288px; padding: 16px 24px; box-sizing: border-box; box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); border-radius: 2px; left: 0; bottom: 0; margin: 12px; font-size: 14px; cursor: default; -webkit-transition: visibility 0.3s, -webkit-transform 0.3s, opacity 0.3s; transition: visibility 0.3s, transform 0.3s, opacity 0.3s; visibility: hidden; opacity: 0; -webkit-transform: translateY(100px); transform: translateY(100px); @apply(--paper-font-common-base); } :host(.capsule) { border-radius: 24px; } :host(.fit-bottom) { width: 100%; min-width: 0; border-radius: 0; margin: 0; } :host(.paper-toast-open) { visibility: visible; opacity: 1; -webkit-transform: translateY(0px); transform: translateY(0px); } </style> <span id="label">{{text}}</span> <content></content> </template> <script> (function() { // Keeps track of the toast currently opened. var currentToast = null; Polymer({ is: 'paper-toast', behaviors: [ Polymer.IronOverlayBehavior ], properties: { /** * The duration in milliseconds to show the toast. * Set to `0`, a negative number, or `Infinity`, to disable the * toast auto-closing. */ duration: { type: Number, value: 3000 }, /** * The text to display in the toast. */ text: { type: String, value: '' }, /** * Overridden from `IronOverlayBehavior`. * Set to false to enable closing of the toast by clicking outside it. */ noCancelOnOutsideClick: { type: Boolean, value: true }, }, /** * Read-only. Deprecated. Use `opened` from `IronOverlayBehavior`. * @property visible * @deprecated */ get visible() { console.warn('`visible` is deprecated, use `opened` instead'); return this.opened; }, /** * Read-only. Can auto-close if duration is a positive finite number. * @property _canAutoClose */ get _canAutoClose() { return this.duration > 0 && this.duration !== Infinity; }, created: function() { this._autoClose = null; Polymer.IronA11yAnnouncer.requestAvailability(); }, /** * Show the toast. Same as `open()` from `IronOverlayBehavior`. */ show: function() { this.open(); }, /** * Hide the toast. Same as `close()` from `IronOverlayBehavior`. */ hide: function() { this.close(); }, /** * Overridden from `IronOverlayBehavior`. * Called when the value of `opened` changes. */ _openedChanged: function() { if (this._autoClose !== null) { this.cancelAsync(this._autoClose); this._autoClose = null; } if (this.opened) { if (currentToast && currentToast !== this) { currentToast.close(); } currentToast = this; this.fire('iron-announce', { text: this.text }); if (this._canAutoClose) { this._autoClose = this.async(this.close, this.duration); } } else if (currentToast === this) { currentToast = null; } Polymer.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments); }, /** * Overridden from `IronOverlayBehavior`. */ _renderOpened: function() { this.classList.add('paper-toast-open'); }, /** * Overridden from `IronOverlayBehavior`. */ _renderClosed: function() { this.classList.remove('paper-toast-open'); }, /** * Overridden from `IronOverlayBehavior`. * iron-fit-behavior will set the inline style position: static, which * causes the toast to be rendered incorrectly when opened by default. */ _onIronResize: function() { Polymer.IronOverlayBehaviorImpl._onIronResize.apply(this, arguments); if (this.opened) { // Make sure there is no inline style for position. this.style.position = ''; } } /** * Fired when `paper-toast` is opened. * * @event 'iron-announce' * @param {{text: string}} detail Contains text that will be announced. */ }); })(); </script> </dom-module>