Evan You 10 anos atrás
pai
commit
3dea52f762

+ 0 - 61
src/compiler/helpers.js

@@ -1,40 +1,3 @@
-const modifierRE = /\.[^\.]+/g
-export function parseModifiers (name) {
-  const match = name.match(modifierRE)
-  if (match) {
-    const ret = {}
-    match.forEach(m => { ret[m.slice(1)] = true })
-    return ret
-  }
-}
-
-export function removeModifiers (name) {
-  return name.replace(modifierRE, '')
-}
-
-export function makeAttrsMap (attrs) {
-  const map = {}
-  for (let i = 0, l = attrs.length; i < l; i++) {
-    map[attrs[i].name] = attrs[i].value
-  }
-  return map
-}
-
-export function getAndRemoveAttr (el, attr) {
-  let val
-  if ((val = el.attrsMap[attr])) {
-    el.attrsMap[attr] = null
-    const list = el.attrsList
-    for (let i = 0, l = list.length; i < l; i++) {
-      if (list[i].name === attr) {
-        list.splice(i, 1)
-        break
-      }
-    }
-  }
-  return val
-}
-
 export function addHandler (events, name, value, modifiers) {
   // check capture modifier
   if (modifiers && modifiers.capture) {
@@ -51,27 +14,3 @@ export function addHandler (events, name, value, modifiers) {
     events[name] = newHandler
   }
 }
-
-const tagRE = /\{\{((?:.|\\n)+?)\}\}/g
-export function parseText (text) {
-  if (!tagRE.test(text)) {
-    return null
-  }
-  var tokens = []
-  var lastIndex = tagRE.lastIndex = 0
-  var match, index
-  while ((match = tagRE.exec(text))) {
-    index = match.index
-    // push text token
-    if (index > lastIndex) {
-      tokens.push(JSON.stringify(text.slice(lastIndex, index)))
-    }
-    // tag token
-    tokens.push('(' + match[1].trim() + ')')
-    lastIndex = index + match[0].length
-  }
-  if (lastIndex < text.length) {
-    tokens.push(JSON.stringify(text.slice(lastIndex)))
-  }
-  return tokens.join('+')
-}

+ 1 - 1
src/compiler/index.js

@@ -1,4 +1,4 @@
-import { parse } from './template-parser'
+import { parse } from './parser/index'
 import { generate } from './codegen/index'
 
 const cache1 = Object.create(null)

+ 0 - 0
src/compiler/entity-decoder.js → src/compiler/parser/entity-decoder.js


+ 12 - 12
src/compiler/html-parser.js → src/compiler/parser/html-parser.js

@@ -5,17 +5,6 @@
  * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
  */
 
-function makeMap (values) {
-  values = values.split(/,/)
-  var map = {}
-  values.forEach(function (value) {
-    map[value] = 1
-  })
-  return function (value) {
-    return map[value.toLowerCase()] === 1
-  }
-}
-
 // Regular Expressions for parsing tags and attributes
 const singleAttrIdentifier = /([^\s"'<>\/=]+)/
 const singleAttrAssign = /=/
@@ -77,7 +66,7 @@ function joinSingleAttrAssigns (handler) {
   }).join('|')
 }
 
-export default function HTMLParser (html, handler) {
+export function parseHTML (html, handler) {
   const stack = []
   const attribute = attrForHandler(handler)
   let last, prevTag, nextTag, lastTag
@@ -300,3 +289,14 @@ export default function HTMLParser (html, handler) {
     }
   }
 }
+
+function makeMap (values) {
+  values = values.split(/,/)
+  var map = {}
+  values.forEach(function (value) {
+    map[value] = 1
+  })
+  return function (value) {
+    return map[value.toLowerCase()] === 1
+  }
+}

+ 38 - 12
src/compiler/template-parser.js → src/compiler/parser/index.js

@@ -1,18 +1,12 @@
 import { decodeHTML } from 'entities'
-import HTMLParser from './html-parser'
-import {
-  parseText,
-  parseModifiers,
-  removeModifiers,
-  makeAttrsMap,
-  getAndRemoveAttr,
-  addHandler
-} from './helpers'
+import { parseHTML } from './html-parser'
+import { parseText } from './text-parser'
+import { addHandler } from '../helpers'
 
 const dirRE = /^v-|^@|^:/
 const bindRE = /^:|^v-bind:/
 const onRE = /^@|^v-on:/
-
+const modifierRE = /\.[^\.]+/g
 const mustUsePropsRE = /^(value|selected|checked|muted)$/
 const forAliasRE = /([a-zA-Z_][\w]*)\s+(?:in|of)\s+(.*)/
 
@@ -49,7 +43,7 @@ export function parse (template, preserveWhitespace) {
   let inSvg = false
   let svgIndex = -1
   let warned = false
-  HTMLParser(template, {
+  parseHTML(template, {
     html5: true,
     start (tag, attrs, unary) {
       let element = {
@@ -200,7 +194,7 @@ function processAttributes (el) {
       // modifiers
       const modifiers = parseModifiers(name)
       if (modifiers) {
-        name = removeModifiers(name)
+        name = name.replace(modifierRE, '')
       }
       if (bindRE.test(name)) { // v-bind
         name = name.replace(bindRE, '')
@@ -229,3 +223,35 @@ function processAttributes (el) {
     }
   }
 }
+
+function parseModifiers (name) {
+  const match = name.match(modifierRE)
+  if (match) {
+    const ret = {}
+    match.forEach(m => { ret[m.slice(1)] = true })
+    return ret
+  }
+}
+
+function makeAttrsMap (attrs) {
+  const map = {}
+  for (let i = 0, l = attrs.length; i < l; i++) {
+    map[attrs[i].name] = attrs[i].value
+  }
+  return map
+}
+
+function getAndRemoveAttr (el, attr) {
+  let val
+  if ((val = el.attrsMap[attr])) {
+    el.attrsMap[attr] = null
+    const list = el.attrsList
+    for (let i = 0, l = list.length; i < l; i++) {
+      if (list[i].name === attr) {
+        list.splice(i, 1)
+        break
+      }
+    }
+  }
+  return val
+}

+ 24 - 0
src/compiler/parser/text-parser.js

@@ -0,0 +1,24 @@
+const tagRE = /\{\{((?:.|\\n)+?)\}\}/g
+
+export function parseText (text) {
+  if (!tagRE.test(text)) {
+    return null
+  }
+  var tokens = []
+  var lastIndex = tagRE.lastIndex = 0
+  var match, index
+  while ((match = tagRE.exec(text))) {
+    index = match.index
+    // push text token
+    if (index > lastIndex) {
+      tokens.push(JSON.stringify(text.slice(lastIndex, index)))
+    }
+    // tag token
+    tokens.push('(' + match[1].trim() + ')')
+    lastIndex = index + match[0].length
+  }
+  if (lastIndex < text.length) {
+    tokens.push(JSON.stringify(text.slice(lastIndex)))
+  }
+  return tokens.join('+')
+}