<!DOCTYPE html>
<html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<head>
    <style>
        body, html {
            width: 100%;
            height: 100%;
            font-family: monospace;
        }

        .heading {
            display: block;
            width: 100%;
            border-top: 2px gray dashed;
            margin-top: 20px;
            box-sizing: border-box;
        }
    </style>
    <script>
        function setup()
        {
            document.body.addEventListener("paste", event => {
                dumpAsOutput(event.clipboardData);
                event.preventDefault();
            });
            document.body.addEventListener("drop", event => {
                dumpAsOutput(event.dataTransfer);
                event.preventDefault();
            });
            document.body.addEventListener("beforeinput", event => event.preventDefault());
            document.body.focus();
        }

        function dumpAsOutput(dataTransfer)
        {
            document.body.contentEditable = false;
            types.textContent = dataTransfer.types.join(", ");
            items.textContent = Array.from(dataTransfer.items).map(item => `(${item.kind.toUpperCase()}, ${item.type})`).join(", ");
            files.textContent = Array.from(dataTransfer.files).map(file => `('${file.name}', ${file.type})`).join(", ");
            urlData.textContent = dataTransfer.getData("text/uri-list");
            textData.textContent = dataTransfer.getData("text/plain");
            let markup = dataTransfer.getData("text/html");
            htmlData.insertAdjacentHTML("beforeend", markup);
            rawHTMLData.textContent = markup;
        }

        function reset()
        {
            Array.from(document.getElementsByClassName("output")).map(element => {
                element.innerHTML = "";
            });
            document.body.contentEditable = true;
        }
    </script>
</head>
<body contenteditable onload=setup()>
    <h3 class="heading">Types</h3>
    <div class="output" id="types"></div>

    <h3 class="heading">Items</h3>
    <div class="output" id="items"></div>

    <h3 class="heading">Files</h3>
    <div class="output" id="files"></div>

    <h3 class="heading">text/plain</h3>
    <div class="output" id="textData"></div>

    <h3 class="heading">text/uri-list</h3>
    <div class="output" id="urlData"></div>

    <h3 class="heading">text/html</h3>
    <div class="output" id="htmlData"></div>
    <div class="output" id="rawHTMLData"></div>
</body>
</html>
