Browse Source

#48: Add optional feedback icons

nghuuphuoc 11 years ago
parent
commit
3ee1b6caaf
5 changed files with 76 additions and 19 deletions
  1. 1 0
      CHANGELOG.md
  2. 8 8
      demo/index.html
  3. 33 5
      dist/js/bootstrapValidator.js
  4. 1 1
      dist/js/bootstrapValidator.min.js
  5. 33 5
      src/js/bootstrapValidator.js

+ 1 - 0
CHANGELOG.md

@@ -8,6 +8,7 @@ __New features__:
 * #26, #27, #67: Add choice validator
 * #26, #27, #67: Add choice validator
 * [#36, #58: Add method to validate form manually](https://github.com/nghuuphuoc/bootstrapvalidator/issues/58)
 * [#36, #58: Add method to validate form manually](https://github.com/nghuuphuoc/bootstrapvalidator/issues/58)
 * [#42: Add submit button to ```submitHandler()``` parameter](https://github.com/nghuuphuoc/bootstrapvalidator/issues/42)
 * [#42: Add submit button to ```submitHandler()``` parameter](https://github.com/nghuuphuoc/bootstrapvalidator/issues/42)
+* [#48: Add optional feedback icons](https://github.com/nghuuphuoc/bootstrapvalidator/issues/48)
 * [#64: Support Danish zip code](https://github.com/nghuuphuoc/bootstrapvalidator/issues/64)
 * [#64: Support Danish zip code](https://github.com/nghuuphuoc/bootstrapvalidator/issues/64)
 * [#65: Support Sweden zip code](https://github.com/nghuuphuoc/bootstrapvalidator/issues/64)
 * [#65: Support Sweden zip code](https://github.com/nghuuphuoc/bootstrapvalidator/issues/64)
 * [#70: Support custom grid columns](https://github.com/nghuuphuoc/bootstrapvalidator/issues/70)
 * [#70: Support custom grid columns](https://github.com/nghuuphuoc/bootstrapvalidator/issues/70)

+ 8 - 8
demo/index.html

@@ -31,7 +31,7 @@
                         <div class="form-group">
                         <div class="form-group">
                             <label class="col-lg-3 control-label">Email address</label>
                             <label class="col-lg-3 control-label">Email address</label>
                             <div class="col-lg-5">
                             <div class="col-lg-5">
-                                <input type="text" class="form-control" name="email" disabled />
+                                <input type="text" class="form-control" name="email" />
                             </div>
                             </div>
                         </div>
                         </div>
 
 
@@ -51,7 +51,7 @@
 
 
                         <div class="form-group">
                         <div class="form-group">
                             <label class="col-lg-3 control-label">Gender</label>
                             <label class="col-lg-3 control-label">Gender</label>
-                            <div class="col-lg-9">
+                            <div class="col-lg-5">
                                 <div class="radio">
                                 <div class="radio">
                                     <label>
                                     <label>
                                         <input type="radio" name="gender" value="male" /> Male
                                         <input type="radio" name="gender" value="male" /> Male
@@ -72,7 +72,7 @@
 
 
                         <div class="form-group">
                         <div class="form-group">
                             <label class="col-lg-3 control-label">Languages</label>
                             <label class="col-lg-3 control-label">Languages</label>
-                            <div class="col-lg-9">
+                            <div class="col-lg-5">
                                 <div class="checkbox">
                                 <div class="checkbox">
                                     <label>
                                     <label>
                                         <input type="checkbox" name="languages[]" value="english" /> English
                                         <input type="checkbox" name="languages[]" value="english" /> English
@@ -103,7 +103,7 @@
 
 
                         <div class="form-group">
                         <div class="form-group">
                             <label class="col-lg-3 control-label">Programming Languages</label>
                             <label class="col-lg-3 control-label">Programming Languages</label>
-                            <div class="col-lg-9">
+                            <div class="col-lg-5">
                                 <div class="checkbox">
                                 <div class="checkbox">
                                     <label>
                                     <label>
                                         <input type="checkbox" name="programs[]" value="net" /> .Net
                                         <input type="checkbox" name="programs[]" value="net" /> .Net
@@ -194,10 +194,10 @@ $(document).ready(function() {
                         regexp: /^[a-zA-Z0-9_\.]+$/,
                         regexp: /^[a-zA-Z0-9_\.]+$/,
                         message: 'The username can only consist of alphabetical, number, dot and underscore'
                         message: 'The username can only consist of alphabetical, number, dot and underscore'
                     },
                     },
-                    remote: {
-                        url: 'remote.php',
-                        message: 'The username is not available'
-                    },
+//                    remote: {
+//                        url: 'remote.php',
+//                        message: 'The username is not available'
+//                    },
                     different: {
                     different: {
                         field: 'password',
                         field: 'password',
                         message: 'The username and password can\'t be the same as each other'
                         message: 'The username and password can\'t be the same as each other'

+ 33 - 5
dist/js/bootstrapValidator.js

@@ -165,6 +165,14 @@
                         .appendTo($parent);
                         .appendTo($parent);
                 }
                 }
             }
             }
+
+            // Prepare the feedback icons
+            // Available from Bootstrap 3.1 (http://getbootstrap.com/css/#forms-control-validation)
+            $parent.addClass('has-feedback');
+            $('<span/>')
+                .css('display', 'none')
+                .addClass('glyphicon form-control-feedback')
+                .insertAfter($(fields[fields.length - 1]));
         },
         },
 
 
         /**
         /**
@@ -318,14 +326,22 @@
                 validator = this.options.fields[field].validators[validatorName],
                 validator = this.options.fields[field].validators[validatorName],
                 message   = validator.message || this.options.message;
                 message   = validator.message || this.options.message;
 
 
-            // Add has-error class to parent element
             $field
             $field
                 .parents('.form-group')
                 .parents('.form-group')
+                    // Add has-error class to parent element
                     .removeClass('has-success')
                     .removeClass('has-success')
                     .addClass('has-error')
                     .addClass('has-error')
+                    // Show error element
                     .find('.help-block[data-bs-validator="' + validatorName + '"]')
                     .find('.help-block[data-bs-validator="' + validatorName + '"]')
                         .html(message)
                         .html(message)
+                        .show()
+                        .end()
+                    // Show feedback icon
+                    .find('.form-control-feedback')
+                        .removeClass('glyphicon-ok')
+                        .addClass('glyphicon-remove')
                         .show();
                         .show();
+
         },
         },
 
 
         /**
         /**
@@ -334,12 +350,24 @@
          * @param {jQuery} $field The field element
          * @param {jQuery} $field The field element
          */
          */
         removeError: function($field, validatorName) {
         removeError: function($field, validatorName) {
-            $field
-                .parents('.form-group')
+            var $parent = $field.parents('.form-group'),
+                $errors = $parent.find('.help-block[data-bs-validator]');
+
+            // Hide error element
+            $errors
+                .filter('[data-bs-validator="' + validatorName + '"]')
+                    .hide();
+
+            // If the field is valid then show the "ok" icon
+            if ($errors.filter(function() { return 'block' == $(this).css('display'); }).length == 0) {
+                $parent
                     .removeClass('has-error')
                     .removeClass('has-error')
                     .addClass('has-success')
                     .addClass('has-success')
-                    .find('.help-block[data-bs-validator="' + validatorName + '"]')
-                        .hide();
+                    .find('.form-control-feedback')
+                        .removeClass('glyphicon-remove')
+                        .addClass('glyphicon-ok')
+                        .show();
+            }
         }
         }
     };
     };
 
 

File diff suppressed because it is too large
+ 1 - 1
dist/js/bootstrapValidator.min.js


+ 33 - 5
src/js/bootstrapValidator.js

@@ -164,6 +164,14 @@
                         .appendTo($parent);
                         .appendTo($parent);
                 }
                 }
             }
             }
+
+            // Prepare the feedback icons
+            // Available from Bootstrap 3.1 (http://getbootstrap.com/css/#forms-control-validation)
+            $parent.addClass('has-feedback');
+            $('<span/>')
+                .css('display', 'none')
+                .addClass('glyphicon form-control-feedback')
+                .insertAfter($(fields[fields.length - 1]));
         },
         },
 
 
         /**
         /**
@@ -317,14 +325,22 @@
                 validator = this.options.fields[field].validators[validatorName],
                 validator = this.options.fields[field].validators[validatorName],
                 message   = validator.message || this.options.message;
                 message   = validator.message || this.options.message;
 
 
-            // Add has-error class to parent element
             $field
             $field
                 .parents('.form-group')
                 .parents('.form-group')
+                    // Add has-error class to parent element
                     .removeClass('has-success')
                     .removeClass('has-success')
                     .addClass('has-error')
                     .addClass('has-error')
+                    // Show error element
                     .find('.help-block[data-bs-validator="' + validatorName + '"]')
                     .find('.help-block[data-bs-validator="' + validatorName + '"]')
                         .html(message)
                         .html(message)
+                        .show()
+                        .end()
+                    // Show feedback icon
+                    .find('.form-control-feedback')
+                        .removeClass('glyphicon-ok')
+                        .addClass('glyphicon-remove')
                         .show();
                         .show();
+
         },
         },
 
 
         /**
         /**
@@ -333,12 +349,24 @@
          * @param {jQuery} $field The field element
          * @param {jQuery} $field The field element
          */
          */
         removeError: function($field, validatorName) {
         removeError: function($field, validatorName) {
-            $field
-                .parents('.form-group')
+            var $parent = $field.parents('.form-group'),
+                $errors = $parent.find('.help-block[data-bs-validator]');
+
+            // Hide error element
+            $errors
+                .filter('[data-bs-validator="' + validatorName + '"]')
+                    .hide();
+
+            // If the field is valid then show the "ok" icon
+            if ($errors.filter(function() { return 'block' == $(this).css('display'); }).length == 0) {
+                $parent
                     .removeClass('has-error')
                     .removeClass('has-error')
                     .addClass('has-success')
                     .addClass('has-success')
-                    .find('.help-block[data-bs-validator="' + validatorName + '"]')
-                        .hide();
+                    .find('.form-control-feedback')
+                        .removeClass('glyphicon-remove')
+                        .addClass('glyphicon-ok')
+                        .show();
+            }
         }
         }
     };
     };