summaryrefslogtreecommitdiff
path: root/public/assets/js/vendor/view/formview.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2015-09-23 19:58:17 -0400
committerJules Laplace <jules@okfoc.us>2015-09-23 19:58:17 -0400
commite273c92281e10c81f0605a0bf876d9a14bbe24d1 (patch)
tree9a9d3820081c603545c59250402129a96255a0e7 /public/assets/js/vendor/view/formview.js
parent695417f6b029b3c5f752cc9cfff6223b201d476a (diff)
keydown
Diffstat (limited to 'public/assets/js/vendor/view/formview.js')
-rw-r--r--public/assets/js/vendor/view/formview.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/public/assets/js/vendor/view/formview.js b/public/assets/js/vendor/view/formview.js
new file mode 100644
index 0000000..05b1ecb
--- /dev/null
+++ b/public/assets/js/vendor/view/formview.js
@@ -0,0 +1,146 @@
+var FormView = View.extend({
+
+ method: "post",
+ useMinotaur: false,
+
+ events: {
+ "submit form": "save"
+ },
+
+ initialize: function(opt){
+ if (opt && opt.parent) {
+ this.parent = opt.parent
+ }
+ this.$form = this.$("form")
+ this.$errors = this.$(".errors")
+ this.$errorList = this.$(".errorList")
+ },
+
+ reset: function(){
+ this.$("input,textarea").not("[type='submit']").not("[type='hidden']").val("")
+ },
+
+ showErrors: function(errors){
+ if (errors && errors.length) {
+ this.$errorList.empty();
+ for (var i in errors) {
+ this.$errorList.append('<div>' + errors[i] + '</div>');
+ }
+ this.$errors.css("opacity", 1.0);
+ setTimeout(function(){
+ this.$errors.show().css("opacity", 1.0);
+ }.bind(this), 200)
+ }
+ },
+
+ serialize: function(){
+ var fd = new FormData(), hasCSRF = false
+
+ this.$("input[name], select[name], textarea[name]").each( function(){
+ if (this.type == "file") {
+ if (this.files.length > 0) {
+ fd.append(this.name, this.files[0]);
+ }
+ }
+ else if (this.type == "password") {
+ if (this.value.length > 0) {
+ fd.append(this.name, SHA1.hex('bucky$' + this.value + '$bucky'))
+ }
+ }
+ else {
+ fd.append(this.name, this.value);
+ hasCSRF = hasCSRF || this.name == "_csrf"
+ }
+ });
+
+// if (! hasCSRF) {
+// fd.append("_csrf", $("[name=_csrf]").attr("value"))
+// }
+//
+ return fd
+ },
+
+ save: function(e, successCallback, errorCallback){
+ e && e.preventDefault()
+
+ this.$errors.hide().css("opacity", 0.0);
+
+ if (this.validate) {
+ var errors = this.validate()
+ if (errors && errors.length) {
+ if (errorCallback) {
+ errorCallback(errors)
+ }
+ else {
+ this.showErrors(errors)
+ }
+ return
+ }
+ }
+
+ var action = typeof this.action == "function" ? this.action() : this.action
+ if (! action) return
+
+ var request = $.ajax({
+ url: action,
+ type: this.method,
+ data: this.serialize(),
+ headers: { "csrf-token": $("[name=_csrf]").attr("value") },
+ dataType: "json",
+ processData: false,
+ contentType: false,
+ success: function(response){
+
+ if (response.error) {
+ var errors = []
+ for (var key in response.error.errors) {
+ errors.push(response.error.errors[key].message);
+ }
+ if (errorCallback) {
+ errorCallback(errors)
+ }
+ else {
+ this.showErrors(errors)
+ }
+ return
+ }
+ else {
+ if (successCallback) {
+ successCallback(response)
+ }
+ if (this.success) {
+ this.success(response)
+ }
+ }
+
+
+ }.bind(this),
+ error: function(response){
+ }.bind(this),
+ complete: function(response){
+ if (this.useMinotaur) {
+ Minotaur.hide()
+ }
+ }.bind(this),
+ })
+
+ if (this.useMinotaur) {
+ Minotaur.show()
+ }
+
+ },
+
+})
+
+/*
+
+var ModalFormView = ModalView.extend(FormView.prototype).extend({
+
+ load: function(){
+ this.reset()
+ this.show()
+ }
+
+})
+
+*/ \ No newline at end of file