installed plugin Easy Digital Downloads
version 3.1.0.3
This commit is contained in:
@ -0,0 +1,125 @@
|
||||
/* global edd_vars */
|
||||
|
||||
document.addEventListener( 'alpine:init', () => {
|
||||
Alpine.store( 'eddNotifications', {
|
||||
isPanelOpen: false,
|
||||
notificationsLoaded: false,
|
||||
numberActiveNotifications: 0,
|
||||
activeNotifications: [],
|
||||
inactiveNotifications: [],
|
||||
|
||||
init: function() {
|
||||
const eddNotifications = this;
|
||||
|
||||
/*
|
||||
* The bubble starts out hidden until AlpineJS is initialized. Once it is, we remove
|
||||
* the hidden class. This prevents a flash of the bubble's visibility in the event that there
|
||||
* are no notifications.
|
||||
*/
|
||||
const notificationCountBubble = document.querySelector( '#edd-notification-button .edd-number' );
|
||||
if ( notificationCountBubble ) {
|
||||
notificationCountBubble.classList.remove( 'edd-hidden' );
|
||||
}
|
||||
|
||||
document.addEventListener( 'keydown', function( e ) {
|
||||
if ( e.key === 'Escape' ) {
|
||||
eddNotifications.closePanel();
|
||||
}
|
||||
} );
|
||||
|
||||
const params = new URLSearchParams( window.location.search );
|
||||
|
||||
const triggerNotifications = params.has( 'notifications' );
|
||||
if ( triggerNotifications && 'true' === params.get( 'notifications' ) ) {
|
||||
eddNotifications.openPanel();
|
||||
}
|
||||
},
|
||||
|
||||
openPanel: function() {
|
||||
const panelHeader = document.getElementById( 'edd-notifications-header' );
|
||||
|
||||
if ( this.notificationsLoaded ) {
|
||||
this.isPanelOpen = true;
|
||||
if ( panelHeader ) {
|
||||
setTimeout( function() {
|
||||
panelHeader.focus();
|
||||
} );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
this.isPanelOpen = true;
|
||||
|
||||
this.apiRequest( '/notifications', 'GET' )
|
||||
.then( data => {
|
||||
this.activeNotifications = data.active;
|
||||
this.inactiveNotifications = data.dismissed;
|
||||
this.notificationsLoaded = true;
|
||||
|
||||
if ( panelHeader ) {
|
||||
panelHeader.focus();
|
||||
}
|
||||
} )
|
||||
.catch( error => {
|
||||
console.log( 'Notification error', error );
|
||||
} );
|
||||
},
|
||||
|
||||
closePanel: function() {
|
||||
if ( ! this.isPanelOpen ) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.isPanelOpen = false;
|
||||
|
||||
const notificationButton = document.getElementById( 'edd-notification-button' );
|
||||
if ( notificationButton ) {
|
||||
notificationButton.focus();
|
||||
}
|
||||
},
|
||||
|
||||
apiRequest: function( endpoint, method ) {
|
||||
return fetch( edd_vars.restBase + endpoint, {
|
||||
method: method,
|
||||
credentials: 'same-origin',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-WP-Nonce': edd_vars.restNonce
|
||||
}
|
||||
} ).then( response => {
|
||||
if ( ! response.ok ) {
|
||||
return Promise.reject( response );
|
||||
}
|
||||
|
||||
/*
|
||||
* Returning response.text() instead of response.json() because dismissing
|
||||
* a notification doesn't return a JSON response, so response.json() will break.
|
||||
*/
|
||||
return response.text();
|
||||
//return response.json();
|
||||
} ).then( data => {
|
||||
return data ? JSON.parse( data ) : null;
|
||||
} );
|
||||
} ,
|
||||
|
||||
dismiss: function( event, index ) {
|
||||
if ( 'undefined' === typeof this.activeNotifications[ index ] ) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.target.disabled = true;
|
||||
|
||||
const notification = this.activeNotifications[ index ];
|
||||
|
||||
this.apiRequest( '/notifications/' + notification.id, 'DELETE' )
|
||||
.then( response => {
|
||||
this.activeNotifications.splice( index, 1 );
|
||||
this.numberActiveNotifications = this.activeNotifications.length;
|
||||
} )
|
||||
.catch( error => {
|
||||
console.log( 'Dismiss error', error );
|
||||
} );
|
||||
}
|
||||
} );
|
||||
} );
|
Reference in New Issue
Block a user