diff options
author | Fatih Acet <acetfatih@gmail.com> | 2016-10-25 08:42:10 +0000 |
---|---|---|
committer | Fatih Acet <acetfatih@gmail.com> | 2016-10-25 08:42:10 +0000 |
commit | 2f470a626238be535c59efa56affb170114651ac (patch) | |
tree | 61685b32e4cd96865e11a76003d5001ee2f4f9ea | |
parent | 99eb15437d9cd81bfa61c090914084a27d9d8d8f (diff) | |
parent | 06564f9e049417087fa53cf8ec15c22ec65724d5 (diff) | |
download | gitlab-ce-2f470a626238be535c59efa56affb170114651ac.tar.gz |
Merge branch 'scope-input-errors' into 'master'
Stop injecting field errors where they won't be used.
## What does this MR do?
Filters the form elements which gl_field_errors validates, excluding input types button, submit and checkbox.
## Why was this MR needed?
This won't make a difference in UX, but I just noticed that we are currently validating and injecting errors into the DOM for all non-hidden inputs. Doing so is unnecessary, and could introduce performance problems on forms with larger numbers of inputs.
## Does this MR meet the acceptance criteria?
- [x] All builds are passing
- [x] Conform by the [merge request performance guides](http://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html)
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if it does - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
See merge request !6929
-rw-r--r-- | app/assets/javascripts/gl_field_errors.js.es6 | 7 | ||||
-rw-r--r-- | spec/javascripts/gl_field_errors_spec.js.es6 | 4 |
2 files changed, 7 insertions, 4 deletions
diff --git a/app/assets/javascripts/gl_field_errors.js.es6 b/app/assets/javascripts/gl_field_errors.js.es6 index 8657e7b4abf..8e8f9f29ab3 100644 --- a/app/assets/javascripts/gl_field_errors.js.es6 +++ b/app/assets/javascripts/gl_field_errors.js.es6 @@ -137,8 +137,11 @@ } initValidators () { - // select all non-hidden inputs in form - this.state.inputs = this.form.find(':input:not([type=hidden])').toArray() + // register selectors here as needed + const validateSelectors = [':text', ':password', '[type=email]'] + .map((selector) => `input${selector}`).join(','); + + this.state.inputs = this.form.find(validateSelectors).toArray() .filter((input) => !input.classList.contains(customValidationFlag)) .map((input) => new GlFieldError({ input, formErrors: this })); diff --git a/spec/javascripts/gl_field_errors_spec.js.es6 b/spec/javascripts/gl_field_errors_spec.js.es6 index 36feb2b2aa5..da9259edd78 100644 --- a/spec/javascripts/gl_field_errors_spec.js.es6 +++ b/spec/javascripts/gl_field_errors_spec.js.es6 @@ -11,12 +11,12 @@ this.fieldErrors = new global.GlFieldErrors($form); }); - it('should properly initialize the form', function() { + it('should select the correct input elements', function() { expect(this.$form).toBeDefined(); expect(this.$form.length).toBe(1); expect(this.fieldErrors).toBeDefined(); const inputs = this.fieldErrors.state.inputs; - expect(inputs.length).toBe(5); + expect(inputs.length).toBe(4); }); it('should ignore elements with custom error handling', function() { |