Files
pathfinder/js/lib/validator.min.js

131 lines
6.9 KiB
JavaScript

/*!
* Validator v0.7.2 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, c) {
this.$element = a(b), this.options = c, 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.DEFAULTS = {
delay: 500,
html: !1,
disable: !0,
errors: {match: "Does not match", minlength: "Not long enough"}
}, 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 = ([c.VALIDATORS['native'] ], 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(":input").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 = b.data("bs.validator.errors");
f.length && (f = a("<ul/>").addClass("list-unstyled").append(a.map(f, function (b) {
return a("<li/>")[c](b)
})), void 0 === e.data("bs.validator.originalContent") && e.data("bs.validator.originalContent", e.html()), e.empty().append(f), d.addClass("has-error"))
})
}, c.prototype.clearErrors = function (a) {
var b = a.closest(".form-group"), c = b.find(".help-block.with-errors");
c.html(c.data("bs.validator.originalContent")), b.removeClass("has-error")
}, c.prototype.hasErrors = function () {
function b() {
return !!(a(this).data("bs.validator.errors") || []).length
}
return !!this.$element.find(":input:enabled").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(":input[required]:enabled").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 a = this.$element.find('input[type="submit"], button[type="submit"]');
a.toggleClass("disabled", this.isIncomplete() || this.hasErrors()).css({
"pointer-events": "all",
cursor: "pointer"
})
}
}, c.prototype.defer = function (a, b) {
return this.options.delay ? (window.clearTimeout(a.data("bs.validator.timeout")), void a.data("bs.validator.timeout", window.setTimeout(b, this.options.delay))) : b()
}, c.prototype.destroy = function () {
return this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator"), this.$element.find(":input").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);