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