123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /* @flow */
- import { enter, leave } from '../modules/transition'
- // recursively search for possible transition defined inside the component root
- function locateNode (vnode: VNode): VNodeWithData {
- return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
- ? locateNode(vnode.componentInstance._vnode)
- : vnode
- }
- export default {
- bind (el: any, { value }: VNodeDirective, vnode: VNodeWithData) {
- vnode = locateNode(vnode)
- const transition = vnode.data && vnode.data.transition
- const originalDisplay = el.__vOriginalDisplay =
- el.style.display === 'none' ? '' : el.style.display
- if (value && transition) {
- vnode.data.show = true
- enter(vnode, () => {
- el.style.display = originalDisplay
- })
- } else {
- el.style.display = value ? originalDisplay : 'none'
- }
- },
- update (el: any, { value, oldValue }: VNodeDirective, vnode: VNodeWithData) {
- /* istanbul ignore if */
- if (!value === !oldValue) return
- vnode = locateNode(vnode)
- const transition = vnode.data && vnode.data.transition
- if (transition) {
- vnode.data.show = true
- if (value) {
- enter(vnode, () => {
- el.style.display = el.__vOriginalDisplay
- })
- } else {
- leave(vnode, () => {
- el.style.display = 'none'
- })
- }
- } else {
- el.style.display = value ? el.__vOriginalDisplay : 'none'
- }
- },
- unbind (
- el: any,
- binding: VNodeDirective,
- vnode: VNodeWithData,
- oldVnode: VNodeWithData,
- isDestroy: boolean
- ) {
- if (!isDestroy) {
- el.style.display = el.__vOriginalDisplay
- }
- }
- }
|