chore: auto-commit from dashboard
This commit is contained in:
@@ -43,6 +43,53 @@ from handlers.pdf import PDFHandlers # noqa: E402
|
||||
from handlers.workspace import WorkspaceHandlers # noqa: E402
|
||||
from handlers.youtube import YoutubeHandlers # noqa: E402
|
||||
|
||||
# Shared navigation injected into every served .html via <!--NAV--> marker.
|
||||
NAV_HTML = '''<header class="header">
|
||||
<a href="/echo/index.html" class="logo">
|
||||
<i data-lucide="circle-dot"></i>
|
||||
Echo
|
||||
</a>
|
||||
<nav class="nav">
|
||||
<a href="/echo/index.html" class="nav-item" data-page="index">
|
||||
<i data-lucide="layout-dashboard"></i>
|
||||
<span>Dashboard</span>
|
||||
</a>
|
||||
<a href="/echo/workspace.html" class="nav-item" data-page="workspace">
|
||||
<i data-lucide="code"></i>
|
||||
<span>Workspace</span>
|
||||
</a>
|
||||
<a href="/echo/notes.html" class="nav-item" data-page="notes">
|
||||
<i data-lucide="file-text"></i>
|
||||
<span>KB</span>
|
||||
</a>
|
||||
<a href="/echo/habits.html" class="nav-item" data-page="habits">
|
||||
<i data-lucide="dumbbell"></i>
|
||||
<span>Habits</span>
|
||||
</a>
|
||||
<a href="/echo/files.html" class="nav-item" data-page="files">
|
||||
<i data-lucide="folder"></i>
|
||||
<span>Files</span>
|
||||
</a>
|
||||
<a href="/echo/grup-sprijin.html" class="nav-item" data-page="grup-sprijin">
|
||||
<i data-lucide="heart-handshake"></i>
|
||||
<span>Grup</span>
|
||||
</a>
|
||||
<button class="theme-toggle" onclick="toggleTheme()" title="Schimbă tema">
|
||||
<i data-lucide="sun" id="themeIcon"></i>
|
||||
</button>
|
||||
</nav>
|
||||
</header>
|
||||
<script>
|
||||
(function(){
|
||||
var path = window.location.pathname;
|
||||
var m = path.match(/([^\\/]+?)(?:\\.html)?$/);
|
||||
var page = m ? m[1] : 'index';
|
||||
if (!page || page === 'echo') page = 'index';
|
||||
var item = document.querySelector('.nav-item[data-page="' + page + '"]');
|
||||
if (item) item.classList.add('active');
|
||||
})();
|
||||
</script>'''
|
||||
|
||||
|
||||
class TaskBoardHandler(
|
||||
GitHandlers,
|
||||
@@ -112,11 +159,28 @@ class TaskBoardHandler(
|
||||
self.handle_eco_logs()
|
||||
elif self.path == '/api/eco/doctor':
|
||||
self.handle_eco_doctor()
|
||||
elif self.path == '/api/eco/git' or self.path.startswith('/api/eco/git?'):
|
||||
self.handle_eco_git_status()
|
||||
elif self.path.startswith('/api/'):
|
||||
self.send_error(404)
|
||||
else:
|
||||
# Inject shared nav into served HTML pages via <!--NAV--> marker.
|
||||
rel = self.path.lstrip('/').split('?')[0]
|
||||
if rel.endswith('.html'):
|
||||
try:
|
||||
fpath = (KANBAN_DIR / rel).resolve()
|
||||
fpath.relative_to(KANBAN_DIR.resolve())
|
||||
except (ValueError, OSError):
|
||||
self.send_error(403)
|
||||
return
|
||||
if fpath.is_file():
|
||||
html = fpath.read_text('utf-8').replace('<!--NAV-->', NAV_HTML)
|
||||
body = html.encode('utf-8')
|
||||
self.send_response(200)
|
||||
self.send_header('Content-Type', 'text/html; charset=utf-8')
|
||||
self.send_header('Content-Length', str(len(body)))
|
||||
self.send_header('Cache-Control', 'no-cache')
|
||||
self.end_headers()
|
||||
self.wfile.write(body)
|
||||
return
|
||||
super().do_GET()
|
||||
|
||||
def do_POST(self):
|
||||
|
||||
Reference in New Issue
Block a user