mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-10-25 11:17:28 +02:00 
			
		
		
		
	Multitool advertising (#2247)
* Multi-tool advert on pages that share functionality * Update translation files Signed-off-by: GitHub Action <action@github.com> --------- Signed-off-by: GitHub Action <action@github.com> Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
		
							parent
							
								
									ef18b17890
								
							
						
					
					
						commit
						fd93dad9a5
					
				| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=عرض PDF | ||||
| viewPdf.header=عرض PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Преглед на PDF | ||||
| viewPdf.header=Преглед на PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Visualitza PDF | ||||
| viewPdf.header=Visualitza PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Zobrazit PDF | ||||
| viewPdf.header=Zobrazit PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Se PDF | ||||
| viewPdf.header=Se PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Seite | ||||
| multiTool.deleteSelected=Auswahl löschen | ||||
| multiTool.downloadAll=Downloaden | ||||
| multiTool.downloadSelected=Auswahl downloaden | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=PDF anzeigen | ||||
| viewPdf.header=PDF anzeigen | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Προβολή PDF | ||||
| viewPdf.header=Προβολή PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=View PDF | ||||
| viewPdf.header=View PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=View PDF | ||||
| viewPdf.header=View PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Ver PDF | ||||
| viewPdf.header=Ver PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=View PDF | ||||
| viewPdf.header=View PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Visualiser un PDF | ||||
| viewPdf.header=Visualiser un PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Féach PDF | ||||
| viewPdf.header=Féach PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=पीडीएफ देखें | ||||
| viewPdf.header=पीडीएफ देखें | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Pogledaj | ||||
| viewPdf.header=Pogledaj PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=PDF megtekintése | ||||
| viewPdf.header=PDF megtekintése | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Lihat PDF | ||||
| viewPdf.header=Lihat PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Pagina | ||||
| multiTool.deleteSelected=Elimina selezionata | ||||
| multiTool.downloadAll=Esporta | ||||
| multiTool.downloadSelected=Esporta selezionata | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Visualizza PDF | ||||
| viewPdf.header=Visualizza PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=PDFを表示 | ||||
| viewPdf.header=PDFを表示 | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=PDF 뷰어 | ||||
| viewPdf.header=PDF 뷰어 | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=PDF bekijken | ||||
| viewPdf.header=PDF bekijken | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Vis PDF | ||||
| viewPdf.header=Vis PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Podejrzyj PDF | ||||
| viewPdf.header=Podejrzyj PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Visualizar PDF | ||||
| viewPdf.header=Visualizar PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Visualizar PDF | ||||
| viewPdf.header=Visualizar PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Vizualizează PDF | ||||
| viewPdf.header=Vizualizează PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Просмотреть PDF | ||||
| viewPdf.header=Просмотреть PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Zobraziť PDF | ||||
| viewPdf.header=Zobraziť PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Prikaz | ||||
| viewPdf.header=Prikaz PDF-a | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Visa PDF | ||||
| viewPdf.header=Visa PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=ดู PDF | ||||
| viewPdf.header=ดู PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=PDF Görüntüle | ||||
| viewPdf.header=PDF Görüntüle | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Переглянути PDF | ||||
| viewPdf.header=Переглянути PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=Xem PDF | ||||
| viewPdf.header=Xem PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=浏览PDF | ||||
| viewPdf.header=浏览PDF | ||||
|  | ||||
| @ -942,6 +942,10 @@ multiTool.page=Page | ||||
| multiTool.deleteSelected=Delete Selected | ||||
| multiTool.downloadAll=Export | ||||
| multiTool.downloadSelected=Export Selected | ||||
| 
 | ||||
| #multiTool-advert | ||||
| multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features! | ||||
| 
 | ||||
| #view pdf | ||||
| viewPdf.title=檢視 PDF | ||||
| viewPdf.header=檢視 PDF | ||||
|  | ||||
| @ -1,36 +1,44 @@ | ||||
| <!DOCTYPE html> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" xmlns:th="https://www.thymeleaf.org"> | ||||
|   <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{pageExtracter.title}, header=#{pageExtracter.header})}"></th:block> | ||||
|   </head> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" | ||||
|   xmlns:th="https://www.thymeleaf.org"> | ||||
| 
 | ||||
|   <body> | ||||
|     <div id="page-container"> | ||||
|       <div id="content-wrap"> | ||||
|         <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|         <br><br> | ||||
|         <div class="container"> | ||||
|           <div class="row justify-content-center"> | ||||
|             <div class="col-md-6 bg-card"> | ||||
|               <div class="tool-header"> | ||||
|                 <span class="material-symbols-rounded tool-header-icon organize">upload</span> | ||||
|                 <span class="tool-header-text" th:text="#{pageExtracter.header}"></span> | ||||
|               </div> | ||||
|               <form th:action="@{'/api/v1/general/rearrange-pages'}" method="post" enctype="multipart/form-data"> | ||||
|                 <div th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"></div> | ||||
|                 <input type="hidden" id="customMode" name="customMode" value=""> | ||||
|                 <div class="mb-3"> | ||||
|                   <label for="pageOrder" th:text="#{pageOrderPrompt}"></label> | ||||
|                   <input type="text" class="form-control" id="pageOrder" name="pageNumbers" th:placeholder="#{pageExtracter.placeholder}" required> | ||||
|                 </div> | ||||
| <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{pageExtracter.title}, header=#{pageExtracter.header})}"> | ||||
|   </th:block> | ||||
| </head> | ||||
| 
 | ||||
|                 <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{pageExtracter.submit}"></button> | ||||
|               </form> | ||||
| <body> | ||||
|   <div id="page-container"> | ||||
|     <div id="content-wrap"> | ||||
|       <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|       <br><br> | ||||
|       <th:block th:insert="~{fragments/multi-toolAdvert.html :: multi-toolAdvert}"></th:block> | ||||
|       <div class="container"> | ||||
|         <div class="row justify-content-center"> | ||||
|           <div class="col-md-6 bg-card"> | ||||
|             <div class="tool-header"> | ||||
|               <span class="material-symbols-rounded tool-header-icon organize">upload</span> | ||||
|               <span class="tool-header-text" th:text="#{pageExtracter.header}"></span> | ||||
|             </div> | ||||
|             <form th:action="@{'/api/v1/general/rearrange-pages'}" method="post" enctype="multipart/form-data"> | ||||
|               <div | ||||
|                 th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"> | ||||
|               </div> | ||||
|               <input type="hidden" id="customMode" name="customMode" value=""> | ||||
|               <div class="mb-3"> | ||||
|                 <label for="pageOrder" th:text="#{pageOrderPrompt}"></label> | ||||
|                 <input type="text" class="form-control" id="pageOrder" name="pageNumbers" | ||||
|                   th:placeholder="#{pageExtracter.placeholder}" required> | ||||
|               </div> | ||||
| 
 | ||||
|               <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{pageExtracter.submit}"></button> | ||||
|             </form> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|     </div> | ||||
|   </body> | ||||
|     <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|   </div> | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
							
								
								
									
										57
									
								
								src/main/resources/templates/fragments/multi-toolAdvert.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/main/resources/templates/fragments/multi-toolAdvert.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| <div th:fragment="multi-toolAdvert" class="mx-auto"> | ||||
|   <div id="multi-toolAdvert" class="multi-toolAdvert"> | ||||
|     <div> | ||||
|       <span th:utext="#{multiTool-advert.message(|/multi-tool|)}"></span> | ||||
|       <button id="closeMultiToolAdvert" style="position: absolute; | ||||
|     top: 10px; | ||||
|     right: 12px; | ||||
|     border: none; | ||||
|     background: transparent; | ||||
|     color: white; | ||||
|     cursor: pointer; | ||||
|     font-size: 1.2rem; | ||||
|     line-height: 1;" aria-label="Close">×</button> | ||||
|     </div> | ||||
|   </div> | ||||
|   <style> | ||||
|     .multi-toolAdvert { | ||||
|       margin-bottom: 10px; | ||||
|       margin-left: 50%; | ||||
|       transform: translateX(-50%); | ||||
|       max-width: 52rem; | ||||
|       z-index: 0; | ||||
|       background-color: var(--md-sys-color-surface-5); | ||||
|       border-radius: 2rem; | ||||
|       padding: 10px 27px 10px 20px; | ||||
|       font-size: 0.9rem; | ||||
|       display: none; | ||||
|       justify-content: center; | ||||
|     } | ||||
| 
 | ||||
|     .multi-toolAdvert a { | ||||
|       color: #007bff; | ||||
|       font-weight: bold; | ||||
|     } | ||||
| 
 | ||||
|     .multi-toolAdvert a:hover { | ||||
|       text-decoration: underline; | ||||
|     } | ||||
|   </style> | ||||
|   <script> | ||||
|     document.addEventListener('DOMContentLoaded', () => { | ||||
|       const advert = document.getElementById('multi-toolAdvert'); | ||||
|       const closeBtn = document.getElementById('closeMultiToolAdvert'); | ||||
| 
 | ||||
|       const cacheKey = `closeMultiToolAdvert_${window.location.pathname}`; | ||||
| 
 | ||||
|       if (localStorage.getItem(cacheKey) !== 'true') { | ||||
|         advert.style.display = 'flex'; | ||||
|       } | ||||
| 
 | ||||
|       closeBtn.addEventListener('click', () => { | ||||
|         advert.style.display = 'none'; | ||||
|         localStorage.setItem(cacheKey, 'true'); | ||||
|       }); | ||||
|     }); | ||||
|   </script> | ||||
| </div> | ||||
| @ -12,6 +12,7 @@ | ||||
|     <div id="content-wrap"> | ||||
|       <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|       <br><br> | ||||
|       <th:block th:insert="~{fragments/multi-toolAdvert.html :: multi-toolAdvert}"></th:block> | ||||
|       <div class="container" id="dropContainer"> | ||||
|         <div class="row justify-content-center"> | ||||
|           <div class="col-md-6 bg-card"> | ||||
|  | ||||
| @ -1,60 +1,69 @@ | ||||
| <!DOCTYPE html> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" xmlns:th="https://www.thymeleaf.org"> | ||||
|   <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{pdfOrganiser.title}, header=#{pdfOrganiser.header})}"></th:block> | ||||
|   </head> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" | ||||
|   xmlns:th="https://www.thymeleaf.org"> | ||||
| 
 | ||||
|   <body> | ||||
|     <div id="page-container"> | ||||
|       <div id="content-wrap"> | ||||
|         <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|         <br><br> | ||||
|         <div class="container"> | ||||
|           <div class="row justify-content-center"> | ||||
|             <div class="col-md-6 bg-card"> | ||||
|               <div class="tool-header"> | ||||
|                 <span class="material-symbols-rounded tool-header-icon organize">format_list_bulleted</span> | ||||
|                 <span class="tool-header-text" th:text="#{pdfOrganiser.header}"></span> | ||||
|               </div> | ||||
| <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{pdfOrganiser.title}, header=#{pdfOrganiser.header})}"> | ||||
|   </th:block> | ||||
| </head> | ||||
| 
 | ||||
|               <form th:action="@{'/api/v1/general/rearrange-pages'}" method="post" enctype="multipart/form-data"> | ||||
|                 <div th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"></div> | ||||
|                 <div class="mb-3"> | ||||
|                   <label for="customMode" th:text="#{pdfOrganiser.mode}">Mode</label> | ||||
|                   <select class="form-control" id="customMode" name="customMode"> | ||||
|                     <option value="" th:text="#{pdfOrganiser.mode.1}">Custom Page Order</option> | ||||
|                     <option value="REVERSE_ORDER" th:text="#{pdfOrganiser.mode.2}">Reverse Order</option> | ||||
|                     <option value="DUPLEX_SORT" th:text="#{pdfOrganiser.mode.3}">Duplex Sort</option> | ||||
|                     <option value="BOOKLET_SORT" th:text="#{pdfOrganiser.mode.4}">Booklet Sort</option> | ||||
|                     <option value="SIDE_STITCH_BOOKLET_SORT" th:text="#{pdfOrganiser.mode.5}">Side Stitch Booklet Sort</option> | ||||
|                     <option value="ODD_EVEN_SPLIT" th:text="#{pdfOrganiser.mode.6}">Odd-Even Split</option> | ||||
|                     <option value="ODD_EVEN_MERGE" th:text="#{pdfOrganiser.mode.10}">Odd-Even Merge</option> | ||||
|                     <option value="REMOVE_FIRST" th:text="#{pdfOrganiser.mode.7}">Remove First</option> | ||||
|                     <option value="REMOVE_LAST" th:text="#{pdfOrganiser.mode.8}">Remove Last</option> | ||||
|                     <option value="REMOVE_FIRST_AND_LAST" th:text="#{pdfOrganiser.mode.9}">Remove First and Last</option> | ||||
|                   </select> | ||||
|                 </div> | ||||
|                 <div class="mb-3"> | ||||
|                   <label for="pageOrder" th:text="#{pageOrderPrompt}"></label> | ||||
|                   <input type="text" class="form-control" id="pageOrder" name="pageNumbers" th:placeholder="#{pdfOrganiser.placeholder}" required> | ||||
|                 </div> | ||||
|                 <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{pdfOrganiser.submit}"></button> | ||||
|               </form> | ||||
|               <script> | ||||
|                 document.getElementById('customMode').addEventListener('change', function () { | ||||
|                   var pageOrderInput = document.getElementById('pageOrder'); | ||||
|                   if (this.value === "") { | ||||
|                     pageOrderInput.disabled = false; | ||||
|                   } else { | ||||
|                     pageOrderInput.disabled = true; | ||||
|                   } | ||||
|                 }); | ||||
|               </script> | ||||
| <body> | ||||
|   <div id="page-container"> | ||||
|     <div id="content-wrap"> | ||||
|       <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|       <br><br> | ||||
|       <th:block th:insert="~{fragments/multi-toolAdvert.html :: multi-toolAdvert}"></th:block> | ||||
|       <div class="container"> | ||||
|         <div class="row justify-content-center"> | ||||
|           <div class="col-md-6 bg-card"> | ||||
|             <div class="tool-header"> | ||||
|               <span class="material-symbols-rounded tool-header-icon organize">format_list_bulleted</span> | ||||
|               <span class="tool-header-text" th:text="#{pdfOrganiser.header}"></span> | ||||
|             </div> | ||||
| 
 | ||||
|             <form th:action="@{'/api/v1/general/rearrange-pages'}" method="post" enctype="multipart/form-data"> | ||||
|               <div | ||||
|                 th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"> | ||||
|               </div> | ||||
|               <div class="mb-3"> | ||||
|                 <label for="customMode" th:text="#{pdfOrganiser.mode}">Mode</label> | ||||
|                 <select class="form-control" id="customMode" name="customMode"> | ||||
|                   <option value="" th:text="#{pdfOrganiser.mode.1}">Custom Page Order</option> | ||||
|                   <option value="REVERSE_ORDER" th:text="#{pdfOrganiser.mode.2}">Reverse Order</option> | ||||
|                   <option value="DUPLEX_SORT" th:text="#{pdfOrganiser.mode.3}">Duplex Sort</option> | ||||
|                   <option value="BOOKLET_SORT" th:text="#{pdfOrganiser.mode.4}">Booklet Sort</option> | ||||
|                   <option value="SIDE_STITCH_BOOKLET_SORT" th:text="#{pdfOrganiser.mode.5}">Side Stitch Booklet Sort | ||||
|                   </option> | ||||
|                   <option value="ODD_EVEN_SPLIT" th:text="#{pdfOrganiser.mode.6}">Odd-Even Split</option> | ||||
|                   <option value="ODD_EVEN_MERGE" th:text="#{pdfOrganiser.mode.10}">Odd-Even Merge</option> | ||||
|                   <option value="REMOVE_FIRST" th:text="#{pdfOrganiser.mode.7}">Remove First</option> | ||||
|                   <option value="REMOVE_LAST" th:text="#{pdfOrganiser.mode.8}">Remove Last</option> | ||||
|                   <option value="REMOVE_FIRST_AND_LAST" th:text="#{pdfOrganiser.mode.9}">Remove First and Last</option> | ||||
|                 </select> | ||||
|               </div> | ||||
|               <div class="mb-3"> | ||||
|                 <label for="pageOrder" th:text="#{pageOrderPrompt}"></label> | ||||
|                 <input type="text" class="form-control" id="pageOrder" name="pageNumbers" | ||||
|                   th:placeholder="#{pdfOrganiser.placeholder}" required> | ||||
|               </div> | ||||
|               <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{pdfOrganiser.submit}"></button> | ||||
|             </form> | ||||
|             <script> | ||||
|               document.getElementById('customMode').addEventListener('change', function () { | ||||
|                 var pageOrderInput = document.getElementById('pageOrder'); | ||||
|                 if (this.value === "") { | ||||
|                   pageOrderInput.disabled = false; | ||||
|                 } else { | ||||
|                   pageOrderInput.disabled = true; | ||||
|                 } | ||||
|               }); | ||||
|             </script> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|     </div> | ||||
|   </body> | ||||
|     <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|   </div> | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -1,40 +1,48 @@ | ||||
| <!DOCTYPE html> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" xmlns:th="https://www.thymeleaf.org"> | ||||
|   <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{pageRemover.title}, header=#{pageRemover.header})}"></th:block> | ||||
|   </head> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" | ||||
|   xmlns:th="https://www.thymeleaf.org"> | ||||
| 
 | ||||
|   <body> | ||||
|     <div id="page-container"> | ||||
|       <div id="content-wrap"> | ||||
|         <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|         <br><br> | ||||
|         <div class="container"> | ||||
|           <div class="row justify-content-center"> | ||||
|             <div class="col-md-6 bg-card"> | ||||
|               <div class="tool-header"> | ||||
|                 <span class="material-symbols-rounded tool-header-icon organize">delete</span> | ||||
|                 <span class="tool-header-text" th:text="#{pageRemover.header}"></span> | ||||
|               </div> | ||||
| <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{pageRemover.title}, header=#{pageRemover.header})}"> | ||||
|   </th:block> | ||||
| </head> | ||||
| 
 | ||||
|               <form th:action="@{'/api/v1/general/remove-pages'}" method="post" enctype="multipart/form-data"> | ||||
|                 <div th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"></div> | ||||
|                 <div class="mb-3"> | ||||
|                   <label for="fileInput" th:text="#{pageRemover.pagesToDelete}"></label> | ||||
|                   <input type="text" class="form-control" id="fileInput" name="pageNumbers" th:placeholder="#{pageRemover.placeholder}" required> | ||||
|                 </div> | ||||
|                 <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{pageRemover.submit}"></button> | ||||
|               </form> | ||||
| <body> | ||||
|   <div id="page-container"> | ||||
|     <div id="content-wrap"> | ||||
|       <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|       <br><br> | ||||
|       <th:block th:insert="~{fragments/multi-toolAdvert.html :: multi-toolAdvert}"></th:block> | ||||
|       <div class="container"> | ||||
|         <div class="row justify-content-center"> | ||||
|           <div class="col-md-6 bg-card"> | ||||
|             <div class="tool-header"> | ||||
|               <span class="material-symbols-rounded tool-header-icon organize">delete</span> | ||||
|               <span class="tool-header-text" th:text="#{pageRemover.header}"></span> | ||||
|             </div> | ||||
| 
 | ||||
|             <form th:action="@{'/api/v1/general/remove-pages'}" method="post" enctype="multipart/form-data"> | ||||
|               <div | ||||
|                 th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"> | ||||
|               </div> | ||||
|               <div class="mb-3"> | ||||
|                 <label for="fileInput" th:text="#{pageRemover.pagesToDelete}"></label> | ||||
|                 <input type="text" class="form-control" id="fileInput" name="pageNumbers" | ||||
|                   th:placeholder="#{pageRemover.placeholder}" required> | ||||
|               </div> | ||||
|               <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{pageRemover.submit}"></button> | ||||
|             </form> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|     </div> | ||||
|     <script> | ||||
|       document.getElementById('fileInput').addEventListener('input', function(){ | ||||
|         this.value =this.value.replace(/\s+/g, '');; | ||||
|       }); | ||||
|     </script> | ||||
|   </body> | ||||
| </html> | ||||
|     <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|   </div> | ||||
|   <script> | ||||
|     document.getElementById('fileInput').addEventListener('input', function () { | ||||
|       this.value = this.value.replace(/\s+/g, '');; | ||||
|     }); | ||||
|   </script> | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -1,110 +1,121 @@ | ||||
| <!DOCTYPE html> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" xmlns:th="https://www.thymeleaf.org"> | ||||
|   <head> | ||||
| <html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}" | ||||
|   xmlns:th="https://www.thymeleaf.org"> | ||||
| 
 | ||||
| <head> | ||||
|   <th:block th:insert="~{fragments/common :: head(title=#{rotate.title}, header=#{rotate.header})}"></th:block> | ||||
|   </head> | ||||
| </head> | ||||
| 
 | ||||
|   <body> | ||||
|     <div id="page-container"> | ||||
|       <div id="content-wrap"> | ||||
|         <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|         <br><br> | ||||
|         <div class="container"> | ||||
|           <div class="row justify-content-center"> | ||||
|             <div class="col-md-6 bg-card"> | ||||
|               <div class="tool-header"> | ||||
|                 <span class="material-symbols-rounded tool-header-icon organize">rotate_right</span> | ||||
|                 <span class="tool-header-text" th:text="#{rotate.header}"></span> | ||||
|               </div> | ||||
| 
 | ||||
|               <form action="#" th:action="@{'/api/v1/general/rotate-pdf'}" th:object="${rotateForm}" method="post" enctype="multipart/form-data"> | ||||
|                 <div th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"></div> | ||||
|                 <input type="hidden" id="angleInput" name="angle" value="0"> | ||||
| 
 | ||||
|                 <div id="editSection" style="display: none"> | ||||
|                   <div id="previewContainer"> | ||||
|                     <!-- pdf-preview --> | ||||
|                   </div> | ||||
| 
 | ||||
|                   <div class="buttonContainer"> | ||||
|                     <button type="button" class="btn btn-secondary" onclick="rotate(-90)"> | ||||
|                       <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16"> | ||||
|                         <path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z" /> | ||||
|                         <path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z" /> | ||||
|                       </svg> | ||||
|                     </button> | ||||
|                     <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{rotate.submit}"></button> | ||||
|                     <button type="button" class="btn btn-secondary" onclick="rotate(90)"> | ||||
|                       <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise" viewBox="0 0 16 16"> | ||||
|                         <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" /> | ||||
|                         <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" /> | ||||
|                       </svg> | ||||
|                     </button> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </form> | ||||
| <body> | ||||
|   <div id="page-container"> | ||||
|     <div id="content-wrap"> | ||||
|       <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|       <br><br> | ||||
|       <th:block th:insert="~{fragments/multi-toolAdvert.html :: multi-toolAdvert}"></th:block> | ||||
|       <div class="container"> | ||||
|         <div class="row justify-content-center"> | ||||
|           <div class="col-md-6 bg-card"> | ||||
|             <div class="tool-header"> | ||||
|               <span class="material-symbols-rounded tool-header-icon organize">rotate_right</span> | ||||
|               <span class="tool-header-text" th:text="#{rotate.header}"></span> | ||||
|             </div> | ||||
| 
 | ||||
|             <form action="#" th:action="@{'/api/v1/general/rotate-pdf'}" th:object="${rotateForm}" method="post" | ||||
|               enctype="multipart/form-data"> | ||||
|               <div | ||||
|                 th:replace="~{fragments/common :: fileSelector(name='fileInput', multipleInputsForSingleRequest=false, accept='application/pdf')}"> | ||||
|               </div> | ||||
|               <input type="hidden" id="angleInput" name="angle" value="0"> | ||||
| 
 | ||||
|               <div id="editSection" style="display: none"> | ||||
|                 <div id="previewContainer"> | ||||
|                   <!-- pdf-preview --> | ||||
|                 </div> | ||||
| 
 | ||||
|                 <div class="buttonContainer"> | ||||
|                   <button type="button" class="btn btn-secondary" onclick="rotate(-90)"> | ||||
|                     <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" | ||||
|                       class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16"> | ||||
|                       <path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z" /> | ||||
|                       <path | ||||
|                         d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z" /> | ||||
|                     </svg> | ||||
|                   </button> | ||||
|                   <button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{rotate.submit}"></button> | ||||
|                   <button type="button" class="btn btn-secondary" onclick="rotate(90)"> | ||||
|                     <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" | ||||
|                       class="bi bi-arrow-clockwise" viewBox="0 0 16 16"> | ||||
|                       <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" /> | ||||
|                       <path | ||||
|                         d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z" /> | ||||
|                     </svg> | ||||
|                   </button> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </form> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|     </div> | ||||
|     <script type="module" th:src="@{'/pdfjs-legacy/pdf.mjs'}"></script> | ||||
|     <script> | ||||
|       const angleInput = document.getElementById("angleInput"); | ||||
|       const fileInput = document.getElementById("fileInput-input"); | ||||
|       const previewContainer = document.getElementById("previewContainer"); | ||||
|       // const preview = document.getElementById("pdf-preview"); | ||||
|       fileInput.addEventListener("change", async function() { | ||||
|         console.log("loading pdf"); | ||||
|     <th:block th:insert="~{fragments/footer.html :: footer}"></th:block> | ||||
|   </div> | ||||
|   <script type="module" th:src="@{'/pdfjs-legacy/pdf.mjs'}"></script> | ||||
|   <script> | ||||
|     const angleInput = document.getElementById("angleInput"); | ||||
|     const fileInput = document.getElementById("fileInput-input"); | ||||
|     const previewContainer = document.getElementById("previewContainer"); | ||||
|     // const preview = document.getElementById("pdf-preview"); | ||||
|     fileInput.addEventListener("change", async function () { | ||||
|       console.log("loading pdf"); | ||||
| 
 | ||||
|         document.querySelector("#editSection").style.display = ""; | ||||
|       document.querySelector("#editSection").style.display = ""; | ||||
| 
 | ||||
|         const existingPreview = document.getElementById("pdf-preview"); | ||||
|         if (existingPreview) { | ||||
|           existingPreview.remove(); | ||||
|         } | ||||
|         var url = URL.createObjectURL(fileInput.files[0]) | ||||
|         pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-legacy/pdf.worker.mjs' | ||||
|         const pdf = await pdfjsLib.getDocument(url).promise; | ||||
|         const page = await pdf.getPage(1); | ||||
| 
 | ||||
|         const canvas = document.createElement("canvas"); | ||||
| 
 | ||||
|         // set the canvas size to the size of the page | ||||
|         if (page.rotate == 90 || page.rotate == 270) { | ||||
|           canvas.width = page.view[3]; | ||||
|           canvas.height = page.view[2]; | ||||
|         } else { | ||||
|           canvas.width = page.view[2]; | ||||
|           canvas.height = page.view[3]; | ||||
|         } | ||||
| 
 | ||||
|         // render the page onto the canvas | ||||
|         var renderContext = { | ||||
|           canvasContext: canvas.getContext("2d"), | ||||
|           viewport: page.getViewport({ scale: 1 }) | ||||
|         }; | ||||
| 
 | ||||
|         await page.render(renderContext).promise; | ||||
|         const  preview = document.createElement("img"); | ||||
|         preview.id = "pdf-preview"; | ||||
|         preview.alt = "preview"; | ||||
|         preview.src = canvas.toDataURL(); | ||||
|         previewContainer.appendChild(preview); | ||||
|       }); | ||||
| 
 | ||||
|       function rotate(deg) { | ||||
|         const preview = document.getElementById("pdf-preview"); | ||||
|         var lastTransform = preview.style.rotate; | ||||
|         if (!lastTransform) { | ||||
|           lastTransform = "0"; | ||||
|         } | ||||
|         const lastAngle = parseInt(lastTransform.replace(/[^\d-]/g, '')); | ||||
|         const newAngle = lastAngle + deg; | ||||
|         preview.style.rotate = newAngle + "deg"; | ||||
|         angleInput.value = newAngle; | ||||
|       const existingPreview = document.getElementById("pdf-preview"); | ||||
|       if (existingPreview) { | ||||
|         existingPreview.remove(); | ||||
|       } | ||||
|     </script> | ||||
|   </body> | ||||
|       var url = URL.createObjectURL(fileInput.files[0]) | ||||
|       pdfjsLib.GlobalWorkerOptions.workerSrc = './pdfjs-legacy/pdf.worker.mjs' | ||||
|       const pdf = await pdfjsLib.getDocument(url).promise; | ||||
|       const page = await pdf.getPage(1); | ||||
| 
 | ||||
|       const canvas = document.createElement("canvas"); | ||||
| 
 | ||||
|       // set the canvas size to the size of the page | ||||
|       if (page.rotate == 90 || page.rotate == 270) { | ||||
|         canvas.width = page.view[3]; | ||||
|         canvas.height = page.view[2]; | ||||
|       } else { | ||||
|         canvas.width = page.view[2]; | ||||
|         canvas.height = page.view[3]; | ||||
|       } | ||||
| 
 | ||||
|       // render the page onto the canvas | ||||
|       var renderContext = { | ||||
|         canvasContext: canvas.getContext("2d"), | ||||
|         viewport: page.getViewport({ scale: 1 }) | ||||
|       }; | ||||
| 
 | ||||
|       await page.render(renderContext).promise; | ||||
|       const preview = document.createElement("img"); | ||||
|       preview.id = "pdf-preview"; | ||||
|       preview.alt = "preview"; | ||||
|       preview.src = canvas.toDataURL(); | ||||
|       previewContainer.appendChild(preview); | ||||
|     }); | ||||
| 
 | ||||
|     function rotate(deg) { | ||||
|       const preview = document.getElementById("pdf-preview"); | ||||
|       var lastTransform = preview.style.rotate; | ||||
|       if (!lastTransform) { | ||||
|         lastTransform = "0"; | ||||
|       } | ||||
|       const lastAngle = parseInt(lastTransform.replace(/[^\d-]/g, '')); | ||||
|       const newAngle = lastAngle + deg; | ||||
|       preview.style.rotate = newAngle + "deg"; | ||||
|       angleInput.value = newAngle; | ||||
|     } | ||||
|   </script> | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -11,6 +11,7 @@ | ||||
|     <div id="content-wrap"> | ||||
|       <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block> | ||||
|       <br><br> | ||||
|       <th:block th:insert="~{fragments/multi-toolAdvert.html :: multi-toolAdvert}"></th:block> | ||||
|       <div class="container"> | ||||
|         <div class="row justify-content-center"> | ||||
|           <div class="col-md-6 bg-card"> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user