Bilder verkleinert speichern und Anleitung erstellt
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled

This commit is contained in:
Dennis Heinrich 2025-04-06 14:19:38 +02:00
parent 71767793ee
commit c9796b8431
3 changed files with 32 additions and 6 deletions

View file

@ -10,6 +10,13 @@ genügt).
> Weitere Screenshots sind im Ordner `.github/screenshots` zu finden. > Weitere Screenshots sind im Ordner `.github/screenshots` zu finden.
## Anleitung und Hinweise
- Die Anwendung ist unter <https://cloudmaker97.github.io/DurstRechner> erreichbar.
- Die Anwendung kann auch lokal genutzt werden. Dazu einfach die Startseite einmal im Browser öffnen.
- Neue Produkte können im Bereich 'Einstellungen' hinzugefügt werden, Produktbilder sollten im Format 1:1 sein und idealerweise 150x150px.
- Die angelegten Produkte können auf andere Geräte übertragen werden in den Einstellungen. Einfach den Text aus dem Feld Export/Import entweder herauskopieren oder einfügen.
## Entwicklung und Installation ## Entwicklung und Installation
```bash ```bash

View file

@ -200,6 +200,24 @@ class Base64Image {
}); });
} }
static imageResize(base64) {
return new Promise((resolve, reject) => {
const img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = () => {
const canvas = document.createElement('canvas');
canvas.width = 250;
canvas.height = 250;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
const dataUrl = canvas.toDataURL();
resolve(dataUrl);
};
img.onerror = reject;
img.src = base64;
});
}
/** /**
* Convert a file to a base64 string * Convert a file to a base64 string
* @param file * @param file
@ -266,7 +284,7 @@ class ProductManager {
* Register events for the create new product button. * Register events for the create new product button.
*/ */
registerSettingsFormEvents() { registerSettingsFormEvents() {
Element.getCreateNewProductButton().addEventListener('click', (e) => { Element.getCreateNewProductButton().addEventListener('click', async (e) => {
e.preventDefault(); e.preventDefault();
const name = document.querySelector('#product-name').value; const name = document.querySelector('#product-name').value;
@ -274,7 +292,7 @@ class ProductManager {
const image = document.querySelector('#product-image').files[0]; const image = document.querySelector('#product-image').files[0];
// Validate price // Validate price
if(name.length === 0) { if (name.length === 0) {
alert('Name muss ausgefüllt sein'); alert('Name muss ausgefüllt sein');
return; return;
} }
@ -282,12 +300,13 @@ class ProductManager {
// Turn image into base64 or use placeholder image // Turn image into base64 or use placeholder image
if (image) { if (image) {
const imageSrcWithBase64 = Base64Image.fromFile(image); const imageSrcWithBase64 = Base64Image.fromFile(image);
imageSrcWithBase64.then(imageSrcWithBase64 => { imageSrcWithBase64.then(async imageSrcWithBase64 => {
productManager.addProduct(new Product(name, price, imageSrcWithBase64)); productManager.addProduct(new Product(name, price, await Base64Image.imageResize(imageSrcWithBase64)));
ProductManager.resetProductSettingsForm(); ProductManager.resetProductSettingsForm();
}); });
} else { } else {
productManager.addProduct(new Product(name, price, Base64Image.fromImageUrl('https://placehold.co/250x250?text={${name}}'))); let image1 = await Base64Image.imageResize(await Base64Image.fromImageUrl(`https://placehold.co/250x250?text=${name}`));
productManager.addProduct(new Product(name, price, image1));
ProductManager.resetProductSettingsForm(); ProductManager.resetProductSettingsForm();
} }
}); });

View file

@ -84,7 +84,7 @@
<div class="card-body"> <div class="card-body">
<label class="w-100"> <label class="w-100">
Daten importieren oder exportieren (Kopieren und Einfügen) Daten importieren oder exportieren (Kopieren und Einfügen)
<textarea class="form-control mt-1" id="input-export-import"></textarea> <textarea class="form-control mt-1" id="input-export-import" spellcheck="false"></textarea>
</label> </label>
</div> </div>
</div> </div>