Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. export default {
  3.   name: 'NuxtChild',
  4.   functional: true,
  5.   props: {
  6.     nuxtChildKey: {
  7.       type: String,
  8.       default: ''
  9.     },
  10.     keepAlive: Boolean,
  11.     keepAliveProps: {
  12.       type: Object,
  13.       default: undefined
  14.     }
  15.   },
  16.   render (h, { parent, data, props }) {
  17.     data.nuxtChild = true
  18.     const _parent = parent
  19.     const transitions = parent.$nuxt.nuxt.transitions
  20.     const defaultTransition = parent.$nuxt.nuxt.defaultTransition
  21.  
  22.     let depth = 0
  23.     while (parent) {
  24.       if (parent.$vnode && parent.$vnode.data.nuxtChild) {
  25.         depth++
  26.       }
  27.       parent = parent.$parent
  28.     }
  29.     data.nuxtChildDepth = depth
  30.     const transition = transitions[depth] || defaultTransition
  31.     const transitionProps = {}
  32.     transitionsKeys.forEach((key) => {
  33.       if (typeof transition[key] !== 'undefined') {
  34.         transitionProps[key] = transition[key]
  35.       }
  36.     })
  37.  
  38.     const listeners = {}
  39.     listenersKeys.forEach((key) => {
  40.       if (typeof transition[key] === 'function') {
  41.         listeners[key] = transition[key].bind(_parent)
  42.       }
  43.     })
  44.     // Add triggerScroll event on beforeEnter (fix #1376)
  45.     const beforeEnter = listeners.beforeEnter
  46.     listeners.beforeEnter = (el) => {
  47.       // Ensure to trigger scroll event after calling scrollBehavior
  48.       window.$nuxt.$nextTick(() => {
  49.         window.$nuxt.$emit('triggerScroll')
  50.       })
  51.       if (beforeEnter) {
  52.         return beforeEnter.call(_parent, el)
  53.       }
  54.     }
  55.  
  56.     // make sure that leave is called asynchronous (fix #5703)
  57.     if (transition.css === false) {
  58.       const leave = listeners.leave
  59.  
  60.       // only add leave listener when user didnt provide one
  61.       // or when it misses the done argument
  62.       if (!leave || leave.length < 2) {
  63.         listeners.leave = (el, done) => {
  64.           if (leave) {
  65.             leave.call(_parent, el)
  66.           }
  67.  
  68.           _parent.$nextTick(done)
  69.         }
  70.       }
  71.     }
  72.  
  73.     let routerView = h('routerView', data)
  74.  
  75.     if (props.keepAlive) {
  76.       routerView = h('keep-alive', { props: props.keepAliveProps }, [routerView])
  77.     }
  78.  
  79.     return h('transition', {
  80.       props: transitionProps,
  81.       on: listeners
  82.     }, [routerView])
  83.   }
  84. }
  85.  
  86. const transitionsKeys = [
  87.   'name',
  88.   'mode',
  89.   'appear',
  90.   'css',
  91.   'type',
  92.   'duration',
  93.   'enterClass',
  94.   'leaveClass',
  95.   'appearClass',
  96.   'enterActiveClass',
  97.   'enterActiveClass',
  98.   'leaveActiveClass',
  99.   'appearActiveClass',
  100.   'enterToClass',
  101.   'leaveToClass',
  102.   'appearToClass'
  103. ]
  104.  
  105. const listenersKeys = [
  106.   'beforeEnter',
  107.   'enter',
  108.   'afterEnter',
  109.   'enterCancelled',
  110.   'beforeLeave',
  111.   'leave',
  112.   'afterLeave',
  113.   'leaveCancelled',
  114.   'beforeAppear',
  115.   'appear',
  116.   'afterAppear',
  117.   'appearCancelled'
  118. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement