mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-11-01 01:21:18 +01:00 
			
		
		
		
	Merge pull request #296 from jordyjordy/multitool-filedrag
add fileInput widget to multiSelect
This commit is contained in:
		
						commit
						882cd41d4b
					
				@ -10,6 +10,7 @@ class PdfContainer {
 | 
				
			|||||||
        this.pagesContainerWrapper = document.getElementById(wrapperId);
 | 
					        this.pagesContainerWrapper = document.getElementById(wrapperId);
 | 
				
			||||||
        this.movePageTo = this.movePageTo.bind(this);
 | 
					        this.movePageTo = this.movePageTo.bind(this);
 | 
				
			||||||
        this.addPdfs = this.addPdfs.bind(this);
 | 
					        this.addPdfs = this.addPdfs.bind(this);
 | 
				
			||||||
 | 
					        this.addPdfsFromFiles = this.addPdfsFromFiles.bind(this);
 | 
				
			||||||
        this.rotateElement = this.rotateElement.bind(this);
 | 
					        this.rotateElement = this.rotateElement.bind(this);
 | 
				
			||||||
        this.rotateAll = this.rotateAll.bind(this);
 | 
					        this.rotateAll = this.rotateAll.bind(this);
 | 
				
			||||||
        this.exportPdf = this.exportPdf.bind(this);
 | 
					        this.exportPdf = this.exportPdf.bind(this);
 | 
				
			||||||
@ -57,22 +58,25 @@ class PdfContainer {
 | 
				
			|||||||
        input.type = 'file';
 | 
					        input.type = 'file';
 | 
				
			||||||
        input.multiple = true;
 | 
					        input.multiple = true;
 | 
				
			||||||
        input.setAttribute("accept", "application/pdf");
 | 
					        input.setAttribute("accept", "application/pdf");
 | 
				
			||||||
 | 
					 | 
				
			||||||
        input.onchange = async(e) => {
 | 
					        input.onchange = async(e) => {
 | 
				
			||||||
            const files = e.target.files;
 | 
					            const files = e.target.files;
 | 
				
			||||||
            this.fileName = files[0].name;
 | 
					            this.addPdfsFromFiles(files, nextSiblingElement);
 | 
				
			||||||
            for (var i=0; i < files.length; i++) {
 | 
					 | 
				
			||||||
                await this.addPdfFile(files[i], nextSiblingElement);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            document.querySelectorAll(".enable-on-file").forEach(element => {
 | 
					 | 
				
			||||||
                element.disabled = false;
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        input.click();
 | 
					        input.click();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async addPdfsFromFiles(files, nextSiblingElement) {
 | 
				
			||||||
 | 
					        this.fileName = files[0].name;
 | 
				
			||||||
 | 
					        for (var i=0; i < files.length; i++) {
 | 
				
			||||||
 | 
					            await this.addPdfFile(files[i], nextSiblingElement);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        document.querySelectorAll(".enable-on-file").forEach(element => {
 | 
				
			||||||
 | 
					            element.disabled = false;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rotateElement(element, deg) {
 | 
					    rotateElement(element, deg) {
 | 
				
			||||||
        var lastTransform = element.style.rotate;
 | 
					        var lastTransform = element.style.rotate;
 | 
				
			||||||
        if (!lastTransform) {
 | 
					        if (!lastTransform) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										69
									
								
								src/main/resources/static/js/multitool/fileInput.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/main/resources/static/js/multitool/fileInput.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					const addFileDragListener = (callback) => {
 | 
				
			||||||
 | 
					    let overlay;
 | 
				
			||||||
 | 
					    let dragCounter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const dragenterListener = function() {
 | 
				
			||||||
 | 
					        dragCounter++;
 | 
				
			||||||
 | 
					        if (!overlay) {
 | 
				
			||||||
 | 
					            // Create and show the overlay
 | 
				
			||||||
 | 
					            overlay = document.createElement('div');
 | 
				
			||||||
 | 
					            overlay.style.position = 'fixed';
 | 
				
			||||||
 | 
					            overlay.style.top = 0;
 | 
				
			||||||
 | 
					            overlay.style.left = 0;
 | 
				
			||||||
 | 
					            overlay.style.width = '100%';
 | 
				
			||||||
 | 
					            overlay.style.height = '100%';
 | 
				
			||||||
 | 
					            overlay.style.background = 'rgba(0, 0, 0, 0.5)';
 | 
				
			||||||
 | 
					            overlay.style.color = '#fff';
 | 
				
			||||||
 | 
					            overlay.style.zIndex = '1000';
 | 
				
			||||||
 | 
					            overlay.style.display = 'flex';
 | 
				
			||||||
 | 
					            overlay.style.alignItems = 'center';
 | 
				
			||||||
 | 
					            overlay.style.justifyContent = 'center';
 | 
				
			||||||
 | 
					            overlay.style.pointerEvents = 'none';
 | 
				
			||||||
 | 
					            overlay.innerHTML = '<p>Drop files anywhere to upload</p>';
 | 
				
			||||||
 | 
					            document.getElementById('content-wrap').appendChild(overlay);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const dragleaveListener = function() {
 | 
				
			||||||
 | 
					        dragCounter--;
 | 
				
			||||||
 | 
					        if (dragCounter === 0) {
 | 
				
			||||||
 | 
					            // Hide and remove the overlay
 | 
				
			||||||
 | 
					            if (overlay) {
 | 
				
			||||||
 | 
					                overlay.remove();
 | 
				
			||||||
 | 
					                overlay = null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const dropListener = function(e) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const dt = e.dataTransfer;
 | 
				
			||||||
 | 
					        const files = dt.files;
 | 
				
			||||||
 | 
					        callback(files).catch((err) => {
 | 
				
			||||||
 | 
					            console.error(err);
 | 
				
			||||||
 | 
					            //maybe
 | 
				
			||||||
 | 
					        }).finally(() => {
 | 
				
			||||||
 | 
					            if (overlay) {
 | 
				
			||||||
 | 
					                overlay.remove();
 | 
				
			||||||
 | 
					                overlay = null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Prevent default behavior for drag events
 | 
				
			||||||
 | 
					    ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
 | 
				
			||||||
 | 
					        document.body.addEventListener(eventName, preventDefaults, false);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function preventDefaults(e) {
 | 
				
			||||||
 | 
					        e.preventDefault();
 | 
				
			||||||
 | 
					        e.stopPropagation();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.body.addEventListener('dragenter', dragenterListener);
 | 
				
			||||||
 | 
					    document.body.addEventListener('dragleave', dragleaveListener);
 | 
				
			||||||
 | 
					    // Add drop event listener
 | 
				
			||||||
 | 
					    document.body.addEventListener('drop', dropListener);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default addFileDragListener;
 | 
				
			||||||
@ -65,7 +65,7 @@
 | 
				
			|||||||
        import scrollDivHorizontally from "./js/multitool/horizontalScroll.js";
 | 
					        import scrollDivHorizontally from "./js/multitool/horizontalScroll.js";
 | 
				
			||||||
        import ImageHighlighter from "./js/multitool/ImageHighlighter.js";
 | 
					        import ImageHighlighter from "./js/multitool/ImageHighlighter.js";
 | 
				
			||||||
        import PdfActionsManager from './js/multitool/PdfActionsManager.js';
 | 
					        import PdfActionsManager from './js/multitool/PdfActionsManager.js';
 | 
				
			||||||
 | 
					        import addFileInputListener from './js/multitool/fileInput.js';
 | 
				
			||||||
        // enables drag and drop
 | 
					        // enables drag and drop
 | 
				
			||||||
        const dragDropManager = new DragDropManager('drag-container', 'pages-container');
 | 
					        const dragDropManager = new DragDropManager('drag-container', 'pages-container');
 | 
				
			||||||
        // enables image highlight on click
 | 
					        // enables image highlight on click
 | 
				
			||||||
@ -86,6 +86,9 @@
 | 
				
			|||||||
                pdfActionsManager,
 | 
					                pdfActionsManager,
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        addFileInputListener(async (files) => {
 | 
				
			||||||
 | 
					            pdfContainer.addPdfsFromFiles(files);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <style>
 | 
					    <style>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user