From b0836d0bd7575fbe6474a291c7addad078e209bb Mon Sep 17 00:00:00 2001 From: Ryan Tang <84262952+ryantang247@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:10:35 +0800 Subject: [PATCH] Add zip (#3075) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description of Changes - Made a recursive function that checks if a file is a zip, then scans its contents. If the content is a zip, or an accepted file type (non-folder, size > 0), add it and repeat the check for zips - Change all convert fragment to accept application/zip - Slightly modified the input file styling to include an ID for appending the "Extracting" text - Added language translation for the "Extracting..." text - (Edit March 3) Removed recursive function, zip file inside target zip file is excluded - For decrypt function after uploading the file, i reused one webworker to handle the decryption , since in the previous code the workers are created but not detroyed for every single file, this caused a huge slow down for uploading large files due to creation of threads and thus this proposal. - Closes #2951 --- ### General - [ ✅] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [✅ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [✅ ] I have performed a self-review of my own code - [✅ ] My changes generate no new warnings ### UI Changes (if applicable) ![image](https://github.com/user-attachments/assets/ee4c6dc8-8740-45c9-8772-05fa7444ca6d) Added extracting text (for all language). ### Testing (if applicable) - [ ✅] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: Ludy Co-authored-by: reecebrowne <74901996+reecebrowne@users.noreply.github.com> Co-authored-by: Reece Browne Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Co-authored-by: swanemar <107953493+swanemar@users.noreply.github.com> Co-authored-by: stirlingbot[bot] <195170888+stirlingbot[bot]@users.noreply.github.com> --- src/main/resources/messages_ar_AR.properties | 1 + src/main/resources/messages_az_AZ.properties | 1 + src/main/resources/messages_bg_BG.properties | 1 + src/main/resources/messages_ca_CA.properties | 1 + src/main/resources/messages_cs_CZ.properties | 1 + src/main/resources/messages_da_DK.properties | 1 + src/main/resources/messages_de_DE.properties | 1 + src/main/resources/messages_el_GR.properties | 1 + src/main/resources/messages_en_GB.properties | 1 + src/main/resources/messages_en_US.properties | 1 + src/main/resources/messages_es_ES.properties | 1 + src/main/resources/messages_eu_ES.properties | 1 + src/main/resources/messages_fa_IR.properties | 1 + src/main/resources/messages_fr_FR.properties | 1 + src/main/resources/messages_ga_IE.properties | 1 + src/main/resources/messages_hi_IN.properties | 1 + src/main/resources/messages_hr_HR.properties | 1 + src/main/resources/messages_hu_HU.properties | 1 + src/main/resources/messages_id_ID.properties | 1 + src/main/resources/messages_it_IT.properties | 1 + src/main/resources/messages_ja_JP.properties | 1 + src/main/resources/messages_ko_KR.properties | 1 + src/main/resources/messages_nl_NL.properties | 1 + src/main/resources/messages_no_NB.properties | 1 + src/main/resources/messages_pl_PL.properties | 1 + src/main/resources/messages_pt_BR.properties | 1 + src/main/resources/messages_pt_PT.properties | 1 + src/main/resources/messages_ro_RO.properties | 1 + src/main/resources/messages_ru_RU.properties | 1 + src/main/resources/messages_sk_SK.properties | 1 + src/main/resources/messages_sl_SI.properties | 1 + .../resources/messages_sr_LATN_RS.properties | 1 + src/main/resources/messages_sv_SE.properties | 1 + src/main/resources/messages_th_TH.properties | 1 + src/main/resources/messages_tr_TR.properties | 1 + src/main/resources/messages_uk_UA.properties | 1 + src/main/resources/messages_vi_VN.properties | 1 + src/main/resources/messages_zh_BO.properties | 1 + src/main/resources/messages_zh_CN.properties | 1 + src/main/resources/messages_zh_TW.properties | 1 + src/main/resources/static/js/DecryptFiles.js | 23 ++- src/main/resources/static/js/fileInput.js | 137 ++++++++++++++++-- .../resources/templates/fragments/common.html | 13 +- 43 files changed, 192 insertions(+), 21 deletions(-) diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 78c9e9b4b..a279ba794 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=قم بسحب الملفات وإفلاتها fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=قم بسحب المفات وإفلاتها هنا +fileChooser.extractPDF=جاري الاستخراج... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_az_AZ.properties b/src/main/resources/messages_az_AZ.properties index 8e6abcd50..ae59b7c53 100644 --- a/src/main/resources/messages_az_AZ.properties +++ b/src/main/resources/messages_az_AZ.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Buraxılışlar diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index 5cb65bc76..09af7cbbf 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Влачете и пуснете fileChooser.dragAndDropPDF=Влачете и пуснете PDF файл fileChooser.dragAndDropImage=Влачете и пуснете изображение fileChooser.hoveredDragAndDrop=Влачете и пуснете файл(ове) тук +fileChooser.extractPDF=Извличане... #release notes releases.footer=Версии diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 2f34d1efa..a356a7856 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_cs_CZ.properties b/src/main/resources/messages_cs_CZ.properties index b5686d6cd..ae5076197 100644 --- a/src/main/resources/messages_cs_CZ.properties +++ b/src/main/resources/messages_cs_CZ.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Přetáhnout fileChooser.dragAndDropPDF=Přetáhnout PDF soubor fileChooser.dragAndDropImage=Přetáhnout obrázek fileChooser.hoveredDragAndDrop=Přetáhněte soubor(y) sem +fileChooser.extractPDF=Extrahování... #release notes releases.footer=Vydání diff --git a/src/main/resources/messages_da_DK.properties b/src/main/resources/messages_da_DK.properties index 4c4d8c8f4..de2a26dd5 100644 --- a/src/main/resources/messages_da_DK.properties +++ b/src/main/resources/messages_da_DK.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index d57f0fca5..2fb6be061 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF-Datei fileChooser.dragAndDropImage=Drag & Drop Bilddatei fileChooser.hoveredDragAndDrop=Datei(en) hierhin Ziehen & Fallenlassen +fileChooser.extractPDF=Extrahiere... #release notes releases.footer=Veröffentlichungen diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index d7209a381..946585931 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Σύρετε & αφήστε fileChooser.dragAndDropPDF=Σύρετε & αφήστε αρχείο PDF fileChooser.dragAndDropImage=Σύρετε & αφήστε αρχείο εικόνας fileChooser.hoveredDragAndDrop=Σύρετε & αφήστε αρχείο(α) εδώ +fileChooser.extractPDF=Εξαγωγή... #release notes releases.footer=Εκδόσεις diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 7de1b1a65..176a83707 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 545778aed..3a62c78e1 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 6ec7fc591..21e616967 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Arrastrar & Soltar fileChooser.dragAndDropPDF=Arrastrar & Soltar archivo PDF fileChooser.dragAndDropImage=Arrastrar & Soltar archivo de Imagen fileChooser.hoveredDragAndDrop=Arrastrar & Soltar archivos(s) aquí +fileChooser.extractPDF=Extrayendo... #release notes releases.footer=Versiones diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 36b4ffcc8..00647f829 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_fa_IR.properties b/src/main/resources/messages_fa_IR.properties index 665a556bd..035d9f0dd 100644 --- a/src/main/resources/messages_fa_IR.properties +++ b/src/main/resources/messages_fa_IR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=بکشید و رها کنید fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=فایل(های) خود را اینجا بکشید و رها کنید +fileChooser.extractPDF=در حال استخراج... #release notes releases.footer=نسخه‌ها diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 4fbd39901..268598181 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Glisser & Déposer fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Glisser & Déposer le(s) fichier(s) ici +fileChooser.extractPDF=Extraction en cours... #release notes releases.footer=Versions diff --git a/src/main/resources/messages_ga_IE.properties b/src/main/resources/messages_ga_IE.properties index 1567cff74..aef7de862 100644 --- a/src/main/resources/messages_ga_IE.properties +++ b/src/main/resources/messages_ga_IE.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Tarraing & Scaoil fileChooser.dragAndDropPDF=Tarraing & Scaoil comhad PDF fileChooser.dragAndDropImage=Tarraing & Scaoil comhad Íomhá fileChooser.hoveredDragAndDrop=Tarraing agus scaoil comhad(í) anseo +fileChooser.extractPDF=Ag Aistriú... #release notes releases.footer=Eisiúintí diff --git a/src/main/resources/messages_hi_IN.properties b/src/main/resources/messages_hi_IN.properties index 302581f24..5baa3a2c3 100644 --- a/src/main/resources/messages_hi_IN.properties +++ b/src/main/resources/messages_hi_IN.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=खींचें और छोड़ें fileChooser.dragAndDropPDF=PDF फ़ाइल खींचें और छोड़ें fileChooser.dragAndDropImage=छवि फ़ाइल खींचें और छोड़ें fileChooser.hoveredDragAndDrop=फ़ाइल(ें) यहाँ खींचें और छोड़ें +fileChooser.extractPDF=निकालना... #release notes releases.footer=रिलीज़ diff --git a/src/main/resources/messages_hr_HR.properties b/src/main/resources/messages_hr_HR.properties index e4a903c42..5751fc9bb 100644 --- a/src/main/resources/messages_hr_HR.properties +++ b/src/main/resources/messages_hr_HR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index b6ed5ab74..ea365b0c8 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Húzza ide fileChooser.dragAndDropPDF=Húzza ide a PDF fájlt fileChooser.dragAndDropImage=Húzza ide a képfájlt fileChooser.hoveredDragAndDrop=Húzza ide a fájl(oka)t +fileChooser.extractPDF=Kinyerés... #release notes releases.footer=Kiadási jegyzék diff --git a/src/main/resources/messages_id_ID.properties b/src/main/resources/messages_id_ID.properties index da4a89f79..1348fb955 100644 --- a/src/main/resources/messages_id_ID.properties +++ b/src/main/resources/messages_id_ID.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index d4af504de..a97228139 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Trascina & Rilascia fileChooser.dragAndDropPDF=Trascina & rilascia il file PDF fileChooser.dragAndDropImage=Trascina & rilascia il file immagine fileChooser.hoveredDragAndDrop=Trascina & rilascia i file qui +fileChooser.extractPDF=Estraendo... #release notes releases.footer=Rilasci diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index c8a38d1bc..d0b66ea60 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=ドラッグ&ドロップ fileChooser.dragAndDropPDF=PDFファイルをドラッグ&ドロップ fileChooser.dragAndDropImage=画像ファイルをドラッグ&ドロップ fileChooser.hoveredDragAndDrop=ファイルをここにドラッグ&ドロップ +fileChooser.extractPDF=抽出中... #release notes releases.footer=リリース diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 326d07238..0b4368e96 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=드래그 앤 드롭 fileChooser.dragAndDropPDF=PDF 파일을 드래그 앤 드롭 fileChooser.dragAndDropImage=이미지 파일을 드래그 앤 드롭 fileChooser.hoveredDragAndDrop=여기에 파일을 드래그 앤 드롭하세요 +fileChooser.extractPDF=추출 중... #release notes releases.footer=릴리스 diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index 99b6c2da6..47428ac9c 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_no_NB.properties b/src/main/resources/messages_no_NB.properties index 32201d40d..d33daaa47 100644 --- a/src/main/resources/messages_no_NB.properties +++ b/src/main/resources/messages_no_NB.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index ebc75a1ec..7fec27796 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 85aee7aed..06bc23128 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Arraste & Solte fileChooser.dragAndDropPDF=Arraste & Solte PDF(s) fileChooser.dragAndDropImage=Arraste & Solte Imagem(ns) fileChooser.hoveredDragAndDrop=Arraste & Solte arquivo(s) aqui +fileChooser.extractPDF=Extraindo... #release notes releases.footer=Versões diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index ecc5ce5f7..1f75a6e89 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Arrastar e Largar fileChooser.dragAndDropPDF=Arrastar e Largar ficheiro PDF fileChooser.dragAndDropImage=Arrastar e Largar ficheiro de Imagem fileChooser.hoveredDragAndDrop=Arrastar e Largar ficheiro(s) aqui +fileChooser.extractPDF=Extraindo... #release notes releases.footer=Lançamentos diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index 7df1a7e28..70ae27897 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index efee7c323..fcb4413d5 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Перетащите fileChooser.dragAndDropPDF=Перетащите PDF-файл fileChooser.dragAndDropImage=Перетащите файл изображения fileChooser.hoveredDragAndDrop=Перетащите файл(ы) сюда +fileChooser.extractPDF=Извлечение... #release notes releases.footer=Релизы diff --git a/src/main/resources/messages_sk_SK.properties b/src/main/resources/messages_sk_SK.properties index 3b36c633f..d7ea322ac 100644 --- a/src/main/resources/messages_sk_SK.properties +++ b/src/main/resources/messages_sk_SK.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_sl_SI.properties b/src/main/resources/messages_sl_SI.properties index 3081535cb..870066c9c 100644 --- a/src/main/resources/messages_sl_SI.properties +++ b/src/main/resources/messages_sl_SI.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Povleci in spusti fileChooser.dragAndDropPDF=Povleci in spusti datoteko PDF fileChooser.dragAndDropImage=Povleci in spusti slikovno datoteko fileChooser.hoveredDragAndDrop=Povleci in spusti datoteko(e) sem +fileChooser.extractPDF=Izvlečenje... #release notes releases.footer=Izdaje diff --git a/src/main/resources/messages_sr_LATN_RS.properties b/src/main/resources/messages_sr_LATN_RS.properties index 6b7edd030..e2db8ef6d 100644 --- a/src/main/resources/messages_sr_LATN_RS.properties +++ b/src/main/resources/messages_sr_LATN_RS.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 5adcdfa02..21d19c2e1 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Dra & Släpp fileChooser.dragAndDropPDF=Dra & Släpp PDF fil fileChooser.dragAndDropImage=Dra & Släpp bildfil fileChooser.hoveredDragAndDrop=Dra & Släpp fil(er) här +fileChooser.extractPDF=Extraherar... #release notes releases.footer=Utgåvor diff --git a/src/main/resources/messages_th_TH.properties b/src/main/resources/messages_th_TH.properties index 787e9f1ab..0c4d4ff71 100644 --- a/src/main/resources/messages_th_TH.properties +++ b/src/main/resources/messages_th_TH.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index 66f5aebe8..bee1c693a 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index 73e1e19d1..8547463fe 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_vi_VN.properties b/src/main/resources/messages_vi_VN.properties index 375a693bc..41daea0e3 100644 --- a/src/main/resources/messages_vi_VN.properties +++ b/src/main/resources/messages_vi_VN.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=Drag & Drop fileChooser.dragAndDropPDF=Drag & Drop PDF file fileChooser.dragAndDropImage=Drag & Drop Image file fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here +fileChooser.extractPDF=Extracting... #release notes releases.footer=Releases diff --git a/src/main/resources/messages_zh_BO.properties b/src/main/resources/messages_zh_BO.properties index 953c2518d..41dc4335d 100644 --- a/src/main/resources/messages_zh_BO.properties +++ b/src/main/resources/messages_zh_BO.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=འཐེན་ནས་འཇོག་པ། fileChooser.dragAndDropPDF=PDF ཡིག་ཆ་འཐེན་ནས་འཇོག་པ། fileChooser.dragAndDropImage=པར་རིས་ཡིག་ཆ་འཐེན་ནས་འཇོག་པ། fileChooser.hoveredDragAndDrop=ཡིག་ཆ་འདིར་འཐེན་ནས་འཇོག་པ། +fileChooser.extractPDF=འདོན་རིས་འགྱུར་བའི་སྒྲིག་བཏང་བ། #release notes releases.footer=པར་གཞི། diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 7c038856c..77c839f65 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=拖放文件 fileChooser.dragAndDropPDF=拖放PDF文件 fileChooser.dragAndDropImage=拖放图片文件 fileChooser.hoveredDragAndDrop=拖放文件到此处 +fileChooser.extractPDF=处理中... #release notes releases.footer=版本 diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 9e0bb0a38..cafadaba6 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -1329,6 +1329,7 @@ fileChooser.dragAndDrop=拖放檔案 fileChooser.dragAndDropPDF=拖放 PDF 檔案 fileChooser.dragAndDropImage=拖放圖片檔案 fileChooser.hoveredDragAndDrop=將檔案拖放至此 +fileChooser.extractPDF=處理中... #release notes releases.footer=版本資訊 diff --git a/src/main/resources/static/js/DecryptFiles.js b/src/main/resources/static/js/DecryptFiles.js index 16e2e7aee..8c5b8a50e 100644 --- a/src/main/resources/static/js/DecryptFiles.js +++ b/src/main/resources/static/js/DecryptFiles.js @@ -1,5 +1,11 @@ export class DecryptFile { + + constructor(){ + this.decryptWorker = null + } + async decryptFile(file, requiresPassword) { + try { async function getCsrfToken() { const cookieValue = document.cookie @@ -81,12 +87,23 @@ export class DecryptFile { } pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-legacy/pdf.worker.mjs'; + const arrayBuffer = await file.arrayBuffer(); const arrayBufferForPdfLib = arrayBuffer.slice(0); + var loadingTask; - const loadingTask = pdfjsLib.getDocument({ - data: arrayBuffer, - }); + if(this.decryptWorker == null){ + loadingTask = pdfjsLib.getDocument({ + data: arrayBuffer, + }); + this.decryptWorker = loadingTask._worker + + }else { + loadingTask = pdfjsLib.getDocument({ + data: arrayBuffer, + worker: this.decryptWorker + }); + } await loadingTask.promise; diff --git a/src/main/resources/static/js/fileInput.js b/src/main/resources/static/js/fileInput.js index b2316f4ff..91ad372ce 100644 --- a/src/main/resources/static/js/fileInput.js +++ b/src/main/resources/static/js/fileInput.js @@ -1,7 +1,8 @@ import FileIconFactory from './file-icon-factory.js'; import FileUtils from './file-utils.js'; import UUID from './uuid.js'; -import {DecryptFile} from './DecryptFiles.js'; +import { DecryptFile } from './DecryptFiles.js'; + let isScriptExecuted = false; if (!isScriptExecuted) { isScriptExecuted = true; @@ -11,6 +12,23 @@ if (!isScriptExecuted) { } let hasDroppedImage = false; +const zipTypes = [ + 'application/zip', + 'multipart/x-zip', + 'application/zip-compressed', + 'application/x-zip-compressed', +]; + +const mimeTypes = { + "png": "image/png", + "jpg": "image/jpeg", + "jpeg": "image/jpeg", + "gif": "image/gif", + "bmp": "image/bmp", + "svg": "image/svg+xml", + "pdf": "application/pdf", +}; + function setupFileInput(chooser) { const elementId = chooser.getAttribute('data-bs-element-id'); const filesSelected = chooser.getAttribute('data-bs-files-selected'); @@ -55,6 +73,7 @@ function setupFileInput(chooser) { overlay = false; } + const dropListener = function (e) { e.preventDefault(); // Drag and Drop shall only affect the target file chooser @@ -83,7 +102,7 @@ function setupFileInput(chooser) { dragCounter = 0; - fileInput.dispatchEvent(new CustomEvent('change', {bubbles: true, detail: {source: 'drag-drop'}})); + fileInput.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: { source: 'drag-drop' } })); }; function pushFileListTo(fileList, container) { @@ -114,18 +133,44 @@ function setupFileInput(chooser) { } else { allFiles = Array.from(isDragAndDrop ? allFiles : [element.files[0]]); } + + async function checkZipFile() { + + const promises = allFiles.map(async (file, index) => { + try { + if (zipTypes.includes(file.type)) { + await extractZipFiles(file, element.accept); + allFiles.splice(index, 1); + } + } catch (error) { + console.error(`Error extracting ZIP file (${file.name}):`, error); + allFiles.splice(index, 1); + } + }); + + await Promise.all(promises); + + } + const originalText = inputContainer.querySelector('#fileInputText').innerHTML; + const decryptFile = new DecryptFile(); + + inputContainer.querySelector('#fileInputText').innerHTML = window.fileInput.extractPDF; + + await checkZipFile(); + allFiles = await Promise.all( allFiles.map(async (file) => { let decryptedFile = file; + try { - const decryptFile = new DecryptFile(); - const {isEncrypted, requiresPassword} = await decryptFile.checkFileEncrypted(file); + const { isEncrypted, requiresPassword } = await decryptFile.checkFileEncrypted(file); if (file.type === 'application/pdf' && isEncrypted) { decryptedFile = await decryptFile.decryptFile(file, requiresPassword); if (!decryptedFile) throw new Error('File decryption failed.'); } decryptedFile.uniqueId = UUID.uuidv4(); return decryptedFile; + } catch (error) { console.error(`Error decrypting file: ${file.name}`, error); if (!file.uniqueId) file.uniqueId = UUID.uuidv4(); @@ -133,13 +178,15 @@ function setupFileInput(chooser) { } }) ); + + inputContainer.querySelector('#fileInputText').innerHTML = originalText; if (!isDragAndDrop) { let dataTransfer = toDataTransfer(allFiles); element.files = dataTransfer.files; } handleFileInputChange(this); - this.dispatchEvent(new CustomEvent('file-input-change', {bubbles: true, detail: {elementId, allFiles}})); + this.dispatchEvent(new CustomEvent('file-input-change', { bubbles: true, detail: { elementId, allFiles } })); }); function toDataTransfer(files) { @@ -147,17 +194,79 @@ function setupFileInput(chooser) { files.forEach((file) => dataTransfer.items.add(file)); return dataTransfer; } + + async function extractZipFiles(zipFile, acceptedFileType) { + const jszip = new JSZip(); + var counter = 0; + + // do an overall count, then proceed to make the pdf files + await jszip.loadAsync(zipFile) + .then(function (zip) { + + zip.forEach(function (relativePath, zipEntry) { + counter+=1; + }) + } + ) + + if (counter >= 1000) { + throw Error("Maximum file reached"); + } + + return jszip.loadAsync(zipFile) + .then(function (zip) { + var extractionPromises = []; + + zip.forEach(function (relativePath, zipEntry) { + + const promise = zipEntry.async('blob').then(function (content) { + // Assuming that folders have size zero + if (content.size > 0) { + const extension = zipEntry.name.split('.').pop().toLowerCase(); + const mimeType = mimeTypes[extension]; + + // Check for file extension + if (mimeType && (mimeType.startsWith(acceptedFileType.split('/')[0]) || acceptedFileType === mimeType)) { + + var file = new File([content], zipEntry.name, { type: mimeType }); + file.uniqueId = UUID.uuidv4(); + allFiles.push(file); + + } else { + console.log(`File ${zipEntry.name} skipped. MIME type (${mimeType}) does not match accepted type (${acceptedFileType})`); + } + } + }); + + extractionPromises.push(promise); + }); + + return Promise.all(extractionPromises); + }) + .catch(function (err) { + console.error("Error extracting ZIP file:", err); + throw err; + }); + } + function handleFileInputChange(inputElement) { + const files = allFiles; + showOrHideSelectedFilesContainer(files); - const filesInfo = files.map((f) => ({ - name: f.name, - size: f.size, - uniqueId: f.uniqueId, - type: f.type, - url: URL.createObjectURL(f), - })); + const filesInfo = files.map((f) => { + + const url = URL.createObjectURL(f); + + return { + name: f.name, + size: f.size, + uniqueId: f.uniqueId, + type: f.type, + url: url, + }; + }); const selectedFilesContainer = $(inputContainer).siblings('.selected-files'); selectedFilesContainer.empty(); @@ -171,6 +280,8 @@ function setupFileInput(chooser) { let fileIconContainer = document.createElement('div'); const isDragAndDropEnabled = window.location.pathname.includes('add-image') || window.location.pathname.includes('sign'); + + // add image thumbnail to it if (info.type.startsWith('image/')) { let imgPreview = document.createElement('img'); imgPreview.src = info.url; @@ -283,7 +394,7 @@ function setupFileInput(chooser) { showOrHideSelectedFilesContainer(allFiles); - inputElement.dispatchEvent(new CustomEvent('file-input-change', {bubbles: true})); + inputElement.dispatchEvent(new CustomEvent('file-input-change', { bubbles: true })); } function removeFileById(fileId, inputElement) { diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html index f8e241149..28c7b0225 100644 --- a/src/main/resources/templates/fragments/common.html +++ b/src/main/resources/templates/fragments/common.html @@ -219,20 +219,23 @@ }; window.fileInput = { dragAndDropPDF: '[[#{fileChooser.dragAndDropPDF}]]', - dragAndDropImage: '[[#{fileChooser.dragAndDropImage}]]' + dragAndDropImage: '[[#{fileChooser.dragAndDropImage}]]', + extractPDF: '[[#{fileChooser.extractPDF}]]' };
-
-
-
+
+
+
+
+