Last active
August 29, 2015 14:02
-
-
Save philayres/9219aed29ef2651fa2bd to your computer and use it in GitHub Desktop.
Alpaca form submit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is how I'm creating the alpaca form | |
_re = {}; | |
_re.utils = { | |
form_auth_token: function(){ | |
var autht = $('meta[name="csrf-token"]').attr('content'); | |
var authh ='<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="'+autht+'"></div>'; | |
return authh; | |
} | |
}; | |
_re.form = function(data){ | |
this.data; | |
this.form_url = '/someurl'; | |
return this; | |
}; | |
_re.form.prototype = { | |
show_form: function(){ | |
var self = this; | |
var rendered_form; | |
var data = self.data; | |
formEl.alpaca({ | |
postRender: function(rendered) { | |
formEl.append(_re.utils.form_auth_token()); | |
rendered_form = rendered; | |
self.rendered_form = rendered_form; | |
self.default_form_rendered(formEl, options, self, rendered_form, view); | |
}, | |
schema: data.definition.schema, | |
options: data.definition.options, | |
data: data.data, | |
ui: "bootstrap", | |
}); | |
} | |
default_form_rendered: function(formEl, options, self, rendered_form, view){ | |
formEl.find('form').on( "submit", function( event ) { | |
event.preventDefault(); | |
if(!(options && options.prevent_submit)) | |
self.form_submitted(rendered_form); | |
}); | |
$(document).on('keydown','input, select, checkbox', function(e){ | |
if(e.keyCode === 13) | |
e.preventDefault(); | |
}); | |
$(document).on('keydown', '.prevent-change', function(ev){ | |
if(ev.keyCode !== 9) | |
ev.preventDefault(); | |
}); | |
var row = $('.readonly-wizard'); | |
var formElHolder; | |
var revdir = false; | |
if(this.current_view === 'wizard') | |
formElHolder = $('<div class="button-holder"></div>').appendTo(formEl); | |
else{ | |
formElHolder = $('.alpaca-form-buttons-container'); | |
revdir = true; | |
} | |
if(formElHolder.length === 0){ | |
revdir = false; | |
formElHolder = formEl; | |
} | |
_re.utils.view_transpose_data(); | |
$('button:not(.close), input[type="submit"]').addClass('btn btn-default'); | |
$('.alpaca-wizard-nav-bar button').click(function(){ | |
_re.utils.scrollTop(); | |
}); | |
}, | |
form_submitted: function(){ | |
var self = this; | |
var rendered_form = self.rendered_form; | |
var s = { | |
_method: 'PUT', | |
data: rendered_form.getValue(), | |
form:{ | |
id: 'some id' | |
} | |
}; | |
rendered_form.form.validate(true); | |
// draw the validation state (top control + all children) | |
rendered_form.form.renderValidationState(true); | |
// now display something | |
$(self.form).find('.re-form-validation-error').remove(); | |
if(rendered_form.form.isFormValid()){ | |
self.pre_send_data_massage(s, self.form_data); | |
// Prevent jQuery mangling non-string fields | |
s.data = JSON.stringify(s.data); | |
if(s.sign) s.sign = JSON.stringify(s.sign); | |
_re.utils.submitting_form(self.form); | |
$.ajax({url: self.form_url, data: s, type: 'post'}).done(function(resdata){ | |
_re.utils.done_submitting_form(self.form); | |
// do something here | |
}).fail(function(){ | |
self.form_not_saved(); | |
}); | |
} | |
else | |
{ | |
self.form.append('<div class="re-form-validation-error alert alert-danger">Check the entries on the form and try again.</div>'); | |
$.scrollTo('.re-form-validation-error', {offset: -400}); | |
_re.view.reset_submit_buttons(self.form); | |
return false; | |
} | |
}, | |
pre_send_data_massage: function(form_data, data){ | |
var dd = data.definition.schema.properties; | |
var field_options = data.definition.options.fields; | |
this.massage_nested_fields(form_data.data, field_options, dd); | |
}, | |
massage_nested_fields: function(field_data, field_options, dd){ | |
for(var fi in dd){ | |
if(dd.hasOwnProperty(fi)){ | |
var f = dd[fi]; | |
if(field_data[fi] || field_data[fi]===''){ // Fields may be 'missing' due to dependencies hiding them | |
if(f.type === 'object' && field_options[fi]){ // Drill down | |
this.massage_nested_fields(field_data[fi], field_options[fi].fields, f.properties); | |
} | |
else if(f.type === 'boolean'){ // Fix up required booleans | |
field_data[fi] = !!field_data[fi]; | |
} | |
else if(f.format === 'date'){ // Set dates to null if they are blank | |
if(field_data[fi]==='') | |
field_data[fi] = null; | |
} | |
} | |
} | |
} | |
}, | |
save_result: function(form_id, resdata){ | |
if(resdata && resdata.updated_with && resdata.updated_with.id === form_id){ | |
this.form_saved(form_id, resdata); | |
}else{ | |
this.form_not_saved(form_id, resdata); | |
} | |
}, | |
form_saved: function(form_id, resdata){ | |
_re.result_handler(resdata, this); | |
}, | |
form_not_saved: function(form_id, resdata){ | |
var failure_reason = 'Try again.'; | |
var failure_detail = ''; | |
if(resdata && resdata.failure_reason) | |
failure_reason = resdata.failure_reason; | |
if(resdata && resdata.failure_detail) | |
failure_detail = resdata.failure_detail; | |
alert("Form not saved. " +failure_reason ); | |
} | |
}; | |
form = new _re.form(data); | |
form.show_form(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment