PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.10
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.10
1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 0.8.8 0.8.7 All 34 releases
← All changes | includes/widgets/heartbeat.php +62 -65 0.8.81.1.10 View file →
@@ -1,9 +1,9 @@
1 1 <?php
2 2 /**
3 - * Desktop Mode — Heartbeat widget (built-in, lazy-loaded).
3 + * OpenStation — Heartbeat widget (built-in, lazy-loaded).
4 4 *
5 - * Dogfoods the public `desktop_mode_register_widget()` API for a
5 + * Dogfoods the public `openstation_register_widget()` API for a
6 6 * built-in widget: the metadata + script handle live here, the
7 7 * JS + CSS ship as their own Vite bundle
8 8 * (`assets/js/widget-heartbeat[.min].js` and matching `.css`).
9 9 * The shell's widgets `server-sync` only loads them when the user
@@ -9,10 +9,9 @@
9 9 * The shell's widgets `server-sync` only loads them when the user
10 10 * adds the widget or the picker is opened — main bundle keeps
11 11 * none of the heart's code.
12 12 *
13 - * @package WPDesktopMode
14 - * @since 0.18.0
13 + * @package OpenStation
15 14 */
16 15
17 16 defined( 'ABSPATH' ) || exit;
18 17
@@ -18,35 +17,36 @@
18 17
19 18 /**
20 19 * Register the JS bundle as a script handle so it can be loaded
21 20 * lazily via `wp_register_script()` / its URL. The CSS file
22 - * emitted by Vite alongside the JS gets enqueued as a stylesheet
23 - * dependency so the chrome always paints with the JS.
24 - *
25 - * @since 0.18.0
21 + * emitted by Vite alongside the JS is registered as its own
22 + * style handle and eagerly enqueued by
23 + * openstation_enqueue_heartbeat_widget_styles() below — the
24 + * widget server-sync only injects the JS, so the stylesheet must
25 + * ship ahead of time for the chrome to paint with the JS.
26 26 */
27 -function desktop_mode_register_heartbeat_widget_assets() {
28 - $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
29 - $version = defined( 'DESKTOP_MODE_VERSION' ) ? DESKTOP_MODE_VERSION : '0';
27 +function openstation_register_heartbeat_widget_assets() {
28 + $suffix = openstation_asset_suffix();
29 + $version = defined( 'OPENSTATION_VERSION' ) ? OPENSTATION_VERSION : '0';
30 30
31 - $js_path = DESKTOP_MODE_DIR . 'assets/js/widget-heartbeat' . $suffix . '.js';
32 - $css_path = DESKTOP_MODE_DIR . 'assets/js/widget-heartbeat' . $suffix . '.css';
31 + $js_path = OPENSTATION_DIR . 'assets/js/widget-heartbeat' . $suffix . '.js';
32 + $css_path = OPENSTATION_DIR . 'assets/js/widget-heartbeat' . $suffix . '.css';
33 33
34 34 wp_register_style(
35 - 'desktop-mode-heartbeat-widget',
36 - DESKTOP_MODE_URL . 'assets/js/widget-heartbeat' . $suffix . '.css',
35 + 'os-heartbeat-widget',
36 + OPENSTATION_URL . 'assets/js/widget-heartbeat' . $suffix . '.css',
37 37 array(),
38 38 file_exists( $css_path ) ? (string) filemtime( $css_path ) : $version
39 39 );
40 40 wp_register_script(
41 - 'desktop-mode-heartbeat-widget',
42 - DESKTOP_MODE_URL . 'assets/js/widget-heartbeat' . $suffix . '.js',
41 + 'os-heartbeat-widget',
42 + OPENSTATION_URL . 'assets/js/widget-heartbeat' . $suffix . '.js',
43 43 array( 'wp-hooks' ),
44 44 file_exists( $js_path ) ? (string) filemtime( $js_path ) : $version,
45 45 true
46 46 );
47 47 }
48 -add_action( 'init', 'desktop_mode_register_heartbeat_widget_assets', 5 );
48 +add_action( 'init', 'openstation_register_heartbeat_widget_assets', 5 );
49 49
50 50 /**
51 51 * Register the widget itself. Sizing constraints + chrome metadata
52 52 * (label / description / icon) live here so the framework knows
@@ -51,42 +51,42 @@
51 51 * Register the widget itself. Sizing constraints + chrome metadata
52 52 * (label / description / icon) live here so the framework knows
53 53 * the widget exists at picker-render time, before the JS bundle
54 54 * is even fetched.
55 - *
56 - * @since 0.18.0
57 55 */
58 -function desktop_mode_register_heartbeat_widget() {
59 - if ( ! function_exists( 'desktop_mode_register_widget' ) ) {
56 +function openstation_register_heartbeat_widget() {
57 + if ( ! function_exists( 'openstation_register_widget' ) ) {
60 58 return;
61 59 }
62 - desktop_mode_register_widget( 'desktop-mode/heartbeat', array(
63 - 'label' => __( 'Heartbeat', 'desktop-mode' ),
64 - 'description' => __(
65 - 'A gently beating heart that pulses with the WordPress Heartbeat. The bar fills as the next tick approaches.',
66 - 'desktop-mode'
67 - ),
68 - 'icon' => 'dashicons-heart',
69 - 'script' => 'desktop-mode-heartbeat-widget',
70 - 'movable' => true,
71 - 'resizable' => false,
72 - 'min_width' => 310,
73 - 'max_width' => 310,
74 - 'min_height' => 230,
75 - 'max_height' => 230,
76 - 'default_width' => 310,
77 - 'default_height' => 230,
78 - ) );
60 + openstation_register_widget(
61 + 'desktop-mode/heartbeat',
62 + array(
63 + 'label' => __( 'Heartbeat', 'desktop-mode' ),
64 + 'description' => __(
65 + 'A gently beating heart that pulses with the WordPress Heartbeat. The bar fills as the next tick approaches.',
66 + 'desktop-mode'
67 + ),
68 + 'icon' => 'dashicons-heart',
69 + 'script' => 'os-heartbeat-widget',
70 + 'movable' => true,
71 + 'resizable' => false,
72 + 'min_width' => 310,
73 + 'max_width' => 310,
74 + 'min_height' => 230,
75 + 'max_height' => 230,
76 + 'default_width' => 310,
77 + 'default_height' => 230,
78 + )
79 + );
79 80 }
80 -add_action( 'init', 'desktop_mode_register_heartbeat_widget', 6 );
81 +add_action( 'init', 'openstation_register_heartbeat_widget', 6 );
81 82
82 83 /**
83 -/**
84 - * Eagerly enqueue the widget's CSS handle ONLY when the current
85 - * request is a Desktop Mode SHELL request — not a chromeless
86 - * iframe load, not an admin page that doesn't mount the desktop.
87 - * The JS bundle stays lazy and loads via the widget server-sync
88 - * the first time the picker opens or the widget mounts.
84 + * Eagerly enqueue the widget's CSS handle when the current
85 + * request runs in OpenStation and is not a chromeless iframe
86 + * load. The JS bundle stays lazy and loads via the widget
87 + * server-sync the first time the picker opens or the widget
88 + * mounts.
89 89 *
90 90 * Why eager (on shell pages): the shell injects a `<script>` for
91 91 * the widget at runtime, but there is no matching auto-load for
92 92 * the stylesheet. A pure-JS CSS injection creates a flash of
@@ -96,26 +96,25 @@
96 96 * kicks in. 1.9 KB ungzipped is small enough to live in the
97 97 * shell's always-loaded set without measurable cost; the
98 98 * heavier JS (9 KB + PIXI) stays lazy.
99 99 *
100 - * Why NOT eager elsewhere: a chromeless iframe never mounts a
101 - * widget, and an admin page that hasn't opted into the shell
102 - * doesn't either — sending the stylesheet anyway is dead weight.
103 - * The `desktop_mode_heartbeat_widget_eager_css` filter lets a
104 - * site owner opt out entirely (or, conversely, force-enable on
105 - * a non-shell page) without forking the plugin.
106 - *
107 - * @since 0.18.0
100 + * Why NOT eager in chromeless iframes: they never mount widgets
101 + * themselves — sending the stylesheet there is dead weight. Note
102 + * that classic-override pages (`?desktop_mode_classic=1`) are
103 + * not excluded: they skip the shell but still receive the
104 + * (1.9 KB) stylesheet. The
105 + * `openstation_heartbeat_widget_eager_css` filter lets a
106 + * site owner opt out entirely without forking the plugin.
108 107 */
109 -function desktop_mode_enqueue_heartbeat_widget_styles() {
110 - if ( function_exists( 'desktop_mode_is_enabled' ) && ! desktop_mode_is_enabled() ) {
108 +function openstation_enqueue_heartbeat_widget_styles() {
109 + if ( function_exists( 'openstation_is_enabled' ) && ! openstation_is_enabled() ) {
111 110 return;
112 111 }
113 112 // Chromeless requests render content inside an iframe owned
114 113 // by a shell elsewhere — they never mount widgets themselves.
115 114 if (
116 - function_exists( 'desktop_mode_is_chromeless_request' )
117 - && desktop_mode_is_chromeless_request()
115 + function_exists( 'openstation_is_chromeless_request' )
116 + && openstation_is_chromeless_request()
118 117 ) {
119 118 return;
120 119 }
121 120 /**
@@ -120,20 +119,18 @@
120 119 }
121 120 /**
122 121 * Whether to enqueue the heartbeat widget's stylesheet on
123 122 * this request. Defaults to `true` for shell requests in
124 - * Desktop Mode. Sites that never plan to ship the heartbeat
123 + * OpenStation. Sites that never plan to ship the heartbeat
125 124 * widget can return `false` and save the ~0.66 KB gzipped
126 125 * stylesheet roundtrip.
127 126 *
128 - * @since 0.18.x
129 - *
130 127 * @param bool $eager Default `true` once the chromeless +
131 - * desktop-mode gates above have passed.
128 + * openstation gates above have passed.
132 129 */
133 - $eager = (bool) apply_filters( 'desktop_mode_heartbeat_widget_eager_css', true );
130 + $eager = (bool) apply_filters( 'openstation_heartbeat_widget_eager_css', true );
134 131 if ( ! $eager ) {
135 132 return;
136 133 }
137 - wp_enqueue_style( 'desktop-mode-heartbeat-widget' );
134 + wp_enqueue_style( 'os-heartbeat-widget' );
138 135 }
139 -add_action( 'admin_enqueue_scripts', 'desktop_mode_enqueue_heartbeat_widget_styles', 20 );
136 +add_action( 'admin_enqueue_scripts', 'openstation_enqueue_heartbeat_widget_styles', 20 );