MCPcopy
hub / github.com/winjs/winjs / executeElementTransition

Function executeElementTransition

src/js/WinJS/Animations/_TransitionAnimation.js:196–257  ·  view source on GitHub ↗
(elem, index, transitions, promises, animate)

Source from the content-addressed store, hash-verified

194
195 var uniformizeStyle;
196 function executeElementTransition(elem, index, transitions, promises, animate) {
197 if (transitions.length > 0) {
198 var style = elem.style;
199 var id = _ElementUtilities._uniqueID(elem);
200 if (!uniformizeStyle) {
201 uniformizeStyle = _Global.document.createElement("DIV").style;
202 }
203 transitions = transitions.map(copyWithEvaluation(index, elem));
204 transitions.forEach(function (transition) {
205 var scriptNameOfProperty = _BaseUtils._getCamelCasedName(transition.property);
206 if (transition.hasOwnProperty("from")) {
207 style[scriptNameOfProperty] = transition.from;
208 }
209 uniformizeStyle[scriptNameOfProperty] = transition.to;
210 transition.to = uniformizeStyle[scriptNameOfProperty];
211 transition.propertyScriptName = scriptNameOfProperty;
212 });
213
214 if (animate) {
215 var styleCache = setTemporaryStyles(elem, id, style, transitions, elementTransitionProperties);
216 var listener = elem.disabled ? _Global.document : elem;
217
218 transitions.forEach(function (transition) {
219 var finish;
220 promises.push(new Promise(function (c) {
221 finish = function (reason) {
222 if (onTransitionEnd) {
223 listener.removeEventListener(_BaseUtils._browserEventEquivalents["transitionEnd"], onTransitionEnd, false);
224 unregisterAction(id, transition.property);
225 styleCache.removeName(style, transition.propertyScriptName, reason ? elem : null, transition.skipStylesReset);
226 _Global.clearTimeout(timeoutId);
227 onTransitionEnd = null;
228 }
229 completePromise(c, reason === reason_canceled);
230 };
231
232 var onTransitionEnd = function (event) {
233 if (event.target === elem && event.propertyName === transition.property) {
234 finish();
235 }
236 };
237
238 registerAction(id, transition.property, finish);
239 listener.addEventListener(_BaseUtils._browserEventEquivalents["transitionEnd"], onTransitionEnd, false);
240
241 var padding = 0;
242 if (style[transition.propertyScriptName] !== transition.to) {
243 style[transition.propertyScriptName] = transition.to;
244 padding = 50;
245 }
246 var timeoutId = _Global.setTimeout(function () {
247 timeoutId = _Global.setTimeout(finish, transition.delay + transition.duration);
248 }, padding);
249 }, function () { finish(reason_canceled); }));
250 });
251 } else {
252 transitions.forEach(function (transition) {
253 style[transition.propertyScriptName] = transition.to;

Callers

nothing calls this directly

Calls 15

copyWithEvaluationFunction · 0.85
setTemporaryStylesFunction · 0.85
unregisterActionFunction · 0.85
completePromiseFunction · 0.85
registerActionFunction · 0.85
finishFunction · 0.85
createElementMethod · 0.80
hasOwnPropertyMethod · 0.80
clearTimeoutMethod · 0.80
setTimeoutMethod · 0.80
mapMethod · 0.65
forEachMethod · 0.65

Tested by

no test coverage detected