| OLD | NEW | 
|---|
| 1 <!-- | 1 <!-- | 
|  | 2 @license | 
| 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | 3 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | 
| 3 This code may only be used under the BSD style license found at http://polymer.g
     ithub.io/LICENSE.txt | 4 This code may only be used under the BSD style license found at http://polymer.g
     ithub.io/LICENSE.txt | 
| 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | 5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | 
| 5 The complete set of contributors may be found at http://polymer.github.io/CONTRI
     BUTORS.txt | 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI
     BUTORS.txt | 
| 6 Code distributed by Google as part of the polymer project is also | 7 Code distributed by Google as part of the polymer project is also | 
| 7 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
     TS.txt | 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
     TS.txt | 
| 8 --> | 9 --> | 
| 9 | 10 | 
| 10 <link rel="import" href="../polymer/polymer.html"> | 11 <link rel="import" href="../polymer/polymer.html"> | 
| 11 <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
     "> | 12 <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
     "> | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 30 effect when touches on it.  You can also defeat the default behavior and | 31 effect when touches on it.  You can also defeat the default behavior and | 
| 31 manually route the down and up actions to the ripple element.  Note that it is | 32 manually route the down and up actions to the ripple element.  Note that it is | 
| 32 important if you call `downAction()` you will have to make sure to call | 33 important if you call `downAction()` you will have to make sure to call | 
| 33 `upAction()` so that `paper-ripple` would end the animation loop. | 34 `upAction()` so that `paper-ripple` would end the animation loop. | 
| 34 | 35 | 
| 35 Example: | 36 Example: | 
| 36 | 37 | 
| 37     <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple> | 38     <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple> | 
| 38     ... | 39     ... | 
| 39     downAction: function(e) { | 40     downAction: function(e) { | 
| 40       this.$.ripple.downAction({x: e.x, y: e.y}); | 41       this.$.ripple.downAction({detail: {x: e.x, y: e.y}}); | 
| 41     }, | 42     }, | 
| 42     upAction: function(e) { | 43     upAction: function(e) { | 
| 43       this.$.ripple.upAction(); | 44       this.$.ripple.upAction(); | 
| 44     } | 45     } | 
| 45 | 46 | 
| 46 Styling ripple effect: | 47 Styling ripple effect: | 
| 47 | 48 | 
| 48   Use CSS color property to style the ripple: | 49   Use CSS color property to style the ripple: | 
| 49 | 50 | 
| 50     paper-ripple { | 51     paper-ripple { | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 68     <paper-ripple class="circle"></paper-ripple> | 69     <paper-ripple class="circle"></paper-ripple> | 
| 69 | 70 | 
| 70 @group Paper Elements | 71 @group Paper Elements | 
| 71 @element paper-ripple | 72 @element paper-ripple | 
| 72 @hero hero.svg | 73 @hero hero.svg | 
| 73 @demo demo/index.html | 74 @demo demo/index.html | 
| 74 --> | 75 --> | 
| 75 | 76 | 
| 76 <dom-module id="paper-ripple"> | 77 <dom-module id="paper-ripple"> | 
| 77 | 78 | 
| 78   <!-- |  | 
| 79   Fired when the animation finishes. This is useful if you want to wait until th
     e ripple |  | 
| 80   animation finishes to perform some action. |  | 
| 81 |  | 
| 82   @event transitionend |  | 
| 83   @param {Object} detail |  | 
| 84   @param {Object} detail.node The animated node |  | 
| 85   --> |  | 
| 86 |  | 
| 87   <template> | 79   <template> | 
| 88     <style> | 80     <style> | 
| 89       :host { | 81       :host { | 
| 90         display: block; | 82         display: block; | 
| 91         position: absolute; | 83         position: absolute; | 
| 92         border-radius: inherit; | 84         border-radius: inherit; | 
| 93         overflow: hidden; | 85         overflow: hidden; | 
| 94         top: 0; | 86         top: 0; | 
| 95         left: 0; | 87         left: 0; | 
| 96         right: 0; | 88         right: 0; | 
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 552 | 544 | 
| 553         _boundAnimate: { | 545         _boundAnimate: { | 
| 554           type: Function, | 546           type: Function, | 
| 555           value: function() { | 547           value: function() { | 
| 556             return this.animate.bind(this); | 548             return this.animate.bind(this); | 
| 557           } | 549           } | 
| 558         } | 550         } | 
| 559       }, | 551       }, | 
| 560 | 552 | 
| 561       get target () { | 553       get target () { | 
| 562         var ownerRoot = Polymer.dom(this).getOwnerRoot(); | 554         return this.keyEventTarget; | 
| 563         var target; |  | 
| 564 |  | 
| 565         if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE |  | 
| 566           target = ownerRoot.host; |  | 
| 567         } else { |  | 
| 568           target = this.parentNode; |  | 
| 569         } |  | 
| 570 |  | 
| 571         return target; |  | 
| 572       }, | 555       }, | 
| 573 | 556 | 
| 574       keyBindings: { | 557       keyBindings: { | 
| 575         'enter:keydown': '_onEnterKeydown', | 558         'enter:keydown': '_onEnterKeydown', | 
| 576         'space:keydown': '_onSpaceKeydown', | 559         'space:keydown': '_onSpaceKeydown', | 
| 577         'space:keyup': '_onSpaceKeyup' | 560         'space:keyup': '_onSpaceKeyup' | 
| 578       }, | 561       }, | 
| 579 | 562 | 
| 580       attached: function() { | 563       attached: function() { | 
| 581         // Set up a11yKeysBehavior to listen to key events on the target, | 564         // Set up a11yKeysBehavior to listen to key events on the target, | 
| 582         // so that space and enter activate the ripple even if the target doesn'
     t | 565         // so that space and enter activate the ripple even if the target doesn'
     t | 
| 583         // handle key events. The key handlers deal with `noink` themselves. | 566         // handle key events. The key handlers deal with `noink` themselves. | 
| 584         this.keyEventTarget = this.target; | 567         if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE | 
| 585         this.listen(this.target, 'up', 'uiUpAction'); | 568           this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host; | 
| 586         this.listen(this.target, 'down', 'uiDownAction'); | 569         } else { | 
|  | 570           this.keyEventTarget = this.parentNode; | 
|  | 571         } | 
|  | 572         var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget); | 
|  | 573         this.listen(keyEventTarget, 'up', 'uiUpAction'); | 
|  | 574         this.listen(keyEventTarget, 'down', 'uiDownAction'); | 
| 587       }, | 575       }, | 
| 588 | 576 | 
| 589       detached: function() { | 577       detached: function() { | 
| 590         this.unlisten(this.target, 'up', 'uiUpAction'); | 578         this.unlisten(this.keyEventTarget, 'up', 'uiUpAction'); | 
| 591         this.unlisten(this.target, 'down', 'uiDownAction'); | 579         this.unlisten(this.keyEventTarget, 'down', 'uiDownAction'); | 
|  | 580         this.keyEventTarget = null; | 
| 592       }, | 581       }, | 
| 593 | 582 | 
| 594       get shouldKeepAnimating () { | 583       get shouldKeepAnimating () { | 
| 595         for (var index = 0; index < this.ripples.length; ++index) { | 584         for (var index = 0; index < this.ripples.length; ++index) { | 
| 596           if (!this.ripples[index].isAnimationComplete) { | 585           if (!this.ripples[index].isAnimationComplete) { | 
| 597             return true; | 586             return true; | 
| 598           } | 587           } | 
| 599         } | 588         } | 
| 600 | 589 | 
| 601         return false; | 590         return false; | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 629       downAction: function(event) { | 618       downAction: function(event) { | 
| 630         if (this.holdDown && this.ripples.length > 0) { | 619         if (this.holdDown && this.ripples.length > 0) { | 
| 631           return; | 620           return; | 
| 632         } | 621         } | 
| 633 | 622 | 
| 634         var ripple = this.addRipple(); | 623         var ripple = this.addRipple(); | 
| 635 | 624 | 
| 636         ripple.downAction(event); | 625         ripple.downAction(event); | 
| 637 | 626 | 
| 638         if (!this._animating) { | 627         if (!this._animating) { | 
|  | 628           this._animating = true; | 
| 639           this.animate(); | 629           this.animate(); | 
| 640         } | 630         } | 
| 641       }, | 631       }, | 
| 642 | 632 | 
| 643       /** | 633       /** | 
| 644        * Provokes a ripple up effect via a UI event, | 634        * Provokes a ripple up effect via a UI event, | 
| 645        * respecting the `noink` property. | 635        * respecting the `noink` property. | 
| 646        * @param {Event=} event | 636        * @param {Event=} event | 
| 647        */ | 637        */ | 
| 648       uiUpAction: function(event) { | 638       uiUpAction: function(event) { | 
| 649         if (!this.noink) { | 639         if (!this.noink) { | 
| 650           this.upAction(event); | 640           this.upAction(event); | 
| 651         } | 641         } | 
| 652       }, | 642       }, | 
| 653 | 643 | 
| 654       /** | 644       /** | 
| 655        * Provokes a ripple up effect via a UI event, | 645        * Provokes a ripple up effect via a UI event, | 
| 656        * *not* respecting the `noink` property. | 646        * *not* respecting the `noink` property. | 
| 657        * @param {Event=} event | 647        * @param {Event=} event | 
| 658        */ | 648        */ | 
| 659       upAction: function(event) { | 649       upAction: function(event) { | 
| 660         if (this.holdDown) { | 650         if (this.holdDown) { | 
| 661           return; | 651           return; | 
| 662         } | 652         } | 
| 663 | 653 | 
| 664         this.ripples.forEach(function(ripple) { | 654         this.ripples.forEach(function(ripple) { | 
| 665           ripple.upAction(event); | 655           ripple.upAction(event); | 
| 666         }); | 656         }); | 
| 667 | 657 | 
|  | 658         this._animating = true; | 
| 668         this.animate(); | 659         this.animate(); | 
| 669       }, | 660       }, | 
| 670 | 661 | 
| 671       onAnimationComplete: function() { | 662       onAnimationComplete: function() { | 
| 672         this._animating = false; | 663         this._animating = false; | 
| 673         this.$.background.style.backgroundColor = null; | 664         this.$.background.style.backgroundColor = null; | 
| 674         this.fire('transitionend'); | 665         this.fire('transitionend'); | 
| 675       }, | 666       }, | 
| 676 | 667 | 
| 677       addRipple: function() { | 668       addRipple: function() { | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 696         this.ripples.splice(rippleIndex, 1); | 687         this.ripples.splice(rippleIndex, 1); | 
| 697 | 688 | 
| 698         ripple.remove(); | 689         ripple.remove(); | 
| 699 | 690 | 
| 700         if (!this.ripples.length) { | 691         if (!this.ripples.length) { | 
| 701           this._setAnimating(false); | 692           this._setAnimating(false); | 
| 702         } | 693         } | 
| 703       }, | 694       }, | 
| 704 | 695 | 
| 705       animate: function() { | 696       animate: function() { | 
|  | 697         if (!this._animating) { | 
|  | 698           return; | 
|  | 699         } | 
| 706         var index; | 700         var index; | 
| 707         var ripple; | 701         var ripple; | 
| 708 | 702 | 
| 709         this._animating = true; |  | 
| 710 |  | 
| 711         for (index = 0; index < this.ripples.length; ++index) { | 703         for (index = 0; index < this.ripples.length; ++index) { | 
| 712           ripple = this.ripples[index]; | 704           ripple = this.ripples[index]; | 
| 713 | 705 | 
| 714           ripple.draw(); | 706           ripple.draw(); | 
| 715 | 707 | 
| 716           this.$.background.style.opacity = ripple.outerOpacity; | 708           this.$.background.style.opacity = ripple.outerOpacity; | 
| 717 | 709 | 
| 718           if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) { | 710           if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) { | 
| 719             this.removeRipple(ripple); | 711             this.removeRipple(ripple); | 
| 720           } | 712           } | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 745       _holdDownChanged: function(newVal, oldVal) { | 737       _holdDownChanged: function(newVal, oldVal) { | 
| 746         if (oldVal === undefined) { | 738         if (oldVal === undefined) { | 
| 747           return; | 739           return; | 
| 748         } | 740         } | 
| 749         if (newVal) { | 741         if (newVal) { | 
| 750           this.downAction(); | 742           this.downAction(); | 
| 751         } else { | 743         } else { | 
| 752           this.upAction(); | 744           this.upAction(); | 
| 753         } | 745         } | 
| 754       } | 746       } | 
|  | 747 | 
|  | 748       /** | 
|  | 749       Fired when the animation finishes. | 
|  | 750       This is useful if you want to wait until | 
|  | 751       the ripple animation finishes to perform some action. | 
|  | 752 | 
|  | 753       @event transitionend | 
|  | 754       @param {{node: Object}} detail Contains the animated node. | 
|  | 755       */ | 
| 755     }); | 756     }); | 
| 756   })(); | 757   })(); | 
| 757 </script> | 758 </script> | 
| OLD | NEW | 
|---|