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
/*!
* @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2017
* @version 1.3.2
*
* Client validation extension for the yii2-field-range extension
*
* Author: Kartik Visweswaran
* For more JQuery plugins visit http://plugins.krajee.com
* For more Yii related demos visit http://demos.krajee.com
*/
(function ($) {
"use strict";
var isArray, setContextCss, KvFieldRange;
isArray = function (a) {
return Object.prototype.toString.call(a) === '[object Array]' ||
Object.prototype.toString.call(a) === '[object Object]';
};
setContextCss = function(id, css) {
var $el = $('#' + id).closest('.' + css), altCss;
if (!$el.length) {
return;
}
altCss = css === 'has-success' ? 'has-error' : 'has-success';
$el.removeClass(altCss).addClass(css);
};
KvFieldRange = function (element, options) {
var self = this;
self.$attrTo = $(element);
self.$attrFrom = $("#" + options.attrFrom);
self.$mainContainer = $("#" + options.container);
self.$errorContainer = $("#" + options.errorContainer);
self.$errorBlockFrom = self.$attrFrom.closest('.kv-container-from').find('.help-block');
self.$errorBlockTo = self.$attrTo.closest('.kv-container-to').find('.help-block');
self.$errorBlock = self.$errorContainer.find('.help-block');
self.$form = self.$attrFrom.closest('form');
self.errorToMsg = "";
self.init();
};
KvFieldRange.prototype = {
constructor: KvFieldRange,
init: function () {
var self = this;
self.$errorBlockFrom.hide();
self.$errorBlockTo.hide();
self.$form.on('reset.yiiActiveForm', function () {
setTimeout(function () {
self.reset();
}, 100);
});
self.$form.on('afterValidate', function (event, messages) {
var idFrom = self.$attrFrom.attr('id'), idTo = self.$attrTo.attr('id');
if (idFrom in messages) {
self.validateAttribute(messages[idFrom], idFrom, idTo);
}
if (idTo in messages) {
self.validateAttribute(messages[idTo], idFrom, idTo);
}
});
self.$form.on('afterValidateAttribute', function (event, attribute, messages) {
var idFrom = self.$attrFrom.attr('id'), idTo = self.$attrTo.attr('id');
self.$errorBlock.html('');
self.$errorContainer.removeClass('has-success has-error');
if (attribute.id === idFrom || attribute.id === idTo) {
self.validateAttribute(messages, idFrom, idTo);
}
});
},
validateAttribute: function (msg, idFrom, idTo) {
var self = this, len = msg.length, errMsg = '';
if (isArray(msg) && len) {
errMsg = len === 1 ? msg[0] : msg.join('</li><li>');
} else {
if (len > 0) {
errMsg = msg;
}
}
if (errMsg) {
self.$errorBlock.html(errMsg);
self.$errorContainer.addClass('has-error');
} else {
self.$errorContainer.addClass('has-success');
}
if (msg && msg.length) {
setContextCss(idFrom, 'has-error');
setContextCss(idTo, 'has-error');
} else {
setContextCss(idFrom, 'has-success');
setContextCss(idTo, 'has-success');
}
},
reset: function () {
var self = this;
self.$errorBlock.html('');
self.$errorContainer.removeClass('has-success has-error');
self.$mainContainer.removeClass('has-success has-error');
}
};
$.fn.kvFieldRange = function (option) {
var args = Array.apply(null, arguments);
args.shift();
return this.each(function () {
var self = $(this), data = self.data('kvFieldRange'), options = typeof option === 'object' && option;
if (!data) {
data = new KvFieldRange(this, $.extend({}, $.fn.kvFieldRange.defaults, options, self.data()));
self.data('kvFieldRange', data);
}
if (typeof option === 'string') {
data[option].apply(data, args);
}
});
};
$.fn.kvFieldRange.defaults = {
attrFrom: '',
container: '',
errorContainer: ''
};
$.fn.kvFieldRange.Constructor = KvFieldRange;
}(window.jQuery));