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

Side by Side Diff: third_party/polymer/v0_8/components/neon-animation/neon-animated-pages.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, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 <!--
2 Copyright (c) 2015 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 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 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 -->
9 <link rel="import" href="../polymer/polymer.html">
10 <link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html ">
11 <link rel="import" href="../iron-selector/iron-selectable.html">
12 <link rel="import" href="../paper-styles/paper-styles.html">
13 <link rel="import" href="neon-animation-runner-behavior.html">
14 <link rel="import" href="animations/opaque-animation.html">
15
16 <!--
17 `neon-animated-pages` manages a set of pages and runs an animation when switchin g between them. Its
18 children pages should implement `Polymer.NeonAnimatableBehavior` and define `ent ry` and `exit`
19 animations to be run when switching to or switching out of the page.
20
21 @group Neon Elements
22 @element neon-animated-pages
23 @demo demo/index.html
24 -->
25
26 <dom-module id="neon-animated-pages">
27
28 <style>
29
30 :host {
31 display: block;
32 position: relative;
33 }
34
35 :host > ::content > * {
36 @apply(--layout-fit);
37 height: 100%;
38 }
39
40 :host > ::content > :not(.iron-selected):not(.neon-animating) {
41 display: none !important;
42 }
43
44 :host > ::content > .neon-animating {
45 pointer-events: none;
46 }
47
48 </style>
49
50 <template>
51 <content id="content"></content>
52 </template>
53
54 </dom-module>
55
56 <script>
57 (function() {
58
59 Polymer({
60
61 is: 'neon-animated-pages',
62
63 behaviors: [
64 Polymer.IronResizableBehavior,
65 Polymer.IronSelectableBehavior,
66 Polymer.NeonAnimationRunnerBehavior
67 ],
68
69 properties: {
70
71 activateEvent: {
72 type: String,
73 value: ''
74 },
75
76 // if true, the initial page selection will also be animated according to its animation config.
77 animateInitialSelection: {
78 type: Boolean,
79 value: false
80 }
81
82 },
83
84 observers: [
85 '_selectedChanged(selected)'
86 ],
87
88 listeners: {
89 'neon-animation-finish': '_onNeonAnimationFinish'
90 },
91
92 _selectedChanged: function(selected) {
93
94 var selectedPage = this.selectedItem;
95 var oldPage = this._prevSelected || false;
96 this._prevSelected = selectedPage;
97
98 // on initial load and if animateInitialSelection is negated, simply displ ay selectedPage.
99 if (!oldPage && !this.animateInitialSelection) {
100 this._completeSelectedChanged();
101 return;
102 }
103
104 // insert safari fix.
105 this.animationConfig = [{
106 name: 'opaque-animation',
107 node: selectedPage
108 }];
109
110 // configure selectedPage animations.
111 if (this.entryAnimation) {
112 this.animationConfig.push({
113 name: this.entryAnimation,
114 node: selectedPage
115 });
116 } else {
117 if (selectedPage.getAnimationConfig) {
118 this.animationConfig.push({
119 animatable: selectedPage,
120 type: 'entry'
121 });
122 }
123 }
124
125 // configure oldPage animations iff exists.
126 if (oldPage) {
127
128 // cancel the currently running animation if one is ongoing.
129 if (oldPage.classList.contains('neon-animating')) {
130 this._squelchNextFinishEvent = true;
131 this.cancelAnimation();
132 this._completeSelectedChanged();
133 }
134
135 // configure the animation.
136 if (this.exitAnimation) {
137 this.animationConfig.push({
138 name: this.exitAnimation,
139 node: oldPage
140 });
141 } else {
142 if (oldPage.getAnimationConfig) {
143 this.animationConfig.push({
144 animatable: oldPage,
145 type: 'exit'
146 });
147 }
148 }
149
150 // display the oldPage during the transition.
151 oldPage.classList.add('neon-animating');
152 }
153
154 // display the selectedPage during the transition.
155 selectedPage.classList.add('neon-animating');
156
157 // actually run the animations.
158 if (this.animationConfig.length > 1) {
159
160 // on first load, ensure we run animations only after element is attache d.
161 if (!this.isAttached) {
162 this.async(function () {
163 this.playAnimation(null, {
164 fromPage: null,
165 toPage: selectedPage
166 });
167 });
168
169 } else {
170 this.playAnimation(null, {
171 fromPage: oldPage,
172 toPage: selectedPage
173 });
174 }
175
176 } else {
177 this._completeSelectedChanged(oldPage, selectedPage);
178 }
179 },
180
181 _completeSelectedChanged: function(oldPage, selectedPage) {
182 if (selectedPage) {
183 selectedPage.classList.remove('neon-animating');
184 }
185 if (oldPage) {
186 oldPage.classList.remove('neon-animating');
187 }
188 if (!selectedPage || !oldPage) {
189 var nodes = Polymer.dom(this.$.content).getDistributedNodes();
190 for (var node, index = 0; node = nodes[index]; index++) {
191 node.classList && node.classList.remove('neon-animating');
192 }
193 }
194 this.async(this.notifyResize);
195 },
196
197 _onNeonAnimationFinish: function(event) {
198 if (this._squelchNextFinishEvent) {
199 this._squelchNextFinishEvent = false;
200 return;
201 }
202 this._completeSelectedChanged(event.detail.fromPage, event.detail.toPage);
203 }
204
205 })
206
207 })();
208 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698