-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbootstrap-validator.min.js
132 lines (127 loc) · 7.6 KB
/
bootstrap-validator.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*!
* Validator v0.9.0 for Bootstrap 3, by @1000hz
* Copyright 2015 Cina Saffary
* Licensed under http://opensource.org/licenses/MIT
*
* https://github.com/1000hz/bootstrap-validator
*/
+function (a) {
"use strict";
function b(b) {
return this.each(function () {
var d = a(this), e = a.extend({}, c.DEFAULTS, d.data(), "object" == typeof b && b), f = d.data("bs.validator");
(f || "destroy" != b) && (f || d.data("bs.validator", f = new c(this, e)), "string" == typeof b && f[b]())
})
}
var c = function (b, d) {
this.$element = a(b), this.options = d, d.errors = a.extend({}, c.DEFAULTS.errors, d.errors);
for (var e in d.custom)if (!d.errors[e])throw new Error("Missing default error message for custom validator: " + e);
a.extend(c.VALIDATORS, d.custom), this.$element.attr("novalidate", !0), this.toggleSubmit(), this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator", a.proxy(this.validateInput, this)), this.$element.on("submit.bs.validator", a.proxy(this.onSubmit, this)), this.$element.find("[data-match]").each(function () {
var b = a(this), c = b.data("match");
a(c).on("input.bs.validator", function () {
b.val() && b.trigger("input.bs.validator")
})
})
};
c.INPUT_SELECTOR = ':input:not([type="submit"], button):enabled:visible', c.DEFAULTS = {
delay: 500,
html: !1,
disable: !0,
custom: {},
errors: {match: "Does not match", minlength: "Not long enough"},
feedback: {success: "glyphicon-ok", error: "glyphicon-remove"}
}, c.VALIDATORS = {
"native": function (a) {
var b = a[0];
return b.checkValidity ? b.checkValidity() : !0
}, match: function (b) {
var c = b.data("match");
return !b.val() || b.val() === a(c).val()
}, minlength: function (a) {
var b = a.data("minlength");
return !a.val() || a.val().length >= b
}
}, c.prototype.validateInput = function (b) {
var c = a(b.target), d = c.data("bs.validator.errors");
if (c.is('[type="radio"]') && (c = this.$element.find('input[name="' + c.attr("name") + '"]')), this.$element.trigger(b = a.Event("validate.bs.validator", {relatedTarget: c[0]})), !b.isDefaultPrevented()) {
var e = this;
this.runValidators(c).done(function (f) {
c.data("bs.validator.errors", f), f.length ? e.showErrors(c) : e.clearErrors(c), d && f.toString() === d.toString() || (b = f.length ? a.Event("invalid.bs.validator", {
relatedTarget: c[0],
detail: f
}) : a.Event("valid.bs.validator", {
relatedTarget: c[0],
detail: d
}), e.$element.trigger(b)), e.toggleSubmit(), e.$element.trigger(a.Event("validated.bs.validator", {relatedTarget: c[0]}))
})
}
}, c.prototype.runValidators = function (b) {
function d(a) {
return b.data(a + "-error") || b.data("error") || "native" == a && b[0].validationMessage || g.errors[a]
}
var e = [], f = a.Deferred(), g = this.options;
return b.data("bs.validator.deferred") && b.data("bs.validator.deferred").reject(), b.data("bs.validator.deferred", f), a.each(c.VALIDATORS, a.proxy(function (a, c) {
if ((b.data(a) || "native" == a) && !c.call(this, b)) {
var f = d(a);
!~e.indexOf(f) && e.push(f)
}
}, this)), !e.length && b.val() && b.data("remote") ? this.defer(b, function () {
var c = {};
c[b.attr("name")] = b.val(), a.get(b.data("remote"), c).fail(function (a, b, c) {
e.push(d("remote") || c)
}).always(function () {
f.resolve(e)
})
}) : f.resolve(e), f.promise()
}, c.prototype.validate = function () {
var a = this.options.delay;
return this.options.delay = 0, this.$element.find(c.INPUT_SELECTOR).trigger("input.bs.validator"), this.options.delay = a, this
}, c.prototype.showErrors = function (b) {
var c = this.options.html ? "html" : "text";
this.defer(b, function () {
var d = b.closest(".form-group"), e = d.find(".help-block.with-errors"), f = d.find(".form-control-feedback"), g = b.data("bs.validator.errors");
g.length && (g = a("<ul/>").addClass("list-unstyled").append(a.map(g, function (b) {
return a("<li/>")[c](b)
})), void 0 === e.data("bs.validator.originalContent") && e.data("bs.validator.originalContent", e.html()), e.empty().append(g), d.addClass("has-error"), f.length && f.removeClass(this.options.feedback.success) && f.addClass(this.options.feedback.error) && d.removeClass("has-success"))
})
}, c.prototype.clearErrors = function (a) {
var b = a.closest(".form-group"), c = b.find(".help-block.with-errors"), d = b.find(".form-control-feedback");
c.html(c.data("bs.validator.originalContent")), b.removeClass("has-error"), d.length && d.removeClass(this.options.feedback.error) && d.addClass(this.options.feedback.success) && b.addClass("has-success")
}, c.prototype.hasErrors = function () {
function b() {
return !!(a(this).data("bs.validator.errors") || []).length
}
return !!this.$element.find(c.INPUT_SELECTOR).filter(b).length
}, c.prototype.isIncomplete = function () {
function b() {
return "checkbox" === this.type ? !this.checked : "radio" === this.type ? !a('[name="' + this.name + '"]:checked').length : "" === a.trim(this.value)
}
return !!this.$element.find(c.INPUT_SELECTOR).filter("[required]").filter(b).length
}, c.prototype.onSubmit = function (a) {
this.validate(), (this.isIncomplete() || this.hasErrors()) && a.preventDefault()
}, c.prototype.toggleSubmit = function () {
if (this.options.disable) {
var b = a('button[type="submit"], input[type="submit"]').filter('[form="' + this.$element.attr("id") + '"]').add(this.$element.find('input[type="submit"], button[type="submit"]'));
b.toggleClass("disabled", this.isIncomplete() || this.hasErrors())
}
}, c.prototype.defer = function (b, c) {
return c = a.proxy(c, this), this.options.delay ? (window.clearTimeout(b.data("bs.validator.timeout")), void b.data("bs.validator.timeout", window.setTimeout(c, this.options.delay))) : c()
}, c.prototype.destroy = function () {
return this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator"), this.$element.find(c.INPUT_SELECTOR).off(".bs.validator").removeData(["bs.validator.errors", "bs.validator.deferred"]).each(function () {
var b = a(this), c = b.data("bs.validator.timeout");
window.clearTimeout(c) && b.removeData("bs.validator.timeout")
}), this.$element.find(".help-block.with-errors").each(function () {
var b = a(this), c = b.data("bs.validator.originalContent");
b.removeData("bs.validator.originalContent").html(c)
}), this.$element.find('input[type="submit"], button[type="submit"]').removeClass("disabled"), this.$element.find(".has-error").removeClass("has-error"), this
};
var d = a.fn.validator;
a.fn.validator = b, a.fn.validator.Constructor = c, a.fn.validator.noConflict = function () {
return a.fn.validator = d, this
}, a(window).on("load", function () {
a('form[data-toggle="validator"]').each(function () {
var c = a(this);
b.call(c, c.data())
})
})
}(jQuery);