Skip to content

Commit ca4a77f

Browse files
committed
extract shared code between weex/web transition modules
1 parent a18a301 commit ca4a77f

File tree

4 files changed

+49
-85
lines changed

4 files changed

+49
-85
lines changed

src/platforms/web/runtime/modules/transition.js

+2-42
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
/* @flow */
22

33
import { inBrowser, isIE9 } from 'core/util/index'
4-
import { cached, extend } from 'shared/util'
4+
import { once } from 'shared/util'
55
import { mergeVNodeHook } from 'core/vdom/helpers/index'
66
import { activeInstance } from 'core/instance/lifecycle'
77
import {
8+
resolveTransition,
89
nextFrame,
910
addTransitionClass,
1011
removeTransitionClass,
@@ -228,47 +229,6 @@ export function leave (vnode: VNodeWithData, rm: Function) {
228229
}
229230
}
230231

231-
function resolveTransition (def?: string | Object): ?Object {
232-
if (!def) {
233-
return
234-
}
235-
/* istanbul ignore else */
236-
if (typeof def === 'object') {
237-
const res = {}
238-
if (def.css !== false) {
239-
extend(res, autoCssTransition(def.name || 'v'))
240-
}
241-
extend(res, def)
242-
return res
243-
} else if (typeof def === 'string') {
244-
return autoCssTransition(def)
245-
}
246-
}
247-
248-
const autoCssTransition: (name: string) => Object = cached(name => {
249-
return {
250-
enterClass: `${name}-enter`,
251-
leaveClass: `${name}-leave`,
252-
appearClass: `${name}-enter`,
253-
enterToClass: `${name}-enter-to`,
254-
leaveToClass: `${name}-leave-to`,
255-
appearToClass: `${name}-enter-to`,
256-
enterActiveClass: `${name}-enter-active`,
257-
leaveActiveClass: `${name}-leave-active`,
258-
appearActiveClass: `${name}-enter-active`
259-
}
260-
})
261-
262-
function once (fn: Function): Function {
263-
let called = false
264-
return () => {
265-
if (!called) {
266-
called = true
267-
fn()
268-
}
269-
}
270-
}
271-
272232
function _enter (_: any, vnode: VNodeWithData) {
273233
if (!vnode.data.show) {
274234
enter(vnode)

src/platforms/web/runtime/transition-util.js

+32-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,40 @@
11
/* @flow */
22

33
import { inBrowser, isIE9 } from 'core/util/index'
4-
import { remove } from 'shared/util'
4+
import { remove, extend, cached } from 'shared/util'
55
import { addClass, removeClass } from './class-util'
66

7+
export function resolveTransition (def?: string | Object): ?Object {
8+
if (!def) {
9+
return
10+
}
11+
/* istanbul ignore else */
12+
if (typeof def === 'object') {
13+
const res = {}
14+
if (def.css !== false) {
15+
extend(res, autoCssTransition(def.name || 'v'))
16+
}
17+
extend(res, def)
18+
return res
19+
} else if (typeof def === 'string') {
20+
return autoCssTransition(def)
21+
}
22+
}
23+
24+
const autoCssTransition: (name: string) => Object = cached(name => {
25+
return {
26+
enterClass: `${name}-enter`,
27+
leaveClass: `${name}-leave`,
28+
appearClass: `${name}-enter`,
29+
enterToClass: `${name}-enter-to`,
30+
leaveToClass: `${name}-leave-to`,
31+
appearToClass: `${name}-enter-to`,
32+
enterActiveClass: `${name}-enter-active`,
33+
leaveActiveClass: `${name}-leave-active`,
34+
appearActiveClass: `${name}-enter-active`
35+
}
36+
})
37+
738
export const hasTransition = inBrowser && !isIE9
839
const TRANSITION = 'transition'
940
const ANIMATION = 'animation'

src/platforms/weex/runtime/modules/transition.js

+2-42
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { extend, cached, noop } from 'shared/util'
1+
import { extend, once, noop } from 'shared/util'
22
import { activeInstance } from 'core/instance/lifecycle'
3+
import { resolveTransition } from 'web/runtime/transition-util'
34

45
export default {
56
create: enter,
@@ -221,47 +222,6 @@ function leave (vnode, rm) {
221222
}
222223
}
223224

224-
function resolveTransition (def) {
225-
if (!def) {
226-
return
227-
}
228-
/* istanbul ignore else */
229-
if (typeof def === 'object') {
230-
const res = {}
231-
if (def.css !== false) {
232-
extend(res, autoCssTransition(def.name || 'v'))
233-
}
234-
extend(res, def)
235-
return res
236-
} else if (typeof def === 'string') {
237-
return autoCssTransition(def)
238-
}
239-
}
240-
241-
function once (fn) {
242-
let called = false
243-
return () => {
244-
if (!called) {
245-
called = true
246-
fn()
247-
}
248-
}
249-
}
250-
251-
const autoCssTransition = cached(name => {
252-
return {
253-
enterClass: `${name}-enter`,
254-
leaveClass: `${name}-leave`,
255-
appearClass: `${name}-enter`,
256-
enterToClass: `${name}-enter-to`,
257-
leaveToClass: `${name}-leave-to`,
258-
appearToClass: `${name}-enter-to`,
259-
enterActiveClass: `${name}-enter-active`,
260-
leaveActiveClass: `${name}-leave-active`,
261-
appearActiveClass: `${name}-enter-active`
262-
}
263-
})
264-
265225
// determine the target animation style for an entering transition.
266226
function getEnterTargetState (el, stylesheet, startClass, endClass, activeClass, vm) {
267227
const targetState = {}

src/shared/util.js

+13
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,16 @@ export function looseIndexOf (arr: Array<mixed>, val: mixed): number {
225225
}
226226
return -1
227227
}
228+
229+
/**
230+
* Ensure a function is called only once.
231+
*/
232+
export function once (fn: Function): Function {
233+
let called = false
234+
return () => {
235+
if (!called) {
236+
called = true
237+
fn()
238+
}
239+
}
240+
}

0 commit comments

Comments
 (0)