Chromium Code Reviews| Index: ui/file_manager/gallery/elements/gallery_toggle_button.js |
| diff --git a/ui/file_manager/gallery/elements/gallery_toggle_button.js b/ui/file_manager/gallery/elements/gallery_toggle_button.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a81957b498f3172db6c3715250c6048087a32c4d |
| --- /dev/null |
| +++ b/ui/file_manager/gallery/elements/gallery_toggle_button.js |
| @@ -0,0 +1,139 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +/** |
| + * Toggle Button. |
| + * |
| + * activated or deactivated events are dispatched when the state of the button |
| + * is toggled. |
| + * |
| + * You can change ripple color by the following CSS selector. |
| + * |
| + * gallery-toggle-button#my-button::shadow .ripple { |
| + * background-color: black; |
| + * } |
| + */ |
| +var GalleryToggleButton = Polymer({ |
| + is: 'gallery-toggle-button', |
| + |
| + properties: { |
| + 'activated': { |
| + type: Boolean, |
| + value: false, |
| + observer: 'onActivatedChanged_' |
|
fukino
2015/06/10 08:28:52
nit: 'activatedChanged' or 'activatedChanged_' loo
yawano
2015/06/10 08:55:19
Done.
|
| + }, |
| + }, |
| + |
| + /** |
| + * Called when button is tapped or clicked. |
| + * @private |
| + */ |
| + onTapped_: function() { |
|
fukino
2015/06/10 08:28:53
I'm not sure if TAP is the trigger for this animat
yawano
2015/06/11 03:21:31
The active state here means "pressed", e.g. showin
|
| + this.activated = !this.activated; |
| + }, |
| + |
| + /** |
| + * Called when value of activated property is changed. |
| + * @param {boolean} newValue New value. |
| + * @param {boolean} oldValue Old value. |
| + * @private |
| + */ |
| + onActivatedChanged_: function(newValue, oldValue) { |
| + if (newValue === oldValue) |
| + return; |
| + |
| + if (newValue) { |
| + this.fire('activated'); |
| + this.performActivateAnimation_(); |
| + } else { |
| + this.fire('deactivated'); |
| + this.performDeactivateAnimation_(); |
| + } |
| + }, |
| + |
| + /** |
| + * Perform activate animation. |
| + * @private |
| + */ |
| + performActivateAnimation_: function() { |
| + this.$.ripple.animate([ |
| + {opacity: 0, offset: 0, easing: 'linear'}, |
| + {opacity: 0.2, offset: 1} |
| + ], 50); |
| + this.$.ripple.animate([ |
| + { |
| + width: '38.5%', |
| + height: '38.5%', |
| + offset: 0, |
| + easing: 'cubic-bezier(0, 0, 0.330066603741, 0.931189591041)' |
| + }, |
| + { |
| + width: '97.4%', |
| + height: '97.4%', |
| + offset: 0.5, |
| + easing: 'cubic-bezier(0.435623148352, 0.141946042876, 0.2, 1.0)' |
| + }, |
| + { |
| + width: '60.3%', |
| + height: '60.3%', |
| + offset: 1 |
| + } |
| + ], 500); |
| + this.$.ripple.animate([ |
| + { |
| + 'border-radius': '48.7%', |
| + offset: 0, |
| + easing: 'linear' |
| + }, |
| + { |
| + 'border-radius': '48.7%', |
| + offset: 0.333, |
| + easing: 'cubic-bezier(0.109613342381, 0.32112094549, 0.2, 1.0)' |
| + }, |
| + { |
| + 'border-radius': '2.56%', |
| + offset: 1 |
| + } |
| + ], 750); |
| + |
| + this.$.ripple.classList.add('activated'); |
| + }, |
| + |
| + /** |
| + * Perform deactivate animation. |
| + * @private |
| + */ |
| + performDeactivateAnimation_: function() { |
| + this.$.ripple.animate([ |
| + {opacity: 0.2, offset: 0, easing: 'linear'}, |
| + {opacity: 0, offset: 1} |
| + ], 150); |
| + this.$.ripple.animate([ |
| + { |
| + width: '60.3%', |
| + height: '60.3%', |
| + offset: 0, |
| + easing: 'cubic-bezier(0, 0, 0.6, 1)' |
| + }, |
| + { |
| + width: '100%', |
| + height: '100%', |
| + offset: 1 |
| + } |
| + ], 150); |
| + this.$.ripple.animate([ |
| + { |
| + 'border-radius': '2.56%', |
|
fukino
2015/06/10 08:28:52
nit: These single quotation marks looks unnecessar
yawano
2015/06/10 08:55:19
If we remove single quotes, it becomes syntax erro
|
| + offset: 0, |
| + easing: 'cubic-bezier(0, 0, 0.2, 1)' |
| + }, |
| + { |
| + 'border-radius': '50%', |
|
fukino
2015/06/10 08:28:53
ditto
|
| + offset: 1 |
| + } |
| + ], 150); |
| + |
| + this.$.ripple.classList.remove('activated'); |
| + } |
| +}); |