/* @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) // : transform children text into value attr if (el.tag === 'text') { postTransformText(el) } postTransformVOn(el) } if (el === currentRecycleList) { currentRecycleList = null } } export default { preTransformNode, transformNode, postTransformNode }