// Retrieve the initial data function temporary() { attributesArray.length = 0; $('.attributes').each(function() { var attributesData = {}, $selectType = $('.dataType').data().type; // Capture "attributes-body" within the input[type = "text"] val $(this).find('.attributes-body').find('input[type="text"]').each(function(i) { var $type = $(this).data().type; attributesData[$type] = $(this).val(); }); // Capture "attributes-body" within the input[type = "radio"] checked $(this).find('.attributes-body').find('input[type="radio"]').each(function(i) { var $type = $(this).data().type; attributesData[$type] = $(this).prop("checked"); }); // Capture "attributes-body" within the dataType selected $(this).find('.attributes-body').find('.dataType').children("option:selected").each(function () { attributesData[$selectType] = {}; attributesData[$selectType].index = $(this).index(); attributesData[$selectType].name = $(this).attr('ref'); if($(this).attr('ref') == 'typeB' || $(this).attr('ref') == 'typeE' || $(this).attr('ref') == 'typeF') { attributesData[$selectType].option = []; } }); // Capture "field-type" within the input[type = "text"] val $(this).find('.field-type').find('input[type="text"]').each(function(i) { var $type = $(this).data().type; if(!$type.match('option_lang')) { attributesData[$selectType][$type] = $(this).val(); } }); $(this).find('.field-type .add-target').find('.input-append').each(function() { var append = [] $(this).children('input[type="text"]').each(function() { var val = $(this).val(); append.push(val); }); attributesData[$selectType].option.push(append); }) // Capture "field-type" within the input[type = "checkbox"] checked $(this).find('.field-type').find('input[type="checkbox"]').each(function() { var $type = $(this).data().type; attributesData[$selectType][$type] = $(this).prop("checked"); }); // Capture "field-type" within the input[type = "radio"] checked $(this).find('.field-type').find('input[type="radio"]').each(function() { var $type = $(this).data().type; attributesData[$selectType][$type] = $(this).prop("checked"); }); // Capture "field-type" within the dataType selected $(this).find('.field-type').find('select').children("option:selected").each(function () { attributesData[$selectType].dateFormat = $(this).index(); }); attributesArray.push(attributesData); }); }; // Determine the Append input length function inputAppendLength() { $('.add-target').each(function(i) { if($(this).children('.input-append:not(:hidden)').length == 1 || $(this).children('.input-append').length == 1) { $(this).children('.input-append').each(function() { if($(this).children('div').hasClass('tab-content')) { var btnLength = $(this).children('.btn').length; $(this).find('.btn').eq(btnLength-2).addClass('last'); $(this).find('.remove-input').addClass('hide'); } else { var mediumLength = $(this).children('.input-medium').length; $(this).children('.input-medium').eq(mediumLength-1).addClass('last'); $(this).children('.remove-input').addClass('hide'); } }); } else { $(this).children('.input-append').each(function() { if($(this).children('div').hasClass('tab-content')) { $(this).find('.btn').removeClass('last'); $(this).find('.remove-input').removeClass('hide'); } else { $(this).children('.input-medium').removeClass('last'); $(this).children('.remove-input').removeClass('hide'); } }); } }); }; // Role Attribute Template Data function setData(l, type, ol) { var fields = $('#info').length ? "info[attribute_fields]" : $('#sub_role').length ? "sub_role[attribute_fields]" : "role[attribute_fields]", data = { _add_more: ["add_more_" +l, fields+"["+l+"]["+type+"][add_more]"], _calendar: ["calendar_" +l, fields+"["+l+"]["+type+"][calendar]"], _cross_lang: ["cross_lang_" +l, fields+"["+l+"]["+type+"][cross_lang]"], _disabled: ["disabled_" +l, fields+"["+l+"][disabled]"], _format: ["format_" +l, fields+"["+l+"]["+type+"][format]"], _initial: ["initial_" +l, fields+"["+l+"]["+type+"][initial]"], _is_range: ["is_range_" +l, fields+"["+l+"]["+type+"][is_range]"], _key: ["key_" +l, fields+"["+l+"][key]"], _markup: fields+"["+l+"][markup]", _option_list: ["option_list_"+l+"_"+ol, fields+"["+l+"]["+type+"][option_list]["+ol+"]", "option_list_"+ol], _placeholder: ["placeholder_" +l, fields+"["+l+"]["+type+"][placeholder]"], _title_translations: ["title_translations_" +l, fields+"["+l+"][title_translations]"], _to_delete: ["to_delete_" +l, fields+"["+l+"][to_delete]"], _to_search: ["to_search_" +l, fields+"["+l+"][to_search]"], _to_show: ["to_show_" +l, fields+"["+l+"][to_show]"], }; return data; } // Get Default Address Form function getAddressForm(trigger, element, decide) { if(decide) { addressVal.length = addressArray.length = 0; var addressAllVal = []; var inputNameArray = []; trigger.closest('.input-append').find('.tab-pane').each(function() { var adderssText = $(this).children('input[type="text"]').val(), addersshidden = '', addressData = {}, inputName = []; $(this).children('input:not(:first)').each(function(j) { var name = $(this).attr('name'), val = $(this).val(); addersshidden += val; addressData[name] = val; inputName.push(name); }); addressArray.push(addressData); addressAllVal.push(adderssText); inputNameArray.push(inputName); if(adderssText != addersshidden) { addressVal.push(false); } else { addressVal.push(true); } }); element.find('.tab-pane').each(function(i) { $(this).find('textarea, input[type="text"]').each(function(j) { $(this).attr('name',inputNameArray[i][j]); }); if(addressVal[i]) { $(this).find('textarea, input[type="text"]').each(function(j) { $(this).val(addressArray[i][$(this).attr('name')]); }); } else { $(this).find('textarea').val(addressAllVal[i]); $(this).find('input[type="text"]').each(function(j) { $(this).val(''); }); } }); }; element.off('show'); }; // Return Address Form function returnAddressForm(element, decide) { if(decide) { addressArray.length = 0; element.find('.tab-pane').each(function(i) { var addressData = {}; $(this).find('textarea, input[type="text"]').each(function(j) { var name = $(this).attr('name'), val = $(this).val(); addressData[name] = val; }); addressArray.push(addressData); }); $.map(addressInputId, function(n, i) { var v = ''; $('#'+n).find('input[type="hidden"]').each(function() { $(this).val(addressArray[i][$(this).attr('name')]); v += addressArray[i][$(this).attr('name')] }); $('#'+n).find('input[type="text"]').each(function() { $(this).val(v); }); }); }; returnDecide = false; }; $(function() { appendIndex = null; if($('#user-forms').length) { addressVal = []; addressArray = []; addressInputId = []; roleType = null; returnDecide = false; $('.attributes').each(function() { if($(this).find('.toggle-check').attr('value') == "true") { $(this).addClass('disabled').children('.attributes-body').hide(); } }); $('.returnDecide').on(clickEvent, function() { returnDecide = true; }) $('#address-field').on('hidden', function () { $('.btn[data-toggle="modal"]').removeClass('active').blur(); $(this).find('.nav-tabs > li').removeClass('active').eq(0).addClass('active'); $(this).find('.tab-content > .tab-pane').removeClass('active in').eq(0).addClass('active in'); $(this).on('show', getAddressForm(null, $(this), false)); returnAddressForm($(this), returnDecide) }); $('.control-group').delegate('.btn[data-toggle="modal"]', 'click', function() { var $trigger = $(this); addressInputId.length = 0; $(this).closest('.input-append').find('.tab-pane').each(function() { addressInputId.push($(this).attr('id')); }); $('#address-field').on('show', getAddressForm($trigger, $('#address-field'), true)); }); $('#user-forms').delegate('.togglebox, .delete, .trigger, .remove-input', clickEvent, function(event) { if($(this).hasClass('togglebox')) { if($(this).hasClass('disable')) { $(this).find('.toggle-check') .attr('value', 'false') .closest('.attributes') .removeClass('disabled') .children('.attributes-body') .fadeIn(300); } else { $(this).find('.toggle-check') .attr('value', 'true') .closest('.attributes') .addClass('disabled') .children('.attributes-body') .fadeOut(300); } $(this).toggleClass('disable'); }; if($(this).hasClass('remove-input')) { $(this).closest('.input-append').fadeOut(300, function() { $(this).remove(); inputAppendLength(); }); }; if($(this).hasClass('trigger')) { appendIndex = $(this).closest('.controls').find('.input-append').length; nameNumber = $(this).closest('.controls').find('.input-append:eq(0)').find('input').eq(0).attr('name'); nameNumber = nameNumber.match(/[^[\D\]]+(?=])/g)[0]; roleType = $(this).data('roles') if($(this).hasClass('textInput')) { $("#template-text").tmpl().appendTo($(this).closest('.controls').find('.add-target')); } else if ($(this).hasClass('textLengInput')) { $("#template-text-language").tmpl().appendTo($(this).closest('.controls').find('.add-target')); } else if ($(this).hasClass('address')) { $("#template-address").tmpl().appendTo($(this).closest('.controls').find('.add-target')); } inputAppendLength(); }; event.preventDefault(); }); inputAppendLength(); } else { attributesArray = []; attributesHeaderLength = null; templateType = null; attributeIndex = null; if($('.add-target').length) { inputAppendLength(); } if(!$('.attributes').length) { $('#attributes-area').addClass('clickHere'); } else { temporary(); }; $('.add-attributes').on(clickEvent, function() { if($('#attributes-area').hasClass('clickHere')) { $('#attributes-area').removeClass('clickHere'); }; attributesHeaderLength = $('.attributes:not(:hidden)').length+1; attributesLength = $('#attributes-area .attributes').length; $("#template-attributes").tmpl(setData(attributesLength, templateType, appendIndex)).appendTo( "#attributes-area" ); $('.toggle-check').togglebox(); }); $('.attributes.default').each(function(i) { $(this).children('.field-type').not('.default').hide(); $(this).find('input[type="text"]').on('keyup', function() { $(this).trigger("checking"); }); $(this).find('input[type="radio"], input[type="checkbox"], select').change(function() { $(this).trigger("checking"); }); $(this).delegate('input[type="text"], input[type="radio"], input[type="checkbox"], select', 'checking', function(e) { var e = e.target.type, $data = $(this).data().type; switch(e) { case 'text': var val = $(this).val(); if(!$(this).closest('.field-type').length) { $data = attributesArray[i][$data]; } else if(!$(this).closest('.add-target').length) { $data = attributesArray[i].select[$data]; } else { appendIndex = $(this).parent('.input-append').index() optionIndex = $(this).index() $data = attributesArray[i].select.option[appendIndex][optionIndex]; } if(val != $data) { $(this).closest('.attributes').find('.reply').removeClass('hide'); } break; case 'radio': var checked = $(this).prop("checked"); $data = attributesArray[i][$data]; if(checked != $data) { $(this).closest('.attributes').find('.reply').removeClass('hide'); } break; case 'checkbox': var checked = $(this).prop("checked"); $data = attributesArray[i].select[$data]; if(checked != $data) { $(this).closest('.attributes').find('.reply').removeClass('hide'); } break; case 'select-one': var ref, $data = attributesArray[i].select.name; $(this).children("option:selected").each(function() { ref = $(this).attr('ref'); }); if(ref != $data) { $(this).closest('.attributes').find('.reply').removeClass('hide'); } break; }; }); $(this).delegate('.reply', clickEvent, function() { var $bodyText = $(this).parent('.attributes-header').siblings('.attributes-body').find('input[type="text"]'), $bodyRadio = $(this).parent('.attributes-header').siblings('.attributes-body').find('input[type="radio"]'), $bodySelected = $(this).parent('.attributes-header').siblings('.attributes-body').find('.dataType').children("option"), $fieldTypeO = $(this).parent('.attributes-header').siblings('.field-type.default'), $fieldTypeN = $(this).parent('.attributes-header').siblings('.field-type').not('.default'); $bodyText.each(function() { var $type = $(this).data().type; $(this).val(attributesArray[i][$type]); }); $bodyRadio.each(function() { var $type = $(this).data().type; $(this).prop("checked", attributesArray[i][$type]) }); $fieldTypeO.find('input[type="text"]').each(function() { var $type = $(this).data().type; if(!$type.match('option_lang')) { $(this).val(attributesArray[i].select[$type]); } }); $fieldTypeO.find('.add-target').find('.input-append').each(function(k) { $(this).children('input[type="text"]').each(function(j) { $(this).val(attributesArray[i].select.option[k][j]); // var val = $(this).val(); // append.push(val); }); }) $fieldTypeO.find('input[type="checkbox"], input[type="radio"]').each(function() { var $type = $(this).data().type; $(this).prop("checked", attributesArray[i].select[$type]); }); $fieldTypeO.find('select').children("option").eq(attributesArray[i].select.dateFormat).prop('selected',true); $bodySelected.eq(attributesArray[i].select.index).prop('selected',true); $fieldTypeO.show(); $fieldTypeN.empty().hide(); $(this).addClass('hide') return false }) }); $('#attributes-area').delegate('.togglebox, .delete, .trigger, .remove-input', clickEvent, function(event) { if($(this).hasClass('togglebox')) { if($(this).hasClass('disable')) { $(this).find('.toggle-check') .attr('value', 'false') .closest('.attributes') .removeClass('disabled') .find('input, select') .removeAttr('disabled') .end('.attributes') .find('.btn-group .btn') .removeClass('disabled') .end().find('.attribute_field_disabled').attr('value', 'false'); if($(this).closest('.attributes').find('.dataType').children("option:selected").attr('ref')) { $(this).closest('.attributes').find('.field-type').addClass('in').find('.control-group').delay(150).fadeIn(300); } } else { $(this).find('.toggle-check') .attr('value', 'true') .closest('.attributes') .addClass('disabled') .find('.attributes-body input, .attributes-body select') .attr({'disabled': 'disabled'}) .end('.attributes') .find('.btn-group .btn') .addClass('disabled') .end().find('.attribute_field_disabled').attr('value', 'true') .end().find('.field-type .control-group').fadeOut(300, function() { $(this).parent('.field-type').removeClass('in'); }); } $(this).toggleClass('disable'); }; if($(this).hasClass('delete')) { $(this).closest('.attributes').fadeOut(300, function() { $('.attributes:not(:hidden)').each(function(i) { $(this).find('.attributes-header h4 span').text(i+1); }); attributesHeaderLength = $('.attributes:not(:hidden)').length+1; if(!$('.attributes:not(:hidden)').length) { $('#attributes-area').addClass('clickHere'); }; }).find('.attribute_field_to_delete').attr('value', 'true');; }; if($(this).hasClass('trigger')) { // appendIndex = $(this).closest('.controls').find('.input-append').length; appendIndex = $(this).closest('.controls').find('.input-append:last-child').children('input:first-child').attr('name'); // appendIndex = appendIndex.split("]["); // appendIndex = parseInt(appendIndex[appendIndex.length-2])+1; appendIndex = parseInt(appendIndex.match(/[^[\D\]]+(?=])/g)[1])+1; console.log(appendIndex) attributeIndex = $(this).closest('.attributes').index(); templateType = $(this).closest('.attributes').find('.dataType').children("option:selected").attr('ref'); $("#template-input-append").tmpl(setData(attributeIndex, templateType, appendIndex)).appendTo($(this).closest('.controls').find('.add-target')); inputAppendLength(); }; if($(this).hasClass('remove-input')) { $(this).parent('.input-append').fadeOut(300, function() { $(this).remove() inputAppendLength(); }); } event.preventDefault(); }); $('#attributes-area').delegate('.dataType', 'change', function() { $(this).children("option:selected").each(function () { var target = $(this).closest('.attributes').find('.field-type').not('.default'); attributeIndex = $(this).closest('.attributes').index(); appendIndex = 0 // $(this).closest('.attributes').find('.add-target').find('.input-append').length; if($(this).closest('.attributes').hasClass('default')){ var i = $(this).closest('.attributes').index() if($(this).attr('ref') == attributesArray[i].select.name) { $(this).closest('.attributes').find('.field-type.default').show() target.empty().hide(); } else { $(this).closest('.attributes').find('.field-type.default').hide() if($(this).attr('ref')) { templateType = $(this).attr('ref'); target.removeAttr('class').addClass('field-type fade in ' + templateType).empty(); $("#template-type").tmpl(setData(attributeIndex, templateType, appendIndex)).appendTo(target); if(templateType == 'typeB' || templateType == 'typeE' || templateType == 'typeF') { inputAppendLength(); } } else { target.removeAttr('class').addClass('field-type fade') target.empty(); }; target.show(); } } else { if($(this).attr('ref')) { templateType = $(this).attr('ref'); target.removeAttr('class').addClass('field-type fade in ' + templateType).empty(); $("#template-type").tmpl(setData(attributeIndex, templateType, appendIndex)).appendTo(target); if(templateType == 'typeB' || templateType == 'typeE' || templateType == 'typeF') { inputAppendLength(); } } else { target.removeAttr('class').addClass('field-type fade') target.empty(); }; } }); }); } });