diff --git a/index.html b/index.html index 4e3af64..e2c4757 100644 --- a/index.html +++ b/index.html @@ -1111,8 +1111,8 @@ contentCache: {}, searchIndex: [], expandedSections: new Set(), - repo: "infinition/Bjorn", // Fallback - branch: "wiki", + repo: "infinition/AcidWiki", // Fallback + branch: "main", currentTitle: "", currentFolder: "", currentFilename: "" @@ -1407,28 +1407,28 @@ // --- 4. WIKI CORE --- async function initWiki() { try { - debugLog('[Bjorn] 🚀 Initializing wiki...'); + debugLog('[AcidWiki] 🚀 Initializing wiki...'); // Try GitHub API first for production let structure = await fetchWikiStructureFromAPI(); // If API fails, try local filesystem scanning (for local HTTP servers) if (!structure) { - debugLog('[Bjorn] 🔄 Trying local filesystem scan...'); + debugLog('[AcidWiki] 🔄 Trying local filesystem scan...'); structure = await scanLocalFilesystem(); } if (!structure || Object.keys(structure).length === 0) { if (CONFIG.features.showRootReadme) { - debugLog('[Bjorn] ℹ️ No docs found, but root README is enabled. Proceeding...'); + debugLog('[AcidWiki] ℹ️ No docs found, but root README is enabled. Proceeding...'); structure = {}; // Empty but valid } else { - console.error('[Bjorn] ❌ No wiki content found!'); + console.error('[AcidWiki] ❌ No wiki content found!'); throw new Error("No wiki content found. Please add .md files to wiki/docs/"); } } - debugLog('[Bjorn] ✅ Wiki structure loaded successfully'); + debugLog('[AcidWiki] ✅ Wiki structure loaded successfully'); STATE.wikiData = structure; const firstFolder = Object.keys(STATE.wikiData)[0]; @@ -1453,44 +1453,35 @@ showErrorState(e.message); } } + async function fetchWikiStructureFromAPI() { - if (!STATE.repo) return null; - - // On essaie la branche configurée, puis 'wiki', puis 'main' - const branchesToTry = [CONFIG.branch, 'wiki', 'main']; + // CORRECTION : On autorise l'API même en mode local, tant qu'il y a un repo configuré + if (!STATE.repo) { + debugLog('[AcidWiki] ⏭️ Skipping GitHub API (no repo configured)'); + return null; + } + const branchesToTry = [CONFIG.branch, 'main', 'master']; for (const branch of branchesToTry) { if (!branch) continue; - debugLog(`[Bjorn] 🌐 Fetching structure from GitHub API: ${STATE.repo}/${branch}`); - + debugLog(`[AcidWiki] 🌐 Fetching structure from GitHub API: ${STATE.repo}/${branch}`); try { - // API Call pour récupérer l'arbre complet (recursive) const res = await fetch(`https://api.github.com/repos/${STATE.repo}/git/trees/${branch}?recursive=1`); - if (!res.ok) { - debugLog(`[Bjorn] ⚠️ Branch "${branch}" failed (${res.status})`); + debugLog(`[AcidWiki] ⚠️ Branch "${branch}" failed (${res.status})`); continue; } + debugLog(`[AcidWiki] ✅ GitHub API response received for branch: ${branch}`); const data = await res.json(); - - // DEBUG: Décommentez la ligne ci-dessous si ça affiche encore "Found 0 files" pour voir ce que GitHub renvoie - // console.log("GitHub Tree:", data.tree); - const structure = {}; let fileCount = 0; data.tree.forEach(item => { - // On cherche des fichiers .md qui sont dans un dossier 'docs' (peu importe le préfixe parent) - // Cela marchera pour 'wiki/docs/File.md' ET 'docs/File.md' - if (item.type === 'blob' && item.path.endsWith('.md') && (item.path.includes('/docs/') || item.path.startsWith('docs/'))) { - - // On extrait la partie relative après "docs/" pour construire le menu - // Ex: "wiki/docs/01_General/Intro.md" -> "01_General/Intro.md" - const relativePath = item.path.substring(item.path.indexOf('docs/') + 5); + if (item.path.startsWith('wiki/docs/') && item.type === 'blob' && item.path.endsWith('.md')) { + const relativePath = item.path.replace('wiki/docs/', ''); const parts = relativePath.split('/'); - // Construction de l'objet de structure let currentLevel = structure; for (let i = 0; i < parts.length - 1; i++) { const folder = parts[i]; @@ -1499,17 +1490,13 @@ } const filename = parts[parts.length - 1]; - // On stocke le chemin COMPLET pour que le fetch plus tard puisse le trouver - // C'est la clé du fix : on garde 'item.path' qui est le vrai chemin GitHub const title = decodeURIComponent(filename.replace(/\.md$/, '').replace(/_/g, ' ')); - - // Petite astuce : on stocke le vrai chemin API dans la structure - currentLevel[title] = item.path; + currentLevel[title] = filename; fileCount++; } }); - // Fonction de tri (inchangée) + // Sort folders and files recursively function sortStructure(obj) { const sorted = {}; Object.keys(obj).sort().forEach(key => { @@ -1523,33 +1510,31 @@ } const sortedStructure = sortStructure(structure); - debugLog(`[Bjorn] ✅ GitHub discovery complete: Found ${fileCount} files`); - - if (fileCount > 0) return sortedStructure; - + debugLog(`[AcidWiki] ✅ GitHub discovery complete: Found ${fileCount} files`); + return Object.keys(sortedStructure).length > 0 ? sortedStructure : null; } catch (e) { - debugLog(`[Bjorn] ❌ Error fetching branch "${branch}":`, e); + debugLog(`[AcidWiki] ❌ Error fetching branch "${branch}":`, e); } } return null; } async function scanLocalFilesystem() { - debugLog('[Bjorn] 🔍 Starting local filesystem scan...'); + debugLog('[AcidWiki] 🔍 Starting local filesystem scan...'); try { // Try to fetch the wiki/docs/ directory listing const res = await fetch('./wiki/docs/'); if (!res.ok) { - debugLog('[Bjorn] ❌ Cannot access wiki/docs/ directory'); + debugLog('[AcidWiki] ❌ Cannot access wiki/docs/ directory'); return null; } - debugLog('[Bjorn] ✅ Successfully accessed wiki/docs/'); + debugLog('[AcidWiki] ✅ Successfully accessed wiki/docs/'); const structure = {}; // Recursive function to scan a folder async function scanFolder(path = '', parentStructure = structure) { - debugLog(`[Bjorn] 📂 Scanning folder: wiki/docs/${path || '(root)'}`); + debugLog(`[AcidWiki] 📂 Scanning folder: wiki/docs/${path || '(root)'}`); const folderUrl = path ? `./wiki/docs/${path}/` : './wiki/docs/'; const folderRes = await fetch(folderUrl); @@ -1563,7 +1548,7 @@ let filesFound = 0; let foldersFound = 0; - debugLog(`[Bjorn] 🔎 Found ${links.length} links in HTML`); + debugLog(`[AcidWiki] 🔎 Found ${links.length} links in HTML`); for (const link of links) { const href = link.getAttribute('href'); @@ -1573,7 +1558,7 @@ // Skip navigation links if (linkText === '..' || linkText === '~') { - debugLog(`[Bjorn] ⏭️ Skipped navigation link: "${linkText}"`); + debugLog(`[AcidWiki] ⏭️ Skipped navigation link: "${linkText}"`); continue; } @@ -1584,14 +1569,14 @@ // Only process links that contain wiki/docs in their path if (!href.includes(baseDocsPath)) { - debugLog(`[Bjorn] ⏭️ Skipped (not in wiki/docs): "${href}"`); + debugLog(`[AcidWiki] ⏭️ Skipped (not in wiki/docs): "${href}"`); continue; } // Extract the part after /wiki/docs/ const afterDocs = href.split(baseDocsPath)[1]; if (!afterDocs) { - debugLog(`[Bjorn] ⏭️ Skipped (invalid path after wiki/docs): "${href}"`); + debugLog(`[AcidWiki] ⏭️ Skipped (invalid path after wiki/docs): "${href}"`); continue; } @@ -1600,7 +1585,7 @@ // If we're scanning '01_General', afterDocs should start with '01_General/' and next segment is the child const expectedPrefix = path ? `${path}/` : ''; if (path && !afterDocs.startsWith(expectedPrefix)) { - debugLog(`[Bjorn] ⏭️ Skipped (not in current path "${path}"): afterDocs="${afterDocs}"`); + debugLog(`[AcidWiki] ⏭️ Skipped (not in current path "${path}"): afterDocs="${afterDocs}"`); continue; } @@ -1610,7 +1595,7 @@ // Only accept direct children: should not contain additional slashes (except trailing for folders) const withoutTrailingSlash = relativePart.endsWith('/') ? relativePart.slice(0, -1) : relativePart; if (withoutTrailingSlash.includes('/')) { - debugLog(`[Bjorn] ⏭️ Skipped (not a direct child): relativePart="${relativePart}"`); + debugLog(`[AcidWiki] ⏭️ Skipped (not a direct child): relativePart="${relativePart}"`); continue; } @@ -1637,13 +1622,13 @@ } if (!folderName || folderName.trim() === '' || folderName === '..') { - debugLog(`[Bjorn] ⏭️ Skipping invalid folder name: "${folderName}"`); + debugLog(`[AcidWiki] ⏭️ Skipping invalid folder name: "${folderName}"`); continue; } const fullPath = path ? `${path}/${folderName}` : folderName; - debugLog(`[Bjorn] 📁 Found folder: ${folderName} (${fullPath})`); + debugLog(`[AcidWiki] 📁 Found folder: ${folderName} (${fullPath})`); foldersFound++; if (!parentStructure[folderName]) { @@ -1653,15 +1638,15 @@ try { await scanFolder(fullPath, parentStructure[folderName]); } catch (e) { - console.warn(`[Bjorn] ⚠️ Failed to scan subfolder ${fullPath}:`, e); + console.warn(`[AcidWiki] ⚠️ Failed to scan subfolder ${fullPath}:`, e); } } else { - debugLog(`[Bjorn] ⏭️ Skipped non-markdown file: "${href}"`); + debugLog(`[AcidWiki] ⏭️ Skipped non-markdown file: "${href}"`); } } - debugLog(`[Bjorn] ✓ Folder scan complete: ${filesFound} files, ${foldersFound} subfolders`); - debugLog(`[Bjorn] 📊 Structure for "${path || 'root'}":`, Object.keys(parentStructure)); + debugLog(`[AcidWiki] ✓ Folder scan complete: ${filesFound} files, ${foldersFound} subfolders`); + debugLog(`[AcidWiki] 📊 Structure for "${path || 'root'}":`, Object.keys(parentStructure)); } // Start recursive scanning from root @@ -1683,12 +1668,12 @@ const sortedStructure = sortStructure(structure); const totalItems = JSON.stringify(sortedStructure).split('.md').length - 1; - debugLog(`[Bjorn] ✅ Scan complete! Found ${totalItems} markdown files`); - debugLog('[Bjorn] 📊 Structure:', sortedStructure); + debugLog(`[AcidWiki] ✅ Scan complete! Found ${totalItems} markdown files`); + debugLog('[AcidWiki] 📊 Structure:', sortedStructure); return Object.keys(sortedStructure).length > 0 ? sortedStructure : null; } catch (e) { - console.error('[Bjorn] ❌ Local filesystem scan failed:', e); + console.error('[AcidWiki] ❌ Local filesystem scan failed:', e); return null; } } @@ -1770,9 +1755,9 @@ content: text.toLowerCase(), titleLower: (CONFIG.ui.rootReadmeTitle || "Project Home").toLowerCase() }); - debugLog("[Bjorn] 🔍 Root README indexed."); + debugLog("[AcidWiki] 🔍 Root README indexed."); }) - .catch(e => console.warn("[Bjorn] Failed to index README.md", e)) + .catch(e => console.warn("[AcidWiki] Failed to index README.md", e)) ); } @@ -1794,7 +1779,7 @@ titleLower: CONFIG.ui.changelogTitle.toLowerCase(), isVirtual: true }); - debugLog("[Bjorn] 🔍 Changelog indexed."); + debugLog("[AcidWiki] 🔍 Changelog indexed."); }) .catch(() => { }) ); @@ -2127,10 +2112,7 @@ try { const path = `wiki/docs/${folder}/${filename}`; - // C'EST ICI QU'IL FAUT AJOUTER &sha=${STATE.branch} - // Cette URL utilise 'commits', 'path' et 'sha' - const res = await fetch(`https://api.github.com/repos/${STATE.repo}/commits?path=${path}&sha=${STATE.branch}&page=1&per_page=1`); - + const res = await fetch(`https://api.github.com/repos/${STATE.repo}/commits?path=${path}&page=1&per_page=1`); if (res.ok) { const data = await res.json(); if (data.length > 0) {