mirror of
https://github.com/pronamic/woocommerce-subscriptions.git
synced 2025-10-10 11:32:54 +00:00
108 lines
3.0 KiB
JavaScript
Executable File
108 lines
3.0 KiB
JavaScript
Executable File
jQuery( document ).ready( function( $ ) {
|
|
var $toggleContainer = $( '.wcs-auto-renew-toggle' );
|
|
var $toggle = $( '.subscription-auto-renew-toggle', $toggleContainer );
|
|
var $icon = $toggle.find( 'i' );
|
|
var txtColor = null;
|
|
var $paymentMethod = $( '.subscription-payment-method' );
|
|
|
|
function getTxtColor() {
|
|
if ( !txtColor && ( $icon && $icon.length ) ) {
|
|
txtColor = getComputedStyle( $icon[0] ).color;
|
|
}
|
|
|
|
return txtColor;
|
|
}
|
|
|
|
function maybeApplyColor() {
|
|
if ( $toggle.hasClass( 'subscription-auto-renew-toggle--on' ) && $icon.length ) {
|
|
$icon[0].style.backgroundColor = getTxtColor();
|
|
$icon[0].style.borderColor = getTxtColor();
|
|
} else if( $icon.length ) {
|
|
$icon[0].style.backgroundColor = null;
|
|
$icon[0].style.borderColor = null;
|
|
}
|
|
}
|
|
|
|
function displayToggle() {
|
|
$toggle.removeClass( 'subscription-auto-renew-toggle--hidden' );
|
|
}
|
|
|
|
function onToggle( e ) {
|
|
e.preventDefault();
|
|
|
|
// Remove focus from the toggle element.
|
|
$toggle.blur();
|
|
|
|
var ajaxHandler = function( action ) {
|
|
var data = {
|
|
subscription_id: WCSViewSubscription.subscription_id,
|
|
action: action,
|
|
security: WCSViewSubscription.auto_renew_nonce,
|
|
};
|
|
|
|
// While we're waiting for an AJAX response, block the toggle element to prevent spamming the server.
|
|
blockToggle();
|
|
|
|
$.ajax({
|
|
url: WCSViewSubscription.ajax_url,
|
|
data: data,
|
|
type: 'POST',
|
|
success: function( result ) {
|
|
if ( result.payment_method ) {
|
|
$paymentMethod.fadeOut( function() {
|
|
$paymentMethod.html( result.payment_method ).fadeIn();
|
|
});
|
|
}
|
|
},
|
|
error: function( jqxhr, status, exception ) {
|
|
alert( 'Exception:', exception );
|
|
},
|
|
complete: unblockToggle
|
|
});
|
|
};
|
|
|
|
// Enable auto-renew
|
|
if ( $toggle.hasClass( 'subscription-auto-renew-toggle--off' ) ) {
|
|
// if payment method already exists just turn automatic renewals on.
|
|
if ( WCSViewSubscription.has_payment_gateway ) {
|
|
ajaxHandler( 'wcs_enable_auto_renew' );
|
|
displayToggleOn();
|
|
} else if ( window.confirm( WCSViewSubscription.add_payment_method_msg ) ) { // else add payment method
|
|
window.location.href = WCSViewSubscription.add_payment_method_url;
|
|
}
|
|
|
|
} else { // Disable auto-renew
|
|
ajaxHandler( 'wcs_disable_auto_renew' );
|
|
displayToggleOff();
|
|
}
|
|
|
|
maybeApplyColor();
|
|
}
|
|
|
|
function displayToggleOn() {
|
|
$icon.removeClass( 'fa-toggle-off' ).addClass( 'fa-toggle-on' );
|
|
$toggle.removeClass( 'subscription-auto-renew-toggle--off' ).addClass( 'subscription-auto-renew-toggle--on' );
|
|
}
|
|
|
|
function displayToggleOff() {
|
|
$icon.removeClass( 'fa-toggle-on' ).addClass( 'fa-toggle-off' );
|
|
$toggle.removeClass( 'subscription-auto-renew-toggle--on' ).addClass( 'subscription-auto-renew-toggle--off' );
|
|
}
|
|
|
|
function blockToggle() {
|
|
$toggleContainer.block({
|
|
message: null,
|
|
overlayCSS: { opacity: 0.0 }
|
|
});
|
|
}
|
|
|
|
function unblockToggle() {
|
|
$toggleContainer.unblock();
|
|
}
|
|
|
|
$toggle.on( 'click', onToggle );
|
|
maybeApplyColor();
|
|
displayToggle();
|
|
});
|
|
|