Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: third_party/polymer/v0_8/components/paper-ripple/paper-ripple.html

Issue 1162563004: Upgrade to 1.0 and switch clients to dom-repeat where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a layout import and remove the gzipped webanimation in reproduce.sh Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/polymer/v0_8/components/paper-ripple/paper-ripple.html
diff --git a/third_party/polymer/v0_8/components/paper-ripple/paper-ripple.html b/third_party/polymer/v0_8/components/paper-ripple/paper-ripple.html
index 91cac4cf13cb8916e9a86bd86baa5a710ad186fc..704738c87a7bc2618a5663ef72bf0769910b1a78 100644
--- a/third_party/polymer/v0_8/components/paper-ripple/paper-ripple.html
+++ b/third_party/polymer/v0_8/components/paper-ripple/paper-ripple.html
@@ -7,6 +7,9 @@ Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+
<!--
`paper-ripple` provides a visual effect that other paper elements can
use to simulate a rippling effect emanating from the point of contact. The
@@ -19,18 +22,18 @@ Example:
`paper-ripple` listens to "mousedown" and "mouseup" events so it would display ripple
effect when touches on it. You can also defeat the default behavior and
manually route the down and up actions to the ripple element. Note that it is
-important if you call mousedownAction() you will have to make sure to call
-mouseupAction() so that `paper-ripple` would end the animation loop.
+important if you call downAction() you will have to make sure to call
+upAction() so that `paper-ripple` would end the animation loop.
Example:
<paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple>
...
downAction: function(e) {
- this.$.ripple.mousedownAction({x: e.x, y: e.y});
+ this.$.ripple.downAction({x: e.x, y: e.y});
},
upAction: function(e) {
- this.$.ripple.mouseupAction();
+ this.$.ripple.upAction();
}
Styling ripple effect:
@@ -49,27 +52,31 @@ attribute to have the ripple grow toward the center of its container.
<paper-ripple recenters></paper-ripple>
+You can also center the ripple inside its container from the start.
+
+ <paper-ripple center></paper-ripple>
+
Apply `circle` class to make the rippling effect within a circle.
<paper-ripple class="circle"></paper-ripple>
@group Paper Elements
@element paper-ripple
-@homepage github.io
+@hero hero.svg
+@demo demo/index.html
-->
-<!--
-Fired when the animation finishes. This is useful if you want to wait until the ripple
-animation finishes to perform some action.
+<dom-module id="paper-ripple">
-@event transitionend
-@param {Object} detail
-@param {Object} detail.node The animated node
--->
+ <!--
+ Fired when the animation finishes. This is useful if you want to wait until the ripple
+ animation finishes to perform some action.
-<link rel="import" href="../polymer/polymer.html">
+ @event transitionend
+ @param {Object} detail
+ @param {Object} detail.node The animated node
+ -->
-<dom-module id="paper-ripple">
<style>
:host {
display: block;
@@ -80,10 +87,16 @@ animation finishes to perform some action.
left: 0;
right: 0;
bottom: 0;
+ }
- /* This resolves a rendering issue in Chrome 40 where the
+ :host([animating]) {
+ /* This resolves a rendering issue in Chrome (as of 40) where the
ripple is not properly clipped by its parent (which may have
- rounded corners. See: http://jsbin.com/temexa/4 */
+ rounded corners). See: http://jsbin.com/temexa/4
+
+ Note: We only apply this style conditionally. Otherwise, the browser
+ will create a new compositing layer for every ripple element on the
+ page, and that would be bad. */
-webkit-transform: translate(0, 0);
transform: translate3d(0, 0, 0);
}
@@ -219,6 +232,10 @@ animation finishes to perform some action.
return this.element.recenters;
},
+ get center() {
+ return this.element.center;
+ },
+
get mouseDownElapsed() {
var elapsed;
@@ -375,20 +392,31 @@ animation finishes to perform some action.
this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)';
},
- mousedownAction: function(event) {
+ downAction: function(event) {
+ var xCenter = this.containerMetrics.width / 2;
+ var yCenter = this.containerMetrics.height / 2;
+
this.resetInteractionState();
this.mouseDownStart = Utility.now();
- this.xStart = event ?
- event.x - this.containerMetrics.boundingRect.left :
- this.containerMetrics.width / 2;
- this.yStart = event ?
- event.y - this.containerMetrics.boundingRect.top :
- this.containerMetrics.height / 2;
+ if (this.center) {
+ this.xStart = xCenter;
+ this.yStart = yCenter;
+ this.slideDistance = Utility.distance(
+ this.xStart, this.yStart, this.xEnd, this.yEnd
+ );
+ } else {
+ this.xStart = event ?
+ event.detail.x - this.containerMetrics.boundingRect.left :
+ this.containerMetrics.width / 2;
+ this.yStart = event ?
+ event.detail.y - this.containerMetrics.boundingRect.top :
+ this.containerMetrics.height / 2;
+ }
if (this.recenters) {
- this.xEnd = this.containerMetrics.width / 2;
- this.yEnd = this.containerMetrics.height / 2;
+ this.xEnd = xCenter;
+ this.yEnd = yCenter;
this.slideDistance = Utility.distance(
this.xStart, this.yStart, this.xEnd, this.yEnd
);
@@ -408,7 +436,7 @@ animation finishes to perform some action.
this.waveContainer.style.height = this.containerMetrics.size + 'px';
},
- mouseupAction: function(event) {
+ upAction: function(event) {
if (!this.isMouseDown) {
return;
}
@@ -426,6 +454,10 @@ animation finishes to perform some action.
Polymer({
is: 'paper-ripple',
+ behaviors: [
+ Polymer.IronA11yKeysBehavior
+ ],
+
properties: {
/**
* The initial opacity set on the wave.
@@ -465,6 +497,18 @@ animation finishes to perform some action.
},
/**
+ * If true, ripples will center inside its container
+ *
+ * @attribute recenters
+ * @type boolean
+ * @default false
+ */
+ center: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
* A list of the visual ripples.
*
* @attribute ripples
@@ -478,53 +522,68 @@ animation finishes to perform some action.
}
},
- _animating: {
- type: Boolean
+ /**
+ * True when there are visible ripples animating within the
+ * element.
+ */
+ animating: {
+ type: Boolean,
+ readOnly: true,
+ reflectToAttribute: true,
+ value: false
},
- _boundAnimate: {
- type: Function,
- value: function() {
- return this.animate.bind(this);
- }
+ /**
+ * If true, the ripple will remain in the "down" state until `holdDown`
+ * is set to false again.
+ */
+ holdDown: {
+ type: Boolean,
+ value: false,
+ observer: '_holdDownChanged'
},
- _boundMousedownAction: {
- type: Function,
- value: function() {
- return this.mousedownAction.bind(this);
- }
+ _animating: {
+ type: Boolean
},
- _boundMouseupAction: {
+ _boundAnimate: {
type: Function,
value: function() {
- return this.mouseupAction.bind(this);
+ return this.animate.bind(this);
}
}
},
get target () {
- return this.host || this.parentNode;
- },
+ var ownerRoot = Polymer.dom(this).getOwnerRoot();
+ var target;
- attached: function() {
- this.target.addEventListener('mousedown', this._boundMousedownAction);
- this.target.addEventListener('mouseup', this._boundMouseupAction);
+ if (ownerRoot) {
+ target = ownerRoot.host;
+ }
+
+ if (!target) {
+ target = this.parentNode;
+ }
+
+ return target;
},
- detached: function() {
- this.target.removeEventListener('mousedown', this._boundMousedownAction);
- this.target.removeEventListener('mouseup', this._boundMouseupAction);
+ keyBindings: {
+ 'enter:keydown': '_onEnterKeydown',
+ 'space:keydown': '_onSpaceKeydown',
+ 'space:keyup': '_onSpaceKeyup'
},
- /* TODO(cdata): Replace the above attached / detached listeners when
- PolymerGestures equivalent lands in 0.8.
- listeners: {
- mousedown: 'mousedownAction',
- mouseup: 'mouseupAction'
+ attached: function() {
+ this._listen(this.target, 'up', this.upAction.bind(this));
+ this._listen(this.target, 'down', this.downAction.bind(this));
+
+ if (!this.target.hasAttribute('noink')) {
+ this.keyEventTarget = this.target;
+ }
},
- */
get shouldKeepAnimating () {
for (var index = 0; index < this.ripples.length; ++index) {
@@ -537,27 +596,35 @@ animation finishes to perform some action.
},
simulatedRipple: function() {
- this.mousedownAction(null);
+ this.downAction(null);
// Please see polymer/polymer#1305
this.async(function() {
- this.mouseupAction();
+ this.upAction();
}, 1);
},
- mousedownAction: function(event) {
+ downAction: function(event) {
+ if (this.holdDown && this.ripples.length > 0) {
+ return;
+ }
+
var ripple = this.addRipple();
- ripple.mousedownAction(event);
+ ripple.downAction(event);
if (!this._animating) {
this.animate();
}
},
- mouseupAction: function(event) {
+ upAction: function(event) {
+ if (this.holdDown) {
+ return;
+ }
+
this.ripples.forEach(function(ripple) {
- ripple.mouseupAction(event);
+ ripple.upAction(event);
});
this.animate();
@@ -576,6 +643,8 @@ animation finishes to perform some action.
this.$.background.style.backgroundColor = ripple.color;
this.ripples.push(ripple);
+ this._setAnimating(true);
+
return ripple;
},
@@ -589,6 +658,10 @@ animation finishes to perform some action.
this.ripples.splice(rippleIndex, 1);
ripple.remove();
+
+ if (!this.ripples.length) {
+ this._setAnimating(false);
+ }
},
animate: function() {
@@ -609,10 +682,31 @@ animation finishes to perform some action.
}
}
- if (this.shouldKeepAnimating) {
- window.requestAnimationFrame(this._boundAnimate);
- } else if (this.ripples.length === 0) {
+ if (!this.shouldKeepAnimating && this.ripples.length === 0) {
this.onAnimationComplete();
+ } else {
+ window.requestAnimationFrame(this._boundAnimate);
+ }
+ },
+
+ _onEnterKeydown: function() {
+ this.downAction();
+ this.async(this.upAction, 1);
+ },
+
+ _onSpaceKeydown: function() {
+ this.downAction();
+ },
+
+ _onSpaceKeyup: function() {
+ this.upAction();
+ },
+
+ _holdDownChanged: function(holdDown) {
+ if (holdDown) {
+ this.downAction();
+ } else {
+ this.upAction();
}
}
});

Powered by Google App Engine
This is Rietveld 408576698