-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathtransition.coffee
55 lines (55 loc) · 1.58 KB
/
transition.coffee
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
# out: ../transition.js
module.exports =
mixins: [
require("./vue")
]
computed:
cTransition: ->
if @disableTransition
name = "empty"
else
name = @transition
@processTransition(name)
return name
methods:
processTransition: (value, parent = @$parent) ->
unless value == "empty"
hooks = @Vue.util.resolveAsset(parent.$options,'transitions',value)
unless hooks?
hooks ?= @$options.transitions[value]
return if hooks?.modified
if hooks?
newHooks =
enterClass: hooks.enterClass
leaveClass: hooks.leaveClass
leave: hooks.leave
beforeEnter: hooks.beforeEnter
else
newHooks = {}
newHooks.modified = true
addHook = (name) =>
eventName = @Vue.util.hyphenate(name)
if hooks?[name]?
hook = hooks[name]
fn = (el) =>
@$emit eventName
hook.bind(@)(el)
else
fn = (el) =>
@$emit eventName
newHooks[name] = fn
for hook in ["afterEnter","beforeLeave","afterLeave","enterCancelled","leaveCancelled"]
addHook(hook)
if hooks?.enter? and hooks.enter.length == 2
hook = hooks.enter
newHooks.enter = (el,cb) =>
@$emit "before-enter"
hook.bind(@)(el,cb)
else if hooks?.enter?
hook = hooks.enter
newHooks.enter = (el) =>
@$emit "before-enter"
hook.bind(@)(el)
else
newHooks.enter = (el) => @$emit "before-enter"
@$options.transitions[value] = newHooks