forked from kennethkutyn/AmpliStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
86 lines (75 loc) · 2.61 KB
/
app.js
File metadata and controls
86 lines (75 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { applyDiagramTitleToDom, initializeApp } from './js/nodes.js';
import {
DEFAULT_DIAGRAM_TITLE,
getLastEditedAt,
setDiagramTitle,
setLastEditedAt
} from './js/state.js';
import { persistDiagramState } from './js/persistence.js';
import { initAiButton } from './js/ai.js';
const LAST_EDITED_STORAGE_KEY = 'amplistack:lastEditedAt';
const formatTimestamp = (timestamp) => {
if (!timestamp) {
return '--';
}
const date = new Date(timestamp);
if (Number.isNaN(date.getTime())) {
return '--';
}
return date.toLocaleString(undefined, {
year: 'numeric',
month: 'short',
day: 'numeric',
hour: 'numeric',
minute: '2-digit'
});
};
const setupLastEdited = () => {
const titleEl = document.getElementById('diagram-title');
const lastEditedEl = document.getElementById('diagram-last-edited');
if (!titleEl || !lastEditedEl) {
return;
}
const storedTimestamp = getLastEditedAt() || localStorage.getItem(LAST_EDITED_STORAGE_KEY);
setLastEditedAt(storedTimestamp || null);
if (storedTimestamp) {
localStorage.setItem(LAST_EDITED_STORAGE_KEY, storedTimestamp);
}
lastEditedEl.textContent = `Last edited: ${formatTimestamp(getLastEditedAt())}`;
const initialTitle = (titleEl.textContent || '').trim() || DEFAULT_DIAGRAM_TITLE;
setDiagramTitle(initialTitle);
applyDiagramTitleToDom(initialTitle);
const updateLastEdited = () => {
const now = new Date().toISOString();
setLastEditedAt(now);
localStorage.setItem(LAST_EDITED_STORAGE_KEY, now);
lastEditedEl.textContent = `Last edited: ${formatTimestamp(now)}`;
};
const handleTitleChange = (event) => {
const rawTitle = titleEl.textContent || '';
const trimmed = rawTitle.trim();
const normalizedTitle = trimmed || DEFAULT_DIAGRAM_TITLE;
setDiagramTitle(normalizedTitle);
applyDiagramTitleToDom(normalizedTitle, { updateElement: false });
if (!trimmed && event?.type === 'blur') {
titleEl.textContent = normalizedTitle;
}
updateLastEdited();
void persistDiagramState();
};
titleEl.addEventListener('input', handleTitleChange);
titleEl.addEventListener('keydown', (event) => {
if (event.key === 'Enter') {
event.preventDefault();
titleEl.blur();
}
});
titleEl.addEventListener('blur', handleTitleChange);
};
document.addEventListener('DOMContentLoaded', () => {
(async () => {
initAiButton();
await initializeApp();
setupLastEdited();
})();
});