EditableTemplate.js
class EditableTemplate {
constructor(templateHtml,templateId,contentNode,templateData){
this.templateHtml = templateHtml;
this.templateId = templateId;
this.contentNode = contentNode;
this.templateData = templateData;
this.replacements = [];
this.setUpEditor();
}
setUpEditor(){
EditableTemplate.setActiveTemplate(this);
const contentEditor = document.getElementById("contentEditor");
contentEditor.innerHTML = '';
const fields = this.templateHtml.match(/\{\{[^(\}\})]*\}\}/g);
contentEditor.appendChild(Wyg.htmlAsNode('<b>'+this.templateData.friendlyName+':</b>'));
var thisArg = this;
let input = null;
let field;
for (field of fields){
input = document.createElement('input');
input.setAttribute('type','text');
input.setAttribute('placeholder',field);
input.addEventListener('keyup',event=>{thisArg.updateContent(event);});
contentEditor.appendChild(input);
}
}
getContentHtml(placeholder,value){
let contentHtml = this.templateHtml;
this.replacements[placeholder] = value;
let replacement = null;
for (placeholder in this.replacements){
replacement = this.replacements[placeholder];
if (replacement==null||replacement.trim()==null||replacement.trim()=='')continue;
contentHtml = contentHtml.replace(placeholder,replacement)
}
return contentHtml;
}
updateContent(event){
// console.log('update content');
// console.log(this.contentNode);
const input = event.target;
const value = input.value;
const placeholder = input.getAttribute('placeholder');
const replacedHtml = this.getContentHtml(placeholder,value);
const newNode = Wyg.htmlAsNode(replacedHtml);
this.contentNode.parentNode.replaceChild(newNode,this.contentNode);
this.contentNode = newNode;
}
}
EditableTemplate.getActiveTemplate =
function(){
return this.activeTemplate || null;
};
EditableTemplate.setActiveTemplate =
function(editableTemplate){
const templateMoveButtons = document.getElementById("templateMoveButtons");
if (editableTemplate==null){
templateMoveButtons.setAttribute('disabled',true);
} else {
templateMoveButtons.removeAttribute('disabled');
}
this.activeTemplate = editableTemplate;
};