UNPKG

3.04 kBJavaScriptView Raw
1/* @flow */
2
3import { parseFilters } from './parser/filter-parser'
4
5export function baseWarn (msg: string) {
6 console.error(`[Vue compiler]: ${msg}`)
7}
8
9export function pluckModuleFunction<F: Function> (
10 modules: ?Array<Object>,
11 key: string
12): Array<F> {
13 return modules
14 ? modules.map(m => m[key]).filter(_ => _)
15 : []
16}
17
18export function addProp (el: ASTElement, name: string, value: string) {
19 (el.props || (el.props = [])).push({ name, value })
20}
21
22export function addAttr (el: ASTElement, name: string, value: string) {
23 (el.attrs || (el.attrs = [])).push({ name, value })
24}
25
26export function addDirective (
27 el: ASTElement,
28 name: string,
29 rawName: string,
30 value: string,
31 arg: ?string,
32 modifiers: ?ASTModifiers
33) {
34 (el.directives || (el.directives = [])).push({ name, rawName, value, arg, modifiers })
35}
36
37export function addHandler (
38 el: ASTElement,
39 name: string,
40 value: string,
41 modifiers: ?ASTModifiers,
42 important?: boolean,
43 warn?: Function
44) {
45 // warn prevent and passive modifier
46 /* istanbul ignore if */
47 if (
48 process.env.NODE_ENV !== 'production' && warn &&
49 modifiers && modifiers.prevent && modifiers.passive
50 ) {
51 warn(
52 'passive and prevent can\'t be used together. ' +
53 'Passive handler can\'t prevent default event.'
54 )
55 }
56 // check capture modifier
57 if (modifiers && modifiers.capture) {
58 delete modifiers.capture
59 name = '!' + name // mark the event as captured
60 }
61 if (modifiers && modifiers.once) {
62 delete modifiers.once
63 name = '~' + name // mark the event as once
64 }
65 /* istanbul ignore if */
66 if (modifiers && modifiers.passive) {
67 delete modifiers.passive
68 name = '&' + name // mark the event as passive
69 }
70 let events
71 if (modifiers && modifiers.native) {
72 delete modifiers.native
73 events = el.nativeEvents || (el.nativeEvents = {})
74 } else {
75 events = el.events || (el.events = {})
76 }
77 const newHandler = { value, modifiers }
78 const handlers = events[name]
79 /* istanbul ignore if */
80 if (Array.isArray(handlers)) {
81 important ? handlers.unshift(newHandler) : handlers.push(newHandler)
82 } else if (handlers) {
83 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]
84 } else {
85 events[name] = newHandler
86 }
87}
88
89export function getBindingAttr (
90 el: ASTElement,
91 name: string,
92 getStatic?: boolean
93): ?string {
94 const dynamicValue =
95 getAndRemoveAttr(el, ':' + name) ||
96 getAndRemoveAttr(el, 'v-bind:' + name)
97 if (dynamicValue != null) {
98 return parseFilters(dynamicValue)
99 } else if (getStatic !== false) {
100 const staticValue = getAndRemoveAttr(el, name)
101 if (staticValue != null) {
102 return JSON.stringify(staticValue)
103 }
104 }
105}
106
107export function getAndRemoveAttr (el: ASTElement, name: string): ?string {
108 let val
109 if ((val = el.attrsMap[name]) != null) {
110 const list = el.attrsList
111 for (let i = 0, l = list.length; i < l; i++) {
112 if (list[i].name === name) {
113 list.splice(i, 1)
114 break
115 }
116 }
117 }
118 return val
119}