@@ -79,6 +79,43 @@ if (!empty($fvplusRuntimeConflicts)) {
7979<span id="update-check-status" class="status-line"></span>
8080<span id="rollback-status" class="status-line"></span>
8181
82+ <div id="fv-theme-workspace-panel" class="fv-theme-workspace-panel">
83+ <div class="rules-panel fv-theme-workspace-shell">
84+ <div class="rules-header">
85+ <h3>Theme Workspace</h3>
86+ <span class="rules-help">Import GitHub CSS themes, activate one managed theme at a time, and layer FolderView Plus token overrides and custom CSS on top.</span>
87+ </div>
88+ <div class="fv-theme-workspace-body">
89+ <div class="fv-theme-import-row">
90+ <input id="fv-theme-github-source" type="text" placeholder="owner/repo, owner/repo/tree/branch, or GitHub raw CSS URL">
91+ <button type="button" onclick="importThemeWorkspaceGithub()"><i class="fa fa-github"></i> Import from GitHub</button>
92+ <button type="button" onclick="checkThemeWorkspaceUpdates()"><i class="fa fa-refresh"></i> Check updates</button>
93+ </div>
94+ <div id="fv-theme-workspace-status" class="fv-theme-workspace-status">Theme workspace idle.</div>
95+ <div id="fv-theme-workspace-list" class="fv-theme-workspace-list">
96+ <div class="fv-theme-empty-state">
97+ <strong>No managed themes imported yet.</strong>
98+ <span>Import a GitHub CSS theme and it will be written into the existing custom asset pipeline.</span>
99+ </div>
100+ </div>
101+ <div class="fv-theme-customize-grid">
102+ <div class="fv-theme-customize-card">
103+ <div class="settings-mini-title">Token overrides</div>
104+ <div id="fv-theme-variable-grid" class="fv-theme-variable-grid"></div>
105+ </div>
106+ <div class="fv-theme-customize-card">
107+ <div class="settings-mini-title">Custom CSS</div>
108+ <textarea id="fv-theme-custom-css" class="fv-theme-custom-css" spellcheck="false" placeholder="/* Appended after the active managed theme for Docker, VMs, and Dashboard. */"></textarea>
109+ </div>
110+ </div>
111+ <div class="fv-theme-customize-actions">
112+ <button type="button" onclick="saveThemeWorkspaceCustomize()"><i class="fa fa-save"></i> Save customization layer</button>
113+ <button type="button" onclick="deactivateThemeWorkspaceTheme()"><i class="fa fa-ban"></i> Disable managed theme</button>
114+ </div>
115+ </div>
116+ </div>
117+ </div>
118+
82119
83120<h2 data-i18n="docker" data-fv-section="docker">Docker</h2>
84121<div class="folder-table">
@@ -195,6 +232,20 @@ if (!empty($fvplusRuntimeConflicts)) {
195232 </label>
196233 <div class="setting-help">Use performance mode + lazy previews for larger libraries to reduce render overhead.</div>
197234 </div>
235+ <div class="settings-mini-card fv-folder-defaults-card">
236+ <div class="settings-mini-title">Folder defaults</div>
237+ <label class="setting-select" for="docker-folder-defaults-source">
238+ <span>Source folder</span>
239+ <select id="docker-folder-defaults-source"></select>
240+ </label>
241+ <div id="docker-folder-defaults-summary" class="setting-help">No Docker folder defaults saved yet.</div>
242+ <div class="fv-folder-defaults-actions">
243+ <button type="button" onclick="saveFolderDefaultsFromSelection('docker')"><i class="fa fa-bookmark"></i> Save as defaults</button>
244+ <button type="button" onclick="applySavedFolderDefaultsToAll('docker')"><i class="fa fa-repeat"></i> Apply to all</button>
245+ <button type="button" onclick="clearFolderDefaults('docker')"><i class="fa fa-eraser"></i> Clear</button>
246+ </div>
247+ <div class="setting-note">New folders inherit this saved profile when the folder editor opens in create mode.</div>
248+ </div>
198249 <div class="settings-mini-card">
199250 <div class="settings-mini-title">Dashboard</div>
200251 <label class="setting-select" for="docker-dashboard-layout">
@@ -432,6 +483,20 @@ if (!empty($fvplusRuntimeConflicts)) {
432483 </label>
433484 <div class="setting-help">Use performance mode + lazy previews for larger libraries to reduce render overhead.</div>
434485 </div>
486+ <div class="settings-mini-card fv-folder-defaults-card">
487+ <div class="settings-mini-title">Folder defaults</div>
488+ <label class="setting-select" for="vm-folder-defaults-source">
489+ <span>Source folder</span>
490+ <select id="vm-folder-defaults-source"></select>
491+ </label>
492+ <div id="vm-folder-defaults-summary" class="setting-help">No VM folder defaults saved yet.</div>
493+ <div class="fv-folder-defaults-actions">
494+ <button type="button" onclick="saveFolderDefaultsFromSelection('vm')"><i class="fa fa-bookmark"></i> Save as defaults</button>
495+ <button type="button" onclick="applySavedFolderDefaultsToAll('vm')"><i class="fa fa-repeat"></i> Apply to all</button>
496+ <button type="button" onclick="clearFolderDefaults('vm')"><i class="fa fa-eraser"></i> Clear</button>
497+ </div>
498+ <div class="setting-note">New folders inherit this saved profile when the folder editor opens in create mode.</div>
499+ </div>
435500 <div class="settings-mini-card">
436501 <div class="settings-mini-title">Dashboard</div>
437502 <label class="setting-select" for="vm-dashboard-layout">
@@ -1397,6 +1462,8 @@ if (!empty($fvplusRuntimeConflicts)) {
13971462<script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.utils.js')?>"></script>
13981463<script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.request.js')?>"></script>
13991464<script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.theme-resolver.js')?>"></script>
1465+ <script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folder.settings-transfer.js')?>"></script>
1466+ <script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.theme-workspace.js')?>"></script>
14001467<script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.chrome.js')?>"></script>
14011468<script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.dirty.js')?>"></script>
14021469<script src="<?=fvplus_asset('/plugins/folderview.plus/scripts/folderviewplus.runtime-parity.js')?>"></script>
0 commit comments