|
var forms = require('forms') |
|
, fields = forms.fields |
|
, widgets = forms.widgets |
|
, validators = forms.validators |
|
; |
|
|
|
var form = forms.create( |
|
{ |
|
username: fields.string({ |
|
required: true |
|
, widget: widgets.text({ classes: ['input-with-feedback','form-control'] }) |
|
, errorAfterField:true |
|
, cssClasses: { |
|
label: ['control-label'] |
|
} |
|
}) |
|
, password: fields.password({ |
|
required: validators.required('You definitely want a password') |
|
, widget: widgets.password({ classes: ['input-with-feedback','form-control'] }) |
|
, errorAfterField:true |
|
, cssClasses: { |
|
label: ['control-label'] |
|
} |
|
}) |
|
, confirm: fields.password({ |
|
required: validators.required('don\'t you know your own password?') |
|
, validators: [validators.matchField('password')] |
|
, widget: widgets.password({ classes: ['input-with-feedback','form-control'] }) |
|
, errorAfterField:true |
|
, cssClasses: { |
|
label: ['control-label'] |
|
} |
|
}) |
|
, email: fields.email({ |
|
widget: widgets.email({ classes: ['input-with-feedback','form-control'] }) |
|
, errorAfterField:true |
|
, cssClasses: { |
|
label: ['control-label'] |
|
} |
|
}) |
|
} |
|
, { |
|
validatePastFirstError:true |
|
} |
|
); |
|
|
|
var formatFieldForBootstrap = function (name, object) { |
|
var label = object.labelHTML(name); |
|
var error = object.error ? '<div class="alert alert-danger">' + object.error + '</div>' : ''; |
|
var widget = object.widget.toHTML(name, object); |
|
return '<div class="form-group has-feedback">' + label + widget + error + '</div>'; |
|
}; |
|
|
|
// handles form submit, and redirects to appropriate url when submit is successful |
|
var handle_form = function(render,template){ |
|
|
|
return function(req,res,next){ |
|
form.handle(req,{ |
|
success: function (form) { |
|
req.flash('success','Thank you for your submission! We will get back in touch shortly'); |
|
res.redirect('/'); |
|
} |
|
, error: function (form){ |
|
var field,err; |
|
for(field in form.fields){ |
|
err = form.fields[field].error; |
|
if(err){ |
|
req.flash('errors','there are errors in your <a href="#Form" class="alert-link">form submission</a>. Please review it and submit again'); |
|
break; |
|
} |
|
} |
|
render(req,res,form,template); |
|
} |
|
, empty: function (form) { |
|
req.flash('errors',{name:'form',text:'form cannot be empty!'}); |
|
render(req,res,form,template); |
|
} |
|
}); |
|
}; |
|
}; |
|
|
|
//handle ajax submission; returns a json object with errors if there are any |
|
var handle_form_ajax = function(){ |
|
|
|
return function(req,res,next){ |
|
form.handle(req,{ |
|
success: function (form) { |
|
res.send({valid:true,errors:false}); |
|
} |
|
, error: function (form){ |
|
var field,err,errors=[]; |
|
for(field in form.fields){ |
|
err = form.fields[field].error; |
|
if(err){ |
|
errors.push({name:field, text:err, valid:false}); |
|
}else{ |
|
errors.push({name:field,valid:true}); |
|
} |
|
} |
|
res.send({valid:false,errors:errors}); |
|
} |
|
, empty: function (form) { |
|
res.send({valid:false,errors:[{field:false,text:'form cannot be empty'}]}); |
|
} |
|
}); |
|
}; |
|
|
|
}; |
|
|
|
module.exports = { |
|
form:form |
|
, formatFieldForBootstrap:formatFieldForBootstrap |
|
, handle:handle_form |
|
, handle_ajax:handle_form_ajax |
|
}; |