Updated credits

This commit is contained in:
Aigars Silkalns 2016-03-06 23:23:41 +02:00
parent 55185e03b1
commit 6b71e150f3
34 changed files with 430 additions and 443 deletions

View File

@ -372,9 +372,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -508,7 +508,7 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class="copyright-info"> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a> <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -711,9 +711,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -497,9 +497,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -690,10 +690,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a></p>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
</footer> </footer>

View File

@ -156,9 +156,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -1381,9 +1381,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -1797,9 +1797,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -780,9 +780,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -377,9 +377,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -448,9 +448,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -631,9 +631,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -1650,9 +1650,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -1761,9 +1761,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -2372,9 +2372,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -567,9 +567,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -1070,9 +1070,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -788,9 +788,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -903,9 +903,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -524,9 +524,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -2,8 +2,8 @@
* easyPieChart * easyPieChart
* Lightweight plugin to render simple, animated and retina optimized pie charts * Lightweight plugin to render simple, animated and retina optimized pie charts
* *
* @license * @license
* @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de) * @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)
* @version 2.1.5 * @version 2.1.5
**/ **/
!function(a,b){"object"==typeof exports?module.exports=b(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){var b=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"undefined"!=typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},c=function(a,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:6,lineCap:"round",lineWidth:3,size:95,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(){},onStep:function(){},onStop:function(){}};if("undefined"!=typeof b)d.renderer=b;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=a,this.options=e;for(var b in d)d.hasOwnProperty(b)&&(e[b]=c&&"undefined"!=typeof c[b]?c[b]:d[b],"function"==typeof e[b]&&(e[b]=e[b].bind(this)));e.easing="string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?jQuery.easing[e.easing]:d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(a,e),this.renderer.draw(f),a.dataset&&a.dataset.percent?this.update(parseFloat(a.dataset.percent)):a.getAttribute&&a.getAttribute("data-percent")&&this.update(parseFloat(a.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};a.fn.easyPieChart=function(b){return this.each(function(){var d;a.data(this,"easyPieChart")||(d=a.extend({},b,a(this).data()),a.data(this,"easyPieChart",new c(this,d)))})}}); !function(a,b){"object"==typeof exports?module.exports=b(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){var b=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"undefined"!=typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},c=function(a,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:6,lineCap:"round",lineWidth:3,size:95,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(){},onStep:function(){},onStop:function(){}};if("undefined"!=typeof b)d.renderer=b;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=a,this.options=e;for(var b in d)d.hasOwnProperty(b)&&(e[b]=c&&"undefined"!=typeof c[b]?c[b]:d[b],"function"==typeof e[b]&&(e[b]=e[b].bind(this)));e.easing="string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?jQuery.easing[e.easing]:d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(a,e),this.renderer.draw(f),a.dataset&&a.dataset.percent?this.update(parseFloat(a.dataset.percent)):a.getAttribute&&a.getAttribute("data-percent")&&this.update(parseFloat(a.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};a.fn.easyPieChart=function(b){return this.each(function(){var d;a.data(this,"easyPieChart")||(d=a.extend({},b,a(this).data()),a.data(this,"easyPieChart",new c(this,d)))})}});

View File

@ -1,392 +1,411 @@
/* /*
Validator v1.1.0 Validator v1.1.0
(c) Yair Even Or (c) Yair Even Or
https://github.com/yairEO/validator https://github.com/yairEO/validator
MIT-style license. MIT-style license.
*/ */
var validator = (function($){ var validator = (function($){
var message, tests, checkField, validate, mark, unmark, field, minmax, defaults, var message, tests, checkField, validate, mark, unmark, field, minmax, defaults,
validateWords, lengthRange, lengthLimit, pattern, alertTxt, data, validateWords, lengthRange, lengthLimit, pattern, alertTxt, data,
email_illegalChars = /[\(\)\<\>\,\;\:\\\/\"\[\]]/, email_illegalChars = /[\(\)\<\>\,\;\:\\\/\"\[\]]/,
email_filter = /^.+@.+\..{2,3}$/; email_filter = /^.+@.+\..{2,6}$/; // exmaple email "steve@s-i.photo"
/* general text messages /* general text messages
*/ */
message = { message = {
invalid : 'invalid input', invalid : 'invalid input',
empty : 'please put something here', checked : 'must be checked',
min : 'input is too short', empty : 'please put something here',
max : 'input is too long', min : 'input is too short',
number_min : 'too low', max : 'input is too long',
number_max : 'too high', number_min : 'too low',
url : 'invalid URL', number_max : 'too high',
number : 'not a number', url : 'invalid URL',
email : 'email address is invalid', number : 'not a number',
email_repeat : 'emails do not match', email : 'email address is invalid',
password_repeat : 'passwords do not match', email_repeat : 'emails do not match',
repeat : 'no match', password_repeat : 'passwords do not match',
complete : 'input is not complete', repeat : 'no match',
select : 'Please select an option' complete : 'input is not complete',
}; select : 'Please select an option'
};
if(!window.console){
console={};
console.log=console.warn=function(){ return; }
}
// defaults if(!window.console){
defaults = { alerts:true }; console={};
console.log=console.warn=function(){ return; }
}
/* Tests for each type of field (including Select element) // defaults
*/ defaults = {
tests = { alerts : true,
sameAsPlaceholder : function(a){ classes : {
return $.fn.placeholder && a.attr('placeholder') !== undefined && data.val == a.prop('placeholder'); item : 'item',
}, alert : 'alert',
hasValue : function(a){ bad : 'bad'
if( !a ){ }
alertTxt = message.empty; };
return false;
}
return true;
},
// 'linked' is a special test case for inputs which their values should be equal to each other (ex. confirm email or retype password)
linked : function(a,b){
if( b != a ){
// choose a specific message or a general one
alertTxt = message[data.type + '_repeat'] || message.no_match;
return false;
}
return true;
},
email : function(a){
if ( !email_filter.test( a ) || a.match( email_illegalChars ) ){
alertTxt = a ? message.email : message.empty;
return false;
}
return true;
},
text : function(a){
// make sure there are at least X number of words, each at least 2 chars long.
// for example 'john F kenedy' should be at least 2 words and will pass validation
if( validateWords ){
var words = a.split(' ');
// iterrate on all the words
var wordsLength = function(len){
for( var w = words.length; w--; )
if( words[w].length < len )
return false;
return true;
};
if( words.length < validateWords || !wordsLength(2) ){ /* Tests for each type of field (including Select element)
alertTxt = message.complete; */
return false; tests = {
} sameAsPlaceholder : function(a){
return true; return $.fn.placeholder && a.attr('placeholder') !== undefined && data.val == a.prop('placeholder');
} },
if( lengthRange && a.length < lengthRange[0] ){ hasValue : function(a){
alertTxt = message.min; if( !a ){
return false; alertTxt = message.empty;
} return false;
}
return true;
},
// 'linked' is a special test case for inputs which their values should be equal to each other (ex. confirm email or retype password)
linked : function(a,b){
if( b != a ){
// choose a specific message or a general one
alertTxt = message[data.type + '_repeat'] || message.no_match;
return false;
}
return true;
},
email : function(a){
if ( !email_filter.test( a ) || a.match( email_illegalChars ) ){
alertTxt = a ? message.email : message.empty;
return false;
}
return true;
},
// a "skip" will skip some of the tests (needed for keydown validation)
text : function(a, skip){
// make sure there are at least X number of words, each at least 2 chars long.
// for example 'john F kenedy' should be at least 2 words and will pass validation
if( validateWords ){
var words = a.split(' ');
// iterrate on all the words
var wordsLength = function(len){
for( var w = words.length; w--; )
if( words[w].length < len )
return false;
return true;
};
// check if there is max length & field length is greater than the allowed if( words.length < validateWords || !wordsLength(2) ){
if( lengthRange && lengthRange[1] && a.length > lengthRange[1] ){ alertTxt = message.complete;
alertTxt = message.max; return false;
return false; }
} return true;
// check if the field's value should obey any length limits, and if so, make sure the length of the value is as specified }
if( lengthLimit && lengthLimit.length ){ if( !skip && lengthRange && a.length < lengthRange[0] ){
var obeyLimit = false; alertTxt = message.min;
while( lengthLimit.length ){ return false;
if( lengthLimit.pop() == a.length ) }
obeyLimit = true;
}
if( !obeyLimit ){
alertTxt = message.complete;
return false;
}
}
if( pattern ){ // check if there is max length & field length is greater than the allowed
var regex, jsRegex; if( lengthRange && lengthRange[1] && a.length > lengthRange[1] ){
switch( pattern ){ alertTxt = message.max;
case 'alphanumeric' : return false;
regex = /^[a-z0-9]+$/i; }
break;
case 'numeric' :
regex = /^[0-9]+$/i;
break;
case 'phone' :
regex = /^\+?([0-9]|[-|' '])+$/i;
break;
default :
regex = pattern;
}
try{
jsRegex = new RegExp(regex).test(a);
if( a && !jsRegex )
return false;
}
catch(err){
console.log(err, field, 'regex is invalid');
return false;
}
}
return true;
},
number : function(a){
// if not not a number
if( isNaN(parseFloat(a)) && !isFinite(a) ){
alertTxt = message.number;
return false;
}
// not enough numbers
else if( lengthRange && a.length < lengthRange[0] ){
alertTxt = message.min;
return false;
}
// check if there is max length & field length is greater than the allowed
else if( lengthRange && lengthRange[1] && a.length > lengthRange[1] ){
alertTxt = message.max;
return false;
}
else if( minmax[0] && (a|0) < minmax[0] ){
alertTxt = message.number_min;
return false;
}
else if( minmax[1] && (a|0) > minmax[1] ){
alertTxt = message.number_max;
return false;
}
return true;
},
// Date is validated in European format (day,month,year)
date : function(a){
var day, A = a.split(/[-./]/g), i;
// if there is native HTML5 support:
if( field[0].valueAsNumber )
return true;
for( i = A.length; i--; ){ // check if the field's value should obey any length limits, and if so, make sure the length of the value is as specified
if( isNaN(parseFloat(a)) && !isFinite(a) ) if( lengthLimit && lengthLimit.length ){
return false; while( lengthLimit.length ){
} if( lengthLimit.pop() == a.length ){
try{ alertTxt = message.complete;
day = new Date(A[2], A[1]-1, A[0]); return false;
if( day.getMonth()+1 == A[1] && day.getDate() == A[0] ) }
return day; }
return false; }
}
catch(er){
console.log('date test: ', err);
return false;
}
},
url : function(a){
// minimalistic URL validation
function testUrl(url){
return /^(https?:\/\/)?([\w\d\-_]+\.+[A-Za-z]{2,})+\/?/.test( url );
}
if( !testUrl( a ) ){
console.log(a);
alertTxt = a ? message.url : message.empty;
return false;
}
return true;
},
hidden : function(a){
if( lengthRange && a.length < lengthRange[0] ){
alertTxt = message.min;
return false;
}
if( pattern ){
var regex;
if( pattern == 'alphanumeric' ){
regex = /^[a-z0-9]+$/i;
if( !regex.test(a) ){
return false;
}
}
}
return true;
},
select : function(a){
if( !tests.hasValue(a) ){
alertTxt = message.select;
return false;
}
return true;
}
};
/* marks invalid fields if( pattern ){
*/ var regex, jsRegex;
switch( pattern ){
case 'alphanumeric' :
regex = /^[a-zA-Z0-9]+$/i;
break;
case 'numeric' :
regex = /^[0-9]+$/i;
break;
case 'phone' :
regex = /^\+?([0-9]|[-|' '])+$/i;
break;
default :
regex = pattern;
}
try{
jsRegex = new RegExp(regex).test(a);
if( a && !jsRegex )
return false;
}
catch(err){
console.log(err, field, 'regex is invalid');
return false;
}
}
return true;
},
number : function(a){
// if not not a number
if( isNaN(parseFloat(a)) && !isFinite(a) ){
alertTxt = message.number;
return false;
}
// not enough numbers
else if( lengthRange && a.length < lengthRange[0] ){
alertTxt = message.min;
return false;
}
// check if there is max length & field length is greater than the allowed
else if( lengthRange && lengthRange[1] && a.length > lengthRange[1] ){
alertTxt = message.max;
return false;
}
else if( minmax[0] && (a|0) < minmax[0] ){
alertTxt = message.number_min;
return false;
}
else if( minmax[1] && (a|0) > minmax[1] ){
alertTxt = message.number_max;
return false;
}
return true;
},
// Date is validated in European format (day,month,year)
date : function(a){
var day, A = a.split(/[-./]/g), i;
// if there is native HTML5 support:
if( field[0].valueAsNumber )
return true;
for( i = A.length; i--; ){
if( isNaN(parseFloat(a)) && !isFinite(a) )
return false;
}
try{
day = new Date(A[2], A[1]-1, A[0]);
if( day.getMonth()+1 == A[1] && day.getDate() == A[0] )
return day;
return false;
}
catch(er){
console.log('date test: ', err);
return false;
}
},
url : function(a){
// minimalistic URL validation
function testUrl(url){
return /^(https?:\/\/)?([\w\d\-_]+\.+[A-Za-z]{2,})+\/?/.test( url );
}
if( !testUrl( a ) ){
alertTxt = a ? message.url : message.empty;
return false;
}
return true;
},
hidden : function(a){
if( lengthRange && a.length < lengthRange[0] ){
alertTxt = message.min;
return false;
}
if( pattern ){
var regex;
if( pattern == 'alphanumeric' ){
regex = /^[a-z0-9]+$/i;
if( !regex.test(a) ){
return false;
}
}
}
return true;
},
select : function(a){
if( !tests.hasValue(a) ){
alertTxt = message.select;
return false;
}
return true;
}
};
/* marks invalid fields
*/
mark = function( field, text ){ mark = function( field, text ){
if( !text || !field || !field.length ) if( !text || !field || !field.length )
return false; return false;
// check if not already marked as a 'bad' record and add the 'alert' object. // check if not already marked as a 'bad' record and add the 'alert' object.
// if already is marked as 'bad', then make sure the text is set again because i might change depending on validation // if already is marked as 'bad', then make sure the text is set again because i might change depending on validation
var item = field.parents('.item'), var item = field.closest('.' + defaults.classes.item),
warning; warning;
if( item.hasClass('bad') ){ if( item.hasClass(defaults.classes.bad) ){
if( defaults.alerts ) if( defaults.alerts )
item.find('.alert').html(text); item.find('.'+defaults.classes.alert).html(text);
} }
else if( defaults.alerts ){ else if( defaults.alerts ){
warning = $('<div class="alert">').html( text ); warning = $('<div class="'+ defaults.classes.alert +'">').html( text );
item.append( warning ); item.append( warning );
} }
item.removeClass('bad'); item.removeClass(defaults.classes.bad);
// a delay so the "alert" could be transitioned via CSS // a delay so the "alert" could be transitioned via CSS
setTimeout(function(){ setTimeout(function(){
item.addClass('bad'); item.addClass(defaults.classes.bad);
}, 0); }, 0);
}; };
/* un-marks invalid fields /* un-marks invalid fields
*/ */
unmark = function( field ){ unmark = function( field ){
if( !field || !field.length ){ if( !field || !field.length ){
console.warn('no "field" argument, null or DOM object not found'); console.warn('no "field" argument, null or DOM object not found');
return false; return false;
} }
field.parents('.item') field.closest('.' + defaults.classes.item)
.removeClass('bad') .removeClass(defaults.classes.bad)
.find('.alert').remove(); .find('.'+ defaults.classes.alert).remove();
}; };
function testByType(type, value){ function testByType(type, value){
if( type == 'tel' ) if( type == 'tel' )
pattern = pattern || 'phone'; pattern = pattern || 'phone';
if( !type || type == 'password' || type == 'tel' ) if( !type || type == 'password' || type == 'tel' || type == 'search' || type == 'file' )
type = 'text'; type = 'text';
return tests[type](value);
}
function prepareFieldData(el){ return tests[type] ? tests[type](value, true) : true;
field = $(el); }
field.data( 'valid', true ); // initialize validness of field by first checking if it's even filled out of now function prepareFieldData(el){
field.data( 'type', field.attr('type') ); // every field starts as 'valid=true' until proven otherwise field = $(el);
pattern = el.pattern;
}
/* Validations per-character keypress field.data( 'valid', true ); // initialize validity of field
*/ field.data( 'type', field.attr('type') ); // every field starts as 'valid=true' until proven otherwise
function keypress(e){ pattern = field.attr('pattern');
prepareFieldData(this); }
if( e.charCode ) /* Validations per-character keypress
return testByType( data.type, String.fromCharCode(e.charCode) ); */
} function keypress(e){
prepareFieldData(this);
// String.fromCharCode(e.charCode)
/* Checks a single form field by it's type and specific (custom) attributes if( e.charCode ){
*/ return testByType( this.type, this.value );
function checkField(){ }
// skip testing fields whom their type is not HIDDEN but they are HIDDEN via CSS. }
if( this.type !='hidden' && $(this).is(':hidden') )
return true;
prepareFieldData(this); /* Checks a single form field by it's type and specific (custom) attributes
*/
function checkField(){
// skip testing fields whom their type is not HIDDEN but they are HIDDEN via CSS.
if( this.type !='hidden' && $(this).is(':hidden') )
return true;
field.data( 'val', field[0].value.replace(/^\s+|\s+$/g, "") ); // cache the value of the field and trim it prepareFieldData(this);
data = field.data();
// Check if there is a specific error message for that field, if not, use the default 'invalid' message field.data( 'val', field[0].value.replace(/^\s+|\s+$/g, "") ); // cache the value of the field and trim it
alertTxt = message[field.prop('name')] || message.invalid; data = field.data();
// SELECT / TEXTAREA nodes needs special treatment // Check if there is a specific error message for that field, if not, use the default 'invalid' message
if( field[0].nodeName.toLowerCase() === "select" ){ alertTxt = message[field.prop('name')] || message.invalid;
data.type = 'select';
}
if( field[0].nodeName.toLowerCase() === "textarea" ){
data.type = 'text';
}
/* Gather Custom data attributes for specific validation:
*/
validateWords = data['validateWords'] || 0;
lengthRange = data['validateLengthRange'] ? (data['validateLengthRange']+'').split(',') : [1];
lengthLimit = data['validateLength'] ? (data['validateLength']+'').split(',') : false;
minmax = data['validateMinmax'] ? (data['validateMinmax']+'').split(',') : ''; // for type 'number', defines the minimum and/or maximum for the value as a number.
data.valid = tests.hasValue(data.val); // Special treatment
// check if field has any value if( field[0].nodeName.toLowerCase() === "select" ){
if( data.valid ){ data.type = 'select';
/* Validate the field's value is different than the placeholder attribute (and attribute exists) }
* this is needed when fixing the placeholders for older browsers which does not support them. else if( field[0].nodeName.toLowerCase() === "textarea" ){
* in this case, make sure the "placeholder" jQuery plugin was even used before proceeding data.type = 'text';
*/ }
if( tests.sameAsPlaceholder(field) ){ /* Gather Custom data attributes for specific validation:
alertTxt = message.empty; */
data.valid = false; validateWords = data['validateWords'] || 0;
} lengthRange = data['validateLengthRange'] ? (data['validateLengthRange']+'').split(',') : [1];
lengthLimit = data['validateLength'] ? (data['validateLength']+'').split(',') : false;
minmax = data['validateMinmax'] ? (data['validateMinmax']+'').split(',') : ''; // for type 'number', defines the minimum and/or maximum for the value as a number.
// if this field is linked to another field (their values should be the same) data.valid = tests.hasValue(data.val);
if( data.validateLinked ){
var linkedTo = data['validateLinked'].indexOf('#') == 0 ? $(data['validateLinked']) : $(':input[name=' + data['validateLinked'] + ']');
data.valid = tests.linked( data.val, linkedTo.val() );
}
/* validate by type of field. use 'attr()' is proffered to get the actual value and not what the browsers sees for unsupported types.
*/
else if( data.valid || data.type == 'select' )
data.valid = testByType(data.type, data.val);
// optional fields are only validated if they are not empty if( field.hasClass('optional') && !data.valid )
if( field.hasClass('optional') && !data.val ) data.valid = true;
data.valid = true;
}
// mark / unmark the field, and set the general 'submit' flag accordingly
if( data.valid )
unmark( field );
else{
mark( field, alertTxt );
submit = false;
}
return data.valid; // for checkboxes
} if( field[0].type === "checkbox" ){
data.valid = field[0].checked;
alertTxt = message.checked;
}
/* vaildates all the REQUIRED fields prior to submiting the form // check if field has any value
*/ else if( data.valid ){
function checkAll( $form ){ /* Validate the field's value is different than the placeholder attribute (and attribute exists)
$form = $($form); * this is needed when fixing the placeholders for older browsers which does not support them.
* in this case, make sure the "placeholder" jQuery plugin was even used before proceeding
*/
if( tests.sameAsPlaceholder(field) ){
alertTxt = message.empty;
data.valid = false;
}
if( $form.length == 0 ){ // if this field is linked to another field (their values should be the same)
console.warn('element not found'); if( data.validateLinked ){
return false; var linkedTo = data['validateLinked'].indexOf('#') == 0 ? $(data['validateLinked']) : $(':input[name=' + data['validateLinked'] + ']');
} data.valid = tests.linked( data.val, linkedTo.val() );
}
/* validate by type of field. use 'attr()' is proffered to get the actual value and not what the browsers sees for unsupported types.
*/
else if( data.valid || data.type == 'select' )
data.valid = testByType(data.type, data.val);
var that = this, }
submit = true, // save the scope
fieldsToCheck = $form.find(':input').filter('[required=required], .required, .optional').not('[disabled=disabled]');
fieldsToCheck.each(function(){ // mark / unmark the field, and set the general 'submit' flag accordingly
// use an AND operation, so if any of the fields returns 'false' then the submitted result will be also FALSE if( data.valid )
submit = submit * checkField.apply(this); unmark( field );
}); else{
mark( field, alertTxt );
submit = false;
}
return !!submit; // casting the variable to make sure it's a boolean return data.valid;
} }
return { /* vaildates all the REQUIRED fields prior to submiting the form
defaults : defaults, */
checkField : checkField, function checkAll( $form ){
keypress : keypress, $form = $($form);
checkAll : checkAll,
mark : mark, if( $form.length == 0 ){
unmark : unmark, console.warn('element not found');
message : message, return false;
tests : tests }
}
})(jQuery); var that = this,
submit = true, // save the scope
// get all the input/textareas/select fields which are required or optional (meaning, they need validation only if they were filled)
fieldsToCheck = $form.find(':input').filter('[required=required], .required, .optional').not('[disabled=disabled]');
fieldsToCheck.each(function(){
// use an AND operation, so if any of the fields returns 'false' then the submitted result will be also FALSE
submit = submit * checkField.apply(this);
});
return !!submit; // casting the variable to make sure it's a boolean
}
return {
defaults : defaults,
checkField : checkField,
keypress : keypress,
checkAll : checkAll,
mark : mark,
unmark : unmark,
message : message,
tests : tests
}
})(jQuery);

View File

@ -563,9 +563,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -507,9 +507,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -474,9 +474,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -366,9 +366,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -512,9 +512,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -668,9 +668,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -503,9 +503,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -709,9 +709,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -775,9 +775,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -938,9 +938,8 @@
</div> </div>
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -405,9 +405,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -935,9 +935,8 @@
<!-- footer content --> <!-- footer content -->
<footer> <footer>
<div class=""> <div class="copyright-info">
<p class="pull-right">Gentelella Alela! a Bootstrap 3 template by <a>Kimlabs</a>. | <p class="pull-right">Gentelella - Bootstrap Admin Template by <a href="https://colorlib.com">Colorlib</a>
<span class="lead"> <i class="fa fa-paw"></i> Gentelella Alela!</span>
</p> </p>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>