--- /dev/null
+<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>
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={() => {
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';
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')