feat(typescript): add core infrastructure modules
- Add centralized API type definitions (types/api.d.ts) - Interfaces for all API responses matching Go handler JSON - Snake_case field names matching actual API responses - Source file references in comments for verification - Add API client module (api.ts) - Procedural get/post/put/delete functions - Automatic auth header injection - Exported to window for cross-module access - Add DOM utilities (dom.ts) - escapeHtml for safe HTML rendering - querySelector wrappers with null checks - Element creation helpers - Add event delegation helpers (events.ts) - Reusable event delegation pattern - Data attribute selectors for dynamic content - Add localStorage wrapper (storage.ts) - Type-safe token management - Theme persistence helpers
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
function getToken(): string | null {
|
||||
return localStorage.getItem('token');
|
||||
}
|
||||
|
||||
function setToken(token: string): void {
|
||||
localStorage.setItem('token', token);
|
||||
}
|
||||
|
||||
function removeToken(): void {
|
||||
localStorage.removeItem('token');
|
||||
}
|
||||
|
||||
function getRefreshToken(): string | null {
|
||||
return localStorage.getItem('refresh_token');
|
||||
}
|
||||
|
||||
function setRefreshToken(token: string): void {
|
||||
localStorage.setItem('refresh_token', token);
|
||||
}
|
||||
|
||||
function removeRefreshToken(): void {
|
||||
localStorage.removeItem('refresh_token');
|
||||
}
|
||||
|
||||
function getTheme(): string {
|
||||
return localStorage.getItem('theme') || 'tokyo-night';
|
||||
}
|
||||
|
||||
function setTheme(theme: string): void {
|
||||
localStorage.setItem('theme', theme);
|
||||
}
|
||||
|
||||
function getSelectedLibrary(): string | null {
|
||||
return localStorage.getItem('selectedLibrary');
|
||||
}
|
||||
|
||||
function setSelectedLibrary(libraryId: string): void {
|
||||
localStorage.setItem('selectedLibrary', libraryId);
|
||||
}
|
||||
|
||||
function getSelectedBook(): string | null {
|
||||
return localStorage.getItem('selectedBook');
|
||||
}
|
||||
|
||||
function setSelectedBook(bookId: string): void {
|
||||
localStorage.setItem('selectedBook', bookId);
|
||||
}
|
||||
|
||||
function clearAll(): void {
|
||||
localStorage.clear();
|
||||
}
|
||||
|
||||
(window as any).storage = {
|
||||
getToken,
|
||||
setToken,
|
||||
removeToken,
|
||||
getRefreshToken,
|
||||
setRefreshToken,
|
||||
removeRefreshToken,
|
||||
getTheme,
|
||||
setTheme,
|
||||
getSelectedLibrary,
|
||||
setSelectedLibrary,
|
||||
getSelectedBook,
|
||||
setSelectedBook,
|
||||
clearAll
|
||||
};
|
||||
|
||||
export {
|
||||
getToken,
|
||||
setToken,
|
||||
removeToken,
|
||||
getRefreshToken,
|
||||
setRefreshToken,
|
||||
removeRefreshToken,
|
||||
getTheme,
|
||||
setTheme,
|
||||
getSelectedLibrary,
|
||||
setSelectedLibrary,
|
||||
getSelectedBook,
|
||||
setSelectedBook,
|
||||
clearAll
|
||||
};
|
||||
Reference in New Issue
Block a user