diff --git a/public/app.js b/public/app.js
index d58ea0b..c810c51 100644
--- a/public/app.js
+++ b/public/app.js
@@ -130,10 +130,13 @@ function boardView() {
OpenClaw ${connected ? "verbunden" : "pruefen"}
-
-
+
+
${states.map((name) => column(name)).join("")}
`;
@@ -142,8 +145,8 @@ function boardView() {
function column(name) {
const tasks = state.tasks.filter((task) => task.state === name);
return `
-
- ${name}${tasks.length}
+
+
${tasks.map(taskCard).join("") || `
Keine Aufgaben
`}
@@ -152,24 +155,22 @@ function column(name) {
}
function taskCard(task) {
- const index = states.indexOf(task.state);
return `
-
+
- ${escapeHtml(task.priority)}
- ${escapeHtml(task.assignee || "luna")}
+ ${escapeHtml(task.priority)}
+
${escapeHtml(task.title)}
${task.detail ? `
${escapeHtml(task.detail)}
` : ""}
+
`;
@@ -232,18 +233,31 @@ function bindBoard() {
dialogMeta.textContent = `Status ${task.state} · Aktualisiert ${formatDate(task.updatedAt)} · Erstellt ${formatDate(task.createdAt)}`;
dialog.showModal();
};
- document.querySelector("#new-task").addEventListener("click", () => {
- resetDialog();
- dialog.showModal();
+ document.querySelector("#quick-create").addEventListener("submit", async (event) => {
+ event.preventDefault();
+ const formData = new FormData(event.currentTarget);
+ const title = String(formData.get("title") || "").trim();
+ if (!title) return;
+ await api("/api/tasks", {
+ method: "POST",
+ body: JSON.stringify({
+ title,
+ state: "Backlog",
+ priority: "Normal",
+ assignee: state.settings?.defaultAssignee || "luna"
+ })
+ });
+ await loadTasks();
+ renderApp();
});
document.querySelector("#cancel-task").addEventListener("click", () => dialog.close());
dialog.addEventListener("click", (event) => {
if (event.target === dialog) dialog.close();
});
- document.querySelectorAll("[data-move]").forEach((button) => {
- button.addEventListener("click", async (event) => {
+ document.querySelectorAll("[data-status-task]").forEach((select) => {
+ select.addEventListener("change", async (event) => {
event.stopPropagation();
- await api(`/api/tasks/${button.dataset.move}`, { method: "PATCH", body: JSON.stringify({ state: button.dataset.state }) });
+ await api(`/api/tasks/${select.dataset.statusTask}`, { method: "PATCH", body: JSON.stringify({ state: select.value }) });
await loadTasks();
renderApp();
});
diff --git a/public/index.html b/public/index.html
index 8659a36..0b5b62c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -4,10 +4,10 @@
Maxi Mission Control
-
+
-
+