Template.js
class Template {
constructor(templateData){
console.log(templateData);
for (let key in templateData){
this[key] = templateData[key];
}
this.config = templateData;
this.createEditor();
this.makeUpdatedNode();
this.updateContent();
}
setupNode(){
const node = this.node;
const template = this;
var thisArg = this;
node.addEventListener('click',event => {
event.stopPropagation();
event.preventDefault();
Wyg.selectTemplate(template);
});
if (this.isContainer){
node.addEventListener('dragover',
function(event){
this.classList.add('wyg-highlighted');
}
);
node.addEventListener('dragleave',
function(event){
this.classList.remove('wyg-highlighted');
}
);
node.addEventListener('mouseenter',
function(event){
this.classList.add('wyg-highlighted');
}
);
node.addEventListener('mouseleave',
function(event){
this.classList.remove('wyg-highlighted');
}
);
// node.addEventListener('mouseout',
// function(event){
// this.classList.remove('wyg-highlighted');
// }
// );
}
}
deselected(){
this.node.classList.remove('wyg-selected');
}
selected(){
this.node.classList.add('wyg-selected');
}
createEditor(){
if (this.editorNode!=null)return;
const outerHtml = this.templateHtml;
const fields = this.templateHtml.match(/\{\{[^(\}\})]*\}\}/g);
this.editableFields = [];
var editor = document.createElement('span');
for (let field of fields){
let editableField = new EditableField(field,this);
let input = editableField.input;
editor.appendChild(input);
this.editableFields.push(editableField);
}
this.editorNode = editor
}
makeUpdatedNode(){
let html = this.config.templateHtml;
for (let editableField of this.editableFields){
//console.log(editableField);
html = html.replace(editableField.fieldString, editableField.value);
}
this.node = Wyg.htmlAsNode(html);
this.setupNode();
}
updateContent(){
if (this.node==null){
this.makeUpdatedNode();
return;
}
let parentNode = this.node.parentNode;
let nextSibling = this.node.nextSibling;
parentNode.removeChild(this.node);
this.makeUpdatedNode();
parentNode.insertBefore(this.node,nextSibling);
}
}