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

Side by Side Diff: third_party/polymer/components-chromium/core-animated-pages/core-animated-pages-extracted.js

Issue 592593002: Inline scripts were extracted from Polymer elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: s/echo ""/echo/ Created 6 years, 2 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
3 Polymer('core-animated-pages',{
4
5 eventDelegates: {
6 'core-transitionend': 'transitionEnd'
7 },
8
9 /**
10 * A space-delimited string of transitions to use when switching between pag es in this element.
11 * The strings are `id`s of `core-transition-pages` elements included elsewh ere. See the
12 * individual transition's document for specific details.
13 *
14 * @attribute transitions
15 * @type string
16 * @default ''
17 */
18 transitions: '',
19
20 selected: 0,
21
22 /**
23 * The last page selected. This property is useful to dynamically set transi tions based
24 * on incoming and outgoing pages.
25 *
26 * @attribute lastSelected
27 * @type Object
28 * @default null
29 */
30 lastSelected: null,
31
32 registerCallback: function() {
33 this.tmeta = document.createElement('core-transition');
34 },
35
36 created: function() {
37 this._transitions = [];
38 this.transitioning = [];
39 },
40
41 transitionsChanged: function() {
42 this._transitions = this.transitions.split(' ');
43 },
44
45 _transitionsChanged: function(old) {
46 if (this._transitionElements) {
47 this._transitionElements.forEach(function(t) {
48 t.teardown(this);
49 }, this);
50 }
51 this._transitionElements = [];
52 this._transitions.forEach(function(transitionId) {
53 var t = this.getTransition(transitionId);
54 if (t) {
55 this._transitionElements.push(t);
56 t.setup(this);
57 }
58 }, this);
59 },
60
61 getTransition: function(transitionId) {
62 return this.tmeta.byId(transitionId);
63 },
64
65 selectionSelect: function(e, detail) {
66 this.updateSelectedItem();
67 // Wait to call applySelection when we run the transition
68 },
69
70 applyTransition: function(src, dst) {
71 if (this.animating) {
72 this.cancelAsync(this.animating);
73 this.animating = null;
74 }
75
76 Platform.flush();
77
78 if (this.transitioning.indexOf(src) === -1) {
79 this.transitioning.push(src);
80 }
81 if (this.transitioning.indexOf(dst) === -1) {
82 this.transitioning.push(dst);
83 }
84 // force src, dst to display
85 src.setAttribute('animate', '');
86 dst.setAttribute('animate', '');
87 //
88 var options = {
89 src: src,
90 dst: dst,
91 easing: 'cubic-bezier(0.4, 0, 0.2, 1)'
92 }
93
94 // fire an event so clients have a chance to do something when the
95 // new page becomes visible but before it draws.
96 this.fire('core-animated-pages-transition-prepare');
97
98 //
99 // prepare transition
100 this._transitionElements.forEach(function(transition) {
101 transition.prepare(this, options);
102 }, this);
103 //
104 // force layout!
105 src.offsetTop;
106
107 //
108 // apply selection
109 this.applySelection(dst, true);
110 this.applySelection(src, false);
111 //
112 // start transition
113 this._transitionElements.forEach(function(transition) {
114 transition.go(this, options);
115 }, this);
116
117 if (!this._transitionElements.length) {
118 this.complete();
119 } else {
120 this.animating = this.async(this.complete.bind(this), null, 5000);
121 }
122 },
123
124 complete: function() {
125 if (this.animating) {
126 this.cancelAsync(this.animating);
127 this.animating = null;
128 }
129
130 this.transitioning.forEach(function(t) {
131 t.removeAttribute('animate');
132 });
133 this.transitioning = [];
134
135 this._transitionElements.forEach(function(transition) {
136 transition.ensureComplete(this);
137 }, this);
138
139 this.fire('core-animated-pages-transition-end');
140 },
141
142 transitionEnd: function(e) {
143 if (this.transitioning.length) {
144 var completed = true;
145 this._transitionElements.forEach(function(transition) {
146 if (!transition.completed) {
147 completed = false;
148 }
149 });
150 if (completed) {
151 this.job('transitionWatch', function() {
152 this.complete();
153 }, 100);
154 }
155 }
156 },
157
158 selectedChanged: function(old) {
159 this.lastSelected = old;
160 this.super(arguments);
161 },
162
163 selectedItemChanged: function(oldItem) {
164 this.super(arguments);
165
166 if (!oldItem) {
167 this.applySelection(this.selectedItem, true);
168 return;
169 }
170
171 if (this.hasAttribute('no-transition') || !this._transitionElements || !th is._transitionElements.length) {
172 this.applySelection(oldItem, false);
173 this.applySelection(this.selectedItem, true);
174 return;
175 }
176
177 if (oldItem && this.selectedItem) {
178 // TODO(sorvell): allow bindings to update first?
179 var self = this;
180 Platform.flush();
181 Platform.endOfMicrotask(function() {
182 self.applyTransition(oldItem, self.selectedItem);
183 });
184 }
185 }
186
187 });
188
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698