// build custom field groups with values recovered from DB received in field_values
function build_custom_field_group(field_values, group_id, fields_data, is_repeat){
if(field_values.length == 0) field_values = [{}];
var group_panel = $('#custom_field_group_'+group_id);
var group_panel_body = group_panel.find(' > .panel-body');
var group_clone = group_panel_body.children('.custom_sortable_grouped').clone().removeClass('hidden');
var field_group_counter = 0;
group_panel_body.children('.custom_sortable_grouped').remove();
function add_group(values){
var clone = group_clone.clone();
clone.find('input, textarea, select').not('.code_style').each(function(){ $(this).attr('name', $(this).attr('name').replace('field_options', 'field_options['+field_group_counter+']')) });
group_panel_body.append(clone);
group_panel.trigger('update_custom_group_number');
for(var k in fields_data){
cama_build_custom_field(clone.find('.content-field-'+fields_data[k].id), fields_data[k], values[k]);
}
if(field_group_counter == 0) clone.children('.header-field-grouped').find('.del').remove();
field_group_counter ++;
return false;
}
if(is_repeat){
group_panel_body.sortable({ handle: ".move.fa-arrows", items: ' > .custom_sortable_grouped',
update: function(){ group_panel.trigger('update_custom_group_number'); },
start: function (e, ui) { // fix tinymce
$(ui.item).find('.mce-panel').each(function () {
tinymce.execCommand('mceRemoveEditor', false, $(this).next().addClass('cama_restore_editor').attr('id'));
});
},
stop: function (e, ui) { // fix tinymce
$(ui.item).find('.cama_restore_editor').each(function () {
tinymce.execCommand('mceAddEditor', true, $(this).attr('id'));
});
}});
group_panel.find('.btn.duplicate_cutom_group').click(add_group);
group_panel_body.on('click', '.header-field-grouped .del', function(){ if(confirm(I18n("msg.delete_item"))) $(this).closest('.custom_sortable_grouped').fadeOut('slow', function(){ $(this).remove(); group_panel.trigger('update_custom_group_number'); }); return false; });
group_panel_body.on('click', '.header-field-grouped .toggleable', function(){
if($(this).hasClass('fa-angle-down')) $(this).removeClass('fa-angle-down').addClass('fa-angle-up').closest('.header-field-grouped').next().slideUp();
else $(this).removeClass('fa-angle-up').addClass('fa-angle-down').closest('.header-field-grouped').next().slideDown();
return false;
});
group_panel.bind('update_custom_group_number', function(){ $(this).find('.custom_sortable_grouped').each(function(index){ $(this).find('input.cama_custom_group_number').val(index); }); });
$.each(field_values, function(field_val, key){ add_group(this); });
}else{
add_group(field_values[0]);
}
}
function cama_build_custom_field(panel, field_data, values){
values = values || [];
var field_counter = 0;
var $field = panel.clone().wrap('li');
panel.html("
"+(field_data.multiple ? "" : ''));
var field_actions = '
';
var callback = $field.find('.group-input-fields-content').attr('data-callback-render');
var $sortable = panel.children('.cama_w_custom_fields');
function add_field(value){
var field = $field.clone(true);
if(field_data.multiple) {
field.prepend(field_actions);
if(field_counter == 0) field.children('.actions').find('.fa-times').remove();
}
if(!$field.find('.group-input-fields-content').hasClass('cama_skip_cf_rename_multiple')) {
field.find('input, textarea, select').each(function(){ $(this).attr('name', $(this).attr('name').replace('[]', '['+field_counter+']')) });
}
if(field_data.disabled){
field.find('input, textarea, select').prop('readonly', true).filter('select').click(function(){ return false; }).focus(function(){ $(this).blur(); });
field.find('.btn').addClass('disabled').unbind().click(function(){ return false; });
}
if (field_data.kind == 'checkbox') {
field.find('input')[0].checked = value;
} else if (value) {
field.find('.input-value').val(value).trigger('change', {field_rendered: true});
}
$sortable.append(field);
if(callback) eval(callback + "(field, value);");
field_counter ++;
}
if(field_data.kind != 'checkbox' && values.length <= 0) {
values = [field_data.default_value];
}
if(field_data.kind != 'checkboxes') {
if (!field_data.multiple && values.length > 1) values = [values[0]];
if (field_data.kind == 'checkbox') {
add_field(values[0]);
} else {
$.each(values, function (i, value) {
add_field(value);
});
}
} else add_field(values);
if(field_data.multiple){ // sortable actions
panel.find('.field_multiple_btn .btn').click(function () { add_field(field_data.default_value); return false; });
panel.delegate('.actions .fa-times', "click", function () { if(confirm(I18n("msg.delete_item"))) $(this).closest('.editor-custom-fields').remove(); return false; });
$sortable.sortable({ handle: ".fa-arrows", items: ' > .editor-custom-fields',
start: function (e, ui) { // fix tinymce
$(ui.item).find('.mce-panel').each(function () {
tinymce.execCommand('mceRemoveEditor', false, $(this).next().addClass('cama_restore_editor').attr('id'));
});
},
stop: function (e, ui) { // fix tinymce
$(ui.item).find('.cama_restore_editor').each(function () {
tinymce.execCommand('mceAddEditor', true, $(this).attr('id'));
});
}
});
}
}
function custom_field_colorpicker($field) {
if ($field) {
$field.find(".my-colorpicker").colorpicker();
}
}
function custom_field_colorpicker_val($field, value) {
if ($field) {
$field.find(".my-colorpicker").attr('data-color', value).colorpicker();
}
}
function custom_field_checkbox_val($field, values) {
if(values == "t") values = 1; // fix for values saved as true
if ($field) {
$field.find('input[value="' + values + '"]').prop('checked', true);
}
}
function custom_field_checkboxs_val($field, values) {
if ($field) {
var selector = values.map(function (value) {
return "input[value='" + value + "']"
}).join(',');
$field.find(selector).prop('checked', true);
}
}
function custom_field_date($field) {
if ($field) {
var box = $field.find(".date-input-box");
if (box.hasClass('is_datetimepicker')) {
box.datetimepicker({ format: 'YYYY-MM-DD HH:mm' });
} else {
box.datepicker();
}
}
}
function custom_field_editor($field) {
if ($field) {
var id = "t_" + Math.floor((Math.random() * 100000) + 1) + "_area";
var textarea = $field.find('textarea').attr('id', id);
if (textarea.hasClass('is_translate')) {
textarea.addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
var inputs = textarea.data("translation_inputs");
if (inputs) { // multiples languages
for (var lang in inputs) {
tinymce.init(cama_get_tinymce_settings({
selector: '#' + inputs[lang].attr("id"),
height: 120
}));
}
return;
}
}
tinymce.init(cama_get_tinymce_settings({
selector: '#' + id,
height: 120
}));
}
}
function custom_field_field_attrs_val($field, value) {
if ($field) {
value = value || '{}'
var data = typeof(value) == 'object' ? value : $.parseJSON(value);
$field.find('.input-attr').val(data.attr);
$field.find('.input-value').val(data.value)
$field.find('.input-attr, .input-value').filter('.is_translate').addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
}
}
function custom_field_radio_val($field, value) {
if ($field) {
$field.find('input').prop('checked', false);
$field.find("input[value='" + value + "']").prop('checked', true);
}
}
function custom_field_text_area($field) {
if ($field) {
if ($field.find('textarea').hasClass('is_translate')) {
$field.find('textarea').addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
}
}
}
function custom_field_text_box($field) {
if ($field) {
if ($field.find('input').hasClass('is_translate')) {
$field.find('input').addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
}
}
}
function load_upload_audio_field(thiss) {
var $input = $(thiss).prev();
$.fn.upload_filemanager({
formats: "audio",
selected: function (file, response) {
$input.val(file.url);
}
});
}
function load_upload_file_field(thiss) {
var $input = $(thiss).prev();
$.fn.upload_filemanager({
formats: $input.data("formats") ? $input.data("formats") : "",
selected: function (file, response) {
$input.val(file.url);
}
});
}
function load_upload_private_file_field(thiss) {
var $input = $(thiss).prev();
$.fn.upload_filemanager({
formats: $input.data("formats") ? $input.data("formats") : "",
selected: function (file, response) {
$input.val(file.url.split('?file=')[1].replace(/%2/g, '/'));
},
private: true
});
}
function load_upload_image_field($input) {
$.fn.upload_filemanager({
formats: "image",
dimension: $input.attr("data-dimension") || '',
versions: $input.attr("data-versions") || '',
thumb_size: $input.attr("data-thumb_size") || '',
selected: function (file, response) {
$input.val(file.url).trigger('change');
}
});
}
// permit to show preview image of image custom fields
function cama_custom_field_image_changed(field){
if(field.val()) field.closest('.input-group').append('
')
else field.closest('.input-group').find('.custom_field_image_preview').remove();
}
function load_upload_video_field(thiss) {
var $input = $(thiss).prev();
$.fn.upload_filemanager({
formats: "video",
selected: function (file, response) {
$input.val(file.url);
}
});
}