preparing file deletion
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -136,6 +136,7 @@ public class FileModule extends BaseHandler implements FileService {
|
|||||||
if (file.isDirectory()){
|
if (file.isDirectory()){
|
||||||
Map<String,Object> map = getDirectory(file);
|
Map<String,Object> map = getDirectory(file);
|
||||||
map.put("title",filename.replace("/company/"+cpId,company.name()));
|
map.put("title",filename.replace("/company/"+cpId,company.name()));
|
||||||
|
map.put("delete",true);
|
||||||
return sendContent(ex,map);
|
return sendContent(ex,map);
|
||||||
}
|
}
|
||||||
return getFile(ex, file);
|
return getFile(ex, file);
|
||||||
@@ -192,6 +193,7 @@ public class FileModule extends BaseHandler implements FileService {
|
|||||||
if (file.isDirectory()){
|
if (file.isDirectory()){
|
||||||
Map<String,Object> map = getDirectory(file);
|
Map<String,Object> map = getDirectory(file);
|
||||||
map.put("title",filename.replace("/project/"+prjId,project.name()));
|
map.put("title",filename.replace("/project/"+prjId,project.name()));
|
||||||
|
map.put("delete",true);
|
||||||
return sendContent(ex,map);
|
return sendContent(ex,map);
|
||||||
}
|
}
|
||||||
return getFile(ex, file);
|
return getFile(ex, file);
|
||||||
@@ -214,6 +216,7 @@ public class FileModule extends BaseHandler implements FileService {
|
|||||||
if (file.isDirectory()){
|
if (file.isDirectory()){
|
||||||
Map<String,Object> map = getDirectory(file);
|
Map<String,Object> map = getDirectory(file);
|
||||||
map.put("title",filename);
|
map.put("title",filename);
|
||||||
|
map.put("delete",true);
|
||||||
return sendContent(ex,map);
|
return sendContent(ex,map);
|
||||||
}
|
}
|
||||||
return getFile(ex, file);
|
return getFile(ex, file);
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
let files = $state();
|
let files = $state();
|
||||||
let parent = $state(false);
|
let parent = $state(false);
|
||||||
let form = $state(false);
|
let form = $state(false);
|
||||||
let path = $state(null)
|
let path = $state(null);
|
||||||
|
let delete_allowed = $state(false);
|
||||||
let available = $derived.by(isAvailable);
|
let available = $derived.by(isAvailable);
|
||||||
|
|
||||||
function isAvailable(){
|
function isAvailable(){
|
||||||
@@ -50,11 +50,33 @@
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function dropDir(p,name){
|
||||||
|
if (confirm(t('confirm_delete',{element:name})+"\n\n"+t('deletes_nested'))) dropElement(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function dropElement(url){
|
||||||
|
const res = await fetch(url,{
|
||||||
|
credentials: 'include',
|
||||||
|
method: 'DELETE'
|
||||||
|
});
|
||||||
|
if (res.ok) {
|
||||||
|
handleDirectory(res);
|
||||||
|
} else {
|
||||||
|
error(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dropFile(p,name){
|
||||||
|
if (confirm(t('confirm_delete',{element:name}))) dropElement(p);
|
||||||
|
}
|
||||||
|
|
||||||
async function handleDirectory(res){
|
async function handleDirectory(res){
|
||||||
let json = await res.json();
|
let json = await res.json();
|
||||||
if (json.dirs) children.dirs = json.dirs;
|
if (json.dirs) children.dirs = json.dirs;
|
||||||
if (json.files) children.files = json.files;
|
if (json.files) children.files = json.files;
|
||||||
if (json.title) children.title = json.title;
|
if (json.title) children.title = json.title;
|
||||||
|
delete_allowed = json.delete;
|
||||||
yikes();
|
yikes();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +158,9 @@
|
|||||||
<li class="dir">
|
<li class="dir">
|
||||||
<span class="symbol"></span>
|
<span class="symbol"></span>
|
||||||
<a href={'/files'+k} {onclick}>{v}</a>
|
<a href={'/files'+k} {onclick}>{v}</a>
|
||||||
<button class="symbol">x</button>
|
{#if delete_allowed}
|
||||||
|
<button class="symbol" onclick={e => dropDir(`/api/files${k}`,v)}></button>
|
||||||
|
{/if}
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
@@ -153,7 +177,10 @@
|
|||||||
{#each Object.entries(children.files) as [k,v]}
|
{#each Object.entries(children.files) as [k,v]}
|
||||||
<li class="file">
|
<li class="file">
|
||||||
<span class="symbol"></span>
|
<span class="symbol"></span>
|
||||||
<a href={'/api/files'+k} target="_blank">{v}</a>
|
<a href={`/api/files${k}`} target="_blank">{v}</a>
|
||||||
|
{#if delete_allowed}
|
||||||
|
<button class="symbol" onclick={e => dropFile(`/api/files${k}`,v)}></button>
|
||||||
|
{/if}
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
"delete": "löschen",
|
"delete": "löschen",
|
||||||
"delete_object": "{object} löschen",
|
"delete_object": "{object} löschen",
|
||||||
"DELETE_USERS": "Nutzer löschen",
|
"DELETE_USERS": "Nutzer löschen",
|
||||||
|
"deletes_nested": "Das wird auch alle enthaltenen Dateien löschen!",
|
||||||
"delivery_date": "Lieferdatum",
|
"delivery_date": "Lieferdatum",
|
||||||
"depends_on": "hängt ab von",
|
"depends_on": "hängt ab von",
|
||||||
"description": "Beschreibung",
|
"description": "Beschreibung",
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
"delete": "delete",
|
"delete": "delete",
|
||||||
"delete_object": "delete {object}",
|
"delete_object": "delete {object}",
|
||||||
"DELETE_USERS": "delete user",
|
"DELETE_USERS": "delete user",
|
||||||
|
"deletes_nested": "This will also delete all contained files!",
|
||||||
"delivery_date": "delivery date",
|
"delivery_date": "delivery date",
|
||||||
"depends_on": "depends on",
|
"depends_on": "depends on",
|
||||||
"description": "description",
|
"description": "description",
|
||||||
|
|||||||
Reference in New Issue
Block a user