form_configurable.js.coffee 2.5KB

    $ -> $.fn.serializeObject = -> o = {} a = @serializeArray() $.each a, -> if o[@name] isnt `undefined` o[@name] = [o[@name]] unless o[@name].push o[@name].push @value or "" else o[@name] = @value or "" return o 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: '', 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') error: (data) -> form_group.addClass('has-feedback').addClass('has-error') form_group.find('span').addClass('hidden') form_group.find('.glyphicon-remove').removeClass('hidden') $("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) ) $("input[role~=completable]").on 'select2-open', (e) -> form_data = getFormData(e.currentTarget) return if returnedResults[form_data.attribute] $.ajax '/agents/complete', type: 'POST', data: form_data success: (data) -> console.log data returnedResults[form_data.attribute] = {text: 'Options', children: $.map(data, (d) -> {id: d.value, text: d.name})} $(e.currentTarget).trigger('change') $(e.currentTarget).select2('open')