summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2015-11-12 00:14:04 -0500
committerJules Laplace <jules@okfoc.us>2015-11-12 00:24:41 -0500
commite474ead4fde530b1cb52f96e827269371120cb89 (patch)
treeaced17c219763f6839f6bb5bd916ce1a1477ffa6
parente8a2441a1d53648906904d0e7e048502c2eca6e0 (diff)
form serialization class
-rw-r--r--StoneIsland/www/css/index.css5
-rw-r--r--StoneIsland/www/index.html18
-rw-r--r--StoneIsland/www/js/lib/_router.js3
-rw-r--r--StoneIsland/www/js/lib/account/LoginView.js18
-rw-r--r--StoneIsland/www/js/lib/account/SignupView.js12
-rw-r--r--StoneIsland/www/js/lib/cart/CartConfirm.js5
-rw-r--r--StoneIsland/www/js/lib/cart/CartSummary.js3
-rw-r--r--StoneIsland/www/js/lib/nav/AddressView.js8
-rw-r--r--StoneIsland/www/js/lib/nav/FooterView.js4
-rw-r--r--StoneIsland/www/js/vendor/view/serializable.js63
10 files changed, 107 insertions, 32 deletions
diff --git a/StoneIsland/www/css/index.css b/StoneIsland/www/css/index.css
index 0988d8a4..9de286c1 100644
--- a/StoneIsland/www/css/index.css
+++ b/StoneIsland/www/css/index.css
@@ -50,3 +50,8 @@ body {
position: absolute;
width: 100%;
}
+
+.error_hilite {
+ color: red;
+ border-color: red;
+}
diff --git a/StoneIsland/www/index.html b/StoneIsland/www/index.html
index 60a877a2..39946c98 100644
--- a/StoneIsland/www/index.html
+++ b/StoneIsland/www/index.html
@@ -456,6 +456,15 @@
<script src="js/vendor/view/scrollable.js"></script>
<script src="js/vendor/view/serializable.js"></script>
+<script src="js/sdk/_sdk.js"></script>
+<script src="js/sdk/account.js"></script>
+<script src="js/sdk/address.js"></script>
+<script src="js/sdk/auth.js"></script>
+<script src="js/sdk/cart.js"></script>
+<script src="js/sdk/payment.js"></script>
+<script src="js/sdk/product.js"></script>
+<script src="js/sdk/shipping.js"></script>
+
<script src="js/lib/cart/CartView.js"></script>
<script src="js/lib/cart/CartPayment.js"></script>
<script src="js/lib/cart/CartShipping.js"></script>
@@ -493,14 +502,5 @@
<script src="js/lib/_router.js"></script>
-<script src="js/sdk/_sdk.js"></script>
-<script src="js/sdk/account.js"></script>
-<script src="js/sdk/address.js"></script>
-<script src="js/sdk/auth.js"></script>
-<script src="js/sdk/cart.js"></script>
-<script src="js/sdk/payment.js"></script>
-<script src="js/sdk/product.js"></script>
-<script src="js/sdk/shipping.js"></script>
-
<script src="js/index.js"></script>
</html>
diff --git a/StoneIsland/www/js/lib/_router.js b/StoneIsland/www/js/lib/_router.js
index d010abef..8742ce44 100644
--- a/StoneIsland/www/js/lib/_router.js
+++ b/StoneIsland/www/js/lib/_router.js
@@ -33,10 +33,11 @@ var SiteRouter = Router.extend({
},
initialize: function(){
+ console.log("HI!")
var fn
for (var route in this.routes) {
fn = this.routes[route]
- if (! fn in this) {
+ if (! this[fn]) {
this[fn] = this.default_view(fn)
}
}
diff --git a/StoneIsland/www/js/lib/account/LoginView.js b/StoneIsland/www/js/lib/account/LoginView.js
index 334c58b2..f1ad3de8 100644
--- a/StoneIsland/www/js/lib/account/LoginView.js
+++ b/StoneIsland/www/js/lib/account/LoginView.js
@@ -2,6 +2,8 @@ var LoginView = SerializableView.extend({
el: "#login",
+ action: sdk.account.login,
+
events: {
"click .newuser": "newuser",
"submit form": "save",
@@ -23,17 +25,9 @@ var LoginView = SerializableView.extend({
app.router.go("account/signup")
},
- save: function(e){
- e && e.preventDefault()
-
- var data = this.serialize()
-
- sdk.account.login({ data: data }).done(function(data){
- console.log("LOGIN SUCCESS", data)
- }).fail(function(data){
- console.log("LOGIN FAIL", data)
- })
-
+ validate_presence: {
+ "Email": "Please enter a valid email address.",
+ "Password": "Please enter your password.",
},
-
+
})
diff --git a/StoneIsland/www/js/lib/account/SignupView.js b/StoneIsland/www/js/lib/account/SignupView.js
index d8459f9b..e695e26f 100644
--- a/StoneIsland/www/js/lib/account/SignupView.js
+++ b/StoneIsland/www/js/lib/account/SignupView.js
@@ -18,6 +18,18 @@ var SignupView = SerializableView.extend({
document.body.className = "signup"
},
+ validate: function(data){
+ var errors = []
+ if (! data.Name) { errors.push("Please enter your first name.") }
+ if (! data.Surname) { errors.push("Please enter your last name.") }
+ if (! data.Email) { errors.push("Please enter a valid email address.") }
+ if (! data.Password) { errors.push("Please enter your password.") }
+ if (! data.Password2) { errors.push("Please enter your password again.") }
+ if (data.Password !== data.Password2) { errors.push("Passwords don't match.") }
+ if (! data.DataProfiling) { errors.push("You must agree to share your data.") }
+ return errors
+ },
+
save: function(e){
e && e.preventDefault()
},
diff --git a/StoneIsland/www/js/lib/cart/CartConfirm.js b/StoneIsland/www/js/lib/cart/CartConfirm.js
index 8e629e57..0ce94f22 100644
--- a/StoneIsland/www/js/lib/cart/CartConfirm.js
+++ b/StoneIsland/www/js/lib/cart/CartConfirm.js
@@ -13,7 +13,10 @@ var CartConfirm = View.extend({
app.cart.el.className = "confirm"
app.footer.show("PLACE ORDER", "CANCEL")
},
-
+
+ populate: function(){
+ },
+
save: function(){
},
diff --git a/StoneIsland/www/js/lib/cart/CartSummary.js b/StoneIsland/www/js/lib/cart/CartSummary.js
index 2f2da664..d91b801f 100644
--- a/StoneIsland/www/js/lib/cart/CartSummary.js
+++ b/StoneIsland/www/js/lib/cart/CartSummary.js
@@ -13,6 +13,9 @@ var CartSummary = View.extend({
app.cart.el.className = "summary"
app.footer.show("SHIPPING &gt;", "CANCEL")
},
+
+ populate: function(){
+ },
ok: function(){
},
diff --git a/StoneIsland/www/js/lib/nav/AddressView.js b/StoneIsland/www/js/lib/nav/AddressView.js
index 4ccc263c..fd482378 100644
--- a/StoneIsland/www/js/lib/nav/AddressView.js
+++ b/StoneIsland/www/js/lib/nav/AddressView.js
@@ -1,5 +1,5 @@
-var AddressView = View.extend({
+var AddressView = SerializableView.extend({
template: $("#address_template").html(),
@@ -8,7 +8,9 @@ var AddressView = View.extend({
initialize: function(opt){
this.parent = opt.parent
- this.parent.$(".address").html(this.template)
+ this.$el = this.parent.$(".address")
+ this.el = this.$el[0]
+ this.$el.html(this.template)
},
populate: function(data){
@@ -21,7 +23,7 @@ var AddressView = View.extend({
deserialize: function(){
},
- serialize: function(){
+ validate: function(){
},
})
diff --git a/StoneIsland/www/js/lib/nav/FooterView.js b/StoneIsland/www/js/lib/nav/FooterView.js
index 7f404581..74b249e6 100644
--- a/StoneIsland/www/js/lib/nav/FooterView.js
+++ b/StoneIsland/www/js/lib/nav/FooterView.js
@@ -30,11 +30,11 @@ var FooterView = View.extend({
},
ok: function(){
- (app.view.save || app.view.ok)()
+ (app.view.save || app.view.ok).bind(app.view)()
},
cancel: function(){
- (app.view.cancel || app.intro.show)()
+ app.view.cancel ? app.view.cancel() : app.intro.show()
},
}) \ No newline at end of file
diff --git a/StoneIsland/www/js/vendor/view/serializable.js b/StoneIsland/www/js/vendor/view/serializable.js
index 91d84997..4ad5558f 100644
--- a/StoneIsland/www/js/vendor/view/serializable.js
+++ b/StoneIsland/www/js/vendor/view/serializable.js
@@ -1,13 +1,68 @@
var SerializableView = View.extend({
serialize: function(){
- var fd = new FormData(), hasCSRF = false
-
+ var fields = {}
this.$("input[name], select[name], textarea[name]").each( function(){
- fd.append(this.name, this.value)
+ fields[this.name] = this.value
+ })
+ return fields
+ },
+
+ deserialize: function(data){
+ this.$("input[name], textarea[name]").val("")
+ Object.keys(data).forEach(function(k){
+ this.$("[" + k + "]").val(data[k])
+ })
+ },
+
+ validate: function(data){
+ var errors = []
+ var presence_msgs = this.validate_presence
+ Object.keys(presence_msgs).forEach(function(k){
+ if (! data[k]) errors.push( [ k, presence_msgs[k] ] )
})
+ return errors.length ? errors : null
+ },
+
+ show_errors: function(errors){
+ var msgs = []
+ errors.forEach(function(e){
+ this.$("[name=" + e[0] + "]").addClass('error_hilite')
+ msgs.push(e[1])
+ }.bind(this))
+ this.$msg.html(msgs.join("<br>"))
+ },
+
+ hide_errors: function(){
+ this.$msg.html("")
+ },
+
+ save: function(e){
+ e && e.preventDefault()
+
+ var data = this.serialize()
+ var errors = this.validate(data)
+ if (errors) {
+ this.show_errors(errors)
+ return
+ }
+ else {
+ this.hide_errors()
+ }
- return fd
+ this.action({
+ data: data,
+ success: this.success.bind(this),
+ error: this.error.bind(this),
+ })
},
+ success: function(data){
+ console.log("SUCCESS", data)
+ },
+
+ error: function(data){
+ console.log("FAIL", data)
+ },
+
}) \ No newline at end of file