<script lang="ts"> import IntegerInput from "./IntegerInput.svelte"; import TextInput from "./TextInput.svelte"; import NewListTextInput from "./ListTextInput/NewListTextInput.svelte"; import ListTextInputElement from "./ListTextInput/ListTextInputElement.svelte"; import {invoke} from "@tauri-apps/api/tauri"; import {AgeRating, LanguageISO, type Metadata} from "./metadata"; let returnMessage = ""; let seriesTitle = ""; let volumeTitle = ""; let volumeNumber = 0; let chapterNumber = 0; let pageCount = 1; let chapterCount = 0; let summary = ""; let releaseYear: number; let releaseMonth: number; let releaseDay: number; let author: string; let typesetter: string; let editor: string; let translator: string; let publisher: string; let tags: Array<string> = []; let genre = "Hentai"; let lang = LanguageISO.EN; let ageRating = AgeRating.R18; $: { if (releaseYear < 0) { releaseMonth = -1; } if (releaseMonth < 0) { releaseDay = -1; } } function deleteTag(event: any) { console.log("deleted") tags.splice(event.detail.tagId, 1); tags = tags; } async function saveMetadata() { let message: Metadata = { title: volumeTitle, series_title: seriesTitle, chapter_number: 0, total_chapter_count: -1, volume_number: -1, summary: "", year: 2023, month: -1, day: -1, writer: "", translator: "", letterer: "", editor: "", publisher: "", genre: "", tags: [], page_count: 10, language: LanguageISO.EN, characters: [], age_rating: AgeRating.R18, } console.log(message); returnMessage = await invoke("test", { message }) } </script> <form class="metadataInput" on:submit|preventDefault={saveMetadata}> <h1>Metadata</h1> <label for="series">Series:</label> <TextInput id="series" bind:value={seriesTitle} placeholder="Series Title" /><br> <label for="title">Title:</label> <TextInput id="title" bind:value={volumeTitle} placeholder="Volume Title" /><br> <label for="volume">Volume:</label> <IntegerInput id="volume" bind:value={volumeNumber} /> <label for="chapter">Chapter:</label> <IntegerInput id="chapter" bind:value={chapterNumber} /> / <IntegerInput id="chapter_count" bind:value={chapterCount} negative={true}/><br> <label for="page_count">Page Count</label> <IntegerInput id="page_count" bind:value={pageCount} defaultValue={1} /><br> <label for="summary">Summary:</label><br> <label for="summary"></label><input id="series" type="text"><br> <label for="release_date">Release Date:</label> <IntegerInput id="release_year" bind:value={releaseYear} defaultValue={new Date().getFullYear()} /> {#if releaseYear > 0} <IntegerInput id="release_month" bind:value={releaseMonth} defaultValue={new Date().getMonth()} /> {#if releaseMonth > 0} <IntegerInput id="release_day" bind:value={releaseDay} defaultValue={new Date().getDay()} /> {/if} {/if} <br> <!--TODO: if date element is 0 do not display finer element, also set finer element to -1--> <label for="author">Author:</label> <TextInput id="author" bind:value={author} placeholder="Author" /><br> <label for="translator">Translator:</label> <TextInput id="translator" bind:value={translator} placeholder="Translator" /><br> <label for="typesetter">Typesetter:</label> <TextInput id="typesetter" bind:value={typesetter} placeholder="Typesetter" /><br> <label for="editor">Editor:</label> <TextInput id="editor" bind:value={editor} placeholder="Editor" /><br> <label for="publisher">Publisher:</label> <TextInput id="publisher" bind:value={publisher} placeholder="Publisher" /><br> <label for="new-tag">Tags:</label> <!-- List of Tags, New Button --> {#each tags as tag, id} <ListTextInputElement {id} bind:value={tag} on:deleted={deleteTag}/> {/each} <NewListTextInput id="new-tag" bind:value={tags[tags.length]}/><br> <label for="genre">Genre:</label> <TextInput id="genre" bind:value={genre} placeholder="Genre" /> <label for="lang">Language:</label> <input id="lang" type="text"><br> <label for="age_rating">Age Rating:</label> <input id="age_rating" type="text"><br> <input type="submit" value="Save"/> <p>{returnMessage}</p> </form> <style> .metadataInput { height: 100%; overflow: auto; } .metadataInput label, input[type="submit"] { margin-left: 4rem; } .metadataInput h1 { position: sticky; top: 0; margin: 0; border-bottom: 2px solid black; background-color: var(--color-bg); padding: 1.3rem; } </style>