MOBILE-3086 data: Fix syntax errors in templates
parent
d20e2e057e
commit
3788afe8b3
|
@ -598,6 +598,9 @@ export class AddonModDataHelperProvider {
|
||||||
getTemplate(data: any, type: string, fields: any[]): string {
|
getTemplate(data: any, type: string, fields: any[]): string {
|
||||||
let template = data[type] || this.getDefaultTemplate(type, fields);
|
let template = data[type] || this.getDefaultTemplate(type, fields);
|
||||||
|
|
||||||
|
// Try to fix syntax errors so the template can be parsed by Angular.
|
||||||
|
template = this.domUtils.fixHtml(template);
|
||||||
|
|
||||||
// Add core-link directive to links.
|
// Add core-link directive to links.
|
||||||
template = template.replace(/<a ([^>]*href="[^>]*)>/i, (match, attributes) => {
|
template = template.replace(/<a ([^>]*href="[^>]*)>/i, (match, attributes) => {
|
||||||
return '<a core-link capture="true" ' + attributes + '>';
|
return '<a core-link capture="true" ' + attributes + '>';
|
||||||
|
|
|
@ -323,6 +323,33 @@ export class CoreDomUtilsProvider {
|
||||||
return urls;
|
return urls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix syntax errors in HTML.
|
||||||
|
*
|
||||||
|
* @param {string} html HTML text.
|
||||||
|
* @return {string} Fixed HTML text.
|
||||||
|
*/
|
||||||
|
fixHtml(html: string): string {
|
||||||
|
this.template.innerHTML = html;
|
||||||
|
|
||||||
|
const attrNameRegExp = /[^\x00-\x20\x7F-\x9F"'>\/=]+/;
|
||||||
|
|
||||||
|
const fixElement = (element: Element): void => {
|
||||||
|
// Remove attributes with an invalid name.
|
||||||
|
Array.from(element.attributes).forEach((attr) => {
|
||||||
|
if (!attrNameRegExp.test(attr.name)) {
|
||||||
|
element.removeAttributeNode(attr);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Array.from(element.children).forEach(fixElement);
|
||||||
|
};
|
||||||
|
|
||||||
|
Array.from(this.template.content.children).forEach(fixElement);
|
||||||
|
|
||||||
|
return this.template.innerHTML;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Focus an element and open keyboard.
|
* Focus an element and open keyboard.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue