first commit

This commit is contained in:
2024-07-15 11:28:08 +02:00
commit f52d538ea5
21891 changed files with 6161164 additions and 0 deletions

View File

@@ -0,0 +1,309 @@
( function( $, CherryJsCore ) {
'use strict';
/**
* CherryAjaxHandler class
*
* @param {object} options Handler options
*/
CherryJsCore.utilites.namespace( 'CherryAjaxHandler' );
CherryJsCore.CherryAjaxHandler = function( options ) {
/**
* General default settings
*
* @type {Object}
*/
var self = this,
settings = {
'handlerId': '',
'cache': false,
'processData': true,
'url': '',
'async': false,
'beforeSendCallback': function() {},
'errorCallback': function() {},
'successCallback': function() {},
'completeCallback': function() {}
};
/**
* Checking options, settings and options merging
*
*/
if ( options ) {
$.extend( settings, options );
}
/**
* Check if handlerId ready to using
*
*/
if ( ! window[ settings.handlerId ] ) {
if ( window.console ) {
window.console.warn( 'Handler id not found' );
}
return false;
}
/**
* Set handler settings from localized global variable
*
* @type {Object}
*/
self.handlerSettings = window[ settings.handlerId ] || {};
/**
* Ajax request instance
*
* @type {Object}
*/
self.ajaxRequest = null;
/**
* Ajax processing state
*
* @type {Boolean}
*/
self.ajaxProcessing = false;
/**
* Set ajax request data
*
* @type {Object}
*/
self.data = {
'action': self.handlerSettings.action,
'nonce': self.handlerSettings.nonce
};
/**
* Check ajax url is empty
*/
if ( '' === settings.url ) {
// Check public request
if ( 'false' === self.handlerSettings.is_public ) {
settings.url = window.ajaxurl;
} else {
settings.url = window.cherryHandlerAjaxUrl.ajax_url;
}
}
/**
* Init ajax request
*
* @return {Void}
*/
self.send = function() {
if ( self.ajaxProcessing ) {
CherryJsCore.cherryHandlerUtils.noticeCreate( 'error-notice', self.handlerSettings.sys_messages.wait_processing, self.handlerSettings.is_public );
}
self.ajaxProcessing = true;
self.ajaxRequest = jQuery.ajax( {
type: self.handlerSettings.type,
url: settings.url,
data: self.data,
cache: settings.cache,
dataType: self.handlerSettings.data_type,
processData: settings.processData,
beforeSend: function( jqXHR, ajaxSettings ) {
if ( null !== self.ajaxRequest && ! settings.async ) {
self.ajaxRequest.abort();
}
if ( settings.beforeSendCallback && 'function' === typeof( settings.beforeSendCallback ) ) {
settings.beforeSendCallback( jqXHR, ajaxSettings );
}
},
error: function( jqXHR, textStatus, errorThrown ) {
$( document ).trigger( {
type: 'cherry-ajax-handler-error',
jqXHR: jqXHR,
textStatus: textStatus,
errorThrown: errorThrown
} );
if ( settings.errorCallback && 'function' === typeof( settings.errorCallback ) ) {
settings.errorCallback( jqXHR, textStatus, errorThrown );
}
},
success: function( data, textStatus, jqXHR ) {
self.ajaxProcessing = false;
$( document ).trigger( {
type: 'cherry-ajax-handler-success',
response: data,
jqXHR: jqXHR,
textStatus: textStatus
} );
if ( settings.successCallback && 'function' === typeof( settings.successCallback ) ) {
settings.successCallback( data, textStatus, jqXHR );
}
CherryJsCore.cherryHandlerUtils.noticeCreate( data.type, data.message, self.handlerSettings.is_public );
},
complete: function( jqXHR, textStatus ) {
$( document ).trigger( {
type: 'cherry-ajax-handler-complete',
jqXHR: jqXHR,
textStatus: textStatus
} );
if ( settings.completeCallback && 'function' === typeof( settings.completeCallback ) ) {
settings.completeCallback( jqXHR, textStatus );
}
}
} );
};
/**
* Send data ajax request
*
* @param {Object} data User data
* @return {Void}
*/
self.sendData = function( data ) {
var sendData = data || {};
self.data = {
'action': self.handlerSettings.action,
'nonce': self.handlerSettings.nonce,
'data': sendData
};
self.send();
};
/**
* Send form serialized data
* @param {String} formId Form selector
* @return {Void}
*/
self.sendFormData = function( formId ) {
var form = $( formId ),
data;
data = CherryJsCore.cherryHandlerUtils.serializeObject( form );
self.sendData( data );
};
};
CherryJsCore.utilites.namespace( 'cherryHandlerUtils' );
CherryJsCore.cherryHandlerUtils = {
/**
* Rendering notice message
*
* @param {String} type Message type
* @param {String} message Message content
* @return {Void}
*/
noticeCreate: function( type, message, isPublicPage ) {
var notice,
rightDelta = 0,
timeoutId,
isPublic = isPublicPage || false;
if ( ! message || 'true' === isPublic ) {
return false;
}
notice = $( '<div class="cherry-handler-notice ' + type + '"><span class="dashicons"></span><div class="inner">' + message + '</div></div>' );
$( 'body' ).prepend( notice );
reposition();
rightDelta = -1 * ( notice.outerWidth( true ) + 10 );
notice.css( { 'right': rightDelta } );
timeoutId = setTimeout( function() {
notice.css( { 'right': 10 } ).addClass( 'show-state' );
}, 100 );
timeoutId = setTimeout( function() {
rightDelta = -1 * ( notice.outerWidth( true ) + 10 );
notice.css( { right: rightDelta } ).removeClass( 'show-state' );
}, 4000 );
timeoutId = setTimeout( function() {
notice.remove();
clearTimeout( timeoutId );
}, 4500 );
function reposition() {
var topDelta = 100;
$( '.cherry-handler-notice' ).each( function() {
$( this ).css( { top: topDelta } );
topDelta += $( this ).outerHeight( true );
} );
}
},
/**
* Serialize form into
*
* @return {Object}
*/
serializeObject: function( form ) {
var self = this,
json = {},
pushCounters = {},
patterns = {
'validate': /^[a-zA-Z][a-zA-Z0-9_-]*(?:\[(?:\d*|[a-zA-Z0-9_-]+)\])*$/,
'key': /[a-zA-Z0-9_-]+|(?=\[\])/g,
'push': /^$/,
'fixed': /^\d+$/,
'named': /^[a-zA-Z0-9_-]+$/
};
this.build = function( base, key, value ) {
base[ key ] = value;
return base;
};
this.push_counter = function( key ) {
if ( undefined === pushCounters[ key ] ) {
pushCounters[ key ] = 0;
}
return pushCounters[ key ]++;
};
$.each( form.serializeArray(), function() {
var k, keys, merge, reverseKey;
// Skip invalid keys
if ( ! patterns.validate.test( this.name ) ) {
return;
}
keys = this.name.match( patterns.key );
merge = this.value;
reverseKey = this.name;
while ( undefined !== ( k = keys.pop() ) ) {
// Adjust reverseKey
reverseKey = reverseKey.replace( new RegExp( '\\[' + k + '\\]$' ), '' );
// Push
if ( k.match( patterns.push ) ) {
merge = self.build( [], self.push_counter( reverseKey ), merge );
} else if ( k.match( patterns.fixed ) ) {
merge = self.build( [], k, merge );
} else if ( k.match( patterns.named ) ) {
merge = self.build( {}, k, merge );
}
}
json = $.extend( true, json, merge );
});
return json;
}
};
}( jQuery, window.CherryJsCore ) );

View File

@@ -0,0 +1 @@
!function(e,a){"use strict";a.utilites.namespace("CherryAjaxHandler"),a.CherryAjaxHandler=function(t){var n=this,r={handlerId:"",cache:!1,processData:!0,url:"",async:!1,beforeSendCallback:function(){},errorCallback:function(){},successCallback:function(){},completeCallback:function(){}};return t&&e.extend(r,t),window[r.handlerId]?(n.handlerSettings=window[r.handlerId]||{},n.ajaxRequest=null,n.ajaxProcessing=!1,n.data={action:n.handlerSettings.action,nonce:n.handlerSettings.nonce},""===r.url&&(r.url="false"===n.handlerSettings.is_public?window.ajaxurl:window.cherryHandlerAjaxUrl.ajax_url),n.send=function(){n.ajaxProcessing&&a.cherryHandlerUtils.noticeCreate("error-notice",n.handlerSettings.sys_messages.wait_processing,n.handlerSettings.is_public),n.ajaxProcessing=!0,n.ajaxRequest=jQuery.ajax({type:n.handlerSettings.type,url:r.url,data:n.data,cache:r.cache,dataType:n.handlerSettings.data_type,processData:r.processData,beforeSend:function(e,a){null===n.ajaxRequest||r.async||n.ajaxRequest.abort(),r.beforeSendCallback&&"function"==typeof r.beforeSendCallback&&r.beforeSendCallback(e,a)},error:function(a,t,n){e(document).trigger({type:"cherry-ajax-handler-error",jqXHR:a,textStatus:t,errorThrown:n}),r.errorCallback&&"function"==typeof r.errorCallback&&r.errorCallback(a,t,n)},success:function(t,c,s){n.ajaxProcessing=!1,e(document).trigger({type:"cherry-ajax-handler-success",response:t,jqXHR:s,textStatus:c}),r.successCallback&&"function"==typeof r.successCallback&&r.successCallback(t,c,s),a.cherryHandlerUtils.noticeCreate(t.type,t.message,n.handlerSettings.is_public)},complete:function(a,t){e(document).trigger({type:"cherry-ajax-handler-complete",jqXHR:a,textStatus:t}),r.completeCallback&&"function"==typeof r.completeCallback&&r.completeCallback(a,t)}})},n.sendData=function(e){var a=e||{};n.data={action:n.handlerSettings.action,nonce:n.handlerSettings.nonce,data:a},n.send()},void(n.sendFormData=function(t){var r,c=e(t);r=a.cherryHandlerUtils.serializeObject(c),n.sendData(r)})):(window.console&&window.console.warn("Handler id not found"),!1)},a.utilites.namespace("cherryHandlerUtils"),a.cherryHandlerUtils={noticeCreate:function(a,t,n){function r(){var a=100;e(".cherry-handler-notice").each(function(){e(this).css({top:a}),a+=e(this).outerHeight(!0)})}var c,s,i=0,o=n||!1;return t&&"true"!==o?(c=e('<div class="cherry-handler-notice '+a+'"><span class="dashicons"></span><div class="inner">'+t+"</div></div>"),e("body").prepend(c),r(),i=-1*(c.outerWidth(!0)+10),c.css({right:i}),s=setTimeout(function(){c.css({right:10}).addClass("show-state")},100),s=setTimeout(function(){i=-1*(c.outerWidth(!0)+10),c.css({right:i}).removeClass("show-state")},4e3),void(s=setTimeout(function(){c.remove(),clearTimeout(s)},4500))):!1},serializeObject:function(a){var t=this,n={},r={},c={validate:/^[a-zA-Z][a-zA-Z0-9_-]*(?:\[(?:\d*|[a-zA-Z0-9_-]+)\])*$/,key:/[a-zA-Z0-9_-]+|(?=\[\])/g,push:/^$/,fixed:/^\d+$/,named:/^[a-zA-Z0-9_-]+$/};return this.build=function(e,a,t){return e[a]=t,e},this.push_counter=function(e){return void 0===r[e]&&(r[e]=0),r[e]++},e.each(a.serializeArray(),function(){var a,r,s,i;if(c.validate.test(this.name)){for(r=this.name.match(c.key),s=this.value,i=this.name;void 0!==(a=r.pop());)i=i.replace(new RegExp("\\["+a+"\\]$"),""),a.match(c.push)?s=t.build([],t.push_counter(i),s):a.match(c.fixed)?s=t.build([],a,s):a.match(c.named)&&(s=t.build({},a,s));n=e.extend(!0,n,s)}}),n}}}(jQuery,window.CherryJsCore);