Skip to content
Merged
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
11 changes: 11 additions & 0 deletions inc/class-dashboard-widgets.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,17 @@ public function enqueue_scripts(): void {
* we must enqueue wu-functions explicitly here.
*/
wp_enqueue_script('wu-functions');

/*
* Enqueue the activity-stream script here — during admin_enqueue_scripts —
* so WordPress resolves the full dependency chain (wu-functions, moment, etc.)
* before the script runs. Previously this was enqueued inside the view
* template during widget rendering, which fires after admin_enqueue_scripts
* and caused wu_moment to be undefined.
*/
wp_enqueue_script('wu-activity-stream', wu_get_asset('activity-stream.js', 'js'), ['wu-vue', 'wu-functions', 'moment'], wu_get_version(), true);

wp_add_inline_script('wu-activity-stream', 'var wu_activity_stream_nonce = "' . esc_js(wp_create_nonce('wu_activity_stream')) . '";', 'before');
}

/**
Expand Down
2 changes: 1 addition & 1 deletion inc/class-scripts.php
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ public function register_default_scripts(): void {
/*
* Adds General Functions
*/
$this->register_script('wu-functions', wu_get_asset('functions.js', 'js'), ['jquery-core', 'wu-tiptip', 'wu-flatpicker', 'wu-block-ui', 'wu-accounting', 'clipboard', 'wp-hooks']);
$this->register_script('wu-functions', wu_get_asset('functions.js', 'js'), ['jquery-core', 'moment', 'wu-tiptip', 'wu-flatpicker', 'wu-block-ui', 'wu-accounting', 'clipboard', 'wp-hooks']);

wp_localize_script(
'wu-functions',
Expand Down
39 changes: 39 additions & 0 deletions tests/WP_Ultimo/Dashboard_Widgets_Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,45 @@ public function test_enqueue_scripts_skips_non_index_page(): void {
$pagenow = $original;
}

/**
* Test enqueue_scripts enqueues activity-stream with correct deps on index.php.
*/
public function test_enqueue_scripts_enqueues_activity_stream_on_index(): void {

global $pagenow, $wp_scripts;

$original = $pagenow;
$original_queue = isset($wp_scripts) ? $wp_scripts->queue : [];
$pagenow = 'index.php';

if (isset($wp_scripts)) {
$wp_scripts->queue = [];
$wp_scripts->done = [];
}

// Ensure wu-functions is registered so the dependency chain resolves.
\WP_Ultimo\Scripts::get_instance()->register_default_scripts();

$instance = $this->get_instance();
$instance->enqueue_scripts();

$this->assertTrue(
wp_script_is('wu-activity-stream', 'enqueued'),
'wu-activity-stream should be enqueued on index.php'
);

// Verify wu-functions and moment are declared dependencies.
$script = $wp_scripts->registered['wu-activity-stream'] ?? null;
$this->assertNotNull($script, 'wu-activity-stream should be registered');
$this->assertContains('wu-functions', $script->deps);
$this->assertContains('moment', $script->deps);

if (isset($wp_scripts)) {
$wp_scripts->queue = $original_queue;
}
$pagenow = $original;
}

/**
* Test get_registered_dashboard_widgets returns array.
*
Expand Down
5 changes: 2 additions & 3 deletions views/dashboard-widgets/activity-stream.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ class='wu-feed-pagination wu-m-0 wu-flex wu-justify-between'>
</div>

<?php
// wu-functions must be a dependency so window.wu_moment is defined before activity-stream.js runs.
wp_enqueue_script('wu-activity-stream', wu_get_asset('activity-stream.js', 'js'), ['wu-vue', 'wu-functions'], wu_get_version(), true);
wp_add_inline_script('wu-activity-stream', 'var wu_activity_stream_nonce = "' . esc_js(wp_create_nonce('wu_activity_stream')) . '";', 'before');
// Script enqueued in Dashboard_Widgets::enqueue_scripts() during admin_enqueue_scripts
// so WordPress resolves the full dependency chain before the script runs.
?>
Loading