From 4d6be819e1ddd004fc8289ea59db4228340feaa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Wed, 1 Oct 2025 15:53:58 +0200 Subject: [PATCH] fix w cropie --- Dockerfile_alpine | 66 +++++++++++++++++++++++++++++++++ static/js/admin_receipt_crop.js | 12 +++--- static/js/user_receipt_crop.js | 12 +++--- templates/admin/receipts.html | 8 +++- 4 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 Dockerfile_alpine diff --git a/Dockerfile_alpine b/Dockerfile_alpine new file mode 100644 index 0000000..0067eee --- /dev/null +++ b/Dockerfile_alpine @@ -0,0 +1,66 @@ +# ========================= +# Stage 1 – Build +# ========================= +FROM python:3.13-alpine AS builder + +WORKDIR /app + +# Instalacja bibliotek do kompilacji + zależności runtime +RUN apk add --no-cache \ + tesseract-ocr \ + tesseract-ocr-data-pol \ + poppler-utils \ + libjpeg-turbo \ + zlib \ + libpng \ + libwebp \ + libffi \ + libmagic \ + && apk add --no-cache --virtual .build-deps \ + build-base \ + jpeg-dev \ + zlib-dev \ + libpng-dev \ + libwebp-dev \ + libffi-dev + +# Kopiujemy plik wymagań +COPY requirements.txt . + +# Instalujemy zależności Pythona do folderu tymczasowego +RUN pip install --no-cache-dir --prefix=/install -r requirements.txt + + +# ========================= +# Stage 2 – Final image +# ========================= +FROM python:3.13-alpine + +WORKDIR /app + +# Instalacja tylko bibliotek runtime (bez dev) +RUN apk add --no-cache \ + tesseract-ocr \ + tesseract-ocr-data-pol \ + poppler-utils \ + libjpeg-turbo \ + zlib \ + libpng \ + libwebp \ + libffi \ + libmagic + +# Kopiujemy zbudowane biblioteki z buildera +COPY --from=builder /install /usr/local + +# Kopiujemy kod aplikacji +COPY . . + +# Ustawiamy entrypoint +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +# Otwieramy port aplikacji +EXPOSE 8000 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/static/js/admin_receipt_crop.js b/static/js/admin_receipt_crop.js index 4a8335b..14853c5 100644 --- a/static/js/admin_receipt_crop.js +++ b/static/js/admin_receipt_crop.js @@ -13,16 +13,16 @@ cropModal.addEventListener("shown.bs.modal", function (event) { const button = event.relatedTarget; - const imgSrc = button.getAttribute("data-img-src"); + const baseSrc = button.getAttribute("data-img-src") || ""; + const ver = button.getAttribute("data-version") || Date.now(); + const sep = baseSrc.includes("?") ? "&" : "?"; + cropImage.src = baseSrc + sep + "cb=" + ver; + currentReceiptId = button.getAttribute("data-receipt-id"); - cropImage.src = imgSrc; document.querySelectorAll('.cropper-container').forEach(e => e.remove()); - if (cropper) cropper.destroy(); - cropImage.onload = () => { - cropper = cropUtils.initCropper(cropImage); - }; + cropImage.onload = () => { cropper = cropUtils.initCropper(cropImage); }; }); cropModal.addEventListener("hidden.bs.modal", function () { diff --git a/static/js/user_receipt_crop.js b/static/js/user_receipt_crop.js index 86954f9..dcb842a 100644 --- a/static/js/user_receipt_crop.js +++ b/static/js/user_receipt_crop.js @@ -13,16 +13,16 @@ cropModal.addEventListener("shown.bs.modal", function (event) { const button = event.relatedTarget; - const imgSrc = button.getAttribute("data-img-src"); + const baseSrc = button.getAttribute("data-img-src") || ""; + const ver = button.getAttribute("data-version") || Date.now(); + const sep = baseSrc.includes("?") ? "&" : "?"; + cropImage.src = baseSrc + sep + "cb=" + ver; + currentReceiptId = button.getAttribute("data-receipt-id"); - cropImage.src = imgSrc; document.querySelectorAll('.cropper-container').forEach(e => e.remove()); - if (cropper) cropper.destroy(); - cropImage.onload = () => { - cropper = cropUtils.initCropper(cropImage); - }; + cropImage.onload = () => { cropper = cropUtils.initCropper(cropImage); }; }); cropModal.addEventListener("hidden.bs.modal", function () { diff --git a/templates/admin/receipts.html b/templates/admin/receipts.html index 462d757..ca234b7 100644 --- a/templates/admin/receipts.html +++ b/templates/admin/receipts.html @@ -85,8 +85,12 @@
  • ✂️ Przytnij + data-img-src="{{ url_for('uploaded_file', filename=r.filename) }}?v={{ r.version_token or '0' }}" + data-receipt-id="{{ r.id }}" data-crop-endpoint="{{ url_for('crop_receipt_admin') }}" + data-version="{{ r.version_token or '0' }}"> + ✂️ Przytnij + +
  • ✏️ Zmień nazwę