| 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..005483cfa1fe8d2545cd295d212380b66d2521e7
 | 
| --- /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([
 | 
| +      {
 | 
| +        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');
 | 
| +  }
 | 
| +});
 | 
| 
 |