|
|
@ -32,101 +32,102 @@ function nextFrame (fn) { |
|
|
|
function beforeEnter (_, vnode) { |
|
|
|
const el = vnode.elm |
|
|
|
const data = vnode.data.transition |
|
|
|
if (data != null) { |
|
|
|
const { |
|
|
|
enterClass, |
|
|
|
enterActiveClass, |
|
|
|
beforeEnter, |
|
|
|
enter, |
|
|
|
afterEnter, |
|
|
|
enterCancelled |
|
|
|
} = detectAuto(data) |
|
|
|
|
|
|
|
const userWantsControl = enter && enter.length > 1 |
|
|
|
const cb = el._enterCb = () => { |
|
|
|
// ensure only called once
|
|
|
|
if (cb.called) { |
|
|
|
return |
|
|
|
} |
|
|
|
cb.called = true |
|
|
|
if (enterActiveClass) { |
|
|
|
removeTransitionClass(el, enterActiveClass) |
|
|
|
} |
|
|
|
if (cb.cancelled) { |
|
|
|
enterCancelled && enterCancelled(el) |
|
|
|
} else { |
|
|
|
afterEnter && afterEnter(el) |
|
|
|
} |
|
|
|
el._enterCb = null |
|
|
|
} |
|
|
|
if (data == null) { |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
beforeEnter && beforeEnter(el) |
|
|
|
if (enterClass) { |
|
|
|
addTransitionClass(el, enterClass) |
|
|
|
nextFrame(() => { |
|
|
|
removeTransitionClass(el, enterClass) |
|
|
|
}) |
|
|
|
const { |
|
|
|
enterClass, |
|
|
|
enterActiveClass, |
|
|
|
beforeEnter, |
|
|
|
enter, |
|
|
|
afterEnter, |
|
|
|
enterCancelled |
|
|
|
} = detectAuto(data) |
|
|
|
|
|
|
|
const userWantsControl = enter && enter.length > 1 |
|
|
|
const cb = el._enterCb = () => { |
|
|
|
// ensure only called once
|
|
|
|
if (cb.called) { |
|
|
|
return |
|
|
|
} |
|
|
|
cb.called = true |
|
|
|
if (enterActiveClass) { |
|
|
|
nextFrame(() => { |
|
|
|
addTransitionClass(el, enterActiveClass) |
|
|
|
if (!userWantsControl) { |
|
|
|
whenTransitionEnds(el, cb) |
|
|
|
} |
|
|
|
}) |
|
|
|
removeTransitionClass(el, enterActiveClass) |
|
|
|
} |
|
|
|
enter && enter(el, cb) |
|
|
|
if (!enterActiveClass && !userWantsControl) { |
|
|
|
cb() |
|
|
|
if (cb.cancelled) { |
|
|
|
enterCancelled && enterCancelled(el) |
|
|
|
} else { |
|
|
|
afterEnter && afterEnter(el) |
|
|
|
} |
|
|
|
el._enterCb = null |
|
|
|
} |
|
|
|
|
|
|
|
beforeEnter && beforeEnter(el) |
|
|
|
if (enterClass) { |
|
|
|
addTransitionClass(el, enterClass) |
|
|
|
nextFrame(() => { |
|
|
|
removeTransitionClass(el, enterClass) |
|
|
|
}) |
|
|
|
} |
|
|
|
if (enterActiveClass) { |
|
|
|
nextFrame(() => { |
|
|
|
addTransitionClass(el, enterActiveClass) |
|
|
|
if (!userWantsControl) { |
|
|
|
whenTransitionEnds(el, cb) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
enter && enter(el, cb) |
|
|
|
if (!enterActiveClass && !userWantsControl) { |
|
|
|
cb() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function onLeave (vnode, rm) { |
|
|
|
const el = vnode.elm |
|
|
|
if (!el) return |
|
|
|
// call enter callback now
|
|
|
|
if (el._enterCb) { |
|
|
|
el._enterCb.cancelled = true |
|
|
|
el._enterCb() |
|
|
|
} |
|
|
|
const data = vnode.data.transition |
|
|
|
if (data != null) { |
|
|
|
const { |
|
|
|
leaveClass, |
|
|
|
leaveActiveClass, |
|
|
|
beforeLeave, |
|
|
|
leave, |
|
|
|
afterLeave |
|
|
|
} = detectAuto(data) |
|
|
|
|
|
|
|
const userWantsControl = leave && leave.length > 1 |
|
|
|
const cb = () => { |
|
|
|
rm() |
|
|
|
afterLeave && afterLeave(el) |
|
|
|
} |
|
|
|
if (data == null) { |
|
|
|
return rm() |
|
|
|
} |
|
|
|
|
|
|
|
beforeLeave && beforeLeave(el) |
|
|
|
if (leaveClass) { |
|
|
|
addTransitionClass(el, leaveClass) |
|
|
|
nextFrame(() => { |
|
|
|
removeTransitionClass(el, leaveClass) |
|
|
|
}) |
|
|
|
} |
|
|
|
if (leaveActiveClass) { |
|
|
|
nextFrame(() => { |
|
|
|
addTransitionClass(el, leaveActiveClass) |
|
|
|
if (!userWantsControl) { |
|
|
|
whenTransitionEnds(el, cb) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
leave && leave(el, cb) |
|
|
|
if (!leaveActiveClass && !userWantsControl) { |
|
|
|
cb() |
|
|
|
} |
|
|
|
} else { |
|
|
|
const { |
|
|
|
leaveClass, |
|
|
|
leaveActiveClass, |
|
|
|
beforeLeave, |
|
|
|
leave, |
|
|
|
afterLeave |
|
|
|
} = detectAuto(data) |
|
|
|
|
|
|
|
const userWantsControl = leave && leave.length > 1 |
|
|
|
const cb = () => { |
|
|
|
rm() |
|
|
|
afterLeave && afterLeave(el) |
|
|
|
} |
|
|
|
|
|
|
|
beforeLeave && beforeLeave(el) |
|
|
|
if (leaveClass) { |
|
|
|
addTransitionClass(el, leaveClass) |
|
|
|
nextFrame(() => { |
|
|
|
removeTransitionClass(el, leaveClass) |
|
|
|
}) |
|
|
|
} |
|
|
|
if (leaveActiveClass) { |
|
|
|
nextFrame(() => { |
|
|
|
addTransitionClass(el, leaveActiveClass) |
|
|
|
if (!userWantsControl) { |
|
|
|
whenTransitionEnds(el, cb) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
leave && leave(el, cb) |
|
|
|
if (!leaveActiveClass && !userWantsControl) { |
|
|
|
cb() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|