This commit is contained in:
Alexander Bocken 2023-06-27 19:01:06 +02:00
parent 32777ada0e
commit 6708bfc89c
Signed by: Alexander
GPG Key ID: 1D237BE83F9B05E8
10 changed files with 118 additions and 23 deletions

View File

@ -2,6 +2,7 @@
"name": "sk-recipes-test", "name": "sk-recipes-test",
"version": "0.0.1", "version": "0.0.1",
"private": true, "private": true,
"type": "module",
"scripts": { "scripts": {
"dev": "vite dev", "dev": "vite dev",
"build": "vite build", "build": "vite build",
@ -19,7 +20,6 @@
"typescript": "^5.0.0", "typescript": "^5.0.0",
"vite": "^4.3.0" "vite": "^4.3.0"
}, },
"type": "module",
"dependencies": { "dependencies": {
"@sveltejs/adapter-node": "^1.2.4", "@sveltejs/adapter-node": "^1.2.4",
"mongoose": "^7.3.0", "mongoose": "^7.3.0",

View File

@ -5,6 +5,8 @@ import Cross from '$lib/assets/icons/Cross.svelte'
// all data shared with rest of page in card_data // all data shared with rest of page in card_data
export let card_data export let card_data
import { img } from '$lib/js/img_store';
if(!card_data.tags){ if(!card_data.tags){
card_data.tags = [] card_data.tags = []
} }
@ -20,20 +22,22 @@ let image_preview_url
// Herbst: 🍂 // Herbst: 🍂
// Sommer: ☀️ // Sommer: ☀️
export function show_local_image(){ export function show_local_image(){
var file = this.files[0] var file = this.files[0]
// allowed MIME types // allowed MIME types
var mime_types = [ 'image/jpeg', 'image/webp' ]; var mime_types = [ 'image/webp' ];
// validate MIME // validate MIME
if(mime_types.indexOf(file.type) == -1) { if(mime_types.indexOf(file.type) == -1) {
alert('Error : Incorrect file type'); alert('Error : Incorrect file type');
return; return;
} }
image_preview_url = URL.createObjectURL(file); image_preview_url = URL.createObjectURL(file);
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = e => {
img.update(() => e.target.result.split(',')[1]);
};
} }
export function remove_selected_images(){ export function remove_selected_images(){

View File

@ -8,9 +8,18 @@ import Check from '$lib/assets/icons/Check.svelte'
import "$lib/css/action_button.css" import "$lib/css/action_button.css"
import { do_on_key } from '$lib/components/do_on_key.js' import { do_on_key } from '$lib/components/do_on_key.js'
import { portions } from '$lib/js/portions_store.js'
let portions_local
portions.subscribe((p) => {
portions_local = p
});
export function set_portions(){
portions.update((p) => portions_local)
}
export let ingredients export let ingredients
export let portions
let new_ingredient = { let new_ingredient = {
amount: "", amount: "",
@ -348,7 +357,7 @@ h3{
<div class=list_wrapper> <div class=list_wrapper>
<h4>Portionen:</h4> <h4>Portionen:</h4>
<p contenteditable type="text" bind:innerText={portions}></p> <p contenteditable type="text" bind:innerText={portions_local} on:blur={set_portions}></p>
<h2>Zutaten</h2> <h2>Zutaten</h2>
{#each ingredients as list, list_index} {#each ingredients as list, list_index}

View File

@ -405,6 +405,10 @@ h3{
<div><h4>Backen:</h4> <div><h4>Backen:</h4>
<div><p type="text" bind:innerText={add_info.baking.length} contenteditable placeholder="40 min..."></p></div> bei <div><p type="text" bind:innerText={add_info.baking.temperature} contenteditable placeholder=200...></p></div> °C <div><p type="text" bind:innerText={add_info.baking.mode} contenteditable placeholder="Ober-/Unterhitze..."></p></div></div> <div><p type="text" bind:innerText={add_info.baking.length} contenteditable placeholder="40 min..."></p></div> bei <div><p type="text" bind:innerText={add_info.baking.temperature} contenteditable placeholder=200...></p></div> °C <div><p type="text" bind:innerText={add_info.baking.mode} contenteditable placeholder="Ober-/Unterhitze..."></p></div></div>
<div><h4>Kochen:</h4>
<p contenteditable type="text" bind:innerText={add_info.cooking}></p>
</div>
<div><h4>Auf dem Teller:</h4> <div><h4>Auf dem Teller:</h4>
<p contenteditable type="text" bind:innerText={add_info.total_time}></p> <p contenteditable type="text" bind:innerText={add_info.total_time}></p>
</div> </div>

View File

@ -69,6 +69,10 @@ h4{
<div><h4>Backen:</h4> {data.baking.length} bei {data.baking.temperature} °C {data.baking.mode}</div> <div><h4>Backen:</h4> {data.baking.length} bei {data.baking.temperature} °C {data.baking.mode}</div>
{/if} {/if}
{#if data.cooking}
<div><h4>Kochen:</h4>{data.cooking}</div>
{/if}
{#if data.total_time} {#if data.total_time}
<div><h4>Auf dem Teller:</h4>{data.total_time}</div> <div><h4>Auf dem Teller:</h4>{data.total_time}</div>
{/if} {/if}

View File

@ -26,6 +26,7 @@ const RecipeSchema = new mongoose.Schema(
}, },
portions :{type:String, default: ""}, portions :{type:String, default: ""},
cooking: {type:String, default: ""},
total_time : {type:String, default: ""}, total_time : {type:String, default: ""},
ingredients : [ { name: {type: String, default: ""}, ingredients : [ { name: {type: String, default: ""},
list: [{name: {type: String, default: ""}, list: [{name: {type: String, default: ""},

View File

@ -8,11 +8,23 @@
let addendum = "" let addendum = ""
import { season } from '$lib/js/season_store'; import { season } from '$lib/js/season_store';
import { portions } from '$lib/js/portions_store';
import { img } from '$lib/js/img_store';
season.update(() => []) season.update(() => [])
let season_local let season_local
season.subscribe((s) => { season.subscribe((s) => {
season_local = s season_local = s
}); });
let portions_local
portions.update(() => "")
portions.subscribe((p) => {
portions_local = p});
let img_local
img.update(() => "")
img.subscribe((i) => {
img_local = i});
export let card_data ={ export let card_data ={
icon: "", icon: "",
@ -33,13 +45,12 @@
mode: "", mode: "",
}, },
total_time: "", total_time: "",
cooking: "",
} }
let password = ""
let images = [] let images = []
export let portions = ""
let short_name = "" let short_name = ""
let password
let datecreated = new Date() let datecreated = new Date()
let datemodified = datecreated let datemodified = datecreated
@ -70,7 +81,28 @@
} }
} }
async function upload_img(){
console.log("uploading...")
console.log(img_local)
const data = {
image: img_local,
filename: short_name + '.webp',
bearer: password,
}
await fetch(`/api/img/add`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
bearer: password,
},
body: JSON.stringify(data)
});
}
async function doPost () { async function doPost () {
upload_img()
console.log(add_info.total_time) console.log(add_info.total_time)
const res = await fetch('/api/add', { const res = await fetch('/api/add', {
method: 'POST', method: 'POST',
@ -81,6 +113,7 @@
images: {mediapath: short_name + '.webp', alt: "", caption: ""}, // TODO images: {mediapath: short_name + '.webp', alt: "", caption: ""}, // TODO
season: season_local, season: season_local,
short_name, short_name,
portions: portions_local,
datecreated, datecreated,
datemodified, datemodified,
instructions, instructions,
@ -221,7 +254,7 @@ h3{
<div class=list_wrapper> <div class=list_wrapper>
<div> <div>
<CreateIngredientList {ingredients} {portions}></CreateIngredientList> <CreateIngredientList {ingredients}></CreateIngredientList>
</div> </div>
<div> <div>
<CreateStepList {instructions} {add_info}></CreateStepList> <CreateStepList {instructions} {add_info}></CreateStepList>

View File

@ -10,6 +10,14 @@
let addendum = data.recipe.addendum let addendum = data.recipe.addendum
import { season } from '$lib/js/season_store'; import { season } from '$lib/js/season_store';
import { portions } from '$lib/js/portions_store';
portions.update(() => data.recipe.portions)
let portions_local
portions.subscribe((p) => {
portions_local = p
});
season.update(() => data.recipe.season) season.update(() => data.recipe.season)
let season_local let season_local
season.subscribe((s) => { season.subscribe((s) => {
@ -37,10 +45,10 @@
mode: data.recipe.baking.mode, mode: data.recipe.baking.mode,
}, },
total_time: data.recipe.total_time, total_time: data.recipe.total_time,
cooking: data.recipe.cooking,
} }
let images = data.recipe.images let images = data.recipe.images
export let portions = data.recipe.portions
let short_name = data.recipe.short_name let short_name = data.recipe.short_name
let password let password
@ -102,6 +110,7 @@
season: season_local, season: season_local,
short_name, short_name,
datecreated, datecreated,
portions: portions_local,
datemodified, datemodified,
instructions, instructions,
ingredients, ingredients,
@ -247,7 +256,7 @@ h3{
<div class=list_wrapper> <div class=list_wrapper>
<div> <div>
<CreateIngredientList {ingredients} {portions}></CreateIngredientList> <CreateIngredientList {ingredients}></CreateIngredientList>
</div> </div>
<div> <div>
<CreateStepList {instructions} {add_info}></CreateStepList> <CreateStepList {instructions} {add_info}></CreateStepList>

View File

@ -1,11 +1,41 @@
<script lang="ts"> <script lang=ts>
import TitleImgParallax from "$lib/components/TitleImgParallax.svelte"; let fileInput;
let files;
let temp
let image : String;
let base64
export function store_img_base64(image) {
const reader = new FileReader();
reader.readAsDataURL(image);
reader.onload = e => {
base64 = e.target.result.split(',')[1];
//base64 = temp.split(',')[1]
};
};
export async function upload(){
console.log("uploading...")
const data = {
image: base64,
filename: "test.webp"
}
await fetch(`/api/img/add`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json'
},
body: JSON.stringify(data)
});
}
</script> </script>
<input id="file-to-upload" type="file" accept=".png,.jpg,.webp" bind:files bind:this={fileInput} on:change={() => store_img_base64(files[0])}/>
<button class="upload-btn" on:click="{upload}">Upload</button>
<button on:click={console.log(base64)}></button>
<style> <style>
div{
transform: translateY(-1rem);
}
</style> </style>
<div>
<TitleImgParallax></TitleImgParallax>
</div>

View File

@ -22,9 +22,10 @@ export type RecipeModelType = {
preparation?: string; preparation?: string;
fermentation?:{ fermentation?:{
bulk: string; bulk: string;
final: string final: string;
} }
portions?: string; portions?: string;
cooking?: string;
total_time?: string; total_time?: string;
ingredients?: [{ ingredients?: [{
name?: string; name?: string;