import {
before,
remove,
transitionEndEvent
} from '../util/index'
/**
* Append with transition.
*
* @param {Element} el
* @param {Element} target
* @param {Vue} vm
* @param {Function} [cb]
*/
export function appendWithTransition (el, target, vm, cb) {
applyTransition(el, 1, function () {
target.appendChild(el)
}, vm, cb)
}
/**
* InsertBefore with transition.
*
* @param {Element} el
* @param {Element} target
* @param {Vue} vm
* @param {Function} [cb]
*/
export function beforeWithTransition (el, target, vm, cb) {
applyTransition(el, 1, function () {
before(el, target)
}, vm, cb)
}
/**
* Remove with transition.
*
* @param {Element} el
* @param {Vue} vm
* @param {Function} [cb]
*/
export function removeWithTransition (el, vm, cb) {
applyTransition(el, -1, function () {
remove(el)
}, vm, cb)
}
/**
* Apply transitions with an operation callback.
*
* @param {Element} el
* @param {Number} direction
* 1: enter
* -1: leave
* @param {Function} op - the actual DOM operation
* @param {Vue} vm
* @param {Function} [cb]
*/
export function applyTransition (el, direction, op, vm, cb) {
var transition = el.__v_trans
if (
!transition ||
// skip if there are no js hooks and CSS transition is
// not supported
(!transition.hooks && !transitionEndEvent) ||
// skip transitions for initial compile
!vm._isCompiled ||
// if the vm is being manipulated by a parent directive
// during the parent's compilation phase, skip the
// animation.
(vm.$parent && !vm.$parent._isCompiled)
) {
op()
if (cb) cb()
return
}
var action = direction > 0 ? 'enter' : 'leave'
transition[action](op, cb)
}
|