|  | // Copyright (C) 2016 The Android Open Source Project | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | // http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  | (function() { | 
|  | 'use strict'; | 
|  |  | 
|  | Polymer({ | 
|  | is: 'gr-alert', | 
|  |  | 
|  | /** | 
|  | * Fired when the action button is pressed. | 
|  | * | 
|  | * @event action | 
|  | */ | 
|  |  | 
|  | properties: { | 
|  | text: String, | 
|  | actionText: String, | 
|  | shown: { | 
|  | type: Boolean, | 
|  | value: true, | 
|  | readOnly: true, | 
|  | reflectToAttribute: true, | 
|  | }, | 
|  | toast: { | 
|  | type: Boolean, | 
|  | value: true, | 
|  | reflectToAttribute: true, | 
|  | }, | 
|  |  | 
|  | _hideActionButton: Boolean, | 
|  | _boundTransitionEndHandler: { | 
|  | type: Function, | 
|  | value: function() { return this._handleTransitionEnd.bind(this); }, | 
|  | }, | 
|  | }, | 
|  |  | 
|  | attached: function() { | 
|  | this.addEventListener('transitionend', this._boundTransitionEndHandler); | 
|  | }, | 
|  |  | 
|  | detached: function() { | 
|  | this.removeEventListener('transitionend', | 
|  | this._boundTransitionEndHandler); | 
|  | }, | 
|  |  | 
|  | show: function(text, opt_actionText) { | 
|  | this.text = text; | 
|  | this.actionText = opt_actionText; | 
|  | this._hideActionButton = !opt_actionText; | 
|  | document.body.appendChild(this); | 
|  | this._setShown(true); | 
|  | }, | 
|  |  | 
|  | hide: function() { | 
|  | this._setShown(false); | 
|  | if (this._hasZeroTransitionDuration()) { | 
|  | document.body.removeChild(this); | 
|  | } | 
|  | }, | 
|  |  | 
|  | _hasZeroTransitionDuration: function() { | 
|  | var style = window.getComputedStyle(this); | 
|  | // transitionDuration is always given in seconds. | 
|  | var duration = Math.round(parseFloat(style.transitionDuration) * 100); | 
|  | return duration === 0; | 
|  | }, | 
|  |  | 
|  | _handleTransitionEnd: function(e) { | 
|  | if (this.shown) { return; } | 
|  |  | 
|  | document.body.removeChild(this); | 
|  | }, | 
|  |  | 
|  | _handleActionTap: function(e) { | 
|  | e.preventDefault(); | 
|  | this.fire('action', null, {bubbles: false}); | 
|  | }, | 
|  | }); | 
|  | })(); |