2020-03-22 00:18:19 +00:00
|
|
|
// Register our router, and fire it off initially in case user is being linked a dir.
|
|
|
|
window.addEventListener("hashchange", router, false);
|
|
|
|
router()
|
|
|
|
|
|
|
|
function getFileListing(provider, path = "") {
|
|
|
|
fetch(`/api/files/${provider}${path}`)
|
|
|
|
.then((response) => {
|
|
|
|
return response.json()
|
|
|
|
})
|
|
|
|
.then((data) => {
|
|
|
|
let files = data["Files"]
|
|
|
|
html`
|
|
|
|
<div class="grid-sm">
|
|
|
|
${files.map(file =>
|
2020-03-22 21:15:31 +00:00
|
|
|
`<a href="${!file.IsDirectory ? `/api/files/${provider}${path}/${file.Name}` : `#${provider}/${path !== "" ? path.replace("/","") + "/" : ""}${file.Name}`}">
|
2020-03-22 00:18:19 +00:00
|
|
|
${file.Name}${file.IsDirectory ? '/' : ''}
|
|
|
|
</a>
|
|
|
|
`
|
|
|
|
).join('')}
|
|
|
|
</div>
|
|
|
|
`
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function getProviders() {
|
|
|
|
fetch(`/api/providers`)
|
|
|
|
.then((response) => {
|
|
|
|
return response.json()
|
|
|
|
})
|
|
|
|
.then((data) => {
|
|
|
|
let providers = data
|
|
|
|
html`
|
|
|
|
<div class="grid-lg">
|
|
|
|
${providers.map(provider =>
|
|
|
|
`<a href=#${provider}>
|
|
|
|
${provider}
|
|
|
|
</a>
|
|
|
|
`
|
|
|
|
).join('')}
|
|
|
|
</div>
|
|
|
|
`
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function router(event = null) {
|
|
|
|
let hash = location.hash.replace("#", "")
|
|
|
|
// If hash is empty, "redirect" to index.
|
|
|
|
if (hash === "") {
|
|
|
|
getProviders()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
let path = hash.split("/")
|
|
|
|
let provider = path.shift()
|
2020-03-22 21:15:31 +00:00
|
|
|
path = path.join("/")
|
2020-03-22 00:18:19 +00:00
|
|
|
getFileListing(provider, "/" + path)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Tagged template function for parsing a string of text as HTML objects
|
|
|
|
// <3 @innovati for this brilliance.
|
|
|
|
function html(strings, ...things) {
|
|
|
|
// Our "body", where we'll render stuff.
|
|
|
|
const body = document.getElementById("main")
|
|
|
|
let x = document.createRange().createContextualFragment(
|
|
|
|
strings.reduce(
|
|
|
|
(markup, string, index) => {
|
|
|
|
markup += string
|
|
|
|
|
|
|
|
if (things[index]) {
|
|
|
|
markup += things[index]
|
|
|
|
}
|
|
|
|
|
|
|
|
return markup
|
|
|
|
},
|
|
|
|
''
|
|
|
|
)
|
|
|
|
)
|
|
|
|
body.innerHTML = ""
|
|
|
|
body.append(x)
|
|
|
|
}
|