mirror of
https://github.com/pronamic/woocommerce-subscriptions.git
synced 2025-10-17 14:52:56 +00:00
Updates to 7.5.0
This commit is contained in:
169
assets/js/frontend/view-subscription.js
Normal file
169
assets/js/frontend/view-subscription.js
Normal file
@@ -0,0 +1,169 @@
|
||||
jQuery( function ( $ ) {
|
||||
// Auto Renewal Toggle
|
||||
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' );
|
||||
|
||||
// Early Renewal
|
||||
var $early_renewal_modal_submit = $( '#early_renewal_modal_submit' );
|
||||
var $early_renewal_modal_content = $( '.wcs-modal > .content-wrapper' );
|
||||
|
||||
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.trigger( 'blur' );
|
||||
|
||||
// Ignore the request if the toggle is disabled.
|
||||
if ( $toggle.hasClass( 'subscription-auto-renew-toggle--disabled' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
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();
|
||||
} );
|
||||
}
|
||||
if ( undefined !== result.is_manual ) {
|
||||
$paymentMethod.data( 'is_manual', result.is_manual );
|
||||
}
|
||||
},
|
||||
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();
|
||||
}
|
||||
|
||||
function blockEarlyRenewalModal() {
|
||||
$early_renewal_modal_content.block( {
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6,
|
||||
},
|
||||
} );
|
||||
}
|
||||
|
||||
// Don't display the early renewal modal for manual subscriptions, they will need to renew via the checkout.
|
||||
function shouldShowEarlyRenewalModal( event ) {
|
||||
// We're only interested in requests to show the early renewal modal.
|
||||
if (
|
||||
'.subscription_renewal_early' !==
|
||||
$( event.modal ).data( 'modal-trigger' )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $paymentMethod.data( 'is_manual' ) === 'no';
|
||||
}
|
||||
|
||||
function blockActionsOnTrigger() {
|
||||
$( '.subscription_details' ).block( {
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6,
|
||||
},
|
||||
} );
|
||||
}
|
||||
|
||||
$toggle.on( 'click', onToggle );
|
||||
maybeApplyColor();
|
||||
displayToggle();
|
||||
|
||||
$early_renewal_modal_submit.on( 'click', blockEarlyRenewalModal );
|
||||
$( document ).on( 'wcs_show_modal', shouldShowEarlyRenewalModal );
|
||||
$( document ).on( 'click', '.wcs_block_ui_on_click', blockActionsOnTrigger );
|
||||
} );
|
Reference in New Issue
Block a user