Keyboard shortcuts and in-page sections

What's new

Universe Moodle Theme release notes

Release notes for theme_universe, from the theme template changelog through 5.0.2.

5.0.2

Moodle 5.3 compatibility; Keyboard focus — colour; Dark mode logo — alternative text (Build 2026091800).

  • Improved
    • Moodle 5.3 compatibility — Bootstrap JS now resolves on both Moodle 5.2 and Moodle 5.3 (pre-release) from one package. Purge theme and JavaScript caches after deploy. Minimum requirement stays Moodle 5.2; no settings reset.
  • New
    • Keyboard focus — colour — new Focus color and Focus color (dark mode) settings (colortopbarprimarynavfocus, colortopbarprimarynavfocusdarkmode) in top bar colours. One keyboard focus ring uses that colour across the template. An empty field keeps the theme default.
  • Fixed
    • Dark mode logo — alternative text — the dark-mode logo uses the same alternative text as the light logo (site name, or the top bar logo label) and is no longer hidden from screen readers, so dark mode announces the logo instead of an empty link.
    • Screen reader text — accesshide — .accesshide no longer sets display: none. Visually hidden labels stay available to screen readers and stay invisible on screen.
    • Help icons — click target — each help popover link is a 40×40 px click target. The question-mark icon stays 18 px and is centred in that area.

5.0.1

Content Builder — FAQ open first; Content Builder — dark mode background; Content Builder — hero padding (Build 2026091600).

  • New
    • Content Builder — FAQ open first — FAQ snippets get a toolbar toggle so the first accordion item can start open on the published page (data-faq-open-first).
    • Content Builder — dark mode background — the block background editor can set a separate colour, gradient, or image for dark mode, swapped live with the theme toggle.
    • Content Builder — hero padding — hero, testimonial, and process wrappers no longer inherit CSS default padding from the inner shell, so full-bleed backgrounds stay flush.

5.0.0

Initial release; New core, new capabilities; Moodle compatibility (Build 2026090500).

  • New
    • Initial release — Theme Universe 5 is a completely rebuilt template on Bootstrap 5: a new core, modern layout and component stack, and a broad set of tools for site administrators, teachers, and content authors.
    • New core, new capabilities — refreshed navigation and drawers, visual front-page and content builder, course tabs, calendar redesign, dark mode, accessibility improvements, child-theme support, and many other features developed on this new foundation.
    • Moodle compatibility — Theme Universe 5 is built for Moodle 5.1, 5.2, and later. Install the package that matches your Moodle branch; the theme continues to track current Moodle releases.
    • Course index — hidden item text — new Course index hidden item text colour (colordrawercourseindexdimmed / colordrawercourseindexdimmeddarkmode) on the course index settings tab. Hidden (.dimmed) rows use this solid colour instead of page tertiary text.
  • Improved
    • Bootstrap JavaScript — one shared runtime with Moodle — loader, primary navigation, content builder, course tools, and admin modals no longer ship a duplicate Bootstrap JavaScript tree inside the theme. All call sites load through Moodle's theme_boost AMD modules, so dropdowns, tabs, tooltips, and builder dialogs share the same instance registry as core — fewer “works on click two” glitches and more reliable overlays. Custom theme styling (SCSS Bootstrap 5.3.6) is unchanged; only the JavaScript delivery path was consolidated (phases 1–3, verified on Front Page Builder and local page editor).
    • Main navigation — admin settings — the primary navigation builder settings file was renamed from sidebar-nav.php to main-nav.php, with matching admin tab and language-string identifiers (settingsmainnav). The tab label stays Main Navigation Builder; the new name reflects that this builder drives primary navigation in the top bar and drawer, not only the sidebar.
    • Top bar — navigation toggles — removed Top bar navigation and Front page only checkboxes from admin settings. Universe 5 always renders the top bar menu row; those options apply only to Theme Space 5, Theme Alpha 5, and Theme XY (topbarnav, topbarnavfponly under Top bar navigation).
    • Edit mode switch placement — new Top bar → General setting (editmodeplacement): keep the switch next to the user menu, or pin it as a floating control in the bottom-right corner.
  • Fixed
    • Course sections — multipage link area — on courses that show one section per page, the invisible “go to section” stretched-link no longer covers the whole section (including activities). The anchor now sits inside .course-section-header, so only the header row is clickable.
    • Content builder — removed legacy modal fallbacks (phase 4) — deleted unreachable jQuery Bootstrap modal branches and manual .show / .modal-open class toggles from Simple Content Builder modules. Modals now rely on the Bootstrap AMD bridge only; modal-manager keeps a minimal manual recovery path if Bootstrap throws during show/close.
    • Content builder — Bootstrap AMD bridge (phase 3) — Simple Content Builder modules no longer probe window.bootstrap (Moodle never exposes it). New contentbuilder/core/bootstrap-bridge registers SCB.Bootstrap.{Modal,Dropdown,Tooltip} from theme_boost/bootstrap/* at boot; modal-manager, dom-utils, and the footer logotypes admin manager import Modal directly. Modals, dropdowns, image/link pickers, and undo confirmations now use Bootstrap's real API instead of silent manual DOM fallbacks.
    • Bootstrap JS — removed vendored amd/bootstrap tree (phase 2) — deleted the duplicate amd/src/bootstrap/ and amd/build/bootstrap/ copies (~26 modules per theme). Runtime now uses theme_boost/bootstrap/* exclusively; index, popover, toast, footer-popover, and bs4-compat re-export Boost. scripts/sync_boost_amd.sh no longer rsyncs Bootstrap JS. SCSS (scss/bootstrap 5.3.6) is unchanged.
    • Bootstrap JS — unified AMD imports (phase 1) — loader, drawers, BS4-compat shims, course focus tooltips, course video modal, content-builder history tooltips, and the calendar day popover now import theme_boost/bootstrap/ instead of the vendored theme copy, so instances sit in the same Data registry as theme_boost/loader. Removed the unused theme_/aria AMD module. space5 and xy dropdown now re-export Boost (shim), preventing a second set of document click handlers that made [data-bs-toggle="dropdown"] flash open then close on one click.
    • Navigation dropdowns and theme-admin tabs — dead Bootstrap code path — the primary nav panel, the mobile toolbar sheets and the theme settings tabs now go through Bootstrap's real API. These call sites were guarded by typeof bootstrap !== 'undefined', but Moodle never publishes Bootstrap as a global — it is only reachable through AMD — so every one of them was skipped and the theme fell back to jQuery or to toggling classes by hand. Dropdown and Tab now come from theme_boost/bootstrap/*, which also puts instances in the same registry Bootstrap's own data-api uses. Opening a mobile toolbar sheet now closes any other open sheet, as intended.
    • Combobox search — result panel position — the user, grade and group search panels (.usersearchdropdown, .gradesearchdropdown, .groupsearchdropdown) no longer open on top of the search field. Core toggles these panels itself instead of through Bootstrap's dropdown, so Popper never positions them and the theme has to supply the offset — without it the panel landed at its static position, covering the input in places such as the gradebook grader report.
    • Combobox search — picking a result with the mouse or a tap — the search input keeps focus while a result is being clicked. Core closes the panel from a capture-phase handler that runs before the option is selected, so the selection relied on the browser still delivering the final click — which it drops when the pointer drifts inside the scrollable result list, or when losing focus reflows the page on a soft keyboard.
    • Footer — empty contact wrappers — when website, phone, email and contact info are empty, the vacant .rui-footer-contact-info / .rui-footer--icons / ul.rui-footer--contact containers are no longer rendered. The language switcher still appears when it is placed in the footer.
    • Top bar — main nav hover contrast — hover, focus and active states on .rui-flatnavigation--topbar .rui-nav-item-link now use primary-800 on primary-100 (~10.7:1, WCAG 2.2 AAA) plus a light hairline shadow, instead of primary-600 on primary-100 (~3.8:1).
    • Footer — empty debug wrapper — when debugging is off, the empty .rui-debug block is no longer rendered. Bootstrap .d-block had been forcing display: block !important over :empty { display: none }, which left extra space in the footer.
    • Course index — hidden items and timeline markers — hidden activities no longer fade the whole row with opacity. Completion dots stay solid so the leading timeline line does not show through them. Text uses the new hidden-item colour instead of --bs-body-tertiary-color.
    • Sticky footer — drag handle — dragging the sticky footer no longer throws a JavaScript error (TypeError: t is not a function) on pages such as activity settings (modedit). Language strings for the handle now load through Moodle’s core/str API.
    • Primary navigation — multi-language titles — builder titles no longer concatenate every language (e.g. “All courses” + “Alle Kurse”). Inner multilang markup is kept, filtered with Moodle string filters (same path as the core custom menu), then stripped and escaped so the visible label is a single language.
    • Custom fonts — file uploads — uploading .woff / .woff2 / .ttf / .otf / .eot files no longer fails with an SVG-only file type error. Moodle core does not register those font types, so the theme now registers them before the Font files picker filters uploads.
    • Edit mode switch — top bar / sidebar colors — the unchecked switch thumb follows Button Text Color in the top bar (and hidden sidebar) and Sidebar Text in the drawer footer, including dark mode.
    • User tours admin tables — empty fa-spacer move fillers are hidden, action icons sit in a tight row (core mx-1 /   gaps removed), and step screenshots in the Content column are capped to a compact thumbnail. The enable/disable eye toggle is green when the tour is on and red when it is off.
    • My courses user tour — the shipped tour can find its target again. Course manage/create buttons in Course overview use .header-actions-container .btn-group.course-manage. The step bubble is no longer display: none (Boost override for .modal inside the tour container), and it sits above the theme drawers.
    • Calendar month navigation — previous/next use Font Awesome chevrons (currentColor) instead of compiled SVG backgrounds, so the arrows keep contrast when button colours are customised.
    • Sidebar search — placeholder contrast — the Global Search field in the navigation drawer no longer uses a faded placeholder. Placeholder text now meets WCAG AAA (7:1) against the input background in light and dark mode.
    • Grader report — empty status icons — Moodle always outputs an empty status-icon wrapper in grade cells. That slot no longer stretches the cell: it is hidden when there is no icon, and grade values stay in a compact row.
    • Course activity — fixed-width embeds — contain fixed-width embeds (YouTube/iframe/images) so they do not stretch the section/page layout; iframes in activity descriptions are responsive (width: 100%, aspect-ratio: 16 / 9).