]> git.mxchange.org Git - friendica-addons.git/blob
7fb65167536d488d2262f4e163b7cca0bd85d412
[friendica-addons.git] /
1 /* @flow */
2
3 import { parseFor } from 'compiler/parser/index'
4 import { getAndRemoveAttr, addRawAttr } from 'compiler/helpers'
5
6 /**
7  * Map the following syntax to corresponding attrs:
8  *
9  * <recycle-list for="(item, i) in longList" switch="cellType">
10  *   <cell-slot case="A"> ... </cell-slot>
11  *   <cell-slot case="B"> ... </cell-slot>
12  * </recycle-list>
13  */
14
15 export function preTransformRecycleList (
16   el: ASTElement,
17   options: WeexCompilerOptions
18 ) {
19   const exp = getAndRemoveAttr(el, 'for')
20   if (!exp) {
21     if (options.warn) {
22       options.warn(`Invalid <recycle-list> syntax: missing "for" expression.`)
23     }
24     return
25   }
26
27   const res = parseFor(exp)
28   if (!res) {
29     if (options.warn) {
30       options.warn(`Invalid <recycle-list> syntax: ${exp}.`)
31     }
32     return
33   }
34
35   addRawAttr(el, ':list-data', res.for)
36   addRawAttr(el, 'binding-expression', res.for)
37   addRawAttr(el, 'alias', res.alias)
38   if (res.iterator2) {
39     // (item, key, index) for object iteration
40     // is this even supported?
41     addRawAttr(el, 'index', res.iterator2)
42   } else if (res.iterator1) {
43     addRawAttr(el, 'index', res.iterator1)
44   }
45
46   const switchKey = getAndRemoveAttr(el, 'switch')
47   if (switchKey) {
48     addRawAttr(el, 'switch', switchKey)
49   }
50 }