popnoire/site/OFF_plugins/field-engineer/assets/js/render.js
2026-02-12 15:22:46 +01:00

215 lines
No EOL
5.3 KiB
JavaScript

EgrRender = (function () {
var fn = {};
var level = 1;
fn.render = function(obj) {
var output = '';
var fields = obj.find('.egr-presentation').children();
var out = '';
var textarea = obj.find('.egr-output').find('textarea');
out = fn.renderLoop(fields, out, level, true);
textarea.val(out);
textarea.blur();
};
fn.renderLoop = function(fields, out, root_field) {
fields.each(function(field_index) {
var field = $(this);
var field_name = field.attr('data-field-name');
var depth = field.parents('.egr-row').length;
var tab = ' '.repeat(depth);
if(field.hasClass('egr-row')) {
if(!root_field) {
out += tab + field_name + ":\n";
}
var fieldsets = $(this).children('.egr-fieldsets').children();
if(depth > 0) tab += ' ';
fieldsets.each(function(fieldset_index) {
var fieldset = $(this);
var subfields = fieldset.children('.egr-fields').children();
if(fieldset.attr('data-fieldset-name') != undefined) {
out += tab + "-\n";
out += fn.setFieldsetName(tab, field, fieldset);
}
out = fn.renderLoop(subfields, out, false);
});
} else {
var fieldset = field.parent().parent();
var selector = fn.getSelector(field_name, field);
var element = fn.findFormElement(selector, field);
var content = fn.getElement(element, field_name, tab);
if(content) {
out += tab + content;
}
}
});
return out;
};
fn.getSelector = function(field_name, field) {
var selector = field_name + field.attr('data-prefix');
return selector;
};
fn.findFormElement = function(selector, field) {
var single = '[name="' + selector + '"]:not(label)';
var multiple = '[name^="' + selector + '["]:not(label)';
var element = field.find(single + ',' + multiple);
return element;
};
fn.getElement = function(element, field_name, tab) {
var elementType = element.prop('nodeName');
var is_single = (element.length < 2) ? true : false;
var output = '';
switch(elementType) {
case 'TEXTAREA':
output += fn.textarea(element, field_name, tab);
break;
case 'INPUT':
switch(element.attr('type')) {
case 'radio':
output += fn.radio(element, field_name, tab);
break;
case 'checkbox':
if(is_single) {
output += fn.checkbox(element, field_name, tab);
} else {
output += fn.checkboxes(element, field_name, tab);
}
break;
default:
if(element.hasClass('images')) {
output += fn.textarea(element, field_name, tab);
} else {
if(is_single) {
output += fn.input(element, field_name, is_single, tab);
} else {
if(field_name == 'datetime') {
output += fn.input(element, field_name);
} else {
output += fn.inputs(element, field_name, tab);
}
}
}
}
break;
case 'SELECT':
output += fn.select(element, field_name, tab);
break;
}
return output;
};
fn.setFieldsetName = function(tab, field, fieldset) {
var fieldset_name = fieldset.attr('data-fieldset-name');
var fieldset_count = field.attr('data-fieldset-count');
if(fieldset_count == 1 && fieldset_name == 'default') {
return '';
}
return tab + " _fieldset: " + fieldset_name + "\n";
};
fn.inputs = function(element, field_name, tab) {
var value = '';
var indent = tab + ' ';
element.each(function( index ) {
var val = $(this).val();
val = val.replace(/"/g, '\\"');
value += indent + '- "' + val + '"' + "\n";
});
value = value.slice(0, -1);
return field_name + ": \n" + value + "\n";
};
/* Input */
fn.input = function(element, field_name) {
var value = '';
element.each(function( index ) {
value += $(this).val() + ' ';
});
value = value.slice(0, -1);
value = value.replace(/"/g, '\\"');
return field_name + ': "' + value + '"' + "\n";
};
/* Textarea */
fn.textarea = function(element, field_name, tab) {
var value = element.val();
var match = value.indexOf("\n");
var indent = tab + ' ';
if(match > -1) {
value = value.replace(/(?:\r\n|\r|\n)/g, "\n" + indent);
if(value != '') {
return field_name + ": |\n" + indent + value + "\n";
} else {
return '';
}
}
return fn.input(element, field_name);
};
/* Select */
fn.select = function(element, field_name) {
var value = element.val();
value = value.replace(/"/g, '\\"');
return field_name + ': "' + value + '"' + "\n";
};
/* Radio */
fn.radio = function(element, field_name) {
out = '';
element.each(function(index) {
if($(this).is(':checked')) {
var value = $(this).val();
if(value == 'true' || value == 'false') {
value = "'" + value + "'";
}
out += field_name + ": " + value + "\n";
}
});
return out;
};
/* Checkbox */
fn.checkbox = function(element, field_name) {
out = '';
element.each(function(index) {
if($(this).is(':checked')) {
var value = $(this).val();
if(value == 'on') {
value = 'true';
}
out += field_name + ': ' + value + "\n";
} else {
out += field_name + ": false\n";
}
});
return out;
};
/* Checkboxes */
fn.checkboxes = function(element, field_name, tab) {
out = '';
element.each(function(index) {
if($(this).is(':checked')) {
out += tab + ' - ' + $(this).val() + "\n";
}
});
if(out != '') {
out = field_name + ":\n" + out;
}
return out;
}
return fn;
})();