insertion of templates works
authorPhiTux <redacted>
Mon, 28 Apr 2025 21:48:08 +0000 (23:48 +0200)
committerPhiTux <redacted>
Mon, 28 Apr 2025 21:48:08 +0000 (23:48 +0200)
frontend/src/lib/TemplateDropdown.svelte [new file with mode: 0644]
frontend/src/lib/templateStore.js
frontend/src/routes/+layout.svelte
frontend/src/routes/+page.server.js [new file with mode: 0644]
frontend/src/routes/write/+page.svelte

diff --git a/frontend/src/lib/TemplateDropdown.svelte b/frontend/src/lib/TemplateDropdown.svelte
new file mode 100644 (file)
index 0000000..bf94081
--- /dev/null
@@ -0,0 +1,25 @@
+<script>
+       import { templates, insertTemplate } from '$lib/templateStore';
+</script>
+
+<select
+       bind:value={$insertTemplate}
+       class="form-select form-select-sm"
+       aria-label="Select template"
+>
+       <option disabled selected>Vorlage einfügen...</option>
+       {#each $templates as template}
+               <option value={template.text} selected={template.name === $insertTemplate}>
+                       {template.name}
+               </option>
+       {/each}
+</select>
+
+<style>
+       .form-select {
+               width: inherit !important;
+               padding-top: 0;
+               padding-bottom: 0;
+               align-self: center;
+       }
+</style>
index 6f04ae5009e02a03912777ae3c73271c40b4ca6a..2f701bd5641093aa0f6f331ff7f00bd0f2f28127 100644 (file)
@@ -1,3 +1,4 @@
 import { writable } from "svelte/store";
 
-export const templates = writable([]);
\ No newline at end of file
+export const templates = writable([]);
+export const insertTemplate = writable(null);
\ No newline at end of file
index b3368ed9ed44fb1e3bd0de9b3122bad364e4c582..30b742d22589e4d327a86a8cda79abd6ae8c1634 100644 (file)
@@ -20,7 +20,7 @@
        import trianglify from 'trianglify';
        import { tags } from '$lib/tagStore.js';
        import TagModal from '$lib/TagModal.svelte';
-       import { alwaysShowSidenav, offcanvasIsOpen } from '$lib/helpers.js';
+       import { alwaysShowSidenav } from '$lib/helpers.js';
        import { templates } from '$lib/templateStore';
        import {
                faRightFromBracket,
                        .then((response) => {
                                $templates = response.data;
 
-                               // add "new template" option to start
-                               $templates.unshift({ name: 'Neue Vorlage erstellen...', text: '' });
-
                                selectedTemplate = null;
                                updateSelectedTemplate();
                        })
                if (isSavingTemplate) return;
                isSavingTemplate = true;
 
-               if (selectedTemplate === 0) {
+               if (selectedTemplate === '-1') {
                        // add new template
                        $templates.push({ name: templateName, text: templateText });
                } else {
                        $templates[selectedTemplate].text = templateText;
                }
 
-               // remove first "new template" option
-               $templates.shift();
-
                axios
                        .post(API_URL + '/logs/saveTemplates', {
                                templates: $templates
 
        let isDeletingTemplate = $state(false);
        function deleteTemplate() {
-               if (selectedTemplate === null || selectedTemplate === 0) return;
+               if (selectedTemplate === null || selectedTemplate === '-1') return;
 
                if (isDeletingTemplate) return;
                isDeletingTemplate = true;
                // remove template from list
                $templates.splice(selectedTemplate, 1);
 
-               // remove first "new template" option
-               $templates.shift();
-
                axios
                        .post(API_URL + '/logs/saveTemplates', {
                                templates: $templates
        }
 
        function updateSelectedTemplate() {
-               if (selectedTemplate === 0 || selectedTemplate === null) {
+               if (selectedTemplate === '-1' || selectedTemplate === null) {
                        // new template
                        templateName = '';
                        templateText = '';
                                                                                                aria-label="Select template"
                                                                                                onchange={updateSelectedTemplate}
                                                                                        >
+                                                                                               <option value="-1" selected={selectedTemplate === '-1'}>
+                                                                                                       Neue Vorlage erstellen...
+                                                                                               </option>
                                                                                                {#each $templates as template, index}
                                                                                                        <option value={index} selected={index === selectedTemplate}>
                                                                                                                {template.name}
                                                                                                placeholder="Name der Vorlage"
                                                                                        />
                                                                                        <button
-                                                                                               disabled={selectedTemplate === 0 || selectedTemplate === null}
+                                                                                               disabled={selectedTemplate === '-1' || selectedTemplate === null}
                                                                                                type="button"
                                                                                                class="btn btn-outline-danger ms-5"
                                                                                                onclick={() => {
diff --git a/frontend/src/routes/+page.server.js b/frontend/src/routes/+page.server.js
new file mode 100644 (file)
index 0000000..9743273
--- /dev/null
@@ -0,0 +1,6 @@
+import { redirect } from "@sveltejs/kit";
+
+export function load() {
+  // Redirect to the /home route
+  throw redirect(307, "/write");
+}
\ No newline at end of file
index dcb57d6f00b94a3c79207561a32efa8e42339222..d54f5beed5bd9d967c5bcb87c36b7c381121bef3 100644 (file)
@@ -5,7 +5,7 @@
        import { selectedDate, cal, readingDate } from '$lib/calendarStore.js';
        import axios from 'axios';
        import { goto } from '$app/navigation';
-       import { onMount } from 'svelte';
+       import { mount, onMount } from 'svelte';
        import { searchString, searchResults } from '$lib/searchStore.js';
        import * as TinyMDE from 'tiny-markdown-editor';
        import '../../../node_modules/tiny-markdown-editor/dist/tiny-mde.css';
@@ -27,6 +27,8 @@
        import FileList from '$lib/FileList.svelte';
        import { formatBytes, alwaysShowSidenav } from '$lib/helpers.js';
        import ImageViewer from '$lib/ImageViewer.svelte';
+       import TemplateDropdown from '$lib/TemplateDropdown.svelte';
+       import { templates, insertTemplate } from '$lib/templateStore';
 
        axios.interceptors.request.use((config) => {
                config.withCredentials = true;
                        handleInput();
                });
 
+               mount(TemplateDropdown, {
+                       target: document.querySelector('.TMCommandBar')
+               });
+
                loadTags();
 
                getLog();
                );
        });
 
+       $effect(() => {
+               if ($insertTemplate) {
+                       currentLog = currentLog + $insertTemplate;
+                       tinyMDE.setContent(currentLog);
+
+                       $insertTemplate = null;
+               }
+       });
+
        function loadTags() {
                axios
                        .get(API_URL + '/logs/getTags')
git clone https://git.99rst.org/PROJECT