Explorar el Código

simplify namespace detection

Evan You hace 10 años
padre
commit
a65b4faa13
Se han modificado 1 ficheros con 7 adiciones y 18 borrados
  1. 7 18
      src/compiler/parser/index.js

+ 7 - 18
src/compiler/parser/index.js

@@ -46,9 +46,6 @@ export function parse (template, options) {
   const stack = []
   const stack = []
   let root
   let root
   let currentParent
   let currentParent
-  let inNamespace = false
-  let namespaceIndex = -1
-  let currentNamespace = ''
   let inPre = false
   let inPre = false
   let warned = false
   let warned = false
   parseHTML(template, {
   parseHTML(template, {
@@ -73,15 +70,12 @@ export function parse (template, options) {
         children: []
         children: []
       }
       }
 
 
-      // check namespace
-      const namespace = platformGetTagNamespace(tag)
-      if (inNamespace) {
-        element.ns = currentNamespace
-      } else if (namespace) {
-        element.ns = namespace
-        inNamespace = true
-        currentNamespace = namespace
-        namespaceIndex = stack.length
+      // check namespace.
+      // inherit parent ns if there is one
+      let ns
+      if ((ns = currentParent && currentParent.ns) ||
+          (ns = platformGetTagNamespace(tag))) {
+        element.ns = ns
       }
       }
 
 
       if (!inPre) {
       if (!inPre) {
@@ -122,6 +116,7 @@ export function parse (template, options) {
           processElse(element, currentParent)
           processElse(element, currentParent)
         } else {
         } else {
           currentParent.children.push(element)
           currentParent.children.push(element)
+          element.parent = currentParent
         }
         }
       }
       }
       if (!unary) {
       if (!unary) {
@@ -138,12 +133,6 @@ export function parse (template, options) {
       // pop stack
       // pop stack
       stack.length -= 1
       stack.length -= 1
       currentParent = stack[stack.length - 1]
       currentParent = stack[stack.length - 1]
-      // check namespace state
-      if (inNamespace && stack.length <= namespaceIndex) {
-        inNamespace = false
-        currentNamespace = ''
-        namespaceIndex = -1
-      }
       // check pre state
       // check pre state
       if (element.pre) {
       if (element.pre) {
         inPre = false
         inPre = false