MOBILE-3086 data: Handle links in templates

main
Albert Gasset 2019-07-22 14:07:22 +02:00
parent 916d408f65
commit d20e2e057e
5 changed files with 35 additions and 12 deletions

View File

@ -299,14 +299,14 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp
if (!this.isEmpty) { if (!this.isEmpty) {
this.entries = entries.offlineEntries.concat(entries.entries); this.entries = entries.offlineEntries.concat(entries.entries);
let entriesHTML = this.data.listtemplateheader || ''; let entriesHTML = this.dataHelper.getTemplate(this.data, 'listtemplateheader', this.fieldsArray);
// Get first entry from the whole list. // Get first entry from the whole list.
if (!this.search.searching || !this.firstEntry) { if (!this.search.searching || !this.firstEntry) {
this.firstEntry = this.entries[0].id; this.firstEntry = this.entries[0].id;
} }
const template = this.data.listtemplate || this.dataHelper.getDefaultTemplate('list', this.fieldsArray); const template = this.dataHelper.getTemplate(this.data, 'listtemplate', this.fieldsArray);
const entriesById = {}; const entriesById = {};
this.entries.forEach((entry, index) => { this.entries.forEach((entry, index) => {
@ -318,7 +318,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp
entriesHTML += this.dataHelper.displayShowFields(template, this.fieldsArray, entry, offset, 'list', actions); entriesHTML += this.dataHelper.displayShowFields(template, this.fieldsArray, entry, offset, 'list', actions);
}); });
entriesHTML += this.data.listtemplatefooter || ''; entriesHTML += this.dataHelper.getTemplate(this.data, 'listtemplatefooter', this.fieldsArray);
this.entriesRendered = entriesHTML; this.entriesRendered = entriesHTML;

View File

@ -287,7 +287,7 @@ export class AddonModDataEditPage {
let replace, let replace,
render, render,
template = this.data.addtemplate || this.dataHelper.getDefaultTemplate('add', this.fieldsArray); template = this.dataHelper.getTemplate(this.data, 'addtemplate', this.fieldsArray);
// Replace the fields found on template. // Replace the fields found on template.
this.fieldsArray.forEach((field) => { this.fieldsArray.forEach((field) => {

View File

@ -163,7 +163,7 @@ export class AddonModDataEntryPage implements OnDestroy {
}).then(() => { }).then(() => {
const actions = this.dataHelper.getActions(this.data, this.access, this.entry); const actions = this.dataHelper.getActions(this.data, this.access, this.entry);
const template = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', this.fieldsArray); const template = this.dataHelper.getTemplate(this.data, 'singletemplate', this.fieldsArray);
this.entryHtml = this.dataHelper.displayShowFields(template, this.fieldsArray, this.entry, this.offset, 'show', this.entryHtml = this.dataHelper.displayShowFields(template, this.fieldsArray, this.entry, this.offset, 'show',
actions); actions);
this.showComments = actions.comments; this.showComments = actions.comments;

View File

@ -89,7 +89,7 @@ export class AddonModDataSearchPage {
search: this.search.advanced search: this.search.advanced
}; };
let template = this.data.asearchtemplate || this.dataHelper.getDefaultTemplate('asearch', this.fieldsArray), let template = this.dataHelper.getTemplate(this.data, 'asearchtemplate', this.fieldsArray),
replace, render; replace, render;
// Replace the fields found on template. // Replace the fields found on template.

View File

@ -410,10 +410,14 @@ export class AddonModDataHelperProvider {
* @param {any[]} fields List of database fields. * @param {any[]} fields List of database fields.
* @return {string} Template HTML. * @return {string} Template HTML.
*/ */
getDefaultTemplate( type: 'add' | 'list' | 'single' | 'asearch', fields: any[]): string { getDefaultTemplate(type: string, fields: any[]): string {
if (type == 'listtemplateheader' || type == 'listtemplatefooter') {
return '';
}
const html = []; const html = [];
if (type == 'list') { if (type == 'listtemplate') {
html.push('##delcheck##<br />'); html.push('##delcheck##<br />');
} }
@ -432,7 +436,7 @@ export class AddonModDataHelperProvider {
); );
}); });
if (type == 'list') { if (type == 'listtemplate') {
html.push( html.push(
'<tr class="lastrow">', '<tr class="lastrow">',
'<td class="controls template-field cell c0 lastcol" style="" colspan="2">', '<td class="controls template-field cell c0 lastcol" style="" colspan="2">',
@ -440,7 +444,7 @@ export class AddonModDataHelperProvider {
'</td>', '</td>',
'</tr>' '</tr>'
); );
} else if (type == 'single') { } else if (type == 'singletemplate') {
html.push( html.push(
'<tr class="lastrow">', '<tr class="lastrow">',
'<td class="controls template-field cell c0 lastcol" style="" colspan="2">', '<td class="controls template-field cell c0 lastcol" style="" colspan="2">',
@ -448,7 +452,7 @@ export class AddonModDataHelperProvider {
'</td>', '</td>',
'</tr>' '</tr>'
); );
} else if (type == 'asearch') { } else if (type == 'asearchtemplate') {
html.push( html.push(
'<tr class="searchcontrols">', '<tr class="searchcontrols">',
'<td class="template-field cell c0" style="">Author first name: </td>', '<td class="template-field cell c0" style="">Author first name: </td>',
@ -467,7 +471,7 @@ export class AddonModDataHelperProvider {
'</div>' '</div>'
); );
if (type == 'list') { if (type == 'listtemplate') {
html.push('<hr />'); html.push('<hr />');
} }
@ -583,6 +587,25 @@ export class AddonModDataHelperProvider {
}); });
} }
/**
* Returns the template of a certain type.
*
* @param {any} data Database object.
* @param {string} type Type of template.
* @param {any[]} fields List of database fields.
* @return {string} Template HTML.
*/
getTemplate(data: any, type: string, fields: any[]): string {
let template = data[type] || this.getDefaultTemplate(type, fields);
// Add core-link directive to links.
template = template.replace(/<a ([^>]*href="[^>]*)>/i, (match, attributes) => {
return '<a core-link capture="true" ' + attributes + '>';
});
return template;
}
/** /**
* Check if data has been changed by the user. * Check if data has been changed by the user.
* *