Skip to content

fix: container table improvements, console/log fixes, and client-side UI injection#28

Merged
mstrhakr merged 15 commits intomstrhakr:mainfrom
gehrleib:fix/container-table-improvements
Feb 10, 2026
Merged

fix: container table improvements, console/log fixes, and client-side UI injection#28
mstrhakr merged 15 commits intomstrhakr:mainfrom
gehrleib:fix/container-table-improvements

Conversation

@gehrleib
Copy link
Copy Markdown

@gehrleib gehrleib commented Feb 10, 2026

Summary

This PR delivers a set of UI stability fixes, functional bug fixes, and architectural improvements to the container table and stack expansion experience.

Issues Resolved

Additional Fixes

  • CSS late-loading fix: Critical layout styles are now in a synchronous inline <style> block instead of an external stylesheet, eliminating the column-shift flash on page load.
  • Advanced/basic view isolation: Compose Manager's advanced view toggle (cm-advanced) no longer conflicts with Docker tab's own .advanced toggle.
  • "Checking..." spinner preserved: Fixed a selector typo (td.updatecolumntd.compose-updatecolumn) that caused the update-check spinner to disappear when expanding a stack.

Testing

  • 167 unit tests, 284 assertions — all passing

…status preservation, uniform columns, tag/SHA truncation

- Normalize PascalCase server response (UpdateStatus, LocalSha, RemoteSha) to camelCase in loadStackContainerDetails
- Preserve container-level update status during expand/collapse in updateParentStackFromContainers
- Detect checking-in-progress state to avoid overwriting spinner with stale data
- Replace inline table styles with CSS class-based layout (compose-ct-table) for uniform column widths
- Add text-overflow ellipsis for tag column with tooltip on hover
- Truncate SHA hashes to 8 characters with full SHA in tooltip (stack summary, update dialog, container detail)
- Scope readmore plugin to exclude container detail rows (.not('.stack-details-container .docker_readmore')) preventing nested wrapper accumulation on expand/collapse
- Destroy readmore before reapplying in renderContainerDetails to avoid double-application
- Fix console: use container.Shell from API (fallback /bin/sh) instead of hardcoded /bin/bash, add data-shell attribute
- Fix logs: use openTerminal('docker', name, '.log') matching Unraid's expected format instead of openTerminal('docker_logs', name)
…ies, add animation

- Add table-layout:fixed to #compose_stacks with column width percentages
  to prevent columns shifting when expanding stack details
- Remove HIDE_COMPOSE_FROM_DOCKER setting from UI (HTML, JS var, form handler)
- Add missing id attribute to SHOW_COMPOSE_IN_HEADER_MENU checkbox so
  the compose-on-top dependency toggle works correctly
- Increase dashboard row vertical padding (stack 4px->8px, container 3px->6px)
- Implement animated applyListView(animate) with phased opacity+height
  transitions for basic/advanced toggle; instant on page load
- Add 'Hide Compose Containers from Docker Tab' setting above 'Show Dashboard Tile'
  Only available when 'Show Compose in Header Menu' is No (non-tabbed mode)
  Uses JS-based hiding by matching container names from compose stack data
  No patching of Unraid system files required
- Fix column widths for advanced view: assign explicit percentages to all 8
  columns (Stack 18%, Update 12%, Containers 10%, Uptime 12%, Description 15%,
  Compose 8%, Path 18%, Autostart 7%) to prevent overlap/crowding
- Add toggleHideFromDocker() dependency function linked to header menu toggle
…m-docker, settings state

Issues fixed:
1. Stack row condensing on expand: basic view columns now sum to 100%
   (was 59% because hidden advanced columns wasted width)
2. Basic/advanced toggle not working: renamed '.advanced' to '.cm-advanced'
   to prevent Docker tab's own advanced view toggle from overriding compose
   columns. View now controlled by toggling .cm-advanced-view class on table.
3. Renamed 'Show Compose Stacks Above Docker Containers' to 'Above Docker'
4. Renamed 'Hide Compose Containers from Docker Tab' to 'from Docker'
5. Hide compose from Docker not working: now reads container names from
   data-containers attribute on stack rows (populated by PHP at list load)
   instead of relying on expanded detail rows or update check results.
   Also simplified Docker table row selector to 'span.appname'.
6. Dependent settings (compose-on-top, hide-from-docker) now save/restore
   their checked state when the header menu toggle is toggled on then off.
…nsole shell, CSS loading

1. Isolate compose table from Docker's advanced view toggle by renaming
   class='advanced'/'basic' to 'cm-advanced'/'cm-basic' (prevents force
   update from appearing when toggling Docker's advanced view)

2. Center 'Containers' column text horizontally via CSS nth-child rule

3. Fix column shift on row expand by re-adding table-layout:fixed with
   percentage-based th widths (Stack 22%, Update 16%, Containers 8%,
   Uptime 10%, Description 15%, Compose 10%, Path 12%, Autostart 7%)

4. Change default console shell from /bin/bash to /bin/sh for broader
   container compatibility (many Alpine-based images lack bash)

5. Fix CSS not loading on initial page load by adding <link> tags
   directly in Compose.page and compose.manager.page, with JS fallback
   only if links are not already present
@gehrleib gehrleib changed the title fix: container table improvements, console/log fixes, and client-side UI injection WIP: fix: container table improvements, console/log fixes, and client-side UI injection Feb 10, 2026
- Add BackupFunctionsTest: tests for backup/restore helper functions
- Add ComposeManagerMainTest: tests for main page CSS/JS structure
- Add ComposeListHtmlTest: tests for compose list HTML output
- Add SettingsBackupTest: tests for settings page backup/restore markup
- Update README.md and docs/configuration.md with current settings
- Fix logger() redeclaration between backup_functions.php and compose_util_functions.php
- Use parse_plugin_cfg() instead of parse_ini_file() in backup_functions.php
- Remove composer-setup.php and composer.phar from repo
- Add composer setup files to .gitignore
@gehrleib gehrleib changed the title WIP: fix: container table improvements, console/log fixes, and client-side UI injection fix: container table improvements, console/log fixes, and client-side UI injection Feb 10, 2026
@mstrhakr mstrhakr merged commit 74f6ef8 into mstrhakr:main Feb 10, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants