Skip to content

Commit 14cbdbc

Browse files
committed
Adding form validation
1 parent 1654a39 commit 14cbdbc

File tree

5 files changed

+43
-20
lines changed

5 files changed

+43
-20
lines changed

_includes/scripts/common.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.min.js"
22
integrity="sha256-sPB0F50YUDK0otDnsfNHawYmA5M0pjjUf4TvRJkGFrI="
33
crossorigin="anonymous"></script>
4-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
5-
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY="
6-
crossorigin="anonymous"></script>
74
<script src="{{ site.baseurl }}/assets/js/util.min.js"></script>

assets/js/ao.js

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
var Ao = (function () {
22
// Helpers
33
function doOne(callback) {
4-
callback.call(this, this.e);
4+
callback.call(this, this.e, 0);
55
return this;
66
}
77

88
function doAll(callback) {
99
var elems = this.e;
1010
for (var i = 0, l = elems.length; i < l; ++i) {
11-
callback.call(this, elems[i]);
11+
callback.call(this, elems[i], i);
1212
}
1313
return this;
1414
}
@@ -116,6 +116,26 @@
116116
return this._do(function (e) {
117117
e.disabled = true;
118118
});
119+
},
120+
after: function (elemOrAoObj) {
121+
var originElem = elemOrAoObj instanceof AoObj ? elemOrAoObj.e : elemOrAoObj;
122+
return this._do(function (e, i) {
123+
var elem = i === 0 ? originElem : originElem.cloneNode();
124+
e.parentNode.insertBefore(elem, e.nextSibling);
125+
});
126+
},
127+
on: function (eventTypes, callback) {
128+
var events = eventTypes.split(' ');
129+
var l = events.length;
130+
var that = this;
131+
var cxtCallback = function () {
132+
callback.call(that);
133+
};
134+
return this._do(function (e) {
135+
for (var i = 0; i < l; ++i) {
136+
e.addEventListener(events[i], cxtCallback);
137+
}
138+
});
119139
}
120140
};
121141

@@ -157,17 +177,30 @@
157177
};
158178

159179
// AoValidator
160-
function required() {
161-
return Boolean(this.e.value);
162-
}
180+
var emailMatcher = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
181+
var validators = {
182+
required: function () {
183+
return Boolean(this.e.value);
184+
},
185+
email: function () {
186+
return validators.required.call(this) && emailMatcher.test(this.e.value.toLowerCase());
187+
}
188+
};
189+
var validatorNames = Object.keys(validators);
190+
var validatorsCount = validatorNames.length;
163191

164192
var AoValidator = function (input) {
165193
AoObj.call(this, input);
166-
this._msg = ao(input.nextElementSibling);
194+
this.on('blur keyup', this.validate);
195+
this._msg = ao(document.createElement('span')).addClass('error-message');
196+
this.after(this._msg);
167197
this._validators = [];
168-
var requiredMsg = input.getAttribute('data-val-required');
169-
if (Boolean(requiredMsg)) {
170-
this._validators.push({ test: required, msg: requiredMsg });
198+
for (var i = 0; i < validatorsCount; ++i) {
199+
var validatorName = validatorNames[i];
200+
var msg = input.getAttribute('data-val-' + validatorName);
201+
if (Boolean(msg)) {
202+
this._validators.push({ test: validators[validatorName], msg: msg });
203+
}
171204
}
172205
};
173206

assets/js/contact.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
this.name = ao.get('contact-form-name');
66
this.email = ao.get('contact-form-email');
77
this.message = ao.get('contact-form-message');
8-
this.submitButton = ao.get('contact-form-submit');
98
};
109

1110
contactForm.prototype.handleSend = function (form) {

assets/js/contact.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

contact.html

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,15 @@ <h1 class="post-title">Contact</h1>
1616
<input type="text" id="contact-form-name" name="name" class="form-input"
1717
placeholder="Your name"
1818
data-val="true" data-val-required="Your name is required" />
19-
<span class="error-message"
20-
data-valmsg-for="name" data-valmsg-replace="true"></span>
2119

2220
<input type="text" id="contact-form-email" name="email" class="form-input"
2321
placeholder="Your email address"
2422
data-val="true" data-val-required="Your email is required"
2523
data-val-email="That's not a valid email address" />
26-
<span class="error-message"
27-
data-valmsg-for="email" data-valmsg-replace="true"></span>
2824

2925
<textarea id="contact-form-message" name="message" class="form-textarea"
3026
placeholder="Your message"
3127
data-val="true" data-val-required="A message is required"></textarea>
32-
<span class="error-message"
33-
data-valmsg-for="message" data-valmsg-replace="true"></span>
3428

3529
<input id="contact-form-submit" type="submit" value="Send" />
3630

0 commit comments

Comments
 (0)