197 lines
4.9 KiB
JavaScript
197 lines
4.9 KiB
JavaScript
/**
|
|
* Duplicator Admin Notifications.
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var DupAdminNotifications = window.DupAdminNotifications || (function (document, window, $) {
|
|
|
|
/**
|
|
* Elements holder.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @type {object}
|
|
*/
|
|
var el = {
|
|
|
|
$notifications: $('#dup-notifications'),
|
|
$nextButton: $('#dup-notifications .navigation .next'),
|
|
$prevButton: $('#dup-notifications .navigation .prev'),
|
|
$adminBarCounter: $('#wp-admin-bar-dup-menu .dup-menu-notification-counter'),
|
|
$adminBarMenuItem: $('#wp-admin-bar-dup-notifications'),
|
|
|
|
};
|
|
|
|
/**
|
|
* Public functions and properties.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @type {object}
|
|
*/
|
|
var app = {
|
|
|
|
/**
|
|
* Start the engine.
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
init: function () {
|
|
|
|
$(app.ready);
|
|
},
|
|
|
|
/**
|
|
* Document ready.
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
ready: function () {
|
|
|
|
app.updateNavigation();
|
|
app.events();
|
|
},
|
|
|
|
/**
|
|
* Register JS events.
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
events: function () {
|
|
|
|
el.$notifications
|
|
.on('click', '.dismiss', app.dismiss)
|
|
.on('click', '.next', app.navNext)
|
|
.on('click', '.prev', app.navPrev);
|
|
},
|
|
|
|
/**
|
|
* Click on the Dismiss notification button.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @param {object} event Event object.
|
|
*/
|
|
dismiss: function (event) {
|
|
|
|
if (el.$currentMessage.length === 0) {
|
|
return;
|
|
}
|
|
|
|
// Update counter.
|
|
var count = parseInt(el.$adminBarCounter.text(), 10);
|
|
if (count > 1) {
|
|
--count;
|
|
el.$adminBarCounter.html(count);
|
|
} else {
|
|
el.$adminBarCounter.remove();
|
|
el.$adminBarMenuItem.remove();
|
|
}
|
|
|
|
// Remove notification.
|
|
var $nextMessage = el.$nextMessage.length < 1 ? el.$prevMessage : el.$nextMessage,
|
|
messageId = el.$currentMessage.data('message-id');
|
|
|
|
if ($nextMessage.length === 0) {
|
|
el.$notifications.fadeOut(300);
|
|
} else {
|
|
el.$currentMessage.remove();
|
|
$nextMessage.addClass('current');
|
|
app.updateNavigation();
|
|
}
|
|
|
|
// AJAX call - update option.
|
|
var data = {
|
|
action: 'duplicator_notification_dismiss',
|
|
nonce: dup_admin_notifications.nonce,
|
|
id: messageId,
|
|
};
|
|
|
|
$.post(dup_admin_notifications.ajax_url, data, function (res) {
|
|
|
|
if (!res.success) {
|
|
console.log(res);
|
|
}
|
|
}).fail(function (xhr, textStatus, e) {
|
|
|
|
console.log(xhr.responseText);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Click on the Next notification button.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @param {object} event Event object.
|
|
*/
|
|
navNext: function (event) {
|
|
|
|
if (el.$nextButton.hasClass('disabled')) {
|
|
return;
|
|
}
|
|
|
|
el.$currentMessage.removeClass('current');
|
|
el.$nextMessage.addClass('current');
|
|
|
|
app.updateNavigation();
|
|
},
|
|
|
|
/**
|
|
* Click on the Previous notification button.
|
|
*
|
|
* @since 1.6.0
|
|
*
|
|
* @param {object} event Event object.
|
|
*/
|
|
navPrev: function (event) {
|
|
|
|
if (el.$prevButton.hasClass('disabled')) {
|
|
return;
|
|
}
|
|
|
|
el.$currentMessage.removeClass('current');
|
|
el.$prevMessage.addClass('current');
|
|
|
|
app.updateNavigation();
|
|
},
|
|
|
|
/**
|
|
* Update navigation buttons.
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
updateNavigation: function () {
|
|
|
|
if (el.$notifications.find('.dup-notifications-message.current').length === 0) {
|
|
el.$notifications.find('.dup-notifications-message:first-child').addClass('current');
|
|
}
|
|
|
|
el.$currentMessage = el.$notifications.find('.dup-notifications-message.current');
|
|
el.$nextMessage = el.$currentMessage.next('.dup-notifications-message');
|
|
el.$prevMessage = el.$currentMessage.prev('.dup-notifications-message');
|
|
|
|
if (el.$nextMessage.length === 0) {
|
|
el.$nextButton.addClass('disabled');
|
|
} else {
|
|
el.$nextButton.removeClass('disabled');
|
|
}
|
|
|
|
if (el.$prevMessage.length === 0) {
|
|
el.$prevButton.addClass('disabled');
|
|
} else {
|
|
el.$prevButton.removeClass('disabled');
|
|
}
|
|
},
|
|
};
|
|
|
|
return app;
|
|
|
|
}(document, window, jQuery));
|
|
|
|
// Initialize.
|
|
DupAdminNotifications.init();
|