Initial commit, basic pages and sessions.

This commit is contained in:
2023-05-29 00:54:17 +02:00
commit bc9fec207b
57 changed files with 15967 additions and 0 deletions

86
assets/js/api.js Normal file
View File

@@ -0,0 +1,86 @@
const postHeaders = {
mode: 'cors',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json',
},
};
function getQuery(data) {
if (!data) {
return '';
}
return `?${new URLSearchParams(data).toString()}`;
}
export async function get(path, query = {}) {
const res = await fetch(`${path}${getQuery(query)}`);
const body = await res.json();
if (res.ok) {
return body;
}
throw new Error(body.message);
}
export async function post(path, data, { query } = {}) {
const res = await fetch(`${path}${getQuery(query)}`, {
method: 'POST',
body: JSON.stringify(data),
...postHeaders,
});
if (res.status === 204) {
return null;
}
const body = await res.json();
if (res.ok) {
return body;
}
throw new Error(body.message);
}
export async function patch(path, data, { query } = {}) {
const res = await fetch(`${path}${getQuery(query)}`, {
method: 'PATCH',
body: JSON.stringify(data),
...postHeaders,
});
if (res.status === 204) {
return null;
}
const body = await res.json();
if (res.ok) {
return body;
}
throw new Error(body.message);
}
export async function del(path, { data, query } = {}) {
const res = await fetch(`${path}${getQuery(query)}`, {
method: 'DELETE',
body: JSON.stringify(data),
...postHeaders,
});
if (res.status === 204) {
return null;
}
const body = await res.json();
if (res.ok) {
return body;
}
throw new Error(body.message);
}

4
assets/js/navigate.js Normal file
View File

@@ -0,0 +1,4 @@
// centralize navigation to simplify switching between client and server routing
export default function navigate(path) {
window.location.href = path;
}