Файл: module-assets/admin/js/lib/jquery.validVal-4.3.2.js
Строк: 921
<?php
/*
* jQuery validVal version 4.3.2
* demo's and documentation:
* validval.frebsite.nl
*
* Copyright (c) 2013 Fred Heusschen
* www.frebsite.nl
*
* Dual licensed under the MIT and GPL licenses.
* http://en.wikipedia.org/wiki/MIT_License
* http://en.wikipedia.org/wiki/GNU_General_Public_License
*/
(function( $ ) {
if ( $.fn.validVal ) {
return;
}
var textSelector = 'input:not( [type="button"], [type="submit"], [type="reset"] )',
inputSelector = textSelector + ', textarea, select';
$.fn.validVal = $.fn.validval = function( o, c, debug ) {
if ( this.length > 1 ) {
return this.each(function() {
$(this).validVal( o, c );
});
}
// debug option can be any of the arguments
if ( typeof o == 'boolean' ) {
debug = o;
o = null;
} else if ( typeof c == 'boolean' ) {
debug = c;
c = null;
}
var form = this,
opts = $.extend( true, {}, $.fn.validVal.defaults, o ),
clss = $.extend( true, {}, $.fn.validVal.classes, c );
// DEPRECATED
if ( typeof opts.invalidFormFunc == 'function' ) {
$.fn.validVal.deprecated( 'callback function "invalidFormFunc"', '"form.onInvalid"' );
opts.form.onInvalid = opts.invalidFormFunc;
}
if ( typeof opts.onSubmit == 'function' ) {
$.fn.validVal.deprecated( 'callback function "onSubmit"', '"form.onValid"' );
opts.form.onValid = opts.onSubmit;
}
if ( typeof opts.onReset == 'function' ) {
$.fn.validVal.deprecated( 'callback function "onReset"', '"form.onReset"' );
opts.form.onReset = opts.onReset;
}
if ( typeof opts.validFieldFunc == 'function' ) {
$.fn.validVal.deprecated( 'callback function "validFieldFunc"', '"fields.onValid"' );
opts.fields.onValid = opts.validFieldFunc;
}
if ( typeof opts.invalidFieldFunc == 'function' ) {
$.fn.validVal.deprecated( 'callback function "invalidFieldFunc"', '"fields.onInvalid"' );
opts.fields.onInvalid = opts.invalidFieldFunc;
}
if ( typeof opts.validate.hiddenFields == 'boolean' ) {
$.fn.validVal.deprecated( 'option "validate.hiddenFields"', '"validate.fields.hidden"' );
opts.validate.fields.hidden = opts.validate.hiddenFields;
}
if ( typeof opts.validate.disabledFields == 'boolean' ) {
$.fn.validVal.deprecated( 'option "validate.disabledFields"', '"validate.fields.disabled"' );
opts.validate.fields.disabled = opts.validate.disabledFields;
}
// /DEPRECATED
// destroy if re-created
if ( data( form, 'isValidVal' ) ) {
form.trigger( 'destroy.vv' );
}
form.data( 'vv-isValidVal', true );
// collect validations
opts.validations = {};
if ( $.fn.validVal.customValidations ) {
opts.validations = $.extend( opts.validations, $.fn.validVal.customValidations );
}
if ( opts.customValidations ) {
opts.validations = $.extend( opts.validations, opts.customValidations );
}
opts.validations = $.extend( opts.validations, $.fn.validVal.defaultValidations );
// bind events
form.bind(
'addField.vv',
function( event, el ) {
event.stopPropagation();
var $ff = $( el );
if ( data( $ff, 'isValidVal' ) ) {
$ff.trigger( 'destroy.vv' );
}
$ff.data( 'vv-isValidVal', true );
get_validations( $ff, opts );
// bind events
$ff.bind(
'focus.vv',
function( event ) {
clear_placeholdervalue( $ff );
$ff.addClass( getclass( 'focus' ) );
}
);
$ff.bind(
'blur.vv',
function( event ) {
$ff.removeClass( getclass( 'focus' ) );
$ff.trigger( 'validate.vv', [ opts.validate.onBlur ] );
}
);
$ff.bind(
'keyup.vv',
function( event ) {
if ( !preventkeyup( event.keyCode ) ) {
$ff.trigger( 'validate.vv', [ opts.validate.onKeyup, false ] );
}
}
);
$ff.bind(
'validate.vv',
function( event, onEvent, fixPlaceholder ) {
event.stopPropagation();
if ( onEvent === false ) {
return;
}
if ( typeof fixPlaceholder != 'boolean' ) {
fixPlaceholder = true;
}
$ff.data( 'vv-isValid', 'valid' );
if ( ( $ff.is( ':hidden' ) && !opts.validate.fields.hidden ) ||
( $ff.is( ':disabled' ) && !opts.validate.fields.disabled )
) {
return;
}
if ( fixPlaceholder ) {
clear_placeholdervalue( $ff );
}
if ( typeof opts.fields.onValidate == 'function' ) {
opts.fields.onValidate.call( $ff[0], form, opts.language );
}
var invalid_check = false,
val = trim( $ff.val() );
for ( var v in opts.validations ) {
var f = opts.validations[ v ];
if ( has_validation( $ff, v ) && typeof f == 'function' ) {
if ( !f.call( $ff[0], val ) ) {
invalid_check = v;
break;
}
}
}
var is_valid = ( invalid_check ) ? false : true;
var callCallback = ( is_valid )
? ( onEvent !== 'invalid' )
: ( onEvent !== 'valid' );
$ff.trigger( 'isValid.vv', [ is_valid, callCallback ] );
set_validationgroup( $ff, is_valid );
if ( fixPlaceholder ) {
restore_placeholdervalue( $ff );
}
if ( debug && invalid_check ) {
$.fn.validVal.debug( 'invalid validation: ' + invalid_check );
}
return is_valid;
}
);
$ff.bind(
'isValid.vv',
function( event, valid, callCallback ) {
event.stopPropagation();
if ( typeof valid == 'boolean' ) {
if ( valid ) {
$ff.data( 'vv-isValid', 'valid' );
if ( callCallback ) {
set_valid( $ff, form, opts );
}
} else {
$ff.data( 'vv-isValid', 'NOT' );
if ( callCallback ) {
set_invalid( $ff, form, opts );
}
}
} else {
return data( $ff, 'isValid' ) == 'valid';
}
}
);
$ff.bind(
'addValidation.vv',
function( event, validation ) {
event.stopPropagation();
var validations = data( $ff, 'validations' ).split( ' ' );
validations.push( validation );
$ff.data( 'vv-validations', validations.join( ' ' ) );
}
);
$ff.bind(
'removeValidation.vv',
function( event, validation ) {
event.stopPropagation();
var validations = ' ' + data( $ff, 'validations' ) + ' ';
validations = validations.split( ' ' + validation + ' ' );
$ff.data( 'vv-validations', validations.join( ' ' ) );
}
);
$ff.bind(
'destroy.vv',
function( event ) {
event.stopPropagation();
$ff.unbind( '.vv' );
$ff.data( 'vv-isValidVal', false );
}
);
// placeholder
if ( is_placeholderfield( $ff ) ) {
if ( $ff.val() == '' ) {
$ff.val( data( $ff, 'placeholder-value' ) );
}
if ( has_placeholdervalue( $ff ) ) {
$ff.addClass( getclass( 'inactive' ) );
}
if ( $ff.is( 'select' ) ) {
$ff.find( 'option:eq(' + data( $ff, 'placeholder-number' ) + ')' ).addClass( getclass( 'inactive' ) );
$ff.bind(
'change.vv',
function( event ) {
if ( has_placeholdervalue( $ff ) ) {
$ff.addClass( getclass( 'inactive' ) );
} else {
$ff.removeClass( getclass( 'inactive' ) );
}
}
);
}
}
// corresponding
if ( is_correspondingfield( $ff ) ) {
$(inputSelector).filter('[name="' + $ff.data( 'vv-corresponding' ) + '"]').bind(
'blur.vv',
function( event ) {
$ff.trigger( 'validate.vv', [ opts.validate.onBlur ] );
}
).bind(
'keyup.vv',
function( event ) {
if ( !preventkeyup( event.keyCode ) ) {
$ff.trigger( 'validate.vv', [ opts.validate.onKeyup, false ] );
}
}
);
}
// autotabbing
if ( has_validation( $ff, 'autotab' ) ) {
var max = $ff.attr( 'maxlength' ),
tab = $ff.attr( 'tabindex' ),
$next = $(inputSelector).filter('[tabindex="' + ( parseInt( tab ) + 1 ) + '"]');
if ( $ff.is( 'select' ) ) {
if ( tab ) {
$ff.bind(
'change.vv',
function( event ) {
if ( $next.length ) {
$next.focus();
}
}
);
}
} else {
if ( max && tab ) {
$ff.bind(
'keyup.vv',
function( event ) {
if ( $ff.val().length == max ) {
if ( !preventkeyup( event.keyCode ) ) {
$ff.trigger( 'blur' );
if ( $next.length ) {
$next.focus();
}
}
}
}
);
}
}
}
// autofocus
if ( has_validation( $ff, 'autofocus' ) && !$ff.is( ':disabled' ) ) {
$ff.focus();
}
}
);
opts.validate.fields.filter( $(inputSelector, form) ).each(function() {
form.trigger( 'addField.vv', [ $(this) ] );
}).filter( 'select, input[type="checkbox"], input[type="radio"]' ).bind(
'change.vv',
function( event ) {
$(this).trigger( 'blur.vv' );
}
);
form.bind(
'destroy.vv',
function( event ) {
event.stopPropagation();
form.unbind( '.vv' );
opts.validate.fields.filter( $(inputSelector, form) ).trigger( 'destroy.vv' );
form.data( 'vv-isValidVal', false );
}
);
form.bind(
'validate.vv',
function( event, body, callCallback ) {
event.stopPropagation();
if ( typeof body == 'undefined' ) {
body = form;
callCallback = true;
}
else if ( typeof callCallback != 'boolean' ) {
callCallback = false;
}
if ( typeof opts.form.onValidate == 'function' ) {
opts.form.onValidate.call( form[0], opts.language );
}
var miss_arr = $(),
data_obj = {};
opts.validate.fields.filter( $(inputSelector, body) ).each(function() {
var $ff = $(this);
if ( data( $ff, 'isValidVal' ) ) {
$ff.trigger( 'validate.vv', [ opts.validate.onSubmit ] );
var v = $ff.val();
if ( data( $ff, 'isValid' ) == 'valid' ) {
if ( $ff.is( '[type="radio"]' ) || $ff.is( '[type="checkbox"]' ) ) {
if ( !$ff.is( ':checked' ) ) {
v = '';
}
}
if (typeof v == 'undefined' || v == null) {
v = '';
}
if ( v.length > 0 ) {
data_obj[ $ff.attr( 'name' ) ] = v;
}
} else {
if ( opts.validate.onSubmit !== false ) {
miss_arr = miss_arr.add( $ff );
}
}
}
});
if ( miss_arr.length > 0 ) {
if ( typeof opts.form.onInvalid == 'function' && callCallback ) {
opts.form.onInvalid.call( form[0], miss_arr, opts.language );
}
return false;
} else {
if ( typeof opts.form.onValid == 'function' && callCallback ) {
opts.form.onValid.call( form[0], opts.language );
}
return data_obj;
}
}
);
form.bind(
'submitForm.vv',
function( event ) {
event.stopPropagation();
var result = form.triggerHandler( 'validate.vv' );
if ( result ) {
opts.validate.fields.filter( $(textSelector, form) ).each(function() {
clear_placeholdervalue( $(this) );
});
}
return result;
}
);
form.bind(
'resetForm.vv',
function( event ) {
event.stopPropagation();
if ( typeof opts.form.onReset == 'function' ) {
opts.form.onReset.call( form[0], opts.language );
}
opts.validate.fields.filter( $(inputSelector, form) ).each(function() {
var $ff = $(this);
if ( is_placeholderfield( $ff ) ) {
$ff.addClass( getclass( 'inactive' ) );
$ff.val( data( $ff, 'placeholder-value' ) );
} else {
$ff.val( data( $ff, 'original-value' ) );
}
$ff.trigger( 'isValid.vv', [ true, true ] );
});
return false;
}
);
// bind to native submit/reset
if ( form.is( 'form' ) ) {
form.attr( 'novalidate', 'novalidate' );
form.bind(
'submit.vv',
function( event ) {
return form.triggerHandler( 'submitForm.vv' );
}
);
form.bind(
'reset.vv',
function( event ) {
return form.triggerHandler( 'resetForm.vv' );
}
);
}
return form;
};
$.fn.validVal.defaults = {
'selectPlaceholder': 0,
'supportHtml5': true,
'language': 'en',
'customValidations': {},
'validate': {
'onBlur': true,
'onSubmit': true,
'onKeyup': false,
'fields': {
'hidden': false,
'disabled': false,
'filter':function( $i ) {
return $i;
}
}
},
'fields': {
'onValidate': null,
'onValid': function() {
var $f = $(this);
$f.add( $f.parent() ).removeClass( getclass( 'invalid' ) );
},
'onInvalid': function() {
var $f = $(this);
$f.add( $f.parent() ).addClass( getclass( 'invalid' ) );
}
},
'form': {
'onReset': null,
'onValidate': null,
'onValid': null,
'onInvalid': function( fieldArr, language ) {
switch ( language ) {
case 'nl':
msg = 'Let op, niet alle velden zijn correct ingevuld.';
break;
case 'de':
msg = 'Achtung, nicht alle Felder sind korrekt ausgefuellt.';
break;
case 'es':
msg = 'Atención, no se han completado todos los campos correctamente.';
break;
case 'en':
default:
msg = 'Attention, not all fields have been filled out correctly.';
break;
}
alert( msg );
fieldArr.first().focus();
}
},
'keepClasses': ['required'],
'keepAttributes': ['pattern']
};
$.fn.validVal.defaultValidations = {
'required': function( v ) {
var $f = $(this);
if ( $f.is( '[type="radio"]' ) || $f.is( '[type="checkbox"]' ) ) {
if ( $f.is( '[type="radio"]' ) ) {
var name = $f.attr( 'name' );
if ( name && name.length > 0 ) {
$f = $( 'input[name="' + name + '"]' );
}
}
if ( !$f.is( ':checked' ) ) {
return false;
}
} else if ( $f.is( 'select' ) ) {
if ( is_placeholderfield( $f ) ) {
if ( has_placeholdervalue( $f ) ) {
return false;
}
} else {
if ( v.length == 0 ) {
return false;
}
}
} else {
if ( v.length == 0 ) {
return false;
}
}
return true;
},
'Required': function( v ) {
return $.fn.validVal.defaultValidations.required.call( this, v );
},
'requiredgroup': function( v ) {
var $f = $(this),
gr = data( $f, 'requiredgroup' );
if ( gr.length ) {
$f = $(inputSelector).filter( ':vv-requiredgroup(' + gr + ')' );
}
var result = false;
$f.each(function() {
var f = this;
if ( $.fn.validVal.defaultValidations.required.call( f, trim( $(f).val() ) ) ) {
result = true;
}
});
return result;
},
'corresponding': function( v ) {
var $f = $(inputSelector).filter('[name="' + data( $(this), 'corresponding' ) + '"]');
clear_placeholdervalue( $f );
var org = trim( $f.val() );
restore_placeholdervalue( $f );
return ( v == org );
},
'number': function( v ) {
v = strip_whitespace( v );
if ( v.length == 0 ) {
return true;
}
if ( isNaN( v ) ) {
return false;
}
return true;
},
'email': function( v ) {
if ( v.length == 0 ) {
return true;
}
var r = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
return r.test( v );
},
'url': function( v ) {
if ( v.length == 0 ) {
return true;
}
if ( v.match(/^www./) ) {
v = "http://" + v;
}
return v.match(/^(http://|https://)(.{4,})$/);
},
'pattern': function( v ) {
if ( v.length == 0 ) {
return true;
}
var $f = $(this),
p = data( $f, 'pattern' );
if ( p.substr( 0, 1 ) == '/' ) {
p = p.substr( 1 );
}
if ( p.substr( p.length - 1 ) == '/' ) {
p = p.substr( 0, p.length -1 );
}
return new RegExp( p ).test( v );
}
};
$.fn.validVal.classes = {
// key : class
'focus' : 'focus',
'invalid' : 'invalid',
'inactive' : 'inactive'
};
$.fn.validVal.debug = function( msg ) {
if ( typeof console != 'undefined' ) {
if ( typeof console.log != 'undefined' ) {
console.log( 'validVal: ' + msg );
}
}
};
$.fn.validVal.deprecated = function( func, alt ) {
if ( typeof console != 'undefined' ) {
if ( typeof console.error != 'undefined' ) {
console.error( func + ' is DEPRECATED, use ' + alt + ' instead.' );
}
}
};
// test for borwser support
$.fn.validVal.support = {
touch: (function() {
return 'ontouchstart' in document.documentElement;
})(),
placeholder: (function() {
return 'placeholder' in document.createElement( 'input' );
})()
};
// extend jQuery selector engine
$.expr[':']['vv-requiredgroup'] = function( elem, counter, params ) {
return selector_engine( 'requiredgroup', elem, counter, params );
};
$.expr[':']['vv-validationgroup'] = function( elem, counter, params ) {
return selector_engine( 'validationgroup', elem, counter, params );
};
function selector_engine( string, elem, counter, params ) {
if ( !elem || !params || !params[ 3 ] ) {
return false;
}
var group = data( $(elem), string );
if ( !group.length ) {
return false;
}
return group == params[ 3 ];
}
// placeholder functions
function is_placeholderfield( $f ) {
return has_validation( $f, 'placeholder' );
}
function has_placeholdervalue( $f ) {
if ( trim( $f.val() ) == data( $f, 'placeholder-value' ) ) {
return true;
}
return false;
}
function clear_placeholdervalue( $f ) {
if ( is_placeholderfield( $f ) ) {
if ( has_placeholdervalue( $f ) && !$f.is( 'select' ) ) {
$f.val( '' );
$f.removeClass( getclass( 'inactive' ) );
}
}
}
function restore_placeholdervalue( $f ) {
if ( is_placeholderfield( $f ) ) {
if ( trim( $f.val() ) == '' && !$f.is( 'select' ) ) {
$f.val( data( $f, 'placeholder-value' ) );
$f.addClass( getclass( 'inactive' ) );
}
}
}
// corresponding
function is_correspondingfield( $f ) {
return has_validation( $f, 'corresponding' );
}
// validate group
function is_validationgroupfield( $f ) {
return has_validation( $f, 'validationgroup' );
}
function set_validationgroup( $f, valid ) {
if ( is_validationgroupfield( $f ) ) {
var gr = data( $f, 'validationgroup' );
if ( gr.length ) {
$(inputSelector).filter( ':vv-validationgroup(' + gr + ')' ).not( $f ).each(function() {
$(this).trigger( 'isValid.vv', [ valid, true ] );
});
}
}
}
// valid/invalid
function set_valid( $f, f, o ) {
if ( typeof o.fields.onValid == 'function' ) {
o.fields.onValid.call( $f[0], f, o.language );
}
}
function set_invalid( $f, f, o ) {
if ( typeof o.fields.onInvalid == 'function' ) {
o.fields.onInvalid.call( $f[0], f, o.language );
}
}
// HTML5 stuff
function has_html5_attr( $f, a ) {
// non HTML5 browsers
if ( typeof $f.attr( a ) == 'undefined' ) {
return false;
}
// HTML5 browsers
if ( $f.attr( a ) === 'false' || $f.attr( a ) === false ) {
return false;
}
return true;
}
function has_html5_type( $f, t ) {
// cool HTML5 browsers
if ( $f.attr( 'type' ) == t ) {
return true;
}
// non-HTML5 but still cool browsers
if ( $f.is( 'input[type="' + t + '"]' ) ) {
return true;
}
// non-HTML5, non-cool browser
var res = get_outerHtml( $f );
if ( res.indexOf( 'type="' + t + '"' ) != -1 || res.indexOf( 'type='' + t + ''' ) != -1 || res.indexOf( 'type=' + t + '' ) != -1 ) {
return true;
}
return false;
}
// get all validations
function get_validations( $f, o ) {
var classes = $f.attr( 'class' );
// DEPRECATED
var alt = $f.attr( 'alt' );
if ( alt && alt.length > 0 && !$f.hasClass( 'pattern' ) ) {
if ( $f.hasClass( 'corresponding' ) ) {
$.fn.validVal.deprecated( 'name in "alt"-attribute', 'class="corresponding:name"' );
$f.removeClass( 'corresponding' );
$f.removeAttr( 'alt' );
if ( o.supportHtml5 ) {
$f.data( 'vv-corresponding', alt );
} else {
$f.addClass( 'corresponding:' + alt );
}
}
if ( $f.hasClass( 'required' ) ) {
$.fn.validVal.deprecated( 'grouping required elements in the "alt"-attribute', 'class="requiredgroup:name"' );
$f.removeClass( 'required' );
$f.removeAttr( 'alt' );
if ( o.supportHtml5 ) {
$f.data( 'vv-requiredgroup', alt );
} else {
$f.addClass( 'requiredgroup:' + alt );
}
}
}
if ( classes && classes.indexOf( 'required:' ) != -1 ) {
$.fn.validVal.deprecated( 'grouping required elements with class="required:name"', 'class="requiredgroup:name"' );
}
// /DEPRECATED
var validations = [],
original_value = get_original_value( $f, o );
// refactor HTML5 usage
if ( o.supportHtml5 ) {
var valids = data( $f, 'validations' );
if ( valids.length ) {
validations.push( valids );
}
// placeholder attribute, only use if placeholder not supported by browser or placeholder not in keepAttributes-option
if ( has_html5_attr( $f, 'placeholder' ) && $f.attr( 'placeholder' ).length > 0 ) {
if ( !$.fn.validVal.support.placeholder || $.inArray( 'placeholder', o.keepAttributes ) == -1 ) {
$f.data( 'vv-placeholder-value', $f.attr( 'placeholder' ) );
}
}
var placeh = data( $f, 'placeholder-value' );
if ( placeh.length ) {
removeAttr( $f, 'placeholder', o );
validations.push( 'placeholder' );
}
// pattern attribute
if ( has_html5_attr( $f, 'pattern' ) && $f.attr( 'pattern' ).length > 0 ) {
$f.data( 'vv-pattern', $f.attr( 'pattern' ) );
removeAttr( $f, 'pattern', o );
validations.push( 'pattern' );
}
// corresponding, required group and validation group
var dts = [ 'corresponding', 'requiredgroup', 'validationgroup' ];
for ( var d = 0, l = dts.length; d < l; d++ ) {
if ( data( $f, dts[ d ] ).length ) {
validations.push( dts[ d ] );
}
}
// attributes
var atr = [ 'required', 'autofocus' ];
for ( var a = 0, l = atr.length; a < l; a++ ) {
if ( has_html5_attr( $f, atr[ a ] ) ) {
validations.push( atr[ a ] );
removeAttr( $f, atr[ a ], o );
}
}
// type-values
var typ = [ 'number', 'email', 'url' ];
for ( var t = 0, l = typ.length; t < l; t++ ) {
if ( has_html5_type( $f, typ[ t ] ) ) {
validations.push( typ[ t ] );
}
}
}
// refactor non-HTML5 usage
var classes = $f.attr( 'class' );
if ( classes && classes.length ) {
// placeholder
if ( $f.hasClass( 'placeholder' ) ) {
removeClass( $f, 'placeholder', o );
$f.data( 'vv-placeholder-value', original_value );
validations.push( 'placeholder' );
original_value = '';
}
// corresponding
var corsp = 'corresponding:',
start = classes.indexOf( corsp );
if ( start != -1 ) {
var corrcls = classes.substr( start ).split( ' ' )[ 0 ],
corresp = corrcls.substr( corsp.length );
if ( corresp.length ) {
$f.removeClass( corrcls );
$f.data( 'vv-corresponding', corresp );
validations.push( 'corresponding' );
}
}
// pattern
// still using alt-attribute...
if ( $f.hasClass( 'pattern' ) ) {
removeClass( $f, 'pattern', o );
$f.data( 'vv-pattern', get_original_value_from_value( $f, 'alt' ) );
removeAttr( $f, 'alt', o );
validations.push( 'pattern' );
}
// groups
var grp = [ 'requiredgroup', 'validationgroup' ];
for ( var g = 0, l = grp.length; g < l; g++ ) {
var group = grp[ g ] + ':',
start = classes.indexOf( group );
if ( start != -1 ) {
var groupclass = classes.substr( start ).split( ' ' )[ 0 ],
groupname = groupclass.substr( group.length );
if ( groupname.length ) {
$f.removeClass( groupclass );
$f.data( 'vv-' + grp[ g ], groupname );
validations.push( grp[ g ]);
}
}
}
}
// add all remaining classes
var classes = $f.attr( 'class' );
if ( classes && classes.length ) {
validations.push( classes );
}
// store validations
$f.data( 'vv-validations', validations.join( ' ' ) );
// save original value
$f.data( 'vv-original-value', original_value );
}
// misc
function has_validation( $f, v ) {
var d = ' ' + data( $f, 'validations' ) + ' ';
return d.indexOf( ' ' + v + ' ' ) != -1;
}
function data( $f, d ) {
var v = $f.data( 'vv-' + d );
if ( typeof v == 'undefined' ) {
v = '';
}
return v;
}
function removeAttr( $f, a, o ) {
if ( $.inArray( a, o.keepAttributes ) == -1 ) {
$f.removeAttr( a );
}
}
function removeClass( $f, c, o ) {
if ( $.inArray( c, o.keepClasses ) == -1 ) {
$f.removeClass( c );
}
}
function get_original_value( $f, o ) {
var val = get_outerHtml( $f );
if ( $f.is( 'select' ) ) {
var num = 0,
dal = data( $f, 'placeholder-number' );
if ( dal.length ) {
num = dal;
} else if ( typeof o.selectPlaceholder == 'number' ) {
num = o.selectPlaceholder;
} else {
$f.find( '> option' ).each(function( n ) {
val = get_outerHtml( $(this) );
var qal = val.split( "'" ).join( '"' ).split( '"' ).join( '' );
qal = qal.substr( 0, qal.indexOf( '>' ) );
if ( qal.indexOf( 'selected=selected' ) > -1 ) {
num = n;
}
});
}
$f.data( 'vv-placeholder-number', num );
return get_original_value_from_value( $f.find( '> option:nth(' + num + ')' ) );
} else if ( $f.is( 'textarea' ) ) {
val = val.substr( val.indexOf( '>' ) + 1 );
val = val.substr( 0, val.indexOf( '</textarea' ) );
return val;
} else {
return get_original_value_from_value( $f );
}
}
function get_original_value_from_value( $f, at ) {
if ( typeof at == 'undefined' ) {
at = 'value';
}
var val = get_outerHtml( $f ),
lal = val.toLowerCase();
if ( lal.indexOf( at + '=' ) > -1 ) {
val = val.substr( lal.indexOf( at + '=' ) + ( at.length + 1 ) );
var quot = val.substr( 0, 1 );
if ( quot == '"' || quot == "'" ) {
val = val.substr( 1 );
val = val.substr( 0, val.indexOf( quot ) );
} else {
val = val.substr( 0, val.indexOf( ' ' ) );
}
return val;
} else {
return '';
}
}
function get_outerHtml( $e ) {
return $( '<div></div>' ).append( $e.clone() ).html();
}
function getclass( cl ) {
if ( typeof clss != 'undefined' && typeof clss[ cl ] != 'undefined' ) {
return clss[ cl ];
}
return cl;
}
function trim( str ) {
if ( str === null ) {
return '';
}
if ( typeof str == 'object' ) {
var arr = [];
for ( var a in str ) {
arr[ a ] = trim( str[ a ] );
}
return arr;
}
if ( typeof str != 'string' ) {
return '';
}
if ( str.length == 0 ) {
return '';
}
return str.replace(/^ss*/, '').replace(/ss*$/, '');
}
function strip_whitespace( str ) {
if ( str === null ) {
return '';
}
if ( typeof str == 'object' ) {
for ( var a in str ) {
str[ a ] = strip_whitespace( str[ a ] );
}
return str;
}
if ( typeof str != 'string' ) {
return '';
}
if ( str.length == 0 ) {
return '';
}
str = trim( str );
var r = [ ' ', '-', '+', '(', ')', '/', '\' ];
for ( var i = 0, l = r.length; i < l; i++ ) {
str = str.split( r[ i ] ).join( '' );
}
return str;
}
function preventkeyup( kc ) {
switch( kc ) {
case 9: // tab
case 13: // enter
case 16: // shift
case 17: // control
case 18: // alt
case 37: // left
case 38: // up
case 39: // right
case 40: // down
case 224: // command
return true;
break;
default:
return false;
break;
}
}
})( jQuery );
?>