EditableCode.js



Wyg.EditableCode = class {


    constructor(templateCode,valuesCode){
    



        this.templateCode = templateCode;
        this.valuesCode = valuesCode;

        this.fields = new Wyg.Fields(this.templateCode);
        this.valueFields = new Wyg.Fields(this.valuesCode);



        

        let  valueFieldsToDelete = ""
        let newValuesCode = this.valuesCode;
        for (const field of this.fields.all()){
            const valueField = this.valueFields.fromKey(field.key);
            if (valueField===undefined){
                const newFieldString = '{{'+field.key+'=default}}';
                newValuesCode += "\n"+newFieldString;
            }
        }
        for (const field of this.valueFields.all()){
            const templateField = this.fields.fromKey(field.key);
            if (templateField===undefined){
                newValuesCode = newValuesCode.replace(field.code,'');
                valueFieldsToDelete += "\n"+field.code;
            }
        }
        const defaultsReg = /\{\{[^\}]*default\}\}/g;
        const defaults = newValuesCode.match(defaultsReg);
        newValuesCode = newValuesCode.replace(defaultsReg,'');
        newValuesCode = newValuesCode.replace(/\n{1,}/g,"\n");
        newValuesCode += "\n\n"+defaults.join("\n");
        console.log('------------------');
        newValuesCode = newValuesCode + "\n\n\n\n" + valueFieldsToDelete;
        newValuesCode = newValuesCode.replace(/\n{4,}/g, "\n\n\n\n");
        console.log(newValuesCode);
        this.valueFields = new Wyg.Fields(newValuesCode);
        this.valuesCode = newValuesCode;

        console.log(this.valueFields);

    }

    fieldsNotSpecified(){
        const unspecified = [];
        for (let field of this.fields.all()){
            let valueField = this.valueFields.fromKey(field.key);
            if (valueField===undefined){
                unspecified.push(field);
            }
        }
        return unspecified;
    }

    finalReplacements(){
        let replacements = [];
        for (let templateField of this.fields.all()){
            const valueField = this.valueFields.fromKey(templateField.key);
            let value = templateField.value;
            if (valueField instanceof Wyg.Field
                &&valueField.value!='default'){
                value = valueField.value;
            }
            replacements.push({'code':templateField.code,'value':value});
        }
        return replacements;
    }

    editorOutput(){
        let replacements = this.fields.all();
        let html = this.templateCode;
        for (let replacement of replacements){
            html = html.replace(replacement.code,'{{'+replacement.key+'}}');
        }
        return html;
    }
    finalOutput(){
        let replacements = this.finalReplacements();
        let html = this.templateCode;
        for (let replacement of replacements){
            html = html.replace(replacement.code,replacement.value);
        }
        return html;
    }

};