PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.13
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.13
1.1.13 1.1.12 1.1.11 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 All 37 releases
← All changes | includes/assets.php +123 -126 1.0.0 → 1.1.13 View file →
@@ -122,13 +122,14 @@
122 122 *
123 123 * window-chrome → window-states → effects → window-links
124 124 * → windows
125 125 *
126 - * `window-overview` and `os-settings` are deliberately NOT in this
127 - * chain — they are registered below, after `os-windows`,
128 - * so they can load deferred. Adding a sheet here means splicing it
129 - * into the chain, not appending an unrelated dependency: order is
130 - * the contract.
126 + * `window-overview` is deliberately NOT in this chain — it is
127 + * registered below, after `os-windows`, so it can load deferred.
128 + * Adding a sheet here means splicing it into the chain, not
129 + * appending an unrelated dependency: order is the contract.
130 + * (The Preferences window's sheet is not here at all: it rides
131 + * the `apps/os-settings/` app as a first-open companion style.)
131 132 */
132 133 $window_sheets = array(
133 134 'os-window-chrome' => 'assets/css/window-chrome.css',
134 135 'os-window-states' => 'assets/css/window-states.css',
@@ -154,14 +155,14 @@
154 155 OPENSTATION_URL . 'assets/css/windows.css',
155 156 $previous,
156 157 $built_version( 'assets/css/windows.css' )
157 158 );
158 - // These two load DEFERRED (see `openstation_defer_non_critical_styles()`):
159 - // the UI they style — the OS Settings panel and the window
160 - // overview — is lazy-loaded JS that can never be on screen at
161 - // first paint, so ~47 KB of CSS has no business blocking render.
162 - // They depend on `os-windows` so they print after it,
163 - // preserving the cascade position they had as `@import`s.
159 + // Loads DEFERRED (see `openstation_defer_non_critical_styles()`):
160 + // the UI it styles — the window overview — is lazy-loaded JS that
161 + // can never be on screen at first paint, so its CSS has no
162 + // business blocking render. It depends on `os-windows` so it
163 + // prints after it, preserving the cascade position it had as an
164 + // `@import`.
164 165 wp_register_style(
165 166 'os-window-overview',
166 167 OPENSTATION_URL . 'assets/css/window-overview.css',
167 168 array( 'os-windows' ),
@@ -166,13 +167,16 @@
166 167 OPENSTATION_URL . 'assets/css/window-overview.css',
167 168 array( 'os-windows' ),
168 169 $built_version( 'assets/css/window-overview.css' )
169 170 );
171 + // Solo mode — one window, no desk around it. Loads last so it can
172 + // hide surfaces the sheets above declared, and only enqueues on a
173 + // solo request, so a normal shell never pays for it.
170 174 wp_register_style(
171 - 'os-settings',
172 - OPENSTATION_URL . 'assets/css/os-settings.css',
175 + 'os-solo',
176 + OPENSTATION_URL . 'assets/css/solo.css',
173 177 array( 'os-windows' ),
174 - $built_version( 'assets/css/os-settings.css' )
178 + $built_version( 'assets/css/solo.css' )
175 179 );
176 180 wp_register_style(
177 181 'os-dock',
178 182 OPENSTATION_URL . 'assets/css/dock.css',
@@ -178,14 +182,67 @@
178 182 OPENSTATION_URL . 'assets/css/dock.css',
179 183 array( 'os-variables', 'dashicons' ),
180 184 $built_version( 'assets/css/dock.css' )
181 185 );
186 + // The Taskbar rail renderer. Scoped to the rail it stamps, so it is
187 + // inert under the icon strip; loaded with the dock because the
188 + // renderer can be picked live.
182 189 wp_register_style(
190 + 'os-dock-taskbar',
191 + OPENSTATION_URL . 'assets/css/dock-taskbar.css',
192 + array( 'os-dock' ),
193 + $built_version( 'assets/css/dock-taskbar.css' )
194 + );
195 + wp_register_style(
183 196 'os-dock-peek',
184 197 OPENSTATION_URL . 'assets/css/dock-peek.css',
185 198 array( 'os-dock' ),
186 199 $built_version( 'assets/css/dock-peek.css' )
187 200 );
201 + // The phone layer. Every rule is scoped to
202 + // `html[data-os-mode="mobile"]`, so the sheet is inert on a
203 + // desktop and the first paint on a phone is already right (the
204 + // head stamp writes the attribute before any stylesheet applies).
205 + // Depends on the dock and window sheets because it overrides them.
206 + wp_register_style(
207 + 'os-mobile',
208 + OPENSTATION_URL . 'assets/css/mobile.css',
209 + array( 'os-variables', 'dashicons', 'os-dock', 'os-windows' ),
210 + $built_version( 'assets/css/mobile.css' )
211 + );
212 + // The workspace wizard. Scoped to `.os-workspace-wizard`, so it is
213 + // inert until the user opens it from the overview bar's `+` or a
214 + // tile's Edit. Those controls are styled with the rest of the bar
215 + // in `window-overview.css`.
216 + wp_register_style(
217 + 'os-workspaces',
218 + OPENSTATION_URL . 'assets/css/workspaces.css',
219 + array( 'os-variables', 'dashicons' ),
220 + $built_version( 'assets/css/workspaces.css' )
221 + );
222 + // Keyboard-shortcuts window. Scoped to `.os-shortcuts`, so it is
223 + // inert until the System menu opens the window, and unconditional
224 + // for the same reason the layout sheet is: the window can be
225 + // opened at any moment and a deferred sheet would paint it raw.
226 + wp_register_style(
227 + 'os-shortcuts',
228 + OPENSTATION_URL . 'assets/css/shortcuts.css',
229 + array( 'os-variables' ),
230 + $built_version( 'assets/css/shortcuts.css' )
231 + );
232 + // The OpenStation desktop layout — the core/plugin seam on the rail
233 + // plus the constellation hover-submenu flyout. Both surfaces are
234 + // scoped (`[data-os-layout="openstation"]` / `.os-constellation`),
235 + // so the sheet is inert in every other layout and is loaded
236 + // unconditionally rather than gated on the user's current pick:
237 + // the layout is switchable live from OpenStation Preferences, and a
238 + // conditional enqueue would leave the first switch unstyled.
239 + wp_register_style(
240 + 'os-openstation-layout',
241 + OPENSTATION_URL . 'assets/css/openstation-layout.css',
242 + array( 'os-dock' ),
243 + $built_version( 'assets/css/openstation-layout.css' )
244 + );
188 245 // `filemtime`-stamped — the chromeless overrides iterate faster
189 246 // than the plugin-wide version bumps (per-page compat shims and
190 247 // page-title-action exceptions land in patches), and a stale
191 248 // cached copy means the user sees yesterday's rules. Without the
@@ -227,40 +284,10 @@
227 284 array( 'os-variables', 'dashicons' ),
228 285 file_exists( $recycle_bin_css ) ? (string) filemtime( $recycle_bin_css ) : $version
229 286 );
230 287
231 - // `filemtime` for the native Posts window CSS — same rationale as
232 - // the recycle-bin CSS: bundle iterates faster than the plugin
233 - // version and stale caches are worse than the cost of a 304.
234 - $posts_window_css = OPENSTATION_DIR . 'assets/css/posts-window.css';
235 - wp_register_style(
236 - 'os-posts-window',
237 - OPENSTATION_URL . 'assets/css/posts-window.css',
238 - array( 'os-variables', 'dashicons' ),
239 - file_exists( $posts_window_css ) ? (string) filemtime( $posts_window_css ) : $version
240 - );
241 -
242 - // Native Plugins window CSS — same `filemtime`-cache-bust posture
243 - // as the Posts/Recycle Bin styles.
244 - $plugins_window_css = OPENSTATION_DIR . 'assets/css/plugins-window.css';
245 - wp_register_style(
246 - 'os-plugins-window',
247 - OPENSTATION_URL . 'assets/css/plugins-window.css',
248 - array( 'os-variables', 'dashicons' ),
249 - file_exists( $plugins_window_css ) ? (string) filemtime( $plugins_window_css ) : $version
250 - );
251 -
252 - // Native Comments window CSS — same `filemtime` posture.
253 - $comments_window_css = OPENSTATION_DIR . 'assets/css/comments-window.css';
254 - wp_register_style(
255 - 'os-comments-window',
256 - OPENSTATION_URL . 'assets/css/comments-window.css',
257 - array( 'os-variables', 'dashicons' ),
258 - file_exists( $comments_window_css ) ? (string) filemtime( $comments_window_css ) : $version
259 - );
260 -
261 288 // Files-on-the-Desktop tile + layer styles. `filemtime` for the
262 - // same reason as the recycle-bin / posts-window CSS: this file
289 + // same reason as the recycle-bin CSS: this file
263 290 // iterates faster than the plugin version, and a stale cache
264 291 // would mask a real fix.
265 292 $desktop_files_css = OPENSTATION_DIR . 'assets/css/desktop-files.css';
266 293 wp_register_style(
@@ -296,14 +323,17 @@
296 323 );
297 324
298 325 // Pinned-notes layer styles (paper, pushpin, pastel tokens, pin
299 326 // animations). Same `filemtime` cache-bust posture as the other
300 - // fast-iterating feature stylesheets above.
327 + // fast-iterating feature stylesheets above. Depends on `os-files`
328 + // because a pinned note dresses the canonical `.os-file-tile`
329 + // chrome — anything that restyles a tile has to print after the
330 + // file that declares one.
301 331 $notes_css = OPENSTATION_DIR . 'assets/css/notes.css';
302 332 wp_register_style(
303 333 'os-notes',
304 334 OPENSTATION_URL . 'assets/css/notes.css',
305 - array( 'os-variables', 'dashicons' ),
335 + array( 'os-variables', 'dashicons', 'os-files' ),
306 336 file_exists( $notes_css ) ? (string) filemtime( $notes_css ) : $version
307 337 );
308 338
309 339 // Announcement-dialog styles (scrim, hero card, buttons). Registered
@@ -367,8 +397,49 @@
367 397 $built_version( 'assets/js/iframe-bridge' . $suffix . '.js' ),
368 398 true
369 399 );
370 400
401 + // `os-deactivation-feedback` — the dialog that asks one optional
402 + // question when an admin deactivates OpenStation. Enqueued on
403 + // `plugins.php` (classic, chromeless and network admin) by
404 + // `includes/feedback/deactivation.php`, and lazy-loaded by the
405 + // native Plugins app from its config block. Plain DOM on purpose:
406 + // the classic screen has no `<os-*>` kit.
407 + wp_register_script(
408 + 'os-deactivation-feedback',
409 + OPENSTATION_URL . 'assets/js/deactivation-feedback' . $suffix . '.js',
410 + array( 'wp-i18n' ),
411 + $built_version( 'assets/js/deactivation-feedback' . $suffix . '.js' ),
412 + true
413 + );
414 + wp_set_script_translations(
415 + 'os-deactivation-feedback',
416 + 'desktop-mode',
417 + OPENSTATION_DIR . 'languages'
418 + );
419 + $feedback_css = OPENSTATION_DIR . 'assets/css/deactivation-feedback.css';
420 + wp_register_style(
421 + 'os-deactivation-feedback',
422 + OPENSTATION_URL . 'assets/css/deactivation-feedback.css',
423 + array(),
424 + file_exists( $feedback_css ) ? (string) filemtime( $feedback_css ) : $version
425 + );
426 +
427 + // `os-chromeless-bridge` — the iframe side of every window,
428 + // enqueued on `admin_footer` by
429 + // `openstation_chromeless_bridge_script()` with its per-request
430 + // data attached as a `before` inline block. Registered here (not
431 + // there) so the handle exists before the enqueue and so the asset
432 + // guard's OPENSTATION_URL snapshot protects it like every other
433 + // bundle of ours.
434 + wp_register_script(
435 + 'os-chromeless-bridge',
436 + OPENSTATION_URL . 'assets/js/chromeless-bridge' . $suffix . '.js',
437 + array(),
438 + $built_version( 'assets/js/chromeless-bridge' . $suffix . '.js' ),
439 + true
440 + );
441 +
371 442 // `os-gutenberg-drop-receiver` — iframe-side bundle
372 443 // enqueued only on the Block Editor screens (`post.php` /
373 444 // `post-new.php`) for openstation users. Listens for
374 445 // `os-drop` postMessages from the parent shell (see
@@ -384,30 +455,13 @@
384 455 $built_version( 'assets/js/gutenberg-drop-receiver' . $suffix . '.js' ),
385 456 true
386 457 );
387 458
388 - // `desktop-mode-recycle-bin` — small bundle for the Recycle Bin
389 - // native window. Lazy-loaded by the native-window sync the first
390 - // time the bin opens; registers a render callback on
391 - // `window.openStationNativeWindows['desktop-mode-recycle-bin']`.
392 - $recycle_bin_js = OPENSTATION_DIR . 'assets/js/recycle-bin' . $suffix . '.js';
393 - wp_register_script(
394 - 'desktop-mode-recycle-bin',
395 - OPENSTATION_URL . 'assets/js/recycle-bin' . $suffix . '.js',
396 - // `heartbeat` + `jquery` — the bin opts in to the WordPress
397 - // Heartbeat API while its window is open as the catch-all
398 - // real-time channel for deletes that don't render an admin
399 - // footer (REST/AJAX/other tabs/WP-CLI). See
400 - // `src/recycle-bin/realtime.ts` for the subscriber.
401 - array( 'wp-i18n', 'heartbeat', 'jquery' ),
402 - file_exists( $recycle_bin_js ) ? (string) filemtime( $recycle_bin_js ) : $version,
403 - true
404 - );
405 - wp_set_script_translations(
406 - 'desktop-mode-recycle-bin',
407 - 'desktop-mode',
408 - OPENSTATION_DIR . 'languages'
409 - );
459 + // The Recycle Bin window is an App Framework app (`apps/trash/`);
460 + // its client view rides the app-bundle pipeline, so no dedicated
461 + // script handle. The `desktop-mode-recycle-bin` STYLE handle above
462 + // stays — the drag-to-trash drop-target highlight must be present
463 + // at boot (dropping on the closed bin's dock tile), not window-open.
410 464
411 465 // `desktop-mode-games` — bundle for the Games hub native window
412 466 // (launcher grid, scoreboard, challenges client). Lazy-loaded by
413 467 // the native-window sync the first time the hub opens; registers a
@@ -459,65 +513,8 @@
459 513 true
460 514 );
461 515 wp_set_script_translations(
462 516 'os-game-alphabet-soup',
463 - 'desktop-mode',
464 - OPENSTATION_DIR . 'languages'
465 - );
466 -
467 - // `os-posts-window` — small bundle for the native Posts
468 - // window. Lazy-loaded by the native-window sync the first time the
469 - // window opens (via the dock-click swap when the user opts in);
470 - // registers a render callback on
471 - // `window.openStationNativeWindows['desktop-mode-posts']`.
472 - $posts_window_js = OPENSTATION_DIR . 'assets/js/posts-window' . $suffix . '.js';
473 - wp_register_script(
474 - 'os-posts-window',
475 - OPENSTATION_URL . 'assets/js/posts-window' . $suffix . '.js',
476 - array( 'wp-i18n' ),
477 - file_exists( $posts_window_js ) ? (string) filemtime( $posts_window_js ) : $version,
478 - true
479 - );
480 - wp_set_script_translations(
481 - 'os-posts-window',
482 - 'desktop-mode',
483 - OPENSTATION_DIR . 'languages'
484 - );
485 -
486 - // `os-plugins-window` — small bundle for the native
487 - // Plugins window. Lazy-loaded by the native-window sync the first
488 - // time the window opens (via the dock-click swap when the user
489 - // opts in); registers a render callback on
490 - // `window.openStationNativeWindows['desktop-mode-plugins']`.
491 - $plugins_window_js = OPENSTATION_DIR . 'assets/js/plugins-window' . $suffix . '.js';
492 - wp_register_script(
493 - 'os-plugins-window',
494 - OPENSTATION_URL . 'assets/js/plugins-window' . $suffix . '.js',
495 - array( 'wp-i18n' ),
496 - file_exists( $plugins_window_js ) ? (string) filemtime( $plugins_window_js ) : $version,
497 - true
498 - );
499 - wp_set_script_translations(
500 - 'os-plugins-window',
501 - 'desktop-mode',
502 - OPENSTATION_DIR . 'languages'
503 - );
504 -
505 - // `os-comments-window` — small bundle for the native
506 - // Comments window. Lazy-loaded by the native-window sync the first
507 - // time the window opens (via the dock-click swap when the user
508 - // opts in); registers a render callback on
509 - // `window.openStationNativeWindows['desktop-mode-comments']`.
510 - $comments_window_js = OPENSTATION_DIR . 'assets/js/comments-window' . $suffix . '.js';
511 - wp_register_script(
512 - 'os-comments-window',
513 - OPENSTATION_URL . 'assets/js/comments-window' . $suffix . '.js',
514 - array( 'wp-i18n' ),
515 - file_exists( $comments_window_js ) ? (string) filemtime( $comments_window_js ) : $version,
516 - true
517 - );
518 - wp_set_script_translations(
519 - 'os-comments-window',
520 517 'desktop-mode',
521 518 OPENSTATION_DIR . 'languages'
522 519 );
523 520