(bugfix) fix unmatched selector error when template didnt contain any html
This commit is contained in:
parent
3e43fde1cc
commit
e0178b5a97
@ -4,7 +4,7 @@ import { isPathAngularComponent, extractComponentInlineTemplate } from '../utils
|
||||
|
||||
import * as cheerio from 'cheerio';
|
||||
|
||||
const $ = cheerio.load('', {xmlMode: true});
|
||||
const $ = cheerio.load('', { xmlMode: true });
|
||||
|
||||
export class DirectiveParser implements ParserInterface {
|
||||
|
||||
@ -19,9 +19,9 @@ export class DirectiveParser implements ParserInterface {
|
||||
protected parseTemplate(template: string): TranslationCollection {
|
||||
let collection: TranslationCollection = new TranslationCollection();
|
||||
|
||||
template = this.normalizeTemplateAttributes(template);
|
||||
|
||||
const selector = '[translate], [ng2-translate]';
|
||||
|
||||
template = this.prepareTemplate(template);
|
||||
$(template)
|
||||
.find(selector)
|
||||
.addBack(selector)
|
||||
@ -45,6 +45,12 @@ export class DirectiveParser implements ParserInterface {
|
||||
return collection;
|
||||
}
|
||||
|
||||
protected prepareTemplate(template: string): string {
|
||||
return this.wrapTemplate(
|
||||
this.normalizeTemplateAttributes(template)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Angular's `[attr]="'val'"` syntax is not valid HTML,
|
||||
* so it can't be parsed by standard HTML parsers.
|
||||
@ -54,4 +60,11 @@ export class DirectiveParser implements ParserInterface {
|
||||
return template.replace(/\[([^\]]+)\]="'([^']*)'"/g, '$1="$2"');
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps template in tag
|
||||
*/
|
||||
protected wrapTemplate(template: string, tag: string = 'div'): string {
|
||||
return `<${tag}>${template}</${tag}>`;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -124,4 +124,18 @@ describe('DirectiveParser', () => {
|
||||
expect(keys).to.deep.equal(['Hello World']);
|
||||
});
|
||||
|
||||
it('should not cause error when no html is present in template', () => {
|
||||
const contents = `
|
||||
import { Component } from '@angular/core';
|
||||
@Component({
|
||||
template: '{{ variable }}'
|
||||
})
|
||||
export class MyComponent {
|
||||
variable: string
|
||||
}
|
||||
`;
|
||||
const keys = parser.extract(contents, componentFilename).keys();
|
||||
expect(keys).to.deep.equal([]);
|
||||
});
|
||||
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user