Index: ui/file_manager/file_manager/foreground/elements/files_toggle_ripple.js |
diff --git a/ui/file_manager/file_manager/foreground/elements/files_toggle_ripple.js b/ui/file_manager/file_manager/foreground/elements/files_toggle_ripple.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ea1707e33bada6d58a8cbc746eebc726a43ee869 |
--- /dev/null |
+++ b/ui/file_manager/file_manager/foreground/elements/files_toggle_ripple.js |
@@ -0,0 +1,127 @@ |
+// 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 Ripple. |
+ * |
+ * You can change ripple color by the following CSS selector. |
+ * |
+ * files-toggle-ripple#my-button::shadow .ripple { |
+ * background-color: black; |
+ * } |
+ * |
+ * Ripple size of the activated state is same with the size of this element. |
+ */ |
+var FilesToggleRipple = Polymer({ |
+ is: 'files-toggle-ripple', |
+ |
+ properties: { |
+ 'activated': { |
+ type: Boolean, |
+ value: false, |
+ observer: 'activatedChanged_' |
+ }, |
+ }, |
+ |
+ /** |
+ * Called when value of activated property is changed. |
+ * @param {boolean} newValue New value. |
+ * @param {boolean} oldValue Old value. |
+ * @private |
+ */ |
+ activatedChanged_: function(newValue, oldValue) { |
+ if (newValue === oldValue) |
+ return; |
+ |
+ if (newValue) |
+ this.performActivateAnimation_(); |
+ else |
+ 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([ |
+ { |
fukino
2015/06/16 07:34:16
nit: Indent level should be 2 after [.
yawano
2015/06/16 07:38:57
Done.
|
+ width: '31.9%', |
+ height: '31.9%', |
+ offset: 0, |
+ easing: 'cubic-bezier(0, 0, 0.330066603741, 0.931189591041)' |
+ }, |
+ { |
+ width: '80.9%', |
+ height: '80.9%', |
+ offset: 0.5, |
+ easing: 'cubic-bezier(0.435623148352, 0.141946042876, 0.2, 1.0)' |
+ }, |
+ { |
+ width: '50%', |
+ height: '50%', |
+ offset: 1 |
+ } |
+ ], 500); |
+ this.$.ripple.animate([ |
+ { |
+ 'border-radius': '50%', |
+ offset: 0, |
+ easing: 'linear' |
+ }, |
+ { |
+ 'border-radius': '50%', |
+ offset: 0.333, |
+ easing: 'cubic-bezier(0.109613342381, 0.32112094549, 0.2, 1.0)' |
+ }, |
+ { |
+ 'border-radius': '2px', |
+ 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: '50%', |
+ height: '50%', |
+ offset: 0, |
+ easing: 'cubic-bezier(0, 0, 0.6, 1)' |
+ }, |
+ { |
+ width: '83.0%', |
+ height: '83.0%', |
+ offset: 1 |
+ } |
+ ], 150); |
+ this.$.ripple.animate([ |
+ { |
+ 'border-radius': '2px', |
+ offset: 0, |
+ easing: 'cubic-bezier(0, 0, 0.2, 1)' |
+ }, |
+ { |
+ 'border-radius': '50%', |
+ offset: 1 |
+ } |
+ ], 150); |
+ |
+ this.$.ripple.classList.remove('activated'); |
+ } |
+}); |