Sfoglia il codice sorgente

add preTransform option for compiler modules

Evan You 10 anni fa
parent
commit
3ddef0c53c
2 ha cambiato i file con 19 aggiunte e 0 eliminazioni
  1. 7 0
      src/compiler/parser/index.js
  2. 12 0
      test/unit/modules/compiler/parser.spec.js

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

@@ -31,6 +31,7 @@ const decodeHTMLCached = cached(decodeHTML)
 let warn
 let platformGetTagNamespace
 let platformMustUseProp
+let preTransforms
 let transforms
 let delimiters
 
@@ -44,6 +45,7 @@ export function parse (
   warn = options.warn || baseWarn
   platformGetTagNamespace = options.getTagNamespace || no
   platformMustUseProp = options.mustUseProp || no
+  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode')
   transforms = pluckModuleFunction(options.modules, 'transformNode')
   delimiters = options.delimiters
   const stack = []
@@ -97,6 +99,11 @@ export function parse (
         )
       }
 
+      // apply pre-transforms
+      for (let i = 0; i < preTransforms.length; i++) {
+        preTransforms[i](element, options)
+      }
+
       if (!inPre) {
         processPre(element)
         if (element.pre) {

+ 12 - 0
test/unit/modules/compiler/parser.spec.js

@@ -315,4 +315,16 @@ describe('parser', () => {
     const ast = parse('<input type="text" name="field1" :value="msg">', options)
     expect(ast.props).toBeUndefined()
   })
+
+  it('preTransforms', () => {
+    const options = extend({}, baseOptions)
+    const spy = jasmine.createSpy('preTransform')
+    options.modules = options.modules.concat([{
+      preTransformNode (el) {
+        spy(el.tag)
+      }
+    }])
+    parse('<img v-pre src="hi">', options)
+    expect(spy).toHaveBeenCalledWith('img')
+  })
 })