Loading portal/static/js/model/Agenda.mjs +8 −51 Changes for portal/static/js/model/Agenda.mjs: 8 added lines, 51 removed lines. Original line number Diff line number Diff line import { getKey } from "../account.mjs" export class Agenda { items message = "Wird geladen..." get url() { return "/api/v0/agendas/-/items" } get #headers() { return getKey() ? { Authorization: `Bearer ${getKey().secret}` } : {} } get changes() { return this.items.filter(it => it.taiga && it.taiga.status !== 42) } async fetch(force) { if (this.items && !force) return try { this.items = await m.request({ method: "GET", url: this.url, headers: this.#headers, }) } catch (e) { if (e.code === 401) { this.message = "Melde dich an Portal an, um die Tagesordnung anzuzeigen." } else { this.message = "Die Tagesordnung konnte nicht geladen werden." } } } async save() { try { if (this.changes.length === 0) return this.items = await m.request({ method: "PATCH", url: this.url, headers: this.#headers, body: this.changes, import { TaskList } from "./TaskList.mjs" class Agenda extends TaskList { constructor() { super("/api/v0/agendas/-/items", 42, { unauthorized: "Melde dich an Portal an, um die Tagesordnung anzuzeigen.", error: "Die Tagesordnung konnte nicht geladen werden.", }) } catch (e) { // TODO Handle error better alert("Beim Speichern ist ein Fehler aufgetreten.") throw e } } } Loading portal/static/js/model/TaskList.mjs 0 → 100644 +58 −0 Changes for portal/static/js/model/TaskList.mjs: 58 added lines, 0 removed lines. Original line number Diff line number Diff line import { getKey } from "../account.mjs" export class TaskList { items message = "Wird geladen..." constructor(url, status, messages) { this.url = url this.status = status this.unauthorizedMessage = messages.unauthorized this.errorMessage = messages.error } get #headers() { return getKey() ? { Authorization: `Bearer ${getKey().secret}` } : {} } get changes() { return (this.items ?? []).filter( it => it.taiga && it.taiga.status !== this.status, ) } async fetch(force) { if (this.items && !force) return try { this.items = await m.request({ method: "GET", url: this.url, headers: this.#headers, }) } catch (e) { if (e.code === 401) { this.message = this.unauthorizedMessage } else { this.message = this.errorMessage } } } async save() { if (this.changes.length === 0) return try { this.items = await m.request({ method: "PATCH", url: this.url, headers: this.#headers, body: this.changes, }) } catch (e) { // TODO Handle error better alert("Beim Speichern ist ein Fehler aufgetreten.") throw e } } } portal/static/js/model/Todo.mjs 0 → 100644 +13 −0 Changes for portal/static/js/model/Todo.mjs: 13 added lines, 0 removed lines. Original line number Diff line number Diff line import { TaskList } from "./TaskList.mjs" class Todo extends TaskList { constructor() { super("/api/v0/todos/-/items", 41, { unauthorized: "Melde dich an Portal an, um die Todos anzuzeigen.", error: "Die Todos konnten nicht geladen werden.", }) } } // Singleton export const todo = new Todo() Loading
portal/static/js/model/Agenda.mjs +8 −51 Changes for portal/static/js/model/Agenda.mjs: 8 added lines, 51 removed lines. Original line number Diff line number Diff line import { getKey } from "../account.mjs" export class Agenda { items message = "Wird geladen..." get url() { return "/api/v0/agendas/-/items" } get #headers() { return getKey() ? { Authorization: `Bearer ${getKey().secret}` } : {} } get changes() { return this.items.filter(it => it.taiga && it.taiga.status !== 42) } async fetch(force) { if (this.items && !force) return try { this.items = await m.request({ method: "GET", url: this.url, headers: this.#headers, }) } catch (e) { if (e.code === 401) { this.message = "Melde dich an Portal an, um die Tagesordnung anzuzeigen." } else { this.message = "Die Tagesordnung konnte nicht geladen werden." } } } async save() { try { if (this.changes.length === 0) return this.items = await m.request({ method: "PATCH", url: this.url, headers: this.#headers, body: this.changes, import { TaskList } from "./TaskList.mjs" class Agenda extends TaskList { constructor() { super("/api/v0/agendas/-/items", 42, { unauthorized: "Melde dich an Portal an, um die Tagesordnung anzuzeigen.", error: "Die Tagesordnung konnte nicht geladen werden.", }) } catch (e) { // TODO Handle error better alert("Beim Speichern ist ein Fehler aufgetreten.") throw e } } } Loading
portal/static/js/model/TaskList.mjs 0 → 100644 +58 −0 Changes for portal/static/js/model/TaskList.mjs: 58 added lines, 0 removed lines. Original line number Diff line number Diff line import { getKey } from "../account.mjs" export class TaskList { items message = "Wird geladen..." constructor(url, status, messages) { this.url = url this.status = status this.unauthorizedMessage = messages.unauthorized this.errorMessage = messages.error } get #headers() { return getKey() ? { Authorization: `Bearer ${getKey().secret}` } : {} } get changes() { return (this.items ?? []).filter( it => it.taiga && it.taiga.status !== this.status, ) } async fetch(force) { if (this.items && !force) return try { this.items = await m.request({ method: "GET", url: this.url, headers: this.#headers, }) } catch (e) { if (e.code === 401) { this.message = this.unauthorizedMessage } else { this.message = this.errorMessage } } } async save() { if (this.changes.length === 0) return try { this.items = await m.request({ method: "PATCH", url: this.url, headers: this.#headers, body: this.changes, }) } catch (e) { // TODO Handle error better alert("Beim Speichern ist ein Fehler aufgetreten.") throw e } } }
portal/static/js/model/Todo.mjs 0 → 100644 +13 −0 Changes for portal/static/js/model/Todo.mjs: 13 added lines, 0 removed lines. Original line number Diff line number Diff line import { TaskList } from "./TaskList.mjs" class Todo extends TaskList { constructor() { super("/api/v0/todos/-/items", 41, { unauthorized: "Melde dich an Portal an, um die Todos anzuzeigen.", error: "Die Todos konnten nicht geladen werden.", }) } } // Singleton export const todo = new Todo()