You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							89 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							89 lines
						
					
					
						
							1.8 KiB
						
					
					
				
								const handlers = {
							 | 
						|
								  onDropFile: () => {},
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								export function setup(options) {
							 | 
						|
								  const html = `
							 | 
						|
								  <style>
							 | 
						|
								    .dragInfo {
							 | 
						|
								        position: fixed;
							 | 
						|
								        left: 0;
							 | 
						|
								        top: 0;
							 | 
						|
								        width: 100%;
							 | 
						|
								        height: 100%;
							 | 
						|
								        background: rgba(0, 0, 0, .9);
							 | 
						|
								        display: flex;
							 | 
						|
								        align-items: center;
							 | 
						|
								        justify-content: center;
							 | 
						|
								    }
							 | 
						|
								    .dragInfo>div {
							 | 
						|
								        padding: 1em;
							 | 
						|
								        background: blue;
							 | 
						|
								        color: white;
							 | 
						|
								        pointer-events: none;
							 | 
						|
								    }
							 | 
						|
								    .dragerror div {
							 | 
						|
								        background: red !important;
							 | 
						|
								        font-weight: bold;
							 | 
						|
								        color: white;
							 | 
						|
								    }
							 | 
						|
								  </style>
							 | 
						|
								  <div class="dragInfo" style="display: none;">
							 | 
						|
								    <div>
							 | 
						|
								       ${options.msg}
							 | 
						|
								    </div>
							 | 
						|
								  </div>
							 | 
						|
								  `;
							 | 
						|
								
							 | 
						|
								  const elem = document.createElement('div');
							 | 
						|
								  elem.innerHTML = html;
							 | 
						|
								  document.body.appendChild(elem);
							 | 
						|
								
							 | 
						|
								  const dragInfo = document.querySelector('.dragInfo');
							 | 
						|
								  function showDragInfo(show) {
							 | 
						|
								    dragInfo.style.display = show ? '' : 'none';
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  document.body.addEventListener('dragenter', () => {
							 | 
						|
								    showDragInfo(true);
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  const dragElem = dragInfo;
							 | 
						|
								
							 | 
						|
								  dragElem.addEventListener('dragover', (e) => {
							 | 
						|
								    e.preventDefault();
							 | 
						|
								    return false;
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  dragElem.addEventListener('dragleave', () => {
							 | 
						|
								    showDragInfo(false);
							 | 
						|
								    return false;
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  dragElem.addEventListener('dragend', () => {
							 | 
						|
								    showDragInfo(false);
							 | 
						|
								    return false;
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  dragElem.addEventListener('drop', (e) => {
							 | 
						|
								    e.preventDefault();
							 | 
						|
								    showDragInfo(false);
							 | 
						|
								    if (e.dataTransfer.items) {
							 | 
						|
								      let fileNdx = 0;
							 | 
						|
								      for (let i = 0; i < e.dataTransfer.items.length; ++i) {
							 | 
						|
								        const item = e.dataTransfer.items[i];
							 | 
						|
								        if (item.kind === 'file') {
							 | 
						|
								          handlers.onDropFile(item.getAsFile(), fileNdx++);
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return false;
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								export function onDropFile(fn) {
							 | 
						|
								  handlers.onDropFile = fn;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 |