Files
fnx_web/res/include/script/file_manager/FileManager.js

128 lines
3.5 KiB
JavaScript
Raw Normal View History

function FileManager(windowElement) {
2020-02-03 17:28:26 +01:00
this.window = windowElement
this.navBar = this.window.querySelector("#nav_bar")
this.btnMenu = this.navBar.querySelector("#btn_menu")
this.btnBack = this.navBar.querySelector("#btn_back")
this.btnUp = this.navBar.querySelector("#btn_up")
this.btnForward = this.navBar.querySelector("#btn_forward")
this.btnHome = this.navBar.querySelector("#btn_home")
this.breadcrumbs = this.navBar.querySelector("#breadcrumbs")
this.btnReload = this.navBar.querySelector("#btn_reload")
this.inputSearch = this.navBar.querySelector("#input_search")
2020-01-30 22:55:32 +01:00
2020-02-03 17:28:26 +01:00
// Register keyboard shortcuts
document.addEventListener("keydown", e => { this.keyboardEvent(e) })
2020-02-03 17:28:26 +01:00
this.inputSearch.addEventListener("keyup", e => {
if (e.keyCode === 27) {
e.preventDefault()
this.inputSearch.blur()
return
}
requestAnimationFrame(() => {
this.directoryElement.search(this.inputSearch.value)
})
})
2020-02-03 17:28:26 +01:00
this.directoryElement = new DirectoryElement(
this.window.querySelector("#directory_area"),
this.window.querySelector("#directory_footer"),
)
}
2020-01-30 22:55:32 +01:00
FileManager.prototype.setSpinner = function() {
2020-02-03 17:28:26 +01:00
this.window.appendChild(document.getElementById("tpl_spinner").content.cloneNode(true))
2020-01-30 22:55:32 +01:00
}
FileManager.prototype.delSpinner = function() {
for (let i in this.window.children) {
if (
typeof(this.window.children[i].classList) === "object" &&
this.window.children[i].classList.contains("spinner")
) {
2020-02-03 17:28:26 +01:00
this.window.children[i].remove()
}
}
}
FileManager.prototype.getDirectory = function(path) {
2020-02-03 17:28:26 +01:00
console.log("ayy!")
}
FileManager.prototype.getUserFiles = function() {
2020-02-03 17:28:26 +01:00
this.setSpinner()
2020-01-30 22:55:32 +01:00
let getAll = (page) => {
2020-06-01 14:39:22 +02:00
let numFiles = 1000
2020-02-03 17:28:26 +01:00
fetch(apiEndpoint+"/user/files?page="+page+"&limit="+numFiles).then(resp => {
if (!resp.ok) { Promise.reject("yo") }
return resp.json()
}).then(resp => {
2020-01-30 22:55:32 +01:00
for (let i in resp.files) {
2020-02-03 17:28:26 +01:00
this.directoryElement.addFile(
apiEndpoint+"/file/"+resp.files[i].id+"/thumbnail?width=32&height=32",
resp.files[i].name,
"/u/"+resp.files[i].id,
resp.files[i].mime_type,
resp.files[i].size,
formatDataVolume(resp.files[i].size, 4),
resp.files[i].date_upload,
)
}
2020-02-03 17:28:26 +01:00
this.directoryElement.renderFiles()
2020-02-03 17:28:26 +01:00
if (resp.files.length === numFiles) {
getAll(page+1)
2020-01-30 22:55:32 +01:00
} else {
2020-02-03 17:28:26 +01:00
// Less than the maximum number of results means we're done
// loading, we can remove the loading spinner
this.delSpinner()
2020-01-30 22:55:32 +01:00
}
}).catch((err) => {
2020-02-03 17:28:26 +01:00
this.delSpinner()
throw(err)
2020-01-30 22:55:32 +01:00
})
}
2020-02-03 17:28:26 +01:00
this.directoryElement.reset()
getAll(0)
2020-01-30 22:55:32 +01:00
}
FileManager.prototype.getUserLists = function() {
2020-02-03 17:28:26 +01:00
this.setSpinner()
2020-08-09 20:24:40 +02:00
this.directoryElement.reset()
2020-01-30 22:55:32 +01:00
2020-08-09 20:24:40 +02:00
fetch(apiEndpoint+"/user/lists").then(resp => {
if (!resp.ok) { Promise.reject("yo") }
return resp.json()
}).then(resp => {
for (let i in resp.lists) {
this.directoryElement.addFile(
apiEndpoint+"/list/"+resp.lists[i].id+"/thumbnail?width=32&height=32",
resp.lists[i].title,
"/l/"+resp.lists[i].id,
"list",
resp.lists[i].file_count,
resp.lists[i].file_count+" files",
resp.lists[i].date_created,
)
}
2020-08-09 20:24:40 +02:00
this.directoryElement.renderFiles()
this.delSpinner()
}).catch((err) => {
this.delSpinner()
throw(err)
})
}
2020-02-03 17:28:26 +01:00
FileManager.prototype.keyboardEvent = function(e) {
console.log("Pressed: "+e.keyCode)
2020-02-03 17:28:26 +01:00
// CTRL + F or "/" opens the search bar
if (e.ctrlKey && e.keyCode === 70 || !e.ctrlKey && e.keyCode === 191) {
e.preventDefault()
this.inputSearch.focus()
}
}