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)
|
}
|
})
|
}
|
}
|