Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,16 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Initialize CodeQL
uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
with:
languages: javascript
queries: security-extended,security-and-quality

- name: Autobuild
uses: github/codeql-action/autobuild@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
uses: github/codeql-action/autobuild@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4

- name: Enforce zero open alerts for analyzed commit
env:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/dependency-vulnerability-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
- name: Scan generated SBOM against OSV
id: scan
continue-on-error: true
uses: google/osv-scanner-action/osv-scanner-action@06b2ab4348248b456ee06c9e953637f55e03504f # v2.5.0
uses: google/osv-scanner-action/osv-scanner-action@ffa0a5f39214d80778c9b494822d94d0d9668458 # v2.5.0
with:
scan-args: |-
--output=results.json
Expand All @@ -42,7 +42,7 @@ jobs:
id: report
if: ${{ !cancelled() }}
continue-on-error: true
uses: google/osv-scanner-action/osv-reporter-action@06b2ab4348248b456ee06c9e953637f55e03504f # v2.5.0
uses: google/osv-scanner-action/osv-reporter-action@ffa0a5f39214d80778c9b494822d94d0d9668458 # v2.5.0
with:
scan-args: |-
--output=results.sarif
Expand All @@ -61,7 +61,7 @@ jobs:

- name: Upload OSV results to code scanning
if: ${{ !cancelled() && hashFiles('results.sarif') != '' }}
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
with:
sarif_file: results.sarif

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
publish_results: true

- name: Upload Scorecard results to code scanning
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
with:
sarif_file: results.sarif

Expand Down
Binary file removed archive/folderview.plus-2026.08.18.05.txz
Binary file not shown.
1 change: 0 additions & 1 deletion archive/folderview.plus-2026.08.18.05.txz.sha256

This file was deleted.

Binary file removed archive/folderview.plus-2026.08.28.05.txz
Binary file not shown.
1 change: 0 additions & 1 deletion archive/folderview.plus-2026.08.28.05.txz.sha256

This file was deleted.

Binary file added archive/folderview.plus-2026.09.03.01.txz
Binary file not shown.
1 change: 1 addition & 0 deletions archive/folderview.plus-2026.09.03.01.txz.sha256
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c9b804d8771c3cd1e492e4a6606e07d3b57546fd43940dba4db225efef5e210b folderview.plus-2026.09.03.01.txz
Binary file added archive/folderview.plus-2026.09.03.02.txz
Binary file not shown.
1 change: 1 addition & 0 deletions archive/folderview.plus-2026.09.03.02.txz.sha256
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e5eeddfb6da6b357f5e8f76ef2ff41c601fdb33019f307e85eafee61c3401867 folderview.plus-2026.09.03.02.txz
7 changes: 7 additions & 0 deletions docs/releases/2026.09.03.01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
- Fix: Make folder status text inherit the active Unraid theme by default so it remains dark and readable on white themes and light on dark themes across Docker, VM, Dashboard, and multi-row preview surfaces.
- UI/UX: Add a clearly labeled **Theme default** option beside the folder status Text picker; changing the picker creates a custom override, while resetting status colors restores automatic theme behavior.
- Compatibility: Migrate unmarked white status-text values introduced by the previous default to automatic theme text, preserve existing non-white custom colors, and retain deliberately selected white after it is saved with the new explicit override marker.
- Reliability: Prevent **Lock status colors** from forcing white text when the Text color remains automatic, while continuing to lock explicitly selected custom text colors.
- Diagnostics: Report whether folder status text uses the theme or a custom override without exposing folder identities; include the custom color only when an override is active.
- Localization: Translate the Theme default control and updated status-color guidance across all 27 supported locales.
- Test: Add isolated migration, locked-color, CSS token, Dashboard computed-style, editor persistence, localization, and browser fixture coverage for automatic and explicit status-text colors.
9 changes: 9 additions & 0 deletions docs/releases/2026.09.03.02.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
- Fix: Make folder status text follow the active Unraid theme by default, keeping it dark and readable on white themes and light on dark themes across Docker, VM, Dashboard, and multi-row preview surfaces.
- UI/UX: Add a localized **Theme default** option beside the folder status Text picker. Choosing a Text color creates a custom override; resetting the status palette restores automatic theme behavior.
- Compatibility: Migrate unmarked white status-text values from the previous default to automatic theme text, preserve existing non-white custom colors, and retain deliberately selected white after it is saved with the new explicit override marker.
- Reliability: Prevent **Lock status colors** from forcing white text while Text remains automatic, while continuing to lock explicitly selected custom text colors.
- Diagnostics: Report whether each privacy-safe folder status-text result uses the active theme or a custom override, and include a color value only for an active custom override.
- Localization: Translate the Theme default control and updated status-color guidance across all 27 supported locales.
- Security: Refresh the immutable CodeQL and OSV workflow action revisions used by automated code and dependency scanning.
- Maintenance: Update the OpenCC localization quality tool to 1.4.2.
- Test: Add migration, locked-color, CSS-token, Dashboard computed-style, editor persistence, localization, browser fixture, package, and runtime-performance coverage for automatic and explicit status-text colors.
16 changes: 8 additions & 8 deletions docs/sbom.cdx.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"serialNumber": "urn:uuid:e1de95ce-ed49-8928-999c-a260ac5c59c3",
"serialNumber": "urn:uuid:6d3f5b78-7a1e-8b8f-a843-e18cbd36b22e",
"version": 1,
"metadata": {
"component": {
"type": "application",
"name": "FolderView Plus",
"version": "2026.08.28.05",
"version": "2026.09.03.02",
"properties": [
{
"name": "folderview-plus:runtime-dependencies",
Expand Down Expand Up @@ -106,9 +106,9 @@
{
"type": "application",
"name": "github/codeql-action",
"version": "ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd",
"version": "cdf488f595d80d6e07e03d4674febd5ab45fa938",
"scope": "optional",
"purl": "pkg:github/github/codeql-action@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd",
"purl": "pkg:github/github/codeql-action@cdf488f595d80d6e07e03d4674febd5ab45fa938",
"properties": [
{
"name": "folderview-plus:usage",
Expand All @@ -119,9 +119,9 @@
{
"type": "application",
"name": "google/osv-scanner-action",
"version": "06b2ab4348248b456ee06c9e953637f55e03504f",
"version": "ffa0a5f39214d80778c9b494822d94d0d9668458",
"scope": "optional",
"purl": "pkg:github/google/osv-scanner-action@06b2ab4348248b456ee06c9e953637f55e03504f",
"purl": "pkg:github/google/osv-scanner-action@ffa0a5f39214d80778c9b494822d94d0d9668458",
"properties": [
{
"name": "folderview-plus:usage",
Expand Down Expand Up @@ -1004,7 +1004,7 @@
{
"type": "library",
"name": "opencc-js",
"version": "1.4.1",
"version": "1.4.2",
"scope": "optional",
"licenses": [
{
Expand All @@ -1013,7 +1013,7 @@
}
}
],
"purl": "pkg:npm/opencc-js@1.4.1"
"purl": "pkg:npm/opencc-js@1.4.2"
},
{
"type": "library",
Expand Down
42 changes: 23 additions & 19 deletions folderview.plus.plg
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
<!ENTITY launch "Settings/FolderViewPlus">
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/main/folderview.plus.plg">
<!ENTITY version "2026.08.28.05">
<!ENTITY md5 "2787a33e9d66e22bc4976cef9cd4c014">
<!ENTITY sha256 "f71ee236840caadc58c6e22630a311670fa39d39f48293d086182cf0bb4dae88">
<!ENTITY version "2026.09.03.02">
<!ENTITY md5 "a6e2e74c874ffacd57ba4381580c063b">
<!ENTITY sha256 "e5eeddfb6da6b357f5e8f76ef2ff41c601fdb33019f307e85eafee61c3401867">
<!ENTITY iconPackVersion "1.0.0">
<!ENTITY iconPackMd5 "a149c36b41339949bb5c1eecad550704">
<!ENTITY iconPackSha256 "992f6c3544a8a3c1db80b861472fdd8b3d499f20f81796ed71405a10beb750bd">
Expand All @@ -18,22 +18,26 @@
<PLUGIN name="&name;" author="&author;" version="&version;" launch="&launch;" pluginURL="&pluginURL;" icon="folder-icon.png" support="https://forums.unraid.net/topic/197631-plugin-folderview-plus/" min="7.0.0">
<CHANGES>

###2026.08.28.05
- Feature: Add a fourth **Hide** quick action to Docker folder menus, including nested-branch hiding, a temporary **Show hidden folders** view, **Restore all hidden folders**, and an immediate 10-second **Undo** action without deleting folder configuration or changing Unraid's native Host list.
- Feature: Add reusable custom WebUI profiles to each Docker folder so any number of named profiles can open only the selected running, unpaused container WebUIs, with create, duplicate, reorder, search, unavailable-member, and delete controls in the modern folder editor.
- Fix: Restore reliable container and child-folder context menus across single-row, multi-row, nested, collapsed, Preview Rows 1+, Unlimited, and Unraid Basic or Advanced View layouts, including mouse, right-click, touch, Enter, and Space activation.
- Fix: Show consistent lifecycle progress on single-row and multi-row Docker previews, keep Restart pending through its initial running snapshot, and use the action's destination status color until reconciliation completes.
- UI/UX: Use Unraid's native green started indicator with white status text by default, add a separate **Text** color picker, and apply customized Started, Paused, Stopped, and Text colors consistently across Docker, VM, Dashboard, inherited defaults, and starter templates.
- UI/UX: Make hidden-folder recovery, Undo, and custom WebUI profile controls theme-aware, responsive, and keyboard accessible instead of inheriting Unraid's orange button treatment.
- Reliability: Persist hidden-folder choices through conflict-safe preference updates, preserve profiles through clone, export/import, backup, restore, and unique member renames, and keep folder-specific profiles out of generic settings transfers and defaults that may target unrelated containers.
- Compatibility: Preserve explicitly selected white started indicators while migrating only the old unmodified white default to green, and acknowledge Unraid API v4.37.3 while keeping current legacy Docker behavior and future API capability monitoring bounded and fail-closed.
- Security: Reject malformed non-string folder names and container identifiers without invoking attacker-controlled coercion hooks, strengthen property-based input coverage, and tighten repository security-policy, CodeQL, workflow-permission, package-trust, and release contracts.
- Privacy: Extend sanitized diagnostics with aggregate context-menu, lifecycle, hidden-folder, and WebUI-profile health evidence while withholding folder names, container names, profile names, URLs, selectors, coordinates, and other runtime identities.
- Localization: Translate the new hidden-folder, WebUI-profile, and status-text interfaces across all 27 supported locales and keep dynamic Docker menu labels covered by strict localization validation.
- UX: Improve GitHub bug, support, feature, and translation intake forms with clearer reproduction, version, branch, diagnostics, privacy, compatibility, and testing fields.
- Maintenance: Add proactive Unraid/API compatibility checks, dependency and SBOM vulnerability monitoring, scheduled workflow watchdogs, manual CodeQL recovery checks, exact-tool CodeQL alert filtering, and validated main-to-dev back-merge ordering without introducing live-Unraid automation.
- Compatibility: No manual migration is required. Existing folders, assignments, rules, colors, backups, and imports remain compatible; hidden-folder state is reversible, and custom WebUI profiles remain scoped to their Docker folder.
- Test: Expand isolated browser, mobile, keyboard, theme, localization, fuzz, security, diagnostics, workflow, and large-library performance coverage for every behavior in this release.
###2026.09.03.02
- Fix: Make folder status text follow the active Unraid theme by default, keeping it dark and readable on white themes and light on dark themes across Docker, VM, Dashboard, and multi-row preview surfaces.
- UI/UX: Add a localized **Theme default** option beside the folder status Text picker. Choosing a Text color creates a custom override; resetting the status palette restores automatic theme behavior.
- Compatibility: Migrate unmarked white status-text values from the previous default to automatic theme text, preserve existing non-white custom colors, and retain deliberately selected white after it is saved with the new explicit override marker.
- Reliability: Prevent **Lock status colors** from forcing white text while Text remains automatic, while continuing to lock explicitly selected custom text colors.
- Diagnostics: Report whether each privacy-safe folder status-text result uses the active theme or a custom override, and include a color value only for an active custom override.
- Localization: Translate the Theme default control and updated status-color guidance across all 27 supported locales.
- Security: Refresh the immutable CodeQL and OSV workflow action revisions used by automated code and dependency scanning.
- Maintenance: Update the OpenCC localization quality tool to 1.4.2.
- Test: Add migration, locked-color, CSS-token, Dashboard computed-style, editor persistence, localization, browser fixture, package, and runtime-performance coverage for automatic and explicit status-text colors.


###2026.09.03.01
- Fix: Make folder status text inherit the active Unraid theme by default so it remains dark and readable on white themes and light on dark themes across Docker, VM, Dashboard, and multi-row preview surfaces.
- UI/UX: Add a clearly labeled **Theme default** option beside the folder status Text picker; changing the picker creates a custom override, while resetting status colors restores automatic theme behavior.
- Compatibility: Migrate unmarked white status-text values introduced by the previous default to automatic theme text, preserve existing non-white custom colors, and retain deliberately selected white after it is saved with the new explicit override marker.
- Reliability: Prevent **Lock status colors** from forcing white text when the Text color remains automatic, while continuing to lock explicitly selected custom text colors.
- Diagnostics: Report whether folder status text uses the theme or a custom override without exposing folder identities; include the custom color only when an override is active.
- Localization: Translate the Theme default control and updated status-color guidance across all 27 supported locales.
- Test: Add isolated migration, locked-color, CSS token, Dashboard computed-style, editor persistence, localization, and browser fixture coverage for automatic and explicit status-text colors.


###2026.08.28.04
Expand Down
2 changes: 1 addition & 1 deletion folderview.plus.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<Description>
FolderView Plus organizes Docker, VM, and Dashboard views into folders in Unraid, with starter setup tools, rules, bulk assignment, recovery, templates, and diagnostics.
</Description>
<Date>2026-08-28</Date>
<Date>2026-09-03</Date>
<MinVer>7.0.0</MinVer>
<ExtraSearchTerms>folder view docker vm dashboard organization groups sorting import export backup recovery rules templates diagnostics</ExtraSearchTerms>
<Support>https://forums.unraid.net/topic/197631-plugin-folderview-plus/</Support>
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"c8": "12.0.0",
"fast-check": "4.9.0",
"jquery": "3.7.1",
"opencc-js": "1.4.1",
"opencc-js": "1.4.2",
"playwright": "1.62.1"
}
}
4 changes: 2 additions & 2 deletions scripts/fixture_browser_tests.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { createFixtureBrowserServer } from './lib/fixture-browser-server.mjs';
import { runFixtureBrowserSuite } from './lib/fixture-browser-runner.mjs';
import { registerFoundationFixtureCases } from '../tests/browser/cases/foundation.mjs';
import { registerDockerFixtureCases } from '../tests/browser/cases/docker.mjs';
import { registerDashboardLifecycleFixtureCases } from '../tests/browser/cases/dashboard-lifecycle.mjs';
import { registerDashboardLifecycleFixtureCases } from '../tests/browser/cases/dashboard-lifecycle.mjs'; import { registerStatusTextThemeFixtureCase } from '../tests/browser/cases/status-text-theme.mjs';
import { registerRuntimeInteractionsFixtureCases } from '../tests/browser/cases/runtime-interactions.mjs';
import { registerDockerHiddenFolderFixtureCases } from '../tests/browser/cases/docker-hidden-folders.mjs';
import { registerSettingsFixtureCases } from '../tests/browser/cases/settings.mjs';
Expand Down Expand Up @@ -44,7 +44,7 @@ const test = (name, handler, options = {}) => tests.push({ name, handler, ...opt
const caseContext = { test, baseUrl, surfaceKeyFor, germanSurfaceCatalog };
registerFoundationFixtureCases(caseContext);
registerDockerFixtureCases(caseContext);
registerDashboardLifecycleFixtureCases(caseContext);
registerDashboardLifecycleFixtureCases(caseContext); registerStatusTextThemeFixtureCase(caseContext);
registerRuntimeInteractionsFixtureCases(caseContext);
registerDockerHiddenFolderFixtureCases(caseContext);
registerSettingsFixtureCases(caseContext);
Expand Down
Loading
Loading