Template.js
Wyg.Template = class {
constructor(templateCode,valuesCode=null){
this.code = templateCode;
this.valuesCode = valuesCode;
this.fields = this.codeToFields(templateCode);
this.map = new Wyg.Map();
for (const field of this.fields){
this.map.setField(field,'key',field.key);
}
if (typeof valuesCode==typeof ""){
const valueFields = this.codeToFields(valuesCode);
for (const valueField of valueFields){
const templateField = this.map.fromKey('field',valueField.key);
templateField.setValue(valueField.value);
}
}
}
html(){
const code = this.code;
let html = code;
for (const key in this.fields){
const field = this.fields[key];
html = field.codeToHtml(html);
}
return html;
}
updateValue(key,value){
const field = this.fields[key];
field.setValue(value);
}
copy(){
return new Wyg.Template(this.code);
}
codeToFields(templateCode){
const fieldReg = /\{\{[^\}\n]*\}\}/g;
const fieldStrings = templateCode.match(fieldReg);
const fields = [];
for (const fieldString of fieldStrings){
const field = new Wyg.Field(fieldString);
fields[field.key] = field;
}
return fields;
}
// updateFieldValue(field, newValue){
// newValue = newValue || '';
// let length = field.value.length;
// this.editCode = this.editCode.substring(0,field.start)+newValue+this.editCode.substring(field.start+length);
// const diff = -1*(length - newValue.length);
// let start = field.start;// || this.editCode.indexOf(field.value);
// field.start = start;
// field.value = newValue;
// for (const field of this.fields){
// if (field.start>start){
// field.start += diff;
// }
// }
// }
buildEditor(){
this.editCode = this.code;
let i = 0;
for (let field of this.fields){
let value = field.value;
field.value = field.code;
field.start = this.editCode.indexOf(field.value);
this.updateFieldValue(field,value);
}
return;
let sixth = this.fields[6];
let eigth = this.fields[8];
let insert = '----insert 6'+sixth.key+'-----';
this.editCode = this.editCode.substring(0,sixth.start)+insert+this.editCode.substring(sixth.start);
eigth.start = eigth.start + insert.length;
// let sixth = this.fields[6];
// let eigth = this.fields[8];
insert = '----insert 8'+eigth.key+'-----';
this.editCode = this.editCode.substring(0,eigth.start)+insert+this.editCode.substring(eigth.start);
//eigth.start = eigth.start + insert.length;
console.log(this.editCode);
const code = this.code;
const start = code.indexOf(field.code);
const length = field.value.length;
this.editCode = code.replace(field.code,'');
this.fixStartPositions(start,-length);
const offset = this.getFieldStart(field,code);
code = field.htmlWithNewValue(code,'');
}
fixStartPositions(fromOrigStart, plusNewLength){
for (const field of this.fields){
}
}
getFieldStart(field){
for (const field of this.fields){
}
}
parseTemplateCode(templateCode){
return fieldCodeList;
}
parseFieldCodeList(fieldCodeList,templateCode){
const fields = [];
for (let fieldCode of fieldCodeList){
let field = new Wyg.Field(fieldCode,this);
fields.push(field);
}
return fields;
}
all(){
return this.fields;
}
fieldFromCode(code){
for (const key in this.fields){
const field = this.fields[key];
if (field.code==code){
return field;
}
}
throw "Field could not be found for code: "+code;
}
valueFromKey(fieldKey){
const field = this.fieldFromKey(fieldKey);
if (field)return field.value;
else return undefined;
return field.value;
}
fieldFromKey(fieldKey){
return this.fields[fieldKey];
const list = [];
for (let field of this.fields){
if (field.key===fieldKey){
list.push(field);
}
}
if (list.length>1){
throw "There are multiple fields for key '"+fieldKey+"' which is not currently allowed.";
} else if (list.length==0){
return undefined;
}
return list[0];
}
editValuesHtml(){
let html = '<div style="display:flex;">';
for (const field of this.fields){
html += '<span><h1>'+field.key+'</h1><input onkeyup="Wyg.Gross.updateValue(this.getAttribute(\'name\'),this.value);" type="text" placeholder="'+field.key+'" name="'
+field.key+'" value="'+Wyg.Gross.valueFromKey(field.key)+'">'
+'</span>';
}
html += '</div>';
return html;
}
};