Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 71 additions & 23 deletions assets/js/wpr-admin.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion assets/js/wpr-admin.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion assets/js/wpr-admin.min.js.map

Large diffs are not rendered by default.

93 changes: 70 additions & 23 deletions src/js/global/ajax.js
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,53 @@ document.addEventListener('DOMContentLoaded', function() {
}
}

/**
* Broadcasts global score changes to other tabs via localStorage.
* Uses a timestamp to ensure the storage event fires even with identical data.
*
* @param {Object} scoreData - The global score data to broadcast.
*/
function broadcastGlobalScoreUpdate(scoreData) {
try {
const payload = {
data: scoreData,
timestamp: Date.now()
};
localStorage.setItem('wpr_global_score_update', JSON.stringify(payload));
} catch (e) {
console.error('Failed to broadcast global score update:', e);
}
}

/**
* Updates the global score UI in the current tab.
* Handles both dashboard widget and Rocket Insights table row updates.
*
* @param {Object} newScoreData - The new global score data to display.
*/
function updateGlobalScoreUI(newScoreData) {
// Update local state
globalScoreData = newScoreData;

// Update dashboard widget if visible
if (isOnDashboard()) {
const $widget = $('#wpr_global_score_widget');
if ($widget.length && newScoreData.html) {
$widget.html(newScoreData.html);
}
}

// Update Rocket Insights table row if visible
if (isOnRocketInsights() && newScoreData.row_html) {
updateGlobalScoreRow(newScoreData);

// Update disabled button state if available
if ('disabled_btn_html' in newScoreData && newScoreData.disabled_btn_html.rocket_insights) {
$('#wpr_rocket_insights_add_page_btn_wrapper').html(newScoreData.disabled_btn_html.rocket_insights);
}
}
}

/**
* Updates the global score UI widget or table row based on the selected menu.
* When the dashboard or rocket insights menu is clicked, this function updates
Expand Down Expand Up @@ -475,15 +522,9 @@ document.addEventListener('DOMContentLoaded', function() {

// Update global score data and widget when status || page count changes.
if (globalScoreData.data.status !== response.data.global_score_data.data.status || globalScoreData.data.pages_num !== response.data.global_score_data.data.pages_num) {
// Update global score data.
globalScoreData = response.data.global_score_data;

// Update global score widget if on dashboard.
if ( isOnDashboard() ) {
$('#wpr_global_score_widget').html(response.data.global_score_data.html);
}
// Update global score row in table if on Rocket Insights page.
updateGlobalScoreRow(globalScoreData);
// Update UI and broadcast to other tabs
updateGlobalScoreUI(response.data.global_score_data);
broadcastGlobalScoreUpdate(response.data.global_score_data);
}
response.data.results.forEach(result => {
const $row = $(`[data-rocket-pm-id="${result.id}"]`);
Expand Down Expand Up @@ -536,15 +577,9 @@ document.addEventListener('DOMContentLoaded', function() {
// Update credit status
updateCreditState(response.data.has_credit);

// Update global score data.
globalScoreData = response.data.global_score_data;

// Update global score row in table if on Rocket Insights page.
updateGlobalScoreRow(globalScoreData);

if ('disabled_btn_html' in globalScoreData) {
$('#wpr_rocket_insights_add_page_btn_wrapper').html(globalScoreData.disabled_btn_html.rocket_insights);
}
// Update UI and broadcast to other tabs
updateGlobalScoreUI(response.data.global_score_data);
broadcastGlobalScoreUpdate(response.data.global_score_data);

// Show/hide quota banner based on can_add_pages
updateQuotaBanner(response.data.can_add_pages);
Expand Down Expand Up @@ -596,11 +631,9 @@ document.addEventListener('DOMContentLoaded', function() {
// Update quota banner visibility
updateQuotaBanner(response.data.can_add_pages);

// Update global score data.
globalScoreData = response.data.global_score_data;

// Update global score row in table if on Rocket Insights page.
updateGlobalScoreRow(globalScoreData);
// Update UI and broadcast to other tabs
updateGlobalScoreUI(response.data.global_score_data);
broadcastGlobalScoreUpdate(response.data.global_score_data);
// Start polling if not already running
if (!pollTimer) {
pollInterval = POLL_BASE_INTERVAL;
Expand All @@ -613,6 +646,20 @@ document.addEventListener('DOMContentLoaded', function() {
}

// ==== Initialization ====
// Listen for global score updates from other tabs
window.addEventListener('storage', function(e) {
if (e.key === 'wpr_global_score_update' && e.newValue) {
try {
const payload = JSON.parse(e.newValue);
if (payload.data) {
updateGlobalScoreUI(payload.data);
}
} catch (error) {
console.error('Failed to parse global score update:', error);
}
}
});

// Bind event
$(document).on( 'click', '#wpr-action-add_page_speed_radar', handleAddPage );
$(document).on( 'click', '.wpr-action-speed_radar_refresh', handleResetPage );
Expand Down
Loading