Bring every tool's header in line with archive's pattern: [logo] [title] [version] [Add Local Directory] [⟳] ............... [◐] [?] ------------- header-left --------------- ----- header-right - Changes per tool: * browse: rename "Select Directory" → "Add Local Directory"; add the red-non-stable wrap to the build label (was missing); add a help panel + bundle shared/help.js. * classifier: rename selectDirectoryBtn → addDirectoryBtn, refreshBtn → refreshHeaderBtn for consistency. Update all JS callers and welcome-screen copy to the new label. * mdedit: same id rename. Move the previously-in-pane refresh button into the header. Stop renaming the dir button to "Directory: <name>" once a folder is loaded — instead use the shared btn--subtle variant to de-emphasize while keeping the standard label. * transmittal: convert non-standard <div class="app-header"> with spacer/icons containers to <header class="app-header"> with the canonical header-left/header-right pair. Move the publish split- button into header-left (Transmittal-specific primary action). Remove dead .app-header__spacer/__icons/header-icon-btn CSS now that nothing references those classes. * landing, form: add help-btn + help-panel + bundle shared/help.js. Each panel is tool-specific (project picker docs for landing, schema-driven form docs for form). Cross-cutting: * shared/base.css: promote .btn--subtle from browse/css/tree.css so any tool with an online mode can de-emphasize Add Local Directory consistently. Verified all 7 tools in headless Chromium: header structure correct, build label red on non-stable cuts, help panel opens + closes via button + Esc.
50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
/**
|
|
* Application initialization
|
|
*/
|
|
|
|
// Initialize when DOM is loaded
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
// Check File System API availability and update UI
|
|
initializeApiAvailability();
|
|
|
|
setupEventListeners();
|
|
initializeFileNavResizer();
|
|
setupTocDepthSelector();
|
|
startFileChangeMonitoring();
|
|
|
|
// Show scratchpad in file tree on startup
|
|
renderFileTree();
|
|
|
|
// Always start with scratchpad selected and loaded
|
|
openScratchpad();
|
|
const scratchpadEl = document.querySelector(`.file-item[data-path="${SCRATCHPAD_ID}"]`);
|
|
if (scratchpadEl) scratchpadEl.classList.add('active-file');
|
|
|
|
// In server (HTTP) mode, fetch and render the current directory subtree.
|
|
if (location.protocol === 'http:' || location.protocol === 'https:') {
|
|
loadServerDirectory().catch((err) => {
|
|
if (DEBUG) console.warn('Server directory load failed:', err);
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Initialize UI based on File System API availability
|
|
*/
|
|
function initializeApiAvailability() {
|
|
const selectDirectoryBtn = document.getElementById('addDirectoryBtn');
|
|
const welcomeHint = document.getElementById('welcome-hint');
|
|
const welcomeFirefox = document.getElementById('welcome-firefox');
|
|
|
|
if (!hasFileSystemAccess) {
|
|
// Disable file system buttons in Firefox and other unsupported browsers
|
|
if (selectDirectoryBtn) {
|
|
selectDirectoryBtn.disabled = true;
|
|
selectDirectoryBtn.title = 'File System API not supported in this browser';
|
|
}
|
|
// Show Firefox warning, hide normal hint
|
|
if (welcomeHint) welcomeHint.classList.add('hidden');
|
|
if (welcomeFirefox) welcomeFirefox.classList.remove('hidden');
|
|
|
|
}
|
|
}
|