(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';
|
import * as cheerio from 'cheerio';
|
||||||
|
|
||||||
const $ = cheerio.load('', {xmlMode: true});
|
const $ = cheerio.load('', { xmlMode: true });
|
||||||
|
|
||||||
export class DirectiveParser implements ParserInterface {
|
export class DirectiveParser implements ParserInterface {
|
||||||
|
|
||||||
@ -19,9 +19,9 @@ export class DirectiveParser implements ParserInterface {
|
|||||||
protected parseTemplate(template: string): TranslationCollection {
|
protected parseTemplate(template: string): TranslationCollection {
|
||||||
let collection: TranslationCollection = new TranslationCollection();
|
let collection: TranslationCollection = new TranslationCollection();
|
||||||
|
|
||||||
template = this.normalizeTemplateAttributes(template);
|
|
||||||
|
|
||||||
const selector = '[translate], [ng2-translate]';
|
const selector = '[translate], [ng2-translate]';
|
||||||
|
|
||||||
|
template = this.prepareTemplate(template);
|
||||||
$(template)
|
$(template)
|
||||||
.find(selector)
|
.find(selector)
|
||||||
.addBack(selector)
|
.addBack(selector)
|
||||||
@ -45,6 +45,12 @@ export class DirectiveParser implements ParserInterface {
|
|||||||
return collection;
|
return collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected prepareTemplate(template: string): string {
|
||||||
|
return this.wrapTemplate(
|
||||||
|
this.normalizeTemplateAttributes(template)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Angular's `[attr]="'val'"` syntax is not valid HTML,
|
* Angular's `[attr]="'val'"` syntax is not valid HTML,
|
||||||
* so it can't be parsed by standard HTML parsers.
|
* 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"');
|
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']);
|
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