<!DOCTYPE html>
<html>
    <head>
        <title>Index of</title>
        <style>
            h1 {
                border-bottom: 1px solid black;
            }

            .listing {
                margin: 0.5em;
                display: table;
            }

            .listing .header,
            .listing .entry {
                display: table-row;
            }

            .listing .header {
                font-weight: bold;
            }

            .listing .header span,
            .listing .entry span {
                display: table-cell;
                padding-right: 1em;
            }

            .entry span:nth-child(1) {
                min-width: 20em;
            }

            .entry span.size,
            .entry span.last-modified {
                white-space: nowrap;
            }

            .parent_link > a:before {
                content: "📁 ";
            }

            .parent_link {
                display: none;
            }

            .entry.directory > .name:before {
                content: "📁 ";
            }

            .entry.file > .name:before {
                content: "📄 ";
            }

            .entry.symlink > .name:before {
                content: "🔗 ";
            }
        </style>
        <script>
            function setData(directoryName, parentLink, rows) {
                document.title += " " + directoryName;
                document.querySelector("h1").innerHTML += " " + directoryName;

                if (parentLink != "") {
                    document.querySelector(".parent_link > a").href = parentLink;
                    document.querySelector(".parent_link").style.display = "initial";
                }

                rows.sort((rowA, rowB) => rowA[1].localeCompare(rowB[1]));

                let listing = document.querySelector(".listing");
                let rowTemplate = document.getElementById("rowTemplate");
                for (row of rows) {
                    let rowElement = rowTemplate.content.cloneNode(true);
                    rowElement.querySelector(".entry").classList.add(row[0]);
                    rowElement.querySelector(".name > .link").innerText = row[1];
                    rowElement.querySelector(".name > .link").href = row[2];
                    rowElement.querySelector(".size").innerText = row[3];
                    rowElement.querySelector(".last-modified").innerText = row[4];
                    listing.appendChild(rowElement);
                }
            }
        </script>
    </head>
    <body>
        <h1>Index of</h1>
        <div class="parent_link"><a href="">Up to parent directory</a></div>
        <div class="listing">
            <div class="header">
                <span class="name">Name</span>
                <span class="size">Size</span>
                <span class="last-modified">Last Modified</span>
            </div>
        </div>
        <template id="rowTemplate">
            <div class="entry">
                <span class="name"><a class="link"></a></span>
                <span class="size"></span>
                <span class="last-modified"></span>
            </div>
        </template>
    </body>
</html>
