Releases: backdrop-contrib/message_popover
1.x-1.1.0
Fixed
- Multiple messages in one batch now all display. Previously every message was
rendered aspopover="auto", and per the HTML Popover API specification,
non-nested auto popovers light-dismiss each other — so only the last message
of a batch was ever visible. All popovers are nowpopover="manual", with
auto-dismissal handled by the timer. - AJAX dialogs (Views UI settings/filters, and any core AJAX insert) no longer
break while the module is enabled. The behaviour now normalises the context
argument before using native DOM methods — core's ajax.js passes a jQuery
object, which previously caused a TypeError that aborted the AJAX command
chain, leaving dialog content dumped at the bottom of the form. - Settings saved as 0 now survive: "0" in the persistence limit or auto-dismiss
timer was silently coerced back to the default (300 / 8000) when the form
redisplayed. A timer of 0 now genuinely disables auto-dismissal end-to-end. - Messages containing markup but no plain text (e.g. image-only) are no longer
silently discarded; empty wrappers with nothing displayable (such as Devel's
<pre></pre>from an Execute PHP run with no output) are still filtered. - The persistence character limit is now measured in characters rather than
bytes (backdrop_strlen), so multibyte text is classified correctly. - Drag handling no longer leaks document-level event listeners for every
message shown; a single delegated listener pair is registered once. - Popover IDs are unique across HTMX swaps within one page session,
preventing close buttons from targeting the wrong message.
Added
- Graceful fallback for browsers without the Popover API: messages display as
fixed toast notifications with a working close button instead of being lost. - Escape key closes all visible messages.
- Accessibility: messages carry role="alert" (errors) or role="status", plus a
visually hidden severity label for screen readers.
Changed
- Severity icon locations are resolved server-side with base_path() and passed
to the stylesheet as CSS custom properties, so icons work at any module
location and on subdirectory installs. - Documentation updated to match current behaviour (British English).
1.x-1.0.0-beta3
Added missing config name.
1.x-1.0.0-beta2
This release addresses community feedback to ensure compliance with Backdrop CMS system requirements while improving the interactive UI.
Changes:
Added PHP 7.1 Compatibility Layer: Polyfills for str_contains() and str_starts_with() allow the module to run on legacy PHP versions while maintaining modern 8.0+ coding syntax.
Standards Compliance: Implemented hook_config_info() to register configuration JSON with the system.
UX Refinement: Fixed the "snap/jerk" issue when dragging popovers by refactoring the JS positioning logic.
Clean Up: Removed experimental HTMX code and empty hooks for a leaner initial footprint.
README Update: Clarified requirements and updated credits.
1.x-1.0.0
Message Popover provides a modern, non-intrusive way to handle system messages in Backdrop CMS. By leveraging the native browser HTML Popover API, it transforms standard system messages (status, warning, and error) into draggable, floatable, and stackable windows that won't disrupt your workflow.
Key Features in this Release:
Native Integration: Uses the modern Popover API with a lightweight JavaScript polyfill for older browser compatibility.
Draggable Interface: Messages can be moved anywhere on the screen via a dedicated drag handle.
Smart Stacking: New messages automatically stack vertically, preventing overlap and ensuring all notifications are visible.
Persistent Debugging: Includes a "Debug Mode" setting to make messages persistent—perfect for inspecting large Devel dpm() data dumps or complex form arrays without them timing out.
Polished Severity UI: Colour-coded sidebars and core-integrated icons for Status, Warning, and Error levels.
AJAX Compatible: Fully compatible with Backdrop’s AJAX system, including Views dialogues and modals.
Lightweight & Performant: Zero external library dependencies; uses standard Backdrop CSS and JS best practices.
Technical Improvements:
Implemented base_path() icon injection to ensure compatibility with sites installed in subdirectories.
Refined CSS mask-image and background-image logic for crisp, theme-independent icons.
Optimised Z-index handling to ensure popovers always stay above modals and administrative overlays.
Installation & Usage:
Install and enable the module.
Configure auto-dismiss timers and persistence settings at Administer > Configuration > User Interface > Message Popover.
Enjoy a cleaner, more interactive administrative experience.