Skip to content

Commit daf3c63

Browse files
author
Alexander Phillips
committed
Add privacy mode across settings and runtime
1 parent 4b8b012 commit daf3c63

17 files changed

Lines changed: 212 additions & 12 deletions

archive/folderview.plus-2026.04.12.04.txz.sha256

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
539cc91229a56fe38fb234e3b26e0ad33d1b80b52ee6a6f2d646d6836b76d90b folderview.plus-2026.04.15.06.txz

folderview.plus.plg

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,22 @@
66
<!ENTITY launch "Settings/FolderViewPlus">
77
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
88
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/dev/folderview.plus.plg">
9-
<!ENTITY version "2026.04.15.05">
10-
<!ENTITY md5 "e0b2b75e3180de66729cc39269742db9">
9+
<!ENTITY version "2026.04.15.06">
10+
<!ENTITY md5 "e132c9cd5f7364a247ccf100e3f79f5f">
1111
]>
1212

1313
<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">
1414
<CHANGES>
1515

16+
###2026.04.15.06
17+
- Fix: Docker support-bundle snapshots, trace storage caps, and rendered-state diagnostics.
18+
- Fix: Docker runtime rows, folder state, and container interactions.
19+
- Fix: VM runtime rows, folder state, and VM actions.
20+
- UX: Dashboard layouts, quick rails, and folder card interactions.
21+
- UX: Settings workspace layout, section flows, and table behavior.
22+
- Feature: Setup Assistant, rules, smart-detect, and starter-template workflows.
23+
24+
1625
###2026.04.15.05
1726
- UX: Settings workspace layout, section flows, and table behavior.
1827
- Fix: Server endpoints, runtime payloads, and persistence or validation paths.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/FolderViewPlus.page

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ if (!empty($fvplusRuntimeConflicts)) {
262262
<label id="docker-dashboard-expand-toggle-row" class="setting-toggle"><input id="docker-dashboard-expand-toggle" type="checkbox" onchange="changeDashboardPref('docker', 'expandToggle', this.checked)"> Show expand toggle</label>
263263
<label id="docker-dashboard-greyscale-row" class="setting-toggle"><input id="docker-dashboard-greyscale" type="checkbox" onchange="changeDashboardPref('docker', 'greyscale', this.checked)"> Dim collapsed cards</label>
264264
<label id="docker-dashboard-folder-label-row" class="setting-toggle"><input id="docker-dashboard-folder-label" type="checkbox" onchange="changeDashboardPref('docker', 'folderLabel', this.checked)"> Show folder label</label>
265+
<label id="docker-dashboard-privacy-mode-row" class="setting-toggle"><input id="docker-dashboard-privacy-mode" type="checkbox" onchange="changeDashboardPref('docker', 'privacyMode', this.checked)"> Privacy mode (blur names and icons)</label>
265266
<div class="setting-help">Non-classic layouts can show a compact toggle, optional dimming, and label visibility controls.</div>
266267
</div>
267268
<div class="settings-mini-card">
@@ -513,6 +514,7 @@ if (!empty($fvplusRuntimeConflicts)) {
513514
<label id="vm-dashboard-expand-toggle-row" class="setting-toggle"><input id="vm-dashboard-expand-toggle" type="checkbox" onchange="changeDashboardPref('vm', 'expandToggle', this.checked)"> Show expand toggle</label>
514515
<label id="vm-dashboard-greyscale-row" class="setting-toggle"><input id="vm-dashboard-greyscale" type="checkbox" onchange="changeDashboardPref('vm', 'greyscale', this.checked)"> Dim collapsed cards</label>
515516
<label id="vm-dashboard-folder-label-row" class="setting-toggle"><input id="vm-dashboard-folder-label" type="checkbox" onchange="changeDashboardPref('vm', 'folderLabel', this.checked)"> Show folder label</label>
517+
<label id="vm-dashboard-privacy-mode-row" class="setting-toggle"><input id="vm-dashboard-privacy-mode" type="checkbox" onchange="changeDashboardPref('vm', 'privacyMode', this.checked)"> Privacy mode (blur names and icons)</label>
516518
<div class="setting-help">Non-classic layouts can show a compact toggle, optional dimming, and label visibility controls.</div>
517519
</div>
518520
<div class="settings-mini-card">

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/dashboard.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ const utils = window.FolderViewPlusUtils || {
8383
layout: 'classic',
8484
expandToggle: true,
8585
greyscale: false,
86-
folderLabel: true
86+
folderLabel: true,
87+
privacyMode: false
8788
},
8889
health: {
8990
cardsEnabled: true,
@@ -346,7 +347,8 @@ const normalizeDashboardPrefsForType = (type) => {
346347
: normalizeDashboardLayoutMode(dashboard.layout),
347348
expandToggle: dashboard.expandToggle !== false,
348349
greyscale: dashboard.greyscale === true,
349-
folderLabel: dashboard.folderLabel !== false
350+
folderLabel: dashboard.folderLabel !== false,
351+
privacyMode: dashboard.privacyMode === true
350352
};
351353
};
352354
const dashboardTypeMeta = (type) => {
@@ -2222,6 +2224,8 @@ const applyDashboardRuntimePrefs = () => {
22222224
}
22232225
const performanceMode = dockerPrefs.performanceMode === true || vmPrefs.performanceMode === true;
22242226
$('body').toggleClass('fvplus-performance-mode', performanceMode);
2227+
$('body').toggleClass('fvplus-privacy-docker-dashboard', dockerPrefs?.dashboard?.privacyMode === true);
2228+
$('body').toggleClass('fvplus-privacy-vm-dashboard', vmPrefs?.dashboard?.privacyMode === true);
22252229

22262230
if (!candidates.length) {
22272231
clearLiveRefreshTimer();

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ const utils = window.FolderViewPlusUtils || {
142142
performanceMode: false,
143143
lazyPreviewEnabled: false,
144144
lazyPreviewThreshold: 30,
145+
dashboard: {
146+
layout: 'classic',
147+
expandToggle: true,
148+
greyscale: false,
149+
folderLabel: true,
150+
privacyMode: false
151+
},
145152
health: {
146153
cardsEnabled: true,
147154
runtimeBadgeEnabled: false,
@@ -5797,6 +5804,7 @@ const applyRuntimePrefs = (prefs) => {
57975804
scheduleDockerRuntimeWidthReflow('prefs-change', 0);
57985805
$('body').toggleClass('fvplus-performance-mode', normalized.performanceMode === true);
57995806
$('body').toggleClass('fvplus-performance-mode-strict', dockerRuntimePerformanceProfile?.strict === true);
5807+
$('body').toggleClass('fvplus-privacy-docker-runtime', normalized?.dashboard?.privacyMode === true);
58005808
scheduleLiveRefresh(normalized);
58015809
};
58025810

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/folderviewplus.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2312,6 +2312,7 @@ const refreshSettingsUx = () => {
23122312
syncCompactMobileLayoutClass();
23132313
refreshMobileTreeReorderModeClasses();
23142314
buildSettingsSections();
2315+
applySettingsPrivacyMode();
23152316
normalizeExpandedAdvancedSections();
23162317
const advancedSections = settingsUiState.sections.filter((section) => section.advanced);
23172318
if (advancedSections.length) {
@@ -6441,10 +6442,19 @@ const normalizeDashboardPrefsForType = (type, prefsOverride = null) => {
64416442
layout: normalizeLayout(dashboard.layout),
64426443
expandToggle: dashboard.expandToggle !== false,
64436444
greyscale: dashboard.greyscale === true,
6444-
folderLabel: dashboard.folderLabel !== false
6445+
folderLabel: dashboard.folderLabel !== false,
6446+
privacyMode: dashboard.privacyMode === true
64456447
};
64466448
};
64476449

6450+
const applySettingsPrivacyMode = () => {
6451+
const $body = $('body');
6452+
['docker', 'vm'].forEach((type) => {
6453+
const dashboard = normalizeDashboardPrefsForType(type);
6454+
$body.toggleClass(`fvplus-privacy-${type}-settings`, dashboard.privacyMode === true);
6455+
});
6456+
};
6457+
64486458
const syncDashboardDependentFields = (type) => {
64496459
const prefs = normalizeDashboardPrefsForType(type);
64506460
const showNonClassicControls = !['classic', 'legacy'].includes(prefs.layout);
@@ -6466,7 +6476,9 @@ const renderDashboardControls = (type) => {
64666476
$(`#${type}-dashboard-expand-toggle`).prop('checked', dashboard.expandToggle === true);
64676477
$(`#${type}-dashboard-greyscale`).prop('checked', dashboard.greyscale === true);
64686478
$(`#${type}-dashboard-folder-label`).prop('checked', dashboard.folderLabel !== false);
6479+
$(`#${type}-dashboard-privacy-mode`).prop('checked', dashboard.privacyMode === true);
64696480
syncDashboardDependentFields(type);
6481+
applySettingsPrivacyMode();
64706482
};
64716483

64726484
const renderRuntimeControls = (type) => {
@@ -7992,6 +8004,8 @@ const changeDashboardPref = async (type, key, value) => {
79928004
nextDashboard.greyscale = value === true;
79938005
} else if (key === 'folderLabel') {
79948006
nextDashboard.folderLabel = value === true;
8007+
} else if (key === 'privacyMode') {
8008+
nextDashboard.privacyMode = value === true;
79958009
} else {
79968010
return;
79978011
}

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/folderviewplus.utils.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@
5151
layout: 'classic',
5252
expandToggle: true,
5353
greyscale: false,
54-
folderLabel: true
54+
folderLabel: true,
55+
privacyMode: false
5556
};
5657
const DASHBOARD_LAYOUT_OPTIONS = Object.freeze(['classic', 'legacy', 'fullwidth', 'accordion', 'inset', 'compactmatrix']);
5758
const DASHBOARD_LAYOUT_LABELS = Object.freeze({
@@ -701,7 +702,8 @@
701702
greyscale: incomingDashboard.greyscale === true,
702703
folderLabel: !Object.prototype.hasOwnProperty.call(incomingDashboard, 'folderLabel')
703704
? DEFAULT_DASHBOARD_PREFS.folderLabel
704-
: incomingDashboard.folderLabel !== false
705+
: incomingDashboard.folderLabel !== false,
706+
privacyMode: incomingDashboard.privacyMode === true
705707
};
706708
const incomingHealth = isPlainObject(incoming.health) ? incoming.health : {};
707709
const health = {

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/vm.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,13 @@ const utils = window.FolderViewPlusUtils || {
144144
performanceMode: false,
145145
lazyPreviewEnabled: false,
146146
lazyPreviewThreshold: 30,
147+
dashboard: {
148+
layout: 'classic',
149+
expandToggle: true,
150+
greyscale: false,
151+
folderLabel: true,
152+
privacyMode: false
153+
},
147154
health: {
148155
cardsEnabled: true,
149156
runtimeBadgeEnabled: false,
@@ -2976,6 +2983,7 @@ const applyRuntimePrefs = (prefs) => {
29762983
scheduleVmRuntimeWidthReflow('runtime-prefs', 0);
29772984
$('body').toggleClass('fvplus-performance-mode', normalized.performanceMode === true);
29782985
$('body').toggleClass('fvplus-performance-mode-strict', vmRuntimePerformanceProfile?.strict === true);
2986+
$('body').toggleClass('fvplus-privacy-vm-runtime', normalized?.dashboard?.privacyMode === true);
29792987
scheduleLiveRefresh(normalized);
29802988
};
29812989
window.getVmRuntimePerfTelemetrySnapshot = () => {

0 commit comments

Comments
 (0)