--- applyTo: "netbox_librenms_plugin/templates/**,netbox_librenms_plugin/static/**" description: Frontend patterns for templates, HTMX, and static assets --- # Frontend Patterns ## HTMX Conventions - HTMX 2.x is the primary async layer. Table row updates return ``. - Avoid `outerHTML` swaps; use OOB or targeted `innerHTML` swaps to keep table layout intact. - All HTMX requests and `fetch()` calls must include a CSRF token. The standard pattern is `document.querySelector('[name=csrfmiddlewaretoken]').value` (from a hidden form input). The import JS also uses `getCookie('csrftoken')` as a fallback — prefer the hidden input approach for consistency. ## Modal Implementation - Modals use Tabler (Bootstrap-like) but **without** `bootstrap.Modal` helpers. - Buttons target the `htmx-modal-content` element and JavaScript in `librenms_import.html` toggles the wrapper. - Do not reintroduce `data-bs-toggle` or duplicate modal IDs. - The import page uses `ModalManager` class and `filterModalManager` instance—always use this reference in fetch callbacks, not undefined `modalInstance` variables. ## JavaScript Fetch Patterns - Always check `response.ok` before processing fetch responses to catch HTTP errors. - In catch blocks, show `error.message` for debugging rather than generic messages. - The import filter form uses fetch with `Accept: application/json, text/html`—JSON for background jobs, HTML for synchronous mode. ## Form Controls - Device import dropdowns rely on TomSelect decorators set up elsewhere. - Keep `