From e4a9463307c56c13898ccaa8dc2d1826a13040f0 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 11 Mar 2026 18:26:33 +0100 Subject: [PATCH] implemented option to list tasks without rendering markdown Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/core/model/Task.java | 20 +++++++++++-------- frontend/src/routes/project/Kanban.svelte | 1 + .../srsoftware/umbrella/task/TaskModule.java | 15 +++++++++++--- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java index ebc04e99..f7ae2a8f 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java @@ -228,20 +228,19 @@ public class Task implements Mappable { return tags; } - @Override - public Map toMap() { + public Map toMap(boolean renderMarkdown){ var map = new HashMap(); var memberMap = new HashMap>(); if (members != null) for (var entry : members.entrySet()){ memberMap.put(entry.getKey(),entry.getValue().toMap()); } map.put(ID, id); - map.put(PROJECT_ID, projectId); - map.put(PARENT_TASK_ID, parentTaskId); - map.put(PRIORITY,priority); - map.put(NAME, name); - map.put(DESCRIPTION, mapMarkdown(description)); - map.put(STATUS, status); + map.put(PROJECT_ID, projectId); + map.put(PARENT_TASK_ID, parentTaskId); + map.put(PRIORITY,priority); + map.put(NAME, name); + map.put(DESCRIPTION, renderMarkdown ? mapMarkdown(description) : Map.of(SOURCE,description)); + map.put(STATUS, status); map.put(EST_TIME, estimatedTime); map.put(START_DATE,start); map.put(DUE_DATE,dueDate); @@ -254,6 +253,11 @@ public class Task implements Mappable { return map; } + @Override + public Map toMap() { + return toMap(true); + } + private int totalPrio() { if (status >= Status.COMPLETE.code()) return 0; // task is done, do no longer highlight int total = priority; diff --git a/frontend/src/routes/project/Kanban.svelte b/frontend/src/routes/project/Kanban.svelte index c43bda5d..f04f329d 100644 --- a/frontend/src/routes/project/Kanban.svelte +++ b/frontend/src/routes/project/Kanban.svelte @@ -178,6 +178,7 @@ const url = api('task/list'); selector.show_closed = true; selector.no_index = true; + selector.rendered = false; var resp = await post(url,selector); if (resp.ok){ var json = await resp.json(); diff --git a/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java b/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java index 12902760..6fffe48c 100644 --- a/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java +++ b/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java @@ -32,6 +32,7 @@ import de.srsoftware.tools.SessionToken; import de.srsoftware.umbrella.core.BaseHandler; import de.srsoftware.umbrella.core.ModuleRegistry; import de.srsoftware.umbrella.core.api.*; +import de.srsoftware.umbrella.core.constants.Field; import de.srsoftware.umbrella.core.constants.Text; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.model.*; @@ -271,6 +272,12 @@ public class TaskModule extends BaseHandler implements TaskService { return taskList; } + private Map> mapTasks(Map tasks, boolean render){ + if (render) return mapValues(tasks); + return tasks.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey,e -> e.getValue().toMap(false))); + } + private boolean newParentIsSubtask(Task task, long newParent) { var parent = taskDb.load(newParent); while (parent != null) { @@ -422,21 +429,23 @@ public class TaskModule extends BaseHandler implements TaskService { var noIndex = json.has(NO_INDEX) && json.get(NO_INDEX) instanceof Boolean bool ? bool : false; var projectId = json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number number ? number.longValue() : null; var parentTaskId = json.has(PARENT_TASK_ID) && json.get(PARENT_TASK_ID) instanceof Number number ? number.longValue() : null; + var markdown = !json.has(RENDERED) || !(json.get(RENDERED) instanceof Boolean render) || render; if (isSet(projectId)) { if (parentTaskId == null) { var list = taskDb.listRootTasks(projectId, user, showClosed); - return sendContent(ex, mapValues(list)); + return sendContent(ex, mapTasks(list,markdown)); } var projectTasks = taskDb.listProjectTasks(projectId, parentTaskId, noIndex); loadMembers(projectTasks.values()); var tags = tagService().getTags(TASK,projectTasks.keySet(),user); projectTasks = addTags(projectTasks, tags); - return sendContent(ex, mapValues(projectTasks)); + return sendContent(ex, mapTasks(projectTasks, markdown)); } if (isSet(parentTaskId)) return sendContent(ex, mapValues(taskDb.listChildrenOf(parentTaskId, user, showClosed))); var taskIds = json.has(IDS) && json.get(IDS) instanceof JSONArray ids ? ids.toList().stream().map(Object::toString).map(Long::parseLong).toList() : null; - if (isSet(taskIds)) return sendContent(ex, mapValues(taskDb.load(taskIds))); + var tasks = taskDb.load(taskIds); + if (isSet(taskIds)) return sendContent(ex, mapTasks(tasks,markdown)); return sendEmptyResponse(HTTP_NOT_IMPLEMENTED, ex); }