form_configurable.js.coffee 3.2KB

    $ -> getFormData = (elem) -> form_data = $("#edit_agent, #new_agent").serializeObject() attribute = $(elem).data('attribute') form_data['attribute'] = attribute delete form_data['_method'] form_data window.initializeFormCompletable = -> returnedResults = {} completableDefaultOptions = (input) -> results: [ (returnedResults[$(input).data('attribute')] || {text: 'Options', children: [{id: undefined, text: 'loading ...'}]}), { text: 'Current', children: [id: $(input).val(), text: $(input).val()] }, { text: 'Custom', children: [id: 'manualInput', text: 'manual input'] }, ] $("input[role~=validatable], select[role~=validatable]").on 'change', (e) => form_data = getFormData(e.currentTarget) form_group = $(e.currentTarget).closest('.form-group') $.ajax '/agents/validate', type: 'POST', data: form_data success: (data) -> form_group.addClass('has-feedback').removeClass('has-error') form_group.find('span').addClass('hidden') form_group.find('.glyphicon-ok').removeClass('hidden') returnedResults = {} error: (data) -> form_group.addClass('has-feedback').addClass('has-error') form_group.find('span').addClass('hidden') form_group.find('.glyphicon-remove').removeClass('hidden') returnedResults = {} $("input[role~=validatable], select[role~=validatable]").trigger('change') $.each $("input[role~=completable]"), (i, input) -> $(input).select2( data: -> completableDefaultOptions(input) ).on("change", (e) -> if e.added && e.added.id == 'manualInput' $(e.currentTarget).select2("destroy") $(e.currentTarget).val(e.removed.id) ) updateDropdownData = (form_data, element, data) -> returnedResults[form_data.attribute] = {text: 'Options', children: data} $(element).trigger('change') $("input[role~=completable]").off 'select2-opening', select2OpeningCallback $(element).select2('open') $("input[role~=completable]").on 'select2-opening', select2OpeningCallback select2OpeningCallback = (e) -> form_data = getFormData(e.currentTarget) delete returnedResults[form_data.attribute] if returnedResults[form_data.attribute] && !$(e.currentTarget).data('cacheResponse') return if returnedResults[form_data.attribute] $.ajax '/agents/complete', type: 'POST', data: form_data success: (data) -> updateDropdownData(form_data, e.currentTarget, data) error: (data) -> updateDropdownData(form_data, e.currentTarget, [{id: undefined, text: 'Error loading data.'}]) $("input[role~=completable]").on 'select2-opening', select2OpeningCallback $("input[type=radio][role~=form-configurable]").change (e) -> input = $(e.currentTarget).parents().siblings("input[data-attribute=#{$(e.currentTarget).data('attribute')}]") if $(e.currentTarget).val() == 'manual' input.removeClass('hidden') else input.val($(e.currentTarget).val()) input.addClass('hidden')