Commit Graph
34 Commits
Author SHA1 Message Date
yubiuser a5b4f0f492 Send X-CSRF-TOKEN in AJAX calls
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-08-06 10:52:48 +02:00
yubiuser ddae3ef2bf Fix xo errors after AdminLTE4 rebase
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-08-05 22:25:12 +02:00
yubiuser d3eaf1c0f9 Revert "Fix unicorn/name-replacements errors"
This reverts commit a16a6d67e2.
2026-08-05 22:14:49 +02:00
yubiuser 2b27d3752e Fix unicorn/name-replacements errors
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-08-05 22:09:04 +02:00
yubiuser d330f86540 Fix xo errors
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-08-05 21:57:30 +02:00
Adam Warner 72d682c284 Fix xo lint errors surfaced after rebasing onto development
This branch's code predates development's xo 2 -> 3 upgrade and hadn't been checked against its stricter ruleset. Fix the new violations: drop unnecessary globalThis prefixes on location/matchMedia, prefer location.assign() over href assignment, use early returns instead of wrapping onDropdownClose bodies in an if, fix a parameter shadow in getGroups, and use {capture: true} instead of a bare boolean for addEventListener.

Signed-off-by: Adam Warner <github@promofaux.dev>
2026-07-17 22:48:48 +01:00
RD WebDesignandAdam Warner 48d17c7eb0 Replace the old .btn-button class with Bootstrap 5 class.
This class job was basically make the element 100% wide.
We can replace it with the Bootstrap class: `w-100`, or (if the element
already has its own class) we add `width: 100%`.

Signed-off-by: RD WebDesign <github@rdwebdesign.com.br>
2026-07-17 22:40:01 +01:00
DL6ERandAdam Warner 07c6b01d8a Fix comment indentation for editorconfig and equalise list icon columns
- The multi-line comments added in the previous UI-fix commits aligned their
  continuation lines with an odd number of leading spaces, which the
  editorconfig check rejects (it wants multiples of two). Re-indent them.
- Equalise the two single-icon columns (list status and list type) on the
  subscribed-lists table so the type column is no longer noticeably wider than
  the status one, and centre their icons.

Signed-off-by: DL6ER <dl6er@dl6er.de>
2026-07-17 22:40:00 +01:00
DL6ERandAdam Warner e175737cfc Improve the group tables' bulk-select checkbox appearance
Widen the select column from 15px to 2rem so the checkbox is no longer cramped
against the column edges, centre it horizontally and vertically, and draw a
slightly larger, rounded box (dimmed until the row is selected) so the control
reads as a proper checkbox.

Signed-off-by: DL6ER <dl6er@dl6er.de>
2026-07-17 22:39:59 +01:00
DL6ERandAdam Warner 4de8c48ad9 Colour the list status icons in the table to match the legend
The subscribed-lists table rendered each status icon without the coloured
`list-status-N` class the legend uses, so they showed in the default text
colour instead of green/orange/red. Add the matching class so the table icons
convey the same status colours as the legend.

Signed-off-by: DL6ER <dl6er@dl6er.de>
2026-07-17 22:39:59 +01:00
646a3ef6ab Fix theme/layout regressions and CSP-blocked icons found in manual testing
Reviewed and built on top of a round of fixes already applied to the
working tree (boxed layout, badge alignment, sidebar treeview links,
bootstrap5-toggle's on/off->onlabel/offlabel rename, and forcing
data-bs-theme explicitly instead of leaving Bootstrap 5 to fall back to
the OS's prefers-color-scheme, plus the new scripts/js/theme.js that
locks the resolved theme so AdminLTE's own color-mode logic can't
silently override Pi-hole's own theme selection). On top of that:

- Fixed the "day theme still shows dark" gap: the anti-FOUC inline
  background style in header.lp only covered the case where the theme
  is unconditionally dark, never the "auto" theme (whose Lua-side flag
  is literally the string "auto", not "dark") - added a
  prefers-color-scheme media query fallback so the auto theme also
  avoids a white flash without needing to wait for theme.js/CSS to load.
- Fixed a strict Content-Security-Policy (img-src 'self', set by FTL's
  webserver) blocking every checkbox/radio checkmark, the modal close
  button, and the select2 dropdown arrow/clear icon: Bootstrap 5 and its
  plugins ship these as inline data: URI SVGs, which the CSP rejects
  outright. Re-hosted the exact same icons as local files under
  style/icons/ and pointed the same CSS custom properties at them.
  Learned the hard way that a url() stored in a custom property
  resolves relative to the stylesheet that *consumes* it via var(), not
  the one that declares it - the consumer here is always
  vendor/adminLTE/adminlte.min.css, so the override paths needed to
  account for that rather than being relative to pi-hole.css itself.
- Found and fixed three more leftover .box-* selectors in pi-hole.css
  that never got updated to .card-* during the earlier card-conversion
  phase: the query-types/forward-destinations pie chart flex layout,
  the domains-list filter row header, and the dynamically-generated
  settings cards' sizing/hidden-state selectors - all on pages that
  render in normal use, unlike the handful of genuinely-unreachable
  .box-solid/.box-comment selectors left alone in the theme files
  (those modifier classes are never applied by any current markup).

Verified against a live container: boxed layout now visibly constrains
and centers the page, day theme renders light content with checkmarks/
close icons/dropdown arrows all visible with zero console errors,
clicking Settings/Tools now expands the submenu instead of navigating
to the dashboard, and sidebar badges are aligned to a consistent right
edge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2026-07-17 22:39:57 +01:00
0153772cf5 Swap remaining jQuery plugins for Bootstrap 5-compatible versions
- DataTables: replace the combined BS3 download-builder bundles with
  the official core + Bootstrap 5 styling-adapter package pairs
  (datatables.net(-buttons/-select) + datatables.net-bs5/-buttons-bs5/
  -select-bs5), loaded core-then-adapter.
- bootstrap-select -> Tom Select: bootstrap-select has no Bootstrap 5
  build. Add utils.createGroupSelect(), a small wrapper around Tom
  Select that recreates bootstrap-select's actionsBox (Select all/
  Select none) via a couple of buttons injected into the dropdown, and
  use it for all four "assign to group(s)" multi-selects (groups,
  groups/clients, groups/domains, groups/lists). Two behavioral fixes
  were needed to match the old widget: `hideSelected: false` (Tom
  Select refuses to open its dropdown once every option is already
  selected, which made the actions box unreachable) and
  `dropdownParent: "body"` (otherwise the dropdown is clipped by the
  surrounding .table-responsive/.card ancestors' overflow, same reason
  bootstrap-select was configured with container: "body").
- bootstrap-toggle -> bootstrap5-toggle: drop-in replacement, same
  $.fn.bootstrapToggle() API and onstyle/offstyle option names (all
  call sites already used Bootstrap 5-valid color names).
- select2: bump to 4.1.0 and add the select2-bootstrap-5-theme package
  for correct Bootstrap 5 styling; wire theme: "bootstrap-5" into both
  call sites.
- Remove now-dead bootstrap-select cleanup code (the
  "$('body > .bootstrap-select.dropdown').remove()" DataTables
  drawCallback lines across 8 files) and dead icheck/bootstrap-select
  CSS in pi-hole.css.

Also fixed a Phase 1 regression surfaced by this pass: utils.js's
loadingOverlay() still targeted the old ".wrapper" class instead of
".app-wrapper", throwing whenever a settings page triggered the
Save & Apply overlay.

Verified against a live container: groups/clients' per-row Tom Select
multiselect (open dropdown, Select all/none, Apply, restore-on-cancel),
bootstrap5-toggle switches on groups, select2 filters on the query log,
and DataTables' select/export button row on groups/lists all work with
zero console errors. Settings pages' Save & Apply overlay confirmed
fixed and no longer throwing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2026-07-17 22:39:57 +01:00
yubiuser e41139148e Disable 'prefer-ternary'
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-07-07 21:07:11 +02:00
yubiuser 165c4eff35 Fix groups-lists.js
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-07-07 20:21:41 +02:00
yubiuser 39504966a6 Use xo --fix to fix huge load of fixable issues, revert fixes to regex for manual inspection
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-07-07 16:30:05 +02:00
RD WebDesign 3e40fb9660 Use <span> tag instead of <i> for icons on List page
Signed-off-by: RD WebDesign <github@rdwebdesign.com.br>
2026-06-13 03:32:11 -03:00
Austin GilmourandClaude Sonnet 4.6 1c621a53f8 fix: replace ES2024 regex v flag with u for WebKit compatibility (#3757)
WebKit-based browsers (Safari, DuckDuckGo on macOS) don't yet support
the ES2024 Unicode Sets `v` regex flag, causing a SyntaxError that
prevents all dashboard JavaScript from executing — stats show `---` and
charts spin indefinitely.

None of the affected patterns use v-exclusive features (set notation
`[A--B]`, `[A&&B]`), so downgrading to `u` is fully equivalent and
restores broad compatibility without any functional change.

Also updates xo.config.js to enforce `requireFlag: "u"` so the linter
stays consistent with the codebase.

Affected files (16 occurrences across 8 files):
- scripts/js/utils.js
- scripts/js/index.js
- scripts/js/footer.js
- scripts/js/groups-domains.js
- scripts/js/settings-teleporter.js
- scripts/js/gravity.js
- scripts/js/groups.js
- scripts/js/groups-clients.js
- scripts/js/groups-lists.js
- scripts/js/settings-dns-records.js
- scripts/js/network.js
- scripts/js/taillog.js

Signed-off-by: Austin Gilmour <gilmoursa@gmail.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 07:58:15 -04:00
yubiuser c02e66fe04 Fix xo errors
Signed-off-by: yubiuser <github@yubiuser.dev>
2026-03-16 08:55:20 +01:00
Adam Warner 4b5697c7be Fix addList function to include type in API request URL
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2025-10-04 22:35:27 +01:00
DL6ER e137dd0a0f Bind address to new element instead of raw HTML construction
Signed-off-by: DL6ER <dl6er@dl6er.de>
2025-07-16 16:19:46 +02:00
Adam WarnerandGitHub 7207a5c20e utils: remove duplicate function and convert changeTableButtonStates to vanilla JS (#3547) 2025-07-11 18:34:12 +01:00
XhmikosR 9c00467a6d utils: remove duplicate function and convert changeTableButtonStates to vanilla JS
Signed-off-by: XhmikosR <xhmikosr@gmail.com>
2025-07-01 16:38:57 +03:00
XhmikosR 8329997242 Update xo to v1.1.1
Signed-off-by: XhmikosR <xhmikosr@gmail.com>
2025-06-27 21:19:40 +03:00
XhmikosR 756239a6dd xo: enable strict mode
Signed-off-by: XhmikosR <xhmikosr@gmail.com>
2025-04-23 20:50:12 +03:00
XhmikosR f598a8e35c Manual xo fixes and suppressions
Signed-off-by: XhmikosR <xhmikosr@gmail.com>
2025-04-23 07:53:16 +03:00
XhmikosR f8a0a1d4ec Tighten xo rules
Signed-off-by: XhmikosR <xhmikosr@gmail.com>
2025-04-23 07:53:13 +03:00
Adam WarnerandGitHub d6c78f5475 groups-lists: remove unneeded HTML escape (#3379) 2025-04-04 18:46:18 +01:00
DL6ER b524a2f4b6 Always use document.body.dataset.apiurl instead of the intermediate const apiUrl
Signed-off-by: DL6ER <dl6er@dl6er.de>
2025-03-31 22:00:16 +02:00
XhmikosRandGitHub 510b3c84c9 groups-lists: remove unneeded HTML escape
Signed-off-by: XhmikosR <xhmikosr@gmail.com>
2025-03-30 15:39:07 +03:00
DL6ER a7f1ca7800 Allow path prefix multiplexing the dashboard and API. See https://github.com/pi-hole/FTL/pull/2319 for further details
Signed-off-by: DL6ER <dl6er@dl6er.de>
2025-03-02 20:20:10 +01:00
RD WebDesign cd49280bca Simplify the text on list details table
Signed-off-by: RD WebDesign <github@rdwebdesign.com.br>
2025-01-31 14:43:44 -03:00
DL6ER fcbc8a709f Add possibility to assign groups to newly added entries from the beginning
Signed-off-by: DL6ER <dl6er@dl6er.de>
2024-12-23 12:37:17 +01:00
yubiuser e7f97baab1 Fix prefer-global-this error
Signed-off-by: yubiuser <github@yubiuser.dev>
2024-12-07 16:11:35 +01:00
yubiuser 1e922a8b29 Move all files from /scripts/pi-hole/ to /scripts/
Signed-off-by: yubiuser <github@yubiuser.dev>
2024-10-28 20:22:09 +01:00