Former-commit-id: 758fe342877af58e60b52d5cec1bb27e1f81ac96
This commit is contained in:
Henrique Dias
2016-12-31 15:29:36 +00:00
parent b6f42cc806
commit ae58591933
9 changed files with 566 additions and 425 deletions

View File

@@ -2,6 +2,7 @@
var tempID = "_fm_internal_temporary_id",
buttons = {},
templates = {},
selectedItems = [];
// Removes an element, if exists, from an array
@@ -95,7 +96,9 @@ function toWebDavURL(url) {
// Remove the last directory of an url
var removeLastDirectoryPartOf = function(url) {
var arr = url.split('/');
arr.pop();
if (arr.pop() === "") {
arr.pop();
}
return (arr.join('/'));
}
@@ -104,6 +107,29 @@ var removeLastDirectoryPartOf = function(url) {
* EVENTS *
* *
* * * * * * * * * * * * * * * */
function closePrompt(event) {
let prompt = document.querySelector('.prompt');
event.preventDefault();
document.querySelector('.overlay').classList.remove('active');
prompt.classList.remove('active');
setTimeout(() => {
prompt.remove();
}, 100);
}
function notImplemented(event) {
event.preventDefault();
let clone = document.importNode(templates.info.content, true);
clone.querySelector('h3').innerHTML = 'Not implemented';
clone.querySelector('p').innerHTML = "Sorry, but this feature wasn't implemented yet.";
document.querySelector('body').appendChild(clone)
document.querySelector('.overlay').classList.add('active');
document.querySelector('.prompt').classList.add('active');
}
// Prevent Default event
var preventDefault = function(event) {
@@ -138,6 +164,45 @@ function openEvent(event) {
return false;
}
function deleteSelected(single) {
return function(event) {
event.preventDefault();
Array.from(selectedItems).forEach(id => {
let request = new XMLHttpRequest(),
html = buttons.delete.changeToLoading(),
el, url;
if (single) {
url = window.location.pathname;
} else {
el = document.getElementById(id);
url = el.dataset.url;
}
request.open('DELETE', toWebDavURL(url));
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 204) {
if (single) {
window.location.pathname = removeLastDirectoryPartOf(window.location.pathname);
} else {
el.remove();
selectedItems.removeElement(id);
}
}
buttons.delete.changeToDone(request.status != 204, html);
}
}
request.send();
});
closePrompt(event);
}
}
// Handles the delete button event
function deleteEvent(event) {
let single = false;
@@ -147,36 +212,16 @@ function deleteEvent(event) {
single = true;
}
Array.from(selectedItems).forEach(id => {
let request = new XMLHttpRequest(),
html = buttons.delete.changeToLoading(),
el, url;
let clone = document.importNode(templates.question.content, true);
clone.querySelector('h3').innerHTML = 'Delete files';
clone.querySelector('p').innerHTML = `Are you sure you want to delete ${selectedItems.length} file(s)?`;
clone.querySelector('input').remove();
clone.querySelector('.ok').innerHTML = 'Delete';
clone.querySelector('form').addEventListener('submit', deleteSelected(single));
if (single) {
url = window.location.pathname;
} else {
el = document.getElementById(id);
url = el.dataset.url;
}
request.open('DELETE', toWebDavURL(url));
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 204) {
if (single) {
window.location.pathname = removeLastDirectoryPartOf(window.location.pathname);
} else {
el.remove();
selectedItems.removeElement(id);
}
}
buttons.delete.changeToDone(request.status != 204, html);
}
}
request.send();
});
document.querySelector('body').appendChild(clone)
document.querySelector('.overlay').classList.add('active');
document.querySelector('.prompt').classList.add('active');
return false;
}
@@ -320,10 +365,13 @@ document.addEventListener("DOMContentLoaded", function(event) {
buttons.logout.addEventListener("click", logoutEvent);
buttons.open.addEventListener("click", openEvent);
templates.question = document.querySelector('#question-template');
templates.info = document.querySelector('#info-template');
if (user.AllowEdit) {
buttons.delete.addEventListener("click", deleteEvent);
}
document.getElementById("breadcrumbs-button").addEventListener("click", event => {
event.currentTarget.classList.toggle("active");
document.getElementById("breadcrumbs").classList.toggle("active");