implement saving to/loading from .txt files
Hunter
Sunday, August 25th, 2024 at 11:33 PM
210 let isF2Pressed = false;
211 let themes = [];
212
213 + function handleSave(e) {
214 + if ((e.metaKey || e.ctrlKey) && e.key === 's') {
215 + e.preventDefault();
216 + saveTaskTreeToFile();
217 + }
218 + }
219 +
220 + function saveTaskTreeToFile() {
221 + const serializedTasks = serializeTaskTree(taskPath[0]);
222 + const rootTaskName = taskPath[0].text || 'Untitled';
223 + const date = new Date();
224 + const fileName = `${rootTaskName} - ${date.toLocaleString('default', { month: 'short' }).toLowerCase()} ${date.getDate()}, '${date.getFullYear().toString().slice(-2)}.txt`;
225 +
226 + const blob = new Blob([serializedTasks], { type: 'text/plain' });
227 + const url = URL.createObjectURL(blob);
228 +
229 + const a = document.createElement('a');
230 + a.href = url;
231 + a.download = fileName;
232 + a.click();
233 +
234 + URL.revokeObjectURL(url);
235 + }
236 +
237 + function handleOpen(e) {
238 + if ((e.metaKey || e.ctrlKey) && e.key === 'o') {
239 + e.preventDefault();
240 + openTaskTreeFromFile();
241 + }
242 + }
243 +
244 + function openTaskTreeFromFile() {
245 + const input = document.createElement('input');
246 + input.type = 'file';
247 + input.accept = '.txt';
248 + input.onchange = function(event) {
249 + const file = event.target.files[0];
250 + const reader = new FileReader();
251 + reader.onload = function(e) {
252 + try {
253 + const newRootTask = deserializeTaskTree(e.target.result);
254 + if (confirm('Are you sure you want to overwrite the existing task tree?')) {
255 + rootTask = newRootTask;
256 + currentTask = rootTask;
257 + taskPath = [currentTask];
258 + renderCurrentView();
259 + saveTasksToLocalStorage();
260 + }
261 + } catch (error) {
262 + alert(`Error importing task tree: ${error.message}`);
263 + }
264 + };
265 + reader.readAsText(file);
266 + };
267 + input.click();
268 + }
269 +
270 function scheduleSave() {
271 if (saveTimer) {
272 clearTimeout(saveTimer);
995 }
996 });
997
998 + document.addEventListener('keydown', handleSave);
999 + document.addEventListener('keydown', handleOpen);
1000 +
1001 getThemesFromCSS();
1002 setInitialTheme();
1003 renderCurrentView();