Bookmarks opens sooner and the same way from the key as from the button. Shift+H now lands on the whole list instead of the Broken filter, loading starts as the pointer reaches the button, the list is laid out and drawn once instead of several times, config no longer carries Appearance and the widget editor into Bookmarks, and a view opens with half the fade. Held back from the What's new window (hideFromModal) like v1.18.1, so v1.18.4 keeps leading it.
Bookmarks
- fix —
Shift+Hopens the whole Bookmarks list, the same as its header button. The key went throughopenHealthView, which landed on the Broken filter — the old Health view's front page — and did nothing at all with health checks off, so the key and the button opened two different things.dashboard-setup.jsnow callsconfig.openLibraryView, with no filter and nothing selected;:healthand/#healthstill land on Broken.tests/bookmarks-shift-h.spec.jscovers it.
Performance
- fix — Bookmarks and Config start loading when the pointer reaches their button. The first open after a page load waited on the whole module, a 1.7 MB script to fetch, parse and run — about 500 ms over a VPN.
DashboardConfigLoader._bindIntentPrewarmlistens once, delegated, for a pointer, a focus or a touch on either button and callsprewarm(), which loads the module, the help translations, the view styles and (with checks on) the health module without opening anything; a failure stays silent and the real open reports it.tests/config-lazy-load.spec.jscovers the hover. - fix — the health loader no longer preloads scripts the page already has. Two of its six dependencies ride in the dashboard bundle, but v1.18.4's side-by-side preload fetched them again.
DashboardHealthLoader.DEPENDENCIESlists each script with its own readiness test, and only the missing ones are preloaded and loaded, still in order.tests/health-lazy-load.spec.jschecks that every preloaded script is one that then runs. - fix — a view opens with a 100 ms fade instead of 200 ms of fade and slide. Opening Config, Bookmarks, Inbox or Containers is a jump to another place, not a turn of the page, and the list is usually drawn within a frame; the animation was most of what made Bookmarks feel slow.
dashboard.cssgives those layoutsdashboardViewFade; page switches on the dashboard keep the slide. - fix — opening Bookmarks no longer lays the empty view out first.
bookmarkRowWindowread the list's position and scroll offset while the shell was fresh, which made the browser lay out the whole view before a single row was in — and again once they were. A list of 120 items or fewer is drawn whole and is no longer measured at all; a longer one opened afresh takes its first window from a scroll of 0 and the window's height, and is measured one frame later, redrawn only if that differs.tests/config-bookmarks-window.spec.jscovers the fresh open. - fix — Bookmarks no longer waits on Appearance's files, or on its own one at a time. The config loader fetched the look, the studio and the theme editor (about 105 KB) with config itself, so opening Bookmarks parsed them before the list; they are now
DashboardConfig.SECTION_MODULES.appearance, a chain fetched side by side and run in order when Appearance, the theme browser or a theme's look needs them, and on idle otherwise. A stand-inapplyThemeLookAndSaveon config loads them first, so:themestill brings a theme's look. The list's eleven scripts, whichensureBookmarkRenderersloads one after another, are preloaded with config byDashboardConfigLoader.preloadBookmarkScripts. Rows on a cold cache: 861 → 331 ms at 50 ms latency, 1130 → 605 ms at 4× CPU; warm, 340 → 323 ms.tests/config-lazy-load.spec.jschecks that no Appearance file is fetched before the rows, and that Appearance and the theme browser still open. - fix — the widget editor is its own file, so Bookmarks no longer parses it. The Widgets section's 98 methods (about 200 KB) moved unchanged from
dashboard-config.jstodashboard-config-widgets.js, loaded asDashboardConfig.SECTION_MODULES.widgetswhen that section opens and on idle otherwise. The type tables and the helpers other sections share — the folds,secretEyeIcon,widgetTypeName— stay on the class. Config itself is 1.48 MB instead of 1.68 MB; Bookmarks' rows at 4× CPU: 308 → 292 ms warm, 593 → 575 ms cold.tests/config-lazy-load.spec.jschecks that the file is not fetched before the rows. - fix — opening Bookmarks draws the list once instead of four times. Every draw rebuilt the rows and measured their tag chips, which forces a layout.
ensureBookmarkCategoriesForFilterandprefetchAllBookmarkCategoriesredrew the list whenever they finished, even with every name already cached; they now say whether anything was fetched, and only then is it redrawn — so a first open in a session redraws once when the names land, and every later one not at all. Two callers asking for the same page's categories share one request. The first draw takes a screenful (bmInitialLimit) when the page size is smaller, sofillBookmarkListToScreenno longer adds a page a frame later. The band's height is published from the last one and corrected by itsResizeObserver, instead of read mid-render; and the modal scroll lock no longer wakes on a child added to<body>, only on an attribute that could show a modal. Painted at 4× CPU: 323 → 274 ms; at 1×: 79 → 70 ms; cold, unchanged.tests/bookmarks-open-draws-once.spec.jscounts the draws.
Tests
- tests —
tests/health-view-redirect.spec.jswaits for#bookmarksafterShift+Hinstead of reading the address the moment the view switches: throughopenLibraryViewthe view switches first and its first render writes the address.
Help and docs
- docs — the key is described as it now works: MANUAL §7's key table and §11's opening line, the cheat sheet (
navHealthView, which now shows with checks off too), the everyday-views tip (tipEverydayViews) and Help → Keyboard (helpKeyboardBody), in all six languages. - docs — the Unraid template (
templates/nextdash.xml) lists the v1.18.4 changes, the same as the copy Community Applications reads.
Docs
- docs —
static/data/whats-new/v1.18.4.1.jsonand its index entry, held back from the What's new window (hideFromModal);whats-new-stub.js'sNEXTDASH_WHATS_NEW_DATA_VERSIONmoved towhats-new-v328,DASHBOARD_RELEASEstays on v1.18.4.tests/whats-new-hidden-release.spec.jsnames v1.18.4.1 as held back.go generaterefreshedasset_hashes_gen.go.