annotate mrjunejune/src/public/editor.js @ 207:58d9b64d8dca

Updated deployment script to include sqlite3
author MrJuneJune <me@mrjunejune.com>
date Sun, 15 Feb 2026 12:25:50 -0800
parents e5aed6c36672
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
202
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 let editor = null;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2 let currentNoteId = 'index';
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
4 function getAuthToken() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5 return localStorage.getItem('notes-auth-token');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
7
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8 function requireAuth() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
9 if (!getAuthToken()) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
10 const returnUrl = encodeURIComponent(window.location.pathname);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 window.location.href = '/notes/login?return=' + returnUrl;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
12 return false;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
13 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14 return true;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16
204
e5aed6c36672 [Notes] Added icons and updated styling a bit. Probalby usable now.
MrJuneJune <me@mrjunejune.com>
parents: 202
diff changeset
17 function goHome() {
e5aed6c36672 [Notes] Added icons and updated styling a bit. Probalby usable now.
MrJuneJune <me@mrjunejune.com>
parents: 202
diff changeset
18 window.location.href = '/notes';
e5aed6c36672 [Notes] Added icons and updated styling a bit. Probalby usable now.
MrJuneJune <me@mrjunejune.com>
parents: 202
diff changeset
19 }
e5aed6c36672 [Notes] Added icons and updated styling a bit. Probalby usable now.
MrJuneJune <me@mrjunejune.com>
parents: 202
diff changeset
20
202
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21 function logout() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22 localStorage.removeItem('notes-auth-token');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23 window.location.href = '/notes/login';
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
24 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
25
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
26 function getNoteIdFromPath() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
27 const path = window.location.pathname;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
28 const match = path.match(/^\/notes\/(.+)$/);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
29 if (match && match[1] && match[1] !== 'login') {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
30 return decodeURIComponent(match[1]);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
31 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
32 return 'index';
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
33 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
34
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
35 function showNewNoteDialog() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
36 document.getElementById('new-note-dialog').classList.add('show');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
37 document.getElementById('new-note-id').focus();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
38 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
39
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
40 function hideNewNoteDialog() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
41 document.getElementById('new-note-dialog').classList.remove('show');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42 document.getElementById('new-note-id').value = '';
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
44
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
45 function createNewNote() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
46 let noteId = document.getElementById('new-note-id').value.trim();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
47 if (!noteId) return;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
48
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49 // Sanitize note ID
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50 noteId = noteId.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/-+/g, '-');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52 hideNewNoteDialog();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53 window.location.href = '/notes/' + encodeURIComponent(noteId);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
54 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
55
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56 // Handle Enter key in new note dialog
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
57 document.getElementById('new-note-id').addEventListener('keydown', function(e) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
58 if (e.key === 'Enter') {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 e.preventDefault();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60 createNewNote();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62 if (e.key === 'Escape') {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 hideNewNoteDialog();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
65 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 // Close dialog on backdrop click
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68 document.getElementById('new-note-dialog').addEventListener('click', function(e) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
69 if (e.target === this) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
70 hideNewNoteDialog();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
71 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
72 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
73
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
74 async function uploadFile(file) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
75 const token = getAuthToken();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
76 if (!token) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
77 throw new Error('Not authenticated');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
78 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
79
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
80 // 1. Create media record
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
81 const createResponse = await fetch('/api/media/create', {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
82 method: 'POST',
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
83 headers: {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
84 'Authorization': 'Bearer ' + token,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
85 'Content-Type': 'application/json'
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
86 },
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
87 body: JSON.stringify({
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
88 filename: file.name,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
89 content_type: file.type
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
90 })
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
91 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
92
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
93 if (!createResponse.ok) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
94 const error = await createResponse.json().catch(() => ({}));
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
95 throw new Error(error.error || 'Failed to create media record');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
96 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
97
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
98 const data = await createResponse.json();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
99
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
100 // 2. Upload file directly to S3
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
101 const uploadResponse = await fetch(data.upload_url, {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
102 method: 'PUT',
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
103 headers: {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
104 'Content-Type': file.type
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
105 },
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
106 body: file
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
107 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
108
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
109 if (!uploadResponse.ok) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
110 throw new Error('Failed to upload file to S3');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
111 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
112
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
113 // 3. Mark as uploaded (triggers processing for images)
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
114 await fetch(`/api/media/${data.media_id}/uploaded`, {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
115 method: 'POST',
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
116 headers: {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
117 'Authorization': 'Bearer ' + token
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
118 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
119 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
120
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
121 // 4. Poll for images, return immediately for non-images
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
122 if (file.type.startsWith('image/')) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
123 return await pollForProcessedImage(data.media_id, token);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
124 } else {
204
e5aed6c36672 [Notes] Added icons and updated styling a bit. Probalby usable now.
MrJuneJune <me@mrjunejune.com>
parents: 202
diff changeset
125 // For non-images, use the public URL from the server
e5aed6c36672 [Notes] Added icons and updated styling a bit. Probalby usable now.
MrJuneJune <me@mrjunejune.com>
parents: 202
diff changeset
126 return { url: data.public_url };
202
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
127 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
128 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
129
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
130 async function pollForProcessedImage(mediaId, token) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
131 const maxAttempts = 60; // 2 minutes max (60 * 2 seconds)
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
132
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
133 for (let i = 0; i < maxAttempts; i++) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
134 await new Promise(resolve => setTimeout(resolve, 2000)); // 2 second interval
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
135
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
136 const statusResponse = await fetch(`/api/media/${mediaId}/status`, {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
137 headers: {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
138 'Authorization': 'Bearer ' + token
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
139 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
140 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
141
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
142 if (!statusResponse.ok) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
143 console.warn('Status check failed, retrying...');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
144 continue;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
145 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
146
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
147 const statusData = await statusResponse.json();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
148
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
149 if (statusData.status === 'finished') {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
150 return { url: statusData.processed_url };
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
151 } else if (statusData.status === 'error') {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
152 throw new Error(statusData.error_message || 'Processing failed');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
153 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
154 // Status is 'uploaded' or 'processing', continue polling
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
155 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
156
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
157 throw new Error('Processing timeout after 2 minutes');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
158 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
159
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
160 async function saveContent(content) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
161 const token = getAuthToken();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
162 if (!token) return;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
163
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
164 const response = await fetch('/api/editor/save', {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
165 method: 'POST',
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
166 headers: {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
167 'Authorization': 'Bearer ' + token,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
168 'Content-Type': 'application/json'
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
169 },
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
170 body: JSON.stringify({
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
171 doc_id: currentNoteId,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
172 content: content
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
173 })
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
174 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
175
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
176 if (!response.ok) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
177 throw new Error('Failed to save');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
178 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
179 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
180
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
181 async function loadNote(noteId) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
182 const token = getAuthToken();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
183 if (!token) return;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
184
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
185 try {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
186 const response = await fetch('/api/editor/load/' + encodeURIComponent(noteId), {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
187 headers: { 'Authorization': 'Bearer ' + token }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
188 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
189
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
190 if (response.ok) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
191 const data = await response.json();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
192 editor.setContent(data.content || '');
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
193 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
194 } catch (error) {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
195 console.error('Failed to load note:', error);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
196 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
197 }
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
198
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
199 // Initialize
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
200 document.addEventListener('DOMContentLoaded', function() {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
201 if (!requireAuth()) return;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
202
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
203 currentNoteId = getNoteIdFromPath();
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
204 document.getElementById('note-id-display').textContent = currentNoteId;
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
205
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
206 // Update page title
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
207 document.title = currentNoteId + ' | Notes';
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
208
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
209 editor = RichEditor.init('editor-container', {
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
210 uploadCallback: uploadFile,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
211 saveCallback: saveContent,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
212 debounceMs: 1500,
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
213 placeholder: 'Start writing... (paste images, drag files, or use /upload)\n\nTip: Click "+ New Note" to create linked notes.'
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
214 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
215
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
216 loadNote(currentNoteId);
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
217 });
b9b184b3303c [Notes] Images get processed and it is properly fetched. Thank you.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
218