<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SRT Reader</title> <!-- drag-n-drop: https://www.smashingmagazine.com/2018/01/drag-drop-file-uploader-vanilla-js/--> </head> <style> /**br hack from https://stackoverflow.com/a/28310011/191246**/ br { content: ""; margin: 2em; display: block; font-size: 24%; } form { margin: 1em auto; width: 100%; } .box { margin: 1em auto; width: 70%; max-width: 70%; -webkit-box-shadow: rgba(29, 36, 23, 0.386719) -2px 4px 17px 0px; -moz-box-shadow: rgba(29, 36, 23, 0.386719) -2px 4px 17px 0px; box-shadow: rgba(29, 36, 23, 0.386719) -2px 4px 17px 0px; -webkit-border-radius: 11px; -moz-border-radius: 11px; border-radius: 11px; } #rendered_markup { padding: 1em; } body { padding-left: 3em; } * { font-family: "Droid Sans", Helvetica, sans-serif; line-height: 1.2em; } textarea { margin: .5em; border: none; width: 95%; padding: .5em } .btn-submit { margin: 1em; text-align: right; background-color: #44c767; color: white; border-radius: 28px; border: 1px solid #18ab29; display: inline-block; cursor: pointer; font-size: 17px; padding: 16px 31px; text-decoration: none; text-shadow: 0px 1px 0px #2f6627; } .btn-submit:hover { background-color: #5cbf2a; } .btn-submit:active { position: relative; top: 1px; } #drop-area.highlight { border: 5px dotted green; background: lightgreen; } #fileUpload { display: none; } .hint { font-size: 70%; color: darkgray; } </style> <body> <div class="box"> <div id="rendered_markup">✍️</div> </div> <div class="box"> <div id="drop-area"> <form id="frm" name="frm" action=""> <textarea id="txt" name="txt" rows="15" cols="100"> </textarea> <br> <div style="text-align: center"> <input type="file" id="fileUpload" multiple accept="*" onchange="handleFiles(this.files)"> <input class="btn-submit" type="submit" value="Render" onclick="render(); return false;"> <br><label class="hint" for="fileUpload">paste or drag a file..</label> </div> </form> </div> </div> <script> function render(e) { document.getElementById('rendered_markup').innerHTML = '<p>' + document.frm.txt.value.replace(/(?:\r\n|\r|\n)+/g, '<br>') .replace(/#ffffff/g, '#2c7cf4') .replace(/#00ffff/g, '#56aa03') + '</p>'; } var dropArea = document.getElementById('drop-area'); ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { dropArea.addEventListener(eventName, preventDefaults, false) }) function preventDefaults(e) { e.preventDefault() e.stopPropagation() } ;['dragenter', 'dragover'].forEach(eventName => { dropArea.addEventListener(eventName, highlight, false) }) ;['dragleave', 'drop'].forEach(eventName => { dropArea.addEventListener(eventName, unhighlight, false) }) function highlight(e) { dropArea.classList.add('highlight') } function unhighlight(e) { dropArea.classList.remove('highlight') } dropArea.addEventListener('drop', handleDrop, false) function handleDrop(e) { var dt = e.dataTransfer var files = dt.files getFiles(files); } function getFiles(files) { if (files) { placeFileContent( document.getElementById('txt'), files.item(0)) } } function placeFileContent(target, file) { readFileContent(file).then(content => { target.value = content }).then(() => { render(); }).catch(error => console.log(error)) } function readFileContent(file) { const reader = new FileReader() return new Promise((resolve, reject) => { reader.onload = event => resolve(event.target.result) reader.onerror = error => reject(error) reader.readAsText(file) }) } </script> </body> </html>