close #2
parent
eeeb1ce0fd
commit
8af33dec47
|
@ -200,84 +200,83 @@ var renameEvent = function(event) {
|
||||||
location.refresh();
|
location.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
Array.from(selectedItems).forEach(link => {
|
let link = selectedItems[0];
|
||||||
let item = document.getElementById(link);
|
let item = document.getElementById(link);
|
||||||
let span = item.getElementsByTagName('span')[0];
|
let span = item.getElementsByTagName('span')[0];
|
||||||
let name = span.innerHTML;
|
let name = span.innerHTML;
|
||||||
|
|
||||||
item.addEventListener('click', preventDefault);
|
item.addEventListener('click', preventDefault);
|
||||||
item.removeEventListener('click', itemClickEvent);
|
item.removeEventListener('click', itemClickEvent);
|
||||||
span.setAttribute('contenteditable', 'true');
|
span.setAttribute('contenteditable', 'true');
|
||||||
span.focus();
|
span.focus();
|
||||||
|
|
||||||
let keyDownEvent = (event) => {
|
let keyDownEvent = (event) => {
|
||||||
if (event.keyCode == 13) {
|
if (event.keyCode == 13) {
|
||||||
let newName = span.innerHTML;
|
let newName = span.innerHTML;
|
||||||
let newLink = toWebDavURL(link).replace(name, newName)
|
let newLink = toWebDavURL(link).replace(name, newName)
|
||||||
let html = document.getElementById('rename').changeToLoading();
|
let html = document.getElementById('rename').changeToLoading();
|
||||||
let request = new XMLHttpRequest();
|
let request = new XMLHttpRequest();
|
||||||
request.open('MOVE', toWebDavURL(link));
|
request.open('MOVE', toWebDavURL(link));
|
||||||
request.setRequestHeader('Destination', newLink);
|
request.setRequestHeader('Destination', newLink);
|
||||||
|
|
||||||
request.send();
|
request.send();
|
||||||
request.onreadystatechange = function() {
|
request.onreadystatechange = function() {
|
||||||
// TODO: redirect if it's moved to another folder
|
// TODO: redirect if it's moved to another folder
|
||||||
|
|
||||||
if (request.readyState == 4) {
|
if (request.readyState == 4) {
|
||||||
if (request.status != 201 && request.status != 204) {
|
if (request.status != 201 && request.status != 204) {
|
||||||
span.innerHTML = name;
|
span.innerHTML = name;
|
||||||
} else {
|
} else {
|
||||||
|
let newLink = encodeURI(link.replace(name, newName));
|
||||||
|
console.log(request.body)
|
||||||
|
reloadListing(() => {
|
||||||
let newLink = encodeURI(link.replace(name, newName));
|
let newLink = encodeURI(link.replace(name, newName));
|
||||||
console.log(request.body)
|
selectedItems = [newLink];
|
||||||
reloadListing(() => {
|
document.getElementById(newLink).classList.add("selected")
|
||||||
let newLink = encodeURI(link.replace(name, newName));
|
var event = new CustomEvent('changed-selected');
|
||||||
selectedItems = [newLink];
|
document.dispatchEvent(event);
|
||||||
document.getElementById(newLink).classList.add("selected")
|
});
|
||||||
var event = new CustomEvent('changed-selected');
|
|
||||||
document.dispatchEvent(event);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
document.getElementById('rename').changeToDone((request.status != 201 && request.status != 204), html);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
document.getElementById('rename').changeToDone((request.status != 201 && request.status != 204), html);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.KeyCode == 27) {
|
|
||||||
span.innerHTML = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.keyCode == 13 || event.keyCode == 27) {
|
|
||||||
span.setAttribute('contenteditable', 'false');
|
|
||||||
span.removeEventListener('keydown', keyDownEvent);
|
|
||||||
item.removeEventListener('click', preventDefault);
|
|
||||||
item.addEventListener('click', itemClickEvent);
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
span.addEventListener('keydown', keyDownEvent);
|
if (event.KeyCode == 27) {
|
||||||
span.addEventListener('blur', (event) => {
|
|
||||||
span.innerHTML = name;
|
span.innerHTML = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.keyCode == 13 || event.keyCode == 27) {
|
||||||
span.setAttribute('contenteditable', 'false');
|
span.setAttribute('contenteditable', 'false');
|
||||||
span.removeEventListener('keydown', keyDownEvent);
|
span.removeEventListener('keydown', keyDownEvent);
|
||||||
item.removeEventListener('click', preventDefault);
|
item.removeEventListener('click', preventDefault);
|
||||||
});
|
item.addEventListener('click', itemClickEvent);
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.addEventListener('keydown', keyDownEvent);
|
||||||
|
span.addEventListener('blur', (event) => {
|
||||||
|
span.innerHTML = name;
|
||||||
|
span.setAttribute('contenteditable', 'false');
|
||||||
|
span.removeEventListener('keydown', keyDownEvent);
|
||||||
|
item.removeEventListener('click', preventDefault);
|
||||||
});
|
});
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Upload files
|
// Upload files
|
||||||
var handleFiles = function(files) {
|
var handleFiles = function(files, base) {
|
||||||
let button = document.getElementById("upload");
|
let button = document.getElementById("upload");
|
||||||
let html = button.changeToLoading();
|
let html = button.changeToLoading();
|
||||||
|
|
||||||
for (let i = 0; i < files.length; i++) {
|
for (let i = 0; i < files.length; i++) {
|
||||||
let request = new XMLHttpRequest();
|
let request = new XMLHttpRequest();
|
||||||
request.open('PUT', toWebDavURL(window.location.pathname + files[i].name));
|
request.open('PUT', toWebDavURL(window.location.pathname + base + files[i].name));
|
||||||
|
|
||||||
request.send(files[i]);
|
request.send(files[i]);
|
||||||
request.onreadystatechange = function() {
|
request.onreadystatechange = function() {
|
||||||
|
@ -602,13 +601,13 @@ document.addEventListener('listing', event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
document.addEventListener("dragover", (event) => {
|
document.addEventListener("dragenter", (event) => {
|
||||||
Array.from(items).forEach(file => {
|
Array.from(items).forEach(file => {
|
||||||
file.style.opacity = 0.5;
|
file.style.opacity = 0.5;
|
||||||
});
|
});
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
document.addEventListener("dragleave", (event) => {
|
document.addEventListener("dragend", (event) => {
|
||||||
Array.from(items).forEach(file => {
|
Array.from(items).forEach(file => {
|
||||||
file.style.opacity = 1;
|
file.style.opacity = 1;
|
||||||
});
|
});
|
||||||
|
@ -619,11 +618,88 @@ document.addEventListener('listing', event => {
|
||||||
var dt = event.dataTransfer;
|
var dt = event.dataTransfer;
|
||||||
var files = dt.files;
|
var files = dt.files;
|
||||||
|
|
||||||
handleFiles(files);
|
let el = event.target;
|
||||||
|
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
if (el != null && !el.classList.contains('item')) {
|
||||||
|
el = el.parentElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (files.length > 0) {
|
||||||
|
if (el != null && el.classList.contains('item') && el.dataset.dir == "true") {
|
||||||
|
handleFiles(files, el.querySelector('.name').innerHTML + "/");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleFiles(files, "");
|
||||||
|
} else {
|
||||||
|
Array.from(items).forEach(file => {
|
||||||
|
file.style.opacity = 1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}, false);
|
}, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function itemDragStart(event) {
|
||||||
|
let el = event.target;
|
||||||
|
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
if (!el.classList.contains('item')) {
|
||||||
|
el = el.parentElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event.dataTransfer.setData("id", el.id);
|
||||||
|
event.dataTransfer.setData("name", el.querySelector('.name').innerHTML);
|
||||||
|
}
|
||||||
|
|
||||||
|
function itemDragOver(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
let el = event.target;
|
||||||
|
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
if (!el.classList.contains('item')) {
|
||||||
|
el = el.parentElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
el.style.opacity = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function itemDrop(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
let el = e.target, id = e.dataTransfer.getData("id"), name = e.dataTransfer.getData("name");
|
||||||
|
if (id == "" || name == "") return;
|
||||||
|
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
if (!el.classList.contains('item')) {
|
||||||
|
el = el.parentElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (el.id === id) return;
|
||||||
|
|
||||||
|
let oldLink = toWebDavURL(id);
|
||||||
|
let newLink = toWebDavURL(el.id + name);
|
||||||
|
|
||||||
|
let request = new XMLHttpRequest();
|
||||||
|
request.open('MOVE', oldLink);
|
||||||
|
request.setRequestHeader('Destination', newLink);
|
||||||
|
request.send();
|
||||||
|
request.onreadystatechange = function() {
|
||||||
|
if (request.readyState == 4) {
|
||||||
|
if (request.status == 201 || request.status == 204) {
|
||||||
|
reloadListing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * *
|
||||||
* *
|
* *
|
||||||
* EDITOR SPECIFIC FUNCTIONS *
|
* EDITOR SPECIFIC FUNCTIONS *
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="container" id="listing">
|
<div class="container" id="listing">
|
||||||
{{- range .Items}}
|
{{- range .Items}}
|
||||||
{{ if .UserAllowed }}
|
{{ if .UserAllowed }}
|
||||||
<div class="item" data-dir="{{- if .IsDir}}true{{ else }}false{{ end }}" id="{{.URL}}">
|
<div ondragstart="itemDragStart(event)" {{ if .IsDir}}ondragover="itemDragOver(event)" ondrop="itemDrop(event)"{{ end }} draggable="true" class="item" data-dir="{{- if .IsDir}}true{{ else }}false{{ end }}" id="{{.URL}}">
|
||||||
<div>
|
<div>
|
||||||
<a href="{{.URL}}">
|
<a href="{{.URL}}">
|
||||||
{{- if .IsDir}}
|
{{- if .IsDir}}
|
||||||
|
|
Loading…
Reference in New Issue