mh-two-thousand-and-two
2024-04-12 3d2ec2fd0578d3ba0a414b0cc4e4a2ae60878596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/
 
function isWxsEvent (expr, filterModules) {
  return !!filterModules.find(name => expr.indexOf(name + '.') === 0)
}
 
function parseWxsViewEvent (expr, filterModules) {
  if (!simplePathRE.test(expr)) {
    return expr
  }
  if (isWxsEvent(expr, filterModules)) {
    return `$event = $handleWxsEvent($event);${expr}($event, $getComponentDescriptor())`
  }
  return expr
}
 
module.exports = function parseWxsEvents (el, {
  filterModules,
  isAppService,
  isAppView
}) {
  if (!filterModules || !filterModules.length) {
    return
  }
  if (!el.events) {
    return
  }
  if (isAppService) {
    Object.keys(el.events).forEach(name => {
      const handlers = el.events[name]
      if (Array.isArray(handlers)) {
        el.events[name] = handlers.filter(handler => {
          return !isWxsEvent(handler.value, filterModules)
        })
        if (!el.events[name].length) {
          delete el.events[name]
        }
      } else {
        if (isWxsEvent(handlers.value, filterModules)) {
          delete el.events[name]
        }
      }
    })
  } else if (isAppView) {
    Object.keys(el.events).forEach(name => {
      const handlers = el.events[name]
      if (Array.isArray(handlers)) {
        handlers.forEach(handler => {
          handler.value = parseWxsViewEvent(handler.value, filterModules)
        })
      } else {
        handlers.value = parseWxsViewEvent(handlers.value, filterModules)
      }
    })
  }
}