Mercurial
diff mrjunejune/src/notes/index.html @ 202:b9b184b3303c
[Notes] Images get processed and it is properly fetched. Thank you.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sun, 15 Feb 2026 09:12:57 -0800 |
| parents | 6cdee35a7ba9 |
| children | e5aed6c36672 |
line wrap: on
line diff
--- a/mrjunejune/src/notes/index.html Sun Feb 15 07:07:50 2026 -0800 +++ b/mrjunejune/src/notes/index.html Sun Feb 15 09:12:57 2026 -0800 @@ -158,174 +158,6 @@ {{/parts/footer.html}} <script src="/public/js/rich_editor.js"></script> - <script> - - let editor = null; - let currentNoteId = 'index'; - - function getAuthToken() { - return localStorage.getItem('notes-auth-token'); - } - - function requireAuth() { - if (!getAuthToken()) { - const returnUrl = encodeURIComponent(window.location.pathname); - window.location.href = '/notes/login?return=' + returnUrl; - return false; - } - return true; - } - - function logout() { - localStorage.removeItem('notes-auth-token'); - window.location.href = '/notes/login'; - } - - function getNoteIdFromPath() { - const path = window.location.pathname; - const match = path.match(/^\/notes\/(.+)$/); - if (match && match[1] && match[1] !== 'login') { - return decodeURIComponent(match[1]); - } - return 'index'; - } - - function showNewNoteDialog() { - document.getElementById('new-note-dialog').classList.add('show'); - document.getElementById('new-note-id').focus(); - } - - function hideNewNoteDialog() { - document.getElementById('new-note-dialog').classList.remove('show'); - document.getElementById('new-note-id').value = ''; - } - - function createNewNote() { - let noteId = document.getElementById('new-note-id').value.trim(); - if (!noteId) return; - - // Sanitize note ID - noteId = noteId.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/-+/g, '-'); - - hideNewNoteDialog(); - window.location.href = '/notes/' + encodeURIComponent(noteId); - } - - // Handle Enter key in new note dialog - document.getElementById('new-note-id').addEventListener('keydown', function(e) { - if (e.key === 'Enter') { - e.preventDefault(); - createNewNote(); - } - if (e.key === 'Escape') { - hideNewNoteDialog(); - } - }); - - // Close dialog on backdrop click - document.getElementById('new-note-dialog').addEventListener('click', function(e) { - if (e.target === this) { - hideNewNoteDialog(); - } - }); - - async function uploadFile(file) { - const token = getAuthToken(); - if (!token) { - throw new Error('Not authenticated'); - } - - // Get s3 bucket URL - const response = await fetch('/api/s3/upload-url', { - method: 'POST', - headers: { - 'Authorization': 'Bearer ' + token, - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - filename: file.name, - content_type: file.type - }) - }); - - if (!response.ok) { - const error = await response.json(); - throw new Error(error.error || 'Failed to get upload URL'); - } - - const data = await response.json(); - - const uploadResponse = await fetch(data.upload_url, { - method: 'PUT', - headers: { 'Content-Type': file.type }, - body: file - }); - - if (!uploadResponse.ok) { - throw new Error('Failed to upload file to S3'); - } - - return { url: data.public_url, key: data.key }; - } - - async function saveContent(content) { - const token = getAuthToken(); - if (!token) return; - - const response = await fetch('/api/editor/save', { - method: 'POST', - headers: { - 'Authorization': 'Bearer ' + token, - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - doc_id: currentNoteId, - content: content - }) - }); - - if (!response.ok) { - throw new Error('Failed to save'); - } - } - - async function loadNote(noteId) { - const token = getAuthToken(); - if (!token) return; - - try { - const response = await fetch('/api/editor/load/' + encodeURIComponent(noteId), { - headers: { 'Authorization': 'Bearer ' + token } - }); - - if (response.ok) { - const data = await response.json(); - editor.setContent(data.content || ''); - } - } catch (error) { - console.error('Failed to load note:', error); - } - } - - // Initialize - document.addEventListener('DOMContentLoaded', function() { - if (!requireAuth()) return; - - currentNoteId = getNoteIdFromPath(); - document.getElementById('note-id-display').textContent = currentNoteId; - - // Update page title - document.title = currentNoteId + ' | Notes'; - - editor = RichEditor.init('editor-container', { - uploadCallback: uploadFile, - saveCallback: saveContent, - debounceMs: 1500, - placeholder: 'Start writing... (paste images, drag files, or use /upload)\n\nTip: Click "+ New Note" to create linked notes.' - }); - - loadNote(currentNoteId); - }); - </script> + <script src="/public/editor.js"></script> </body> </html>