Hi,

Please find attached patch for numeric and integer control with optionally
null value support.

Usage:

1] Integer

id: 'fillfactor', label: '{{ _('Fill factor') }}', deps: ['index'],
type: 'int', group: '{{ _('Definition') }}', allowNull: true,


2] Numeric

id: 'fillfactor', label: '{{ _('Fill factor') }}', deps: ['index'],
type: 'numeric', group: '{{ _('Definition') }}', allowNull: true,






-- 
*Harshal Dhumal*
*Software Engineer *



EenterpriseDB <http://www.enterprisedb.com>

On Fri, Mar 4, 2016 at 10:55 AM, Harshal Dhumal <
harshal.dhu...@enterprisedb.com> wrote:

> Hi,
>
>
> Please find attached patch for numeric control with optionally allow null
> values
>
> Null values: undefined/empty string/null
> By default numeric control value can not be null. Use flag *allowNull:
> true* to allow null values.
>
> Usage:
>
> id: 'fillfactor', label: '{{ _('Fill factor') }}', deps: ['index'],
> type: 'numeric', group: '{{ _('Definition') }}', allowNull: true,
>
>
>
> --
> *Harshal Dhumal*
> *Software Engineer *
>
>
>
> EenterpriseDB <http://www.enterprisedb.com>
>
diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js
index 4346156..7497f4f 100644
--- a/web/pgadmin/static/js/backform.pgadmin.js
+++ b/web/pgadmin/static/js/backform.pgadmin.js
@@ -1240,51 +1240,56 @@
     checkInt: function(e) {
       var field = _.defaults(this.field.toJSON(), this.defaults),
           attrArr = this.field.get("name").split('.'),
+          allowNull = this.field.get("allowNull"),
           name = attrArr.shift(),
           value = this.getValueFromDOM(),
           min_value = field.min,
           max_value = field.max,
           isValid = true,
-          intPattern = new RegExp("^-?[0-9]*$"),
-          isMatched = intPattern.test(value);
-
-      // Below logic will validate input
-      if (!isMatched) {
-        isValid = false;
-        this.model.errorModel.unset(name);
-        this.model.errorModel.set(
-            name,
-            S(pgAdmin.Browser.messages.MUST_BE_INT).sprintf(
-              field.label
-              ).value()
-            );
-      }
+          intPattern = new RegExp("^-?[0-9]+$");
 
-      // Below will check if entered value is in-between min & max range
-      if (isValid && (!_.isUndefined(min_value) && value < min_value)) {
-        isValid = false;
-        this.model.errorModel.unset(name);
-        this.model.errorModel.set(
-            name,
-            S(pgAdmin.Browser.messages.MUST_GR_EQ).sprintf(
-              field.label,
-              min_value
-              ).value()
-            );
-      }
+      if (allowNull && (_.isUndefined(value) ||
+           _.isNull(value) || value == '')) {
+        // Check for undefined/empty/null value if it's allowed.
+        value = null;
+      } else {
+        // Below logic will validate input
+        if (!intPattern.test(value)) {
+          isValid = false;
+          this.model.errorModel.unset(name);
+          this.model.errorModel.set(
+              name,
+              S(pgAdmin.Browser.messages.MUST_BE_INT).sprintf(
+                field.label
+                ).value()
+              );
+        }
 
-      if (isValid && (!_.isUndefined(max_value) && value > max_value)) {
-        isValid = false;
-        this.model.errorModel.unset(name);
-        this.model.errorModel.set(
-            name,
-            S(pgAdmin.Browser.messages.MUST_LESS_EQ).sprintf(
-              field.label,
-              max_value
-              ).value()
-            );
-      }
+        // Below will check if entered value is in-between min & max range
+        if (isValid && (!_.isUndefined(min_value) && value < min_value)) {
+          isValid = false;
+          this.model.errorModel.unset(name);
+          this.model.errorModel.set(
+              name,
+              S(pgAdmin.Browser.messages.MUST_GR_EQ).sprintf(
+                field.label,
+                min_value
+                ).value()
+              );
+        }
 
+        if (isValid && (!_.isUndefined(max_value) && value > max_value)) {
+          isValid = false;
+          this.model.errorModel.unset(name);
+          this.model.errorModel.set(
+              name,
+              S(pgAdmin.Browser.messages.MUST_LESS_EQ).sprintf(
+                field.label,
+                max_value
+                ).value()
+              );
+        }
+      }
       // After validation we need to set that value into model (only if all flags are true)
       if (isValid) {
         this.stopListening(this.model, "change:" + name, this.render);
@@ -1333,49 +1338,55 @@
     checkNumeric: function(e) {
       var field = _.defaults(this.field.toJSON(), this.defaults),
           attrArr = this.field.get("name").split('.'),
+          allowNull = this.field.get("allowNull"),
           name = attrArr.shift(),
           value = this.getValueFromDOM(),
           min_value = field.min,
           max_value = field.max,
           isValid = true,
-          intPattern = new RegExp("^-?[0-9]+(\.?[0-9]*)?$"),
-          isMatched = intPattern.test(value);
-
-      // Below logic will validate input
-      if (!isMatched) {
-        isValid = false;
-        this.model.errorModel.unset(name);
-        this.model.errorModel.set(
-            name,
-            S(pgAdmin.Browser.messages.MUST_BE_NUM).sprintf(
-              field.label
-              ).value()
-            );
-      }
+          intPattern = new RegExp("^-?[0-9]+(\.?[0-9]*)?$");
 
-      // Below will check if entered value is in-between min & max range
-      if (isValid && (!_.isUndefined(min_value) && value < min_value)) {
-        isValid = false;
-        this.model.errorModel.unset(name);
-        this.model.errorModel.set(
-            name,
-            S(pgAdmin.Browser.messages.MUST_GR_EQ).sprintf(
-              field.label,
-              min_value
-              ).value()
-            );
-      }
+      if (allowNull && (_.isUndefined(value) ||
+           _.isNull(value) || value == '')) {
+        // Check for undefined/empty/null value if it's allowed.
+        value = null;
+      } else {
+        // Below logic will validate input
+        if (!intPattern.test(value)) {
+          isValid = false;
+          this.model.errorModel.unset(name);
+          this.model.errorModel.set(
+              name,
+              S(pgAdmin.Browser.messages.MUST_BE_NUM).sprintf(
+                field.label
+                ).value()
+              );
+        }
 
-      if (isValid && (!_.isUndefined(max_value) && value > max_value)) {
-        isValid = false;
-        this.model.errorModel.unset(name);
-        this.model.errorModel.set(
-            name,
-            S(pgAdmin.Browser.messages.MUST_LESS_EQ).sprintf(
-              field.label,
-              max_value
-              ).value()
-            );
+        // Below will check if entered value is in-between min & max range
+        if (isValid && (!_.isUndefined(min_value) && value < min_value)) {
+          isValid = false;
+          this.model.errorModel.unset(name);
+          this.model.errorModel.set(
+              name,
+              S(pgAdmin.Browser.messages.MUST_GR_EQ).sprintf(
+                field.label,
+                min_value
+                ).value()
+              );
+        }
+
+        if (isValid && (!_.isUndefined(max_value) && value > max_value)) {
+          isValid = false;
+          this.model.errorModel.unset(name);
+          this.model.errorModel.set(
+              name,
+              S(pgAdmin.Browser.messages.MUST_LESS_EQ).sprintf(
+                field.label,
+                max_value
+                ).value()
+              );
+        }
       }
 
       // After validation we need to set that value into model (only if all flags are true)
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to