validation of URL fields
authorScott Baker <smbaker@gmail.com>
Wed, 26 Nov 2014 08:53:19 +0000 (00:53 -0800)
committerScott Baker <smbaker@gmail.com>
Wed, 26 Nov 2014 08:53:19 +0000 (00:53 -0800)
planetstack/core/models/plcorebase.py
planetstack/core/xoslib/static/js/xoslib/xos-util.js
planetstack/core/xoslib/static/js/xoslib/xosHelper.js

index dee8a87..3bceb08 100644 (file)
@@ -94,6 +94,8 @@ class DiffModelMixIn:
             l = []
             if field.blank==False:
                 l.append("notBlank")
+            if field.__class__.__name__=="URLField":
+                l.append("url")
             validators[field.name] = l
         return validators
 
@@ -144,6 +146,8 @@ class PlCoreBase(models.Model): # , DiffModelMixIn):
             l = []
             if field.blank==False:
                 l.append("notBlank")
+            if field.__class__.__name__=="URLField":
+                l.append("url")
             validators[field.name] = l
         return validators
 
index bebc44a..d03ab14 100644 (file)
@@ -23,13 +23,19 @@ function limitTableRows(tableSelector, maxRows) {
 }
 
 function validateField(validatorName, value) {
+    if (validatorName=="notBlank") {
+        if ((value==undefined) || (value=="")) {
+            return "can not be blank";
+        }
+    }
+
+    // if notBlank wasn't set, and the field is blank, then we can return
+    if ((value==undefined) || (value=="")) {
+        return true;
+    }
+
     switch (validatorName) {
-        case "notBlank":
-            if ((value==undefined) || (value=="")) {
-                return "can not be blank";
-            }
-            break;
-        case "isUrl":
+        case "url":
             if (! /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value)) {
                 return "must be a valid url";
             }
index 30835c7..dc66e45 100644 (file)
@@ -369,12 +369,13 @@ XOSDetailView = Marionette.ItemView.extend({
               },\r
 \r
             onFormDataInvalid: function(errors) {\r
+                this.$el.find(".help-inline").remove();\r
                 var self=this;\r
                 var markErrors = function(value, key) {\r
                     console.log("name='" + key + "'");\r
                     var $inputElement = self.$el.find("[name='" + key + "']");\r
                     var $inputContainer = $inputElement.parent();\r
-                    $inputContainer.find(".help-inline").remove();\r
+                    //$inputContainer.find(".help-inline").remove();\r
                     var $errorEl = $("<span>", {class: "help-inline error", text: value});\r
                     $inputContainer.append($errorEl).addClass("error");\r
                 }\r