/* @flow */
|
|
import { parseFor } from 'compiler/parser/index'
|
import { getAndRemoveAttr, addRawAttr } from 'compiler/helpers'
|
|
/**
|
* Map the following syntax to corresponding attrs:
|
*
|
* <recycle-list for="(item, i) in longList" switch="cellType">
|
* <cell-slot case="A"> ... </cell-slot>
|
* <cell-slot case="B"> ... </cell-slot>
|
* </recycle-list>
|
*/
|
|
export function preTransformRecycleList (
|
el: ASTElement,
|
options: WeexCompilerOptions
|
) {
|
const exp = getAndRemoveAttr(el, 'for')
|
if (!exp) {
|
if (options.warn) {
|
options.warn(`Invalid <recycle-list> syntax: missing "for" expression.`)
|
}
|
return
|
}
|
|
const res = parseFor(exp)
|
if (!res) {
|
if (options.warn) {
|
options.warn(`Invalid <recycle-list> syntax: ${exp}.`)
|
}
|
return
|
}
|
|
addRawAttr(el, ':list-data', res.for)
|
addRawAttr(el, 'binding-expression', res.for)
|
addRawAttr(el, 'alias', res.alias)
|
if (res.iterator2) {
|
// (item, key, index) for object iteration
|
// is this even supported?
|
addRawAttr(el, 'index', res.iterator2)
|
} else if (res.iterator1) {
|
addRawAttr(el, 'index', res.iterator1)
|
}
|
|
const switchKey = getAndRemoveAttr(el, 'switch')
|
if (switchKey) {
|
addRawAttr(el, 'switch', switchKey)
|
}
|
}
|