diff --git a/wasm/index.html b/wasm/index.html index 69cd927..540751a 100644 --- a/wasm/index.html +++ b/wasm/index.html @@ -103,6 +103,12 @@ textarea:focus { outline: none; border-color: #4a90e2; } + #input-area.drag-over { + border-color: #4a90e2; + background: #eef4fd; + outline: 2px dashed #4a90e2; + } + .btn-row { display: flex; flex-wrap: wrap; @@ -165,7 +171,7 @@

OpenAPI 3.0 → Swagger 2.0 Converter

- +
@@ -232,6 +238,37 @@

OpenAPI 3.0 → Swagger 2.0 Converter

fileInput.value = ''; }); + // Drag and drop onto the input textarea + inputArea.addEventListener('dragover', function(e) { + e.preventDefault(); + inputArea.classList.add('drag-over'); + }); + + inputArea.addEventListener('dragleave', function(e) { + if (e.relatedTarget === null || !inputArea.contains(e.relatedTarget)) { + inputArea.classList.remove('drag-over'); + } + }); + + inputArea.addEventListener('drop', function(e) { + e.preventDefault(); + inputArea.classList.remove('drag-over'); + const file = e.dataTransfer.files[0]; + if (!file) return; + const name = file.name.toLowerCase(); + if (!name.endsWith('.yaml') && !name.endsWith('.yml') && !name.endsWith('.json')) { + showError('Unsupported file type. Please drop a .yaml, .yml, or .json file.'); + return; + } + const reader = new FileReader(); + reader.onload = function(ev) { + inputArea.value = ev.target.result; + clearError(); + }; + reader.onerror = function() { showError('Failed to read file.'); }; + reader.readAsText(file); + }); + // Convert convertBtn.addEventListener('click', function() { clearError();