<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, Chrome=1">
    <meta name="renderer" content="webkit">
    <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,viewport-fit=cover">
    <title></title>
    <link href="//s0.pstatp.com/cdn/expire-1-M/mdui/0.4.2/css/mdui.min.css" rel="stylesheet">
    <link href="//s0.pstatp.com/cdn/expire-1-M/dplayer/1.25.0/DPlayer.min.css" rel="stylesheet">
    <style>
    body{background-color:#f2f5fa}.nexmoe-item{margin:15px 0 !important;padding:15px !important;border-radius:5px;background-color:#fff;-webkit-box-shadow:0 .5em 3em rgba(161,177,204,.4);box-shadow:0 .5em 3em rgba(161,177,204,.4);background-color:#fff}.mdui-img-fluid,.mdui-video-fluid{border-radius:5px;border:1px solid #eee}.mdui-list{padding:0}.mdui-list-item{margin:0 !important;border-radius:5px;padding:0 10px 0 5px !important;border-bottom:1px solid #eee;margin-bottom:10px !important}.mdui-list-item:last-child{margin-bottom:0 !important}.mdui-toolbar{width:auto}.mdui-appbar .mdui-toolbar{height:56px;font-size:16px}.mdui-toolbar>*{padding:0 6px;margin:0 2px}.mdui-toolbar>.mdui-typo-headline{padding:0 16px 0 0}.mdui-toolbar>i{padding:0}.mdui-toolbar h3.title{padding:0 16px;line-height:30px;border-radius:30px;border:1px solid #eee;opacity:1;background-color:#1e89f2;color:#ffff}.mdui-toolbar>a:hover,a.mdui-typo-headline,a.active{opacity:1}.mdui-list>.th{background-color:initial}.mdui-list-item>a{width:100%;line-height:48px}.mdui-toolbar>a{padding:0 16px;line-height:30px;border-radius:30px;border:1px solid #eee}.mdui-toolbar>a:last-child{opacity:1;background-color:#1e89f2;color:#ffff}@media screen and (max-width:980px){.mdui-list-item .mdui-text-right{display:none}.mdui-container{width:100% !important;margin:0}.mdui-toolbar>a:last-child,.mdui-toolbar>.mdui-typo-headline,.mdui-toolbar>i:first-child{display:block}}#main-page{cursor:pointer}.nav-a{text-decoration:none;color:#333}.nav-a:hover{text-decoration:underline}.file{width:100%;display:flex;align-items:center}.file a{color:unset;width:100%}#text-input,#close{display:none}#text-input{width:40%}#dplayerContainer{position:relative;background-color:#000;display:none;padding:10px}.close-icon{color:#fff}#viewerContainer{width:100%;height:100%}.viewer-img{width:450px;position:relative;left:30%;z-index:1000}span.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:999}#viewerClose{z-index:1000;color:#fff;background:rgba(255,255,255,.12);display:inline-block;position:absolute;bottom:0;cursor:pointer}@media screen and (max-width:768px){.viewer-img{width:60%;position:relative;left:20%;z-index:1000}}
    </style>
</head>
<body>
    <div class="container mdui-container">
        <div class="mdui-container-fluid">
            <div class="mdui-toolbar nexmoe-item nav">
                <i class="mdui-list-item-icon mdui-icon material-icons mdui-text-color-blue" id="main-page" onclick="goto(rootPath)">home</i>
                <span id="path">/</span>
                <div class="mdui-toolbar-spacer"></div>
                <input type="text" id="text-input" class="mdui-textfield-input" oninput="search(this)" placeholder="请输入关键字">
                <button type="button" id="close" class="mdui-textfield-close mdui-btn mdui-btn-icon"><i class="mdui-icon material-icons">close</i></button>
                <button type="button" id="btn" class="mdui-textfield-icon mdui-btn mdui-btn-icon"><i class="mdui-icon material-icons">search</i></button>
            </div>
        </div>
        <div class="mdui-container-fluid">
            <div class="list-wrapper nexmoe-item">
                <div class="list-header">
                    <div class="file mdui-list-item th">
                        <span class="name mdui-col-xs-12 mdui-col-sm-7" onclick="view('name')">列表</span>
                        <span class="time mdui-col-sm-3 mdui-text-right" onclick="view('date')">时间</span>
                        <span class="size mdui-col-sm-2 mdui-text-right" onclick="view('size')">大小</span>
                    </div>
                </div>
                <div id="file-list"></div>
            </div>
        </div>
    </div>
    <script src="//s0.pstatp.com/cdn/expire-1-M/??mdui/0.4.0/js/mdui.min.js,dplayer/1.25.0/DPlayer.min.js"></script>
    <script>
    let title = 'vList - ',
        rootPath = "{{.RootPath}}",
        currentPath = "{{.CurrentPath}}",
        rawData = "{{.RawData}}",
        $$ = mdui.JQ;
    let reverse = false,
        pageData = JSON.parse(window.atob(rawData)),
        arrayPath = new Array(),
        arrayFloder = new Array(),
        arrayFile = new Array();
    for (let item in pageData) {
        pageData[item]["itemName"] = decodeURIComponent(pageData[item]['name']);
        pageData[item]["type"] = getFileType(pageData[item]["itemName"]);
        if (pageData[item]['folder']) {
            arrayFloder.push(pageData[item])
        } else {
            arrayFile.push(pageData[item])
        }
    }
    function goto(thePath) {
        window.location.href = thePath
    }
    function sizeNum(Size) {
        let dataArray = Size.split(" ", 2),
            dataNum = 0;
        if (dataArray.length !== 2) {
            return dataNum;
        }
        switch (dataArray[1]) {
            case "B":
                dataNum = 2 ** 0 * dataArray[0];
                break;
            case "KB":
                dataNum = 2 ** 10 * dataArray[0];
                break;
            case "MB":
                dataNum = 2 ** 20 * dataArray[0];
                break;
            case "GB":
                dataNum = 2 ** 30 * dataArray[0];
                break;
            case "TB":
                dataNum = 2 ** 40 * dataArray[0];
                break;
            default:
                dataNum = 0
        }
        return dataNum
    }
    function compare(property) {
        if (property === "size") {
            return function(a, b) {
                let value0 = sizeNum(a[property].toUpperCase());
                let value1 = sizeNum(b[property].toUpperCase());
                return value0 - value1
            }
        } else {
            return function(a, b) {
                let value0 = a[property].toLowerCase();
                let value1 = b[property].toLowerCase();
                return value0.localeCompare(value1)
            }
        }
    }
    function clear() {
        let classList = new Array("file-wrapper");
        for (let item in classList) {
            let obj = document.getElementsByClassName(classList[item]);
            for (let i = obj.length - 1; i >= 0; i--) {
                obj[i].parentNode.removeChild(obj[i])
            }
        }
        let nav = document.getElementById("path"),
            pathSpan = document.createElement("span"),
            locPath = ("/" + currentPath.replace(rootPath, "").replace(/^\//, "")).split("/").slice(1),
            locRoot = rootPath === "/" ? "" : rootPath;
        locArray = new Array('');
        nav.innerHTML = '';
        let localHref = "";
        for (let j = 0; j < locPath.length; j++) {
            if (j === 0 && j === "") {
                continue;
            }
            localHref += "/" + locPath[j];
            navTemp = `<a class="nav-a" href="//${window.location.host}${locRoot}${localHref}">${locPath[j]}</a>`;
            locArray.push(navTemp)
        }
        pathSpan.innerHTML = locArray.join("/");
        nav.appendChild(pathSpan);
        navText = (nav.innerHTML.length === 0) ? '/' : pathSpan.innerHTML.replace(/<[^>]+>/g, "");
        document.title += navText.substr(1);
        arrayPath = locArray
    }
    function search(obj) {
        let searchVal = obj.value;
        if (searchVal === undefined) {
            return
        } else {
            searchVal = searchVal.toString().toLowerCase()
        }
        let showArray = document.getElementsByClassName("file-wrapper");
        for (let i = 0; i < showArray.length; i++) {
            let content = showArray[i].children[0].querySelector("span.mdui-text-truncate").innerText;
            if (content !== undefined && content.length > 0) {
                let newAttr = '';
                if (content.toLowerCase().indexOf(searchVal) < 0) {
                    newAttr = "none"
                }
                showArray[i].style.display = newAttr
            }
        }
    }
    function view(Property) {
        arrayFloder.sort(compare(Property));
        arrayFile.sort(compare(Property));
        if (reverse) {
            arrayFloder.reverse();
            arrayFile.reverse();
        }
        reverse = !(reverse);
        clear();
        let obj = document.getElementById('file-list'),
            items = arrayFloder.concat(arrayFile);
        for (let item in items) {
            let newChild = document.createElement("div");
            let itemName = items[item]['itemName'],
                href = items[item]['url'],
                fileType = items[item]['type'];
            let icon = items[item]['folder'] ? 'folder_open' : getFileIcon(fileType);
            newChild.setAttribute('class', 'row file-wrapper mdui-list-item mdui-ripple');
            newChild.innerHTML = `
            <div class="file">
                <i class="mdui-icon material-icons">${icon}</i>
                <a href="javascript:;">
                    <span class="name mdui-col-xs-12 mdui-col-sm-7 mdui-text-truncate">${itemName}</span>
                    <span class="time mdui-col-sm-3 mdui-text-right">${items[item]['date']}</span>
                    <span class="size mdui-col-sm-2 mdui-text-right">${items[item]['size']}</span>
                </a>
            </div>`;
            obj.appendChild(newChild);
            newChild.addEventListener('click',function(e){
                if (fileType === "video") {
                    let dplayerContainer = `
                        <div id="dplayerContainer" class="mdui-container-fluid">
                            <div align="right">
                                <button type="button" id="closevideo" onclick="dpClose()" class="mdui-textfield-close mdui-btn mdui-btn-icon"><i class="mdui-icon material-icons close-icon">close</i></button>
                            </div>
                            <div id="dplayer"></div>
                        </div>`;
                    $$('#dplayerContainer').remove();
                    $$(newChild).after(dplayerContainer);
                    dpOpen(href);
                }else if(fileType === "image"){
                    let imgEle = `
                        <div id="viewerContainer" onclick="$$(this).remove()">
                            <span class="overlay"></span>
                            <img class="viewer-img" src="${href}">
                        </div>
                        `;
                    $$('#viewerContainer').remove();
                    $$(newChild).after(imgEle);
                }else{
                    window.location.href = href;
                }
            },false);
            $$(newChild).find('a').attr('href', href);
        }
    }
    function getFileType(name) {
        if (!name) return false;
        let imgType = ['gif', 'jpeg', 'jpg', 'bmp', 'png'],
            videoType = ['avi', 'wmv', 'mkv', 'mp4', 'mov', '3gp', 'flv', 'mpg', 'rmvb'],
            textType = ['txt', 'pdf', 'css', 'js', 'text', 'doc', 'docx', 'ppt', 'xml'],
            musicType = ['wav', 'acc', 'flac', 'ape', 'ogg', 'mp3'];
        if (RegExp("\.(" + imgType.join("|") + ")$", "i").test(name.toLowerCase())) {
            return 'image'
        }else if (RegExp("\.(" + videoType.join("|") + ")$", "i").test(name.toLowerCase())) {
            return 'video'
        }else if (RegExp("\.(" + textType.join("|") + ")$", "i").test(name.toLowerCase())) {
            return 'text'
        }else if (RegExp("\.(" + musicType.join("|") + ")$", "i").test(name.toLowerCase())) {
            return 'music'
        } else {
            return false
        }
    }
    function getFileIcon(fileType){
        switch(fileType) {
            case 'image':
                icon = 'image';
                break;
            case 'video':
                icon = 'ondemand_video';
                break;
            case 'music':
                icon = 'music_video';
                break;
            case 'text':
                icon = 'text_fields';
                break;
            default:
                icon = 'insert_drive_file';
                break;
        }
        return icon
    }
    function dpClose() {
        $$('#dplayerContainer').remove();
        if (dp) {dp.destroy()}
    }
    function dpOpen(link) {
        $$('#dplayerContainer').show();
        dp = new DPlayer({
            container: document.getElementById('dplayer'),
            autoplay: true,
            video: {
                url: link,
            },
        })
    }
    $$('#btn').on('click', function(event) {
        event.preventDefault();
        $$('#text-input').show();
        $$('#close').show();
        $$('#btn').hide();
    });
    $$('#close').on('click', function(event) {
        event.preventDefault();
        $$('#text-input').hide();
        $$('#close').hide();
        $$('#btn').show();
    });
    window.onload = view("name")
    </script>
</body>
</html>