Skip to content

Commit 5999017

Browse files
committed
update JS for "flush site cache" button to ES6 (#311)
1 parent 8aea3c5 commit 5999017

File tree

3 files changed

+77
-67
lines changed

3 files changed

+77
-67
lines changed

.eslintrc.json

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
{
2-
"extends": "plugin:@wordpress/eslint-plugin/es5",
2+
"extends": "plugin:@wordpress/eslint-plugin/recommended",
33
"env": {
44
"browser": true
5-
},
6-
"rules": {
7-
"camelcase": 0,
8-
"vars-on-top": 0
95
}
106
}

inc/class-cachify.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -760,13 +760,13 @@ public static function add_flush_icon_script( $wp_admin_bar ) {
760760
/* Localize script */
761761
wp_localize_script(
762762
'cachify-admin-bar-flush',
763-
'cachify_admin_bar_flush_ajax_object',
763+
'cachifyAdminBarFlushAjaxObject',
764764
array(
765-
'url' => esc_url_raw( rest_url( self::REST_NAMESPACE . '/' . self::REST_ROUTE_FLUSH ) ),
766-
'nonce' => wp_create_nonce( 'wp_rest' ),
767-
'flushing' => __( 'Flushing cache', 'cachify' ),
768-
'flushed' => __( 'Cache flushed successfully', 'cachify' ),
769-
'dashicon_success' => self::get_dashicon_success_class(),
765+
'url' => esc_url_raw( rest_url( self::REST_NAMESPACE . '/' . self::REST_ROUTE_FLUSH ) ),
766+
'nonce' => wp_create_nonce( 'wp_rest' ),
767+
'flushing' => __( 'Flushing cache', 'cachify' ),
768+
'flushed' => __( 'Cache flushed successfully', 'cachify' ),
769+
'dashiconSuccess' => self::get_dashicon_success_class(),
770770
)
771771
);
772772
}

js/admin-bar-flush.js

+70-56
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,36 @@
1-
/* global cachify_admin_bar_flush_ajax_object */
2-
( function() {
3-
var is_flushing = false,
4-
admin_bar_cachify_list_item = document.getElementById( 'wp-admin-bar-cachify' ),
5-
flush_link = admin_bar_cachify_list_item.querySelector( 'a.ab-item' ),
6-
fallback_url = flush_link.getAttribute( 'href' ),
7-
aria_live_area = document.querySelector( '.ab-aria-live-area' );
1+
/* global cachifyAdminBarFlushAjaxObject */
2+
{
3+
let isFlushing = false;
4+
const adminBarItem = document.getElementById('wp-admin-bar-cachify');
5+
const flushLink = adminBarItem.querySelector('a.ab-item');
6+
const fallbackUrl = flushLink.getAttribute('href');
7+
const ariaLiveArea = document.querySelector('.ab-aria-live-area');
88

99
// Replacing flush link with button because with AJAX action, it is semantically not a link anymore.
10-
var button = document.createRange().createContextualFragment( '<button class="ab-item">' + flush_link.innerHTML + '</button>' );
11-
flush_link.parentNode.replaceChild( button, flush_link );
10+
const button = document
11+
.createRange()
12+
.createContextualFragment(
13+
'<button class="ab-item">' + flushLink.innerHTML + '</button>'
14+
);
15+
flushLink.parentNode.replaceChild(button, flushLink);
1216

13-
var admin_bar_icon = admin_bar_cachify_list_item.querySelector( '#wp-admin-bar-cachify .ab-icon' );
17+
const adminBarIcon = adminBarItem.querySelector(
18+
'#wp-admin-bar-cachify .ab-icon'
19+
);
1420

15-
document.querySelector( '#wp-admin-bar-cachify .ab-item' ).addEventListener( 'click', flush );
21+
document
22+
.querySelector('#wp-admin-bar-cachify .ab-item')
23+
.addEventListener('click', flush);
1624

17-
admin_bar_icon.addEventListener( 'animationend', function() {
18-
admin_bar_icon.classList.remove( 'animate-fade' );
19-
} );
25+
adminBarIcon.addEventListener('animationend', function () {
26+
adminBarIcon.classList.remove('animate-fade');
27+
});
2028

21-
function flush_icon_remove_classes() {
22-
var classes = [
29+
/**
30+
* Remove classes used for animation from flush icon.
31+
*/
32+
function flushIconRemoveClasses() {
33+
const classes = [
2334
'animate-fade',
2435
'animate-pulse',
2536
'dashicons-trash',
@@ -28,56 +39,59 @@
2839
'dashicons-dismiss',
2940
];
3041

31-
for ( var i = 0; i < classes.length; i++ ) {
32-
admin_bar_icon.classList.remove( classes[i] );
42+
for (const element of classes) {
43+
adminBarIcon.classList.remove(element);
3344
}
3445
}
3546

36-
function start_flush_icon_reset_timeout() {
37-
setTimeout( function() {
38-
flush_icon_remove_classes();
39-
admin_bar_icon.classList.add( 'animate-fade' );
40-
admin_bar_icon.classList.add( 'dashicons-trash' );
41-
is_flushing = false;
42-
aria_live_area.textContent = '';
43-
}, 2000 );
47+
/**
48+
* Add animation classes to flush icon.
49+
*/
50+
function startFlushIconResetTimeout() {
51+
setTimeout(() => {
52+
flushIconRemoveClasses();
53+
adminBarIcon.classList.add('animate-fade', 'dashicons-trash');
54+
isFlushing = false;
55+
ariaLiveArea.textContent = '';
56+
}, 2000);
4457
}
4558

46-
function flush( event ) {
59+
/**
60+
* Event listener to flush the cache.
61+
*
62+
* @param {MouseEvent} event Click event
63+
*/
64+
function flush(event) {
4765
event.preventDefault();
4866

49-
if ( is_flushing ) {
67+
if (isFlushing) {
5068
return;
5169
}
52-
is_flushing = true;
53-
aria_live_area.textContent = cachify_admin_bar_flush_ajax_object.flushing;
70+
isFlushing = true;
71+
ariaLiveArea.textContent = cachifyAdminBarFlushAjaxObject.flushing;
5472

55-
if ( admin_bar_icon !== null ) {
56-
flush_icon_remove_classes();
57-
admin_bar_icon.classList.add( 'animate-pulse' );
58-
admin_bar_icon.classList.add( 'dashicons-trash' );
73+
if (adminBarIcon !== null) {
74+
flushIconRemoveClasses();
75+
adminBarIcon.classList.add('animate-pulse');
76+
adminBarIcon.classList.add('dashicons-trash');
5977
}
6078

61-
var request = new XMLHttpRequest();
62-
request.addEventListener( 'load', function() {
63-
if ( this.status === 200 ) {
64-
start_flush_icon_reset_timeout();
65-
flush_icon_remove_classes();
66-
admin_bar_icon.classList.add( 'animate-fade' );
67-
admin_bar_icon.classList.add( cachify_admin_bar_flush_ajax_object.dashicon_success );
68-
aria_live_area.textContent = cachify_admin_bar_flush_ajax_object.flushed;
69-
return;
70-
}
71-
72-
window.location = fallback_url;
73-
} );
74-
75-
request.addEventListener( 'error', function() {
76-
window.location = fallback_url;
77-
} );
78-
79-
request.open( 'DELETE', cachify_admin_bar_flush_ajax_object.url );
80-
request.setRequestHeader( 'X-WP-Nonce', cachify_admin_bar_flush_ajax_object.nonce );
81-
request.send();
79+
fetch(cachifyAdminBarFlushAjaxObject.url, {
80+
method: 'DELETE',
81+
headers: { 'X-WP-Nonce': cachifyAdminBarFlushAjaxObject.nonce },
82+
})
83+
.then(() => {
84+
startFlushIconResetTimeout();
85+
flushIconRemoveClasses();
86+
adminBarIcon.classList.add('animate-fade');
87+
adminBarIcon.classList.add(
88+
cachifyAdminBarFlushAjaxObject.dashiconSuccess
89+
);
90+
ariaLiveArea.textContent =
91+
cachifyAdminBarFlushAjaxObject.flushed;
92+
})
93+
.catch(() => {
94+
window.location = fallbackUrl;
95+
});
8296
}
83-
}() );
97+
}

0 commit comments

Comments
 (0)