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>