| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/dijon/components/com_community/assets/source/js/utils/ |
Upload File : |
(function( root, $, factory ) {
joms.util || (joms.util = {});
joms.util.validation = factory( root, $ );
})( window, joms.jQuery, function( window, $ ) {
var STATUS_VALID = 'valid',
STATUS_INVALID = 'invalid';
function getErrorContainer( el ) {
var wrapper, error;
el = $( el );
wrapper = el.parents('.joms-select--wrapper, .joms-textarea__wrapper, .joms-location__wrapper, .joms-checkbox--wrapper, .joms-radio--wrapper');
error = wrapper.length ? wrapper.next('p.joms-help') : el.next('p.joms-help');
if ( !error.length ) {
error = $('<p class="joms-help" style="color:red">');
error.hide().insertAfter( wrapper.length ? wrapper : el );
}
return error;
}
function addRequiredSign() {
$('.joms-form__group').find('[required]')
.add( $('.joms-form__group').find('[data-required]') )
.each(function() {
var el = $( this ),
par = el.closest('.joms-form__group'),
label = par.children().first();
if ( !label.find('.joms-required').length ) {
label.append(' <span class="joms-required">*</span>');
}
});
}
function addTextareaMaxChars() {
var textarea = $('.joms-form__group').find('textarea[data-maxchars]');
textarea.css('display', 'inline');
textarea.wrap('<div style="position:relative"></div>');
textarea.parent().append('<div class="joms-js--textarea-counter" style="position:absolute;bottom:2px;right:5px"></div>');
textarea.each(function() {
var $el = $( this );
$el.siblings('.joms-js--textarea-counter').html( $el.data('maxchars') );
});
textarea.off('input').on( 'input', function() {
var $el = $( this ),
$counter = $el.siblings('.joms-js--textarea-counter'),
maxChars = $el.data('maxchars') || 0,
val;
if ( maxChars ) {
val = $el.val();
if ( val.length > maxChars ) {
val = val.substr( 0, maxChars );
$el.val( val );
}
$counter.html( maxChars - val.length );
}
});
}
function addTextareaCharChecker() {
var textarea = $('.joms-textarea__wrapper').find('.joms-textarea--limit'),
errClass = 'joms-textarea--error',
evtName = 'input.joms-textarea-limit';
textarea.off( evtName ).on( evtName, function() {
var $el = $( this ),
$wrapper = $el.parent('.joms-textarea__wrapper'),
$counter = $wrapper.find('.joms-textarea__limit > span > span'),
minChars = $el.data('min-char'),
maxChars = $el.data('max-char'),
val = $el.val(),
len = val.length;
if ( !$wrapper.length ) {
$wrapper = $el;
}
// normalize min/max characters bound
minChars = isNaN( minChars ) ? 0 : Math.max( 0, +minChars );
maxChars = isNaN( maxChars ) ? false : Math.max( minChars, +maxChars );
if ( len < minChars ) {
if ( !$wrapper.hasClass( errClass )) {
$wrapper.addClass( errClass );
}
} else {
if ( $wrapper.hasClass( errClass )) {
$wrapper.removeClass( errClass );
}
if ( maxChars !== false && len > maxChars ) {
val = val.substr( 0, maxChars );
$el.val( val );
}
}
$wrapper.css('display', 'inline-block');
$counter.html( val.length );
setTimeout(function() {
$wrapper.css('display', '');
}, 0 );
});
}
function addValidationTrigger() {
var evtSuffix = 'joms-validation',
evtFocus = 'focus.' + evtSuffix,
evtBlur = 'blur.' + evtSuffix,
evtChange = 'change.' +evtSuffix,
evtValidate = 'validate.' + evtSuffix,
$form = $( '.joms-form__group' ),
$fields = $form.find( '[required]' ).add( $form.find( '[data-required]' ) );
$fields
.off( evtChange ).on( evtChange, function( e, callback) {
var $el = $(this);
if ($el.attr('type') === 'checkbox' || $el.attr('type') === 'radio') {
$el.trigger( evtValidate, callback );
}
})
.off( evtFocus ).on( evtFocus, function() {
var $el = $( this );
$el.data( 'currentValue', $el.val() );
})
.off( evtBlur ).on( evtBlur, function( e, callback ) {
var $el = $( this ),
currentValue = $el.data( 'currentValue' );
if ( typeof currentValue !== 'undefined' && $el.val() !== currentValue ) {
$el.trigger( evtValidate, callback );
}
})
.off( evtValidate ).on( evtValidate, function( e, callback ) {
var $el = $( this ),
$error = getErrorContainer( $el ),
$label = $el.closest( '.joms-form__group' ).children().first(),
name = $el.attr( 'name' ),
type = ( $el.attr( 'type' ) || '' ).toLowerCase(),
tagName = $el.prop( 'tagName' ).toLowerCase(),
label = $.trim( $label.text().replace( /\*/g, '' ) ),
val = $.trim( $el.val() ),
validation;
if ( typeof callback !== 'function' ) {
callback = function() {
var verify = $el.data( 'verify' ),
$verify;
// Trigger validation if confirmation field is not empty.
if ( verify ) {
$verify = $( verify );
if ( $verify.length && $.trim( $verify.val() ) ) {
$verify.trigger( evtValidate );
}
}
};
}
if ( type.match( /^(text|password)$/ ) || tagName.match( /^(select|textarea)$/ ) ) {
if ( ! val ) {
setMessage( $el, [ name, label, 'COM_COMMUNITY_REGISTER_INVALID_VALUE' ] );
callback( STATUS_INVALID );
} else {
validation = $el.data( 'validation' ) || '';
if ( validation === 'username' ) {
validateUsername( $el, val, callback, $el.data( 'current' ) || '' );
} else if ( validation === 'email' ) {
validateEmail( $el, val, callback );
} else if ( validation.match( /^email:/ ) ) {
validateEmailConfirmation( $el, val, callback );
} else if ( validation === 'password' ) {
validatePassword( $el, val, callback );
} else if ( validation.match( /^password:/ ) ) {
validatePasswordConfirmation( $el, val, callback );
} else {
$error.fadeOut();
callback( STATUS_VALID );
}
}
} else if (type.match( /^(radio|checkbox)$/ )) {
var checked = $('[name="'+name+'"]:checked').length;
if (!checked) {
setMessage( $el, [ name, label, 'COM_COMMUNITY_REGISTER_INVALID_VALUE' ] );
callback( STATUS_INVALID );
} else {
$error.fadeOut();
callback( STATUS_VALID );
}
}
});
}
function validateUsername( el, username, callback, current ) {
joms.ajax({
func: 'register,ajaxCheckUserName',
data: [ username, current ],
callback: function( json ) {
var error = getErrorContainer( el );
if ( json.error ) {
error.html( json.error );
error.show();
callback( STATUS_INVALID );
} else {
error.fadeOut();
callback( STATUS_VALID );
}
}
});
}
function validateEmail( el, email, callback ) {
var reEmail = /^([*+!.&#$¦\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,10})$/i;
if ( !reEmail.test( email ) ) {
setMessage( el, [ '', '', 'COM_COMMUNITY_INVALID_EMAIL' ]);
callback( STATUS_INVALID );
return;
}
joms.ajax({
func: 'register,ajaxCheckEmail',
data: [ email ],
callback: function( json ) {
var error = getErrorContainer( el );
if ( json.error ) {
error.html( json.error );
error.show();
callback( STATUS_INVALID );
} else {
error.fadeOut();
callback( STATUS_VALID );
}
}
});
}
function validateEmailConfirmation( el, value, callback ) {
var data, ref, error;
data = el.data('validation').split(':');
ref = $( data[1] );
error = getErrorContainer( el );
if ( !ref.length ) {
error.fadeOut();
callback( STATUS_VALID );
return;
}
if ( value !== ref.val() ) {
setMessage( el, [ '', '', 'COM_COMMUNITY_REGISTER_EMAIL_NOT_SAME' ]);
callback( STATUS_INVALID );
return;
}
error.fadeOut();
callback( STATUS_VALID );
}
function validatePassword( el, value, callback ) {
joms.ajax({
func: 'register,ajaxCheckPass',
data: [ value ],
callback: function( json ) {
var error = getErrorContainer( el );
if ( json.error ) {
error.html( json.error.replace(/\n/g, '<br/>') );
error.show();
callback( STATUS_INVALID );
} else {
error.fadeOut();
callback( STATUS_VALID );
}
}
});
}
function validatePasswordConfirmation( el, value, callback ) {
var data, ref, error;
data = el.data('validation').split(':');
ref = $( data[1] );
error = getErrorContainer( el );
if ( !ref.length ) {
error.fadeOut();
callback( STATUS_VALID );
return;
}
if ( value !== ref.val() ) {
setMessage( el, [ '', '', 'COM_COMMUNITY_REGISTER_PASSWORD_NOT_SAME' ]);
callback( STATUS_INVALID );
return;
}
error.fadeOut();
callback( STATUS_VALID );
}
function validate( $form, callback ) {
var errors = 0,
counter = 0,
form, fields, fieldsCount, checkbox, radio;
form = $( $form );
fields = form.find('[required]').add( form.find('[data-required]') );
fieldsCount = fields.length;
if ( !fields.length ) {
callback( errors );
}
fields.each(function() {
var $el = $( this );
$el.trigger( 'validate.joms-validation', function( result ) {
if ( result === STATUS_INVALID ) {
errors++;
}
if ( ++counter >= fieldsCount ) {
callback( errors );
}
});
});
return false;
}
function setMessage( el, data ) {
joms.ajax({
func: 'register,ajaxSetMessage',
data: data,
callback: function( json ) {
var error = getErrorContainer( el );
error.html( json.message );
error.show();
}
});
}
function start() {
addRequiredSign();
addTextareaMaxChars();
addTextareaCharChecker();
addValidationTrigger();
}
function stop() {
}
// Exports.
return {
start: start,
stop: stop,
validate: validate
};
});