File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/admin/assets/js/validate.js
/**
* Workflow field validator
*/
(function( $, localizedErrorMessages ) {
var self;
AW.Validate = {
errorMessages: {},
init: function() {
setInterval(function() {
if ( typeof tinyMCE !== 'undefined' ) {
tinyMCE.triggerSave();
}
$('.automatewoo-field-wrap textarea.wp-editor-area').each(function() {
$(this).attr( 'data-automatewoo-validate', 'variables' );
self.validateField( $(this) );
});
}, 2000 );
$( document.body ).on( 'keyup blur change', '[data-automatewoo-validate]', function( event ){
self.validateField( $(event.target) )
});
self.validateAllFields();
},
validateAllFields: function() {
$( '[data-automatewoo-validate]' ).each( function() {
self.validateField( $(this) );
});
},
validateField: function( $field ) {
if ( ! AW.workflow )
return;
var errors = [];
var text = $field.val();
self.clearFieldErrors( $field );
var usedVariables = AW.Validate.getVariablesFromText( text );
if ( self.fieldSupports( 'variables', $field ) ) {
var trigger = AW.workflow.get( 'trigger' );
_.each( usedVariables, function( variable ) {
var valid = self.isVariableValidForTrigger( variable, trigger );
if ( valid !== true ) {
errors.push( self.getErrorMessage( valid, self.getVariableWithoutParams( variable ) ) );
}
});
}
else {
if ( usedVariables ) {
errors.push( self.getErrorMessage( 'noVariablesSupport' ) );
}
}
if ( errors.length ) {
self.setFieldErrors( $field, errors );
}
},
setFieldErrors: function( $field, errors ) {
$field.addClass( 'automatewoo-field--invalid' );
var $wrap = $field.parents( '.automatewoo-field-wrap:first' );
$wrap.append('<div class="automatewoo-field-errors"></div>');
var $errors = $wrap.find( '.automatewoo-field-errors' );
if ( $field.is( '.wp-editor-area' ) ) {
$wrap.find( '.wp-editor-container' ).addClass( 'automatewoo-field--invalid' )
}
_.each( errors, function( error ) {
$errors.append( '<div class="automatewoo-field-errors__error">'+ error + '</div>' );
});
},
clearFieldErrors: function( $field ) {
var $wrap = $field.parents( '.automatewoo-field-wrap:first' );
$field.removeClass( 'automatewoo-field--invalid' );
if ( $field.is( '.wp-editor-area' ) ) {
$wrap.find( '.wp-editor-container' ).removeClass( 'automatewoo-field--invalid' )
}
$wrap.find( '.automatewoo-field-errors' ).remove();
},
fieldSupports: function( option, $field ) {
var options = $field.data( 'automatewoo-validate' ).split( ' ' );
return _.indexOf( options, option ) !== -1
},
/**
* @param variable
* @param trigger
* @return boolean|string
*/
isVariableValidForTrigger: function( variable, trigger ) {
var dataType = self.getDataTypeFromVariable( variable );
var dataField = self.getDataFieldFromVariable( variable );
if ( dataType && _.indexOf( trigger.supplied_data_items, dataType ) === -1 ) {
return 'invalidDataType';
}
var variables = AW.workflow.get('variables');
if ( variables && variables[dataType] ) {
if ( variables[dataType].indexOf( dataField ) === -1 ) {
return 'invalidVariable';
}
}
return true;
},
/**
* Extract variables from a text field
* @param text
* @returns array|false
*/
getVariablesFromText: function( text ) {
var variables = text.match(/{{(.*?)}}/g);
if ( ! variables ) {
return false;
}
_.each( variables, function( variable, i ) {
variables[i] = variable.replace( /{|}/g, '' ).trim();
});
return variables;
},
getVariableWithoutParams: function( variable ) {
return variable.replace( /(\|.*)/, '' );
},
getDataTypeFromVariable: function( variable ) {
if ( variable.indexOf('.') === -1 ) return false;
return variable.replace( /(\..*)/, '' );
},
getDataFieldFromVariable: function( variable ) {
variable = self.getVariableWithoutParams( variable );
var dotpos = variable.indexOf('.');
if ( dotpos === -1 ) return false;
return variable.substring( dotpos + 1 ).trim();
},
getErrorMessage: function( error, replace ) {
if ( ! self.errorMessages[error] ) {
return 'Unknown error, please try refreshing your browser.';
}
var message = self.errorMessages[error];
if ( typeof replace == 'string' ) {
message = message.replace( '%s', replace );
}
return message;
}
};
self = AW.Validate;
self.errorMessages = localizedErrorMessages;
})( jQuery, automatewooValidateLocalizedErrorMessages );