/* @flow */
|
|
import { preTransformRecycleList } from './recycle-list'
|
import { postTransformComponent } from './component'
|
import { postTransformComponentRoot } from './component-root'
|
import { postTransformText } from './text'
|
import { preTransformVBind } from './v-bind'
|
import { preTransformVIf } from './v-if'
|
import { preTransformVFor } from './v-for'
|
import { postTransformVOn } from './v-on'
|
import { preTransformVOnce } from './v-once'
|
|
let currentRecycleList = null
|
|
function shouldCompile (el: ASTElement, options: WeexCompilerOptions) {
|
return options.recyclable ||
|
(currentRecycleList && el !== currentRecycleList)
|
}
|
|
function preTransformNode (el: ASTElement, options: WeexCompilerOptions) {
|
if (el.tag === 'recycle-list') {
|
preTransformRecycleList(el, options)
|
currentRecycleList = el
|
}
|
if (shouldCompile(el, options)) {
|
preTransformVBind(el)
|
preTransformVIf(el, options) // also v-else-if and v-else
|
preTransformVFor(el, options)
|
preTransformVOnce(el)
|
}
|
}
|
|
function transformNode (el: ASTElement, options: WeexCompilerOptions) {
|
if (shouldCompile(el, options)) {
|
// do nothing yet
|
}
|
}
|
|
function postTransformNode (el: ASTElement, options: WeexCompilerOptions) {
|
if (shouldCompile(el, options)) {
|
// mark child component in parent template
|
postTransformComponent(el, options)
|
// mark root in child component template
|
postTransformComponentRoot(el)
|
// <text>: transform children text into value attr
|
if (el.tag === 'text') {
|
postTransformText(el)
|
}
|
postTransformVOn(el)
|
}
|
if (el === currentRecycleList) {
|
currentRecycleList = null
|
}
|
}
|
|
export default {
|
preTransformNode,
|
transformNode,
|
postTransformNode
|
}
|