mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Nextcloud create folder and select it #569
This commit is contained in:
parent
b39305c8d8
commit
2ede940aa7
1 changed files with 32 additions and 16 deletions
|
|
@ -50,8 +50,7 @@
|
||||||
{
|
{
|
||||||
return davFetch(path, {
|
return davFetch(path, {
|
||||||
method: 'MKCOL'
|
method: 'MKCOL'
|
||||||
})
|
});
|
||||||
.then(response => response.status == 201);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function fetchFiles(xml, path)
|
function fetchFiles(xml, path)
|
||||||
|
|
@ -106,30 +105,28 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildTree(view, parent, items)
|
function buildTree(view, parent, items, path)
|
||||||
{
|
{
|
||||||
let empty = true;
|
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
items.forEach(item => {
|
items.forEach(item => {
|
||||||
if (item.isFile) {
|
if (item.isFile) {
|
||||||
if (view.files()) {
|
if (view.files()) {
|
||||||
empty = false;
|
|
||||||
// TODO show files
|
// TODO show files
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
empty = false;
|
|
||||||
let li = document.createElement('li'),
|
let li = document.createElement('li'),
|
||||||
details = document.createElement('details'),
|
details = document.createElement('details'),
|
||||||
summary = document.createElement('summary'),
|
summary = document.createElement('summary'),
|
||||||
ul = document.createElement('ul'),
|
ul = document.createElement('ul'),
|
||||||
btn = document.createElement('button');
|
btn = document.createElement('button');
|
||||||
li.item_name = item.name;
|
btn.item_name = item.name;
|
||||||
details.addEventListener('toggle', () => {
|
details.addEventListener('toggle', () => {
|
||||||
if (!ul.children.length) {
|
if (!ul.children.length) {
|
||||||
fetchFiles(propertyRequestBody, item.name).then(items => buildTree(view, ul, items));
|
fetchFiles(propertyRequestBody, item.name).then(items => buildTree(view, ul, items, item.name));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
summary.textContent = '📁 ' + item.name.replace(/^.*\/([^/]+)$/, '$1');
|
summary.textContent = '📁 ' + item.name.replace(/^.*\/([^/]+)$/, '$1');
|
||||||
|
btn.name = 'select';
|
||||||
btn.textContent = 'select';
|
btn.textContent = 'select';
|
||||||
btn.className = 'button-vue';
|
btn.className = 'button-vue';
|
||||||
btn.style.marginLeft = '1em';
|
btn.style.marginLeft = '1em';
|
||||||
|
|
@ -142,9 +139,17 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (empty) {
|
if (!view.files()) {
|
||||||
let li = document.createElement('li');
|
let li = document.createElement('li'),
|
||||||
li.append('(empty)');
|
input = document.createElement('input'),
|
||||||
|
btn = document.createElement('button');
|
||||||
|
btn.name = 'create';
|
||||||
|
btn.textContent = 'create & select';
|
||||||
|
btn.className = 'button-vue';
|
||||||
|
btn.item_name = path;
|
||||||
|
btn.input = input;
|
||||||
|
li.append(input);
|
||||||
|
li.append(btn);
|
||||||
parent.append(li);
|
parent.append(li);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -160,11 +165,22 @@
|
||||||
onBuild(dom) {
|
onBuild(dom) {
|
||||||
this.tree = dom.querySelector('#sm-nc-files-tree');
|
this.tree = dom.querySelector('#sm-nc-files-tree');
|
||||||
this.tree.addEventListener('click', event => {
|
this.tree.addEventListener('click', event => {
|
||||||
if (event.target.matches('button')) {
|
let el = event.target;
|
||||||
let li = event.target.closest('li');
|
if (el.matches('button')) {
|
||||||
if (li.item_name) {
|
if ('select' == el.name) {
|
||||||
this.select = li.item_name;
|
this.select = el.item_name;
|
||||||
this.close();
|
this.close();
|
||||||
|
} else if ('create' == el.name) {
|
||||||
|
let name = el.input.value.replace(/[|\\?*<":>+[]\/&\s]/g, '');
|
||||||
|
if (name.length) {
|
||||||
|
name = el.item_name + '/' + name;
|
||||||
|
createDirectory(name).then(response => {
|
||||||
|
if (response.status == 201) {
|
||||||
|
this.select = name;
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -178,7 +194,7 @@
|
||||||
|
|
||||||
this.tree.innerHTML = '';
|
this.tree.innerHTML = '';
|
||||||
fetchFiles(propertyRequestBody, '/').then(items => {
|
fetchFiles(propertyRequestBody, '/').then(items => {
|
||||||
buildTree(this, this.tree, items);
|
buildTree(this, this.tree, items, '/');
|
||||||
}).catch(err => console.error(err))
|
}).catch(err => console.error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue