UI
This commit is contained in:
@@ -129,7 +129,19 @@
|
|||||||
|
|
||||||
const $ = (id) => document.getElementById(id);
|
const $ = (id) => document.getElementById(id);
|
||||||
const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel));
|
const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel));
|
||||||
const api = (path) => window.BT ? BT.api(path) : fetch(path).then((r) => r.json());
|
const api = async (path, options = {}) => {
|
||||||
|
if (window.BT) return BT.api(path, options);
|
||||||
|
const opts = {...options};
|
||||||
|
if (opts.body !== undefined && !(opts.body instanceof FormData)) {
|
||||||
|
opts.headers = {"Content-Type": "application/json", ...(opts.headers || {})};
|
||||||
|
}
|
||||||
|
const response = await fetch(path, opts);
|
||||||
|
const text = await response.text();
|
||||||
|
let payload = {};
|
||||||
|
try { payload = text ? JSON.parse(text) : {}; } catch (_) { payload = {raw: text}; }
|
||||||
|
if (!response.ok) throw new Error(payload.error || payload.detail || `HTTP ${response.status}`);
|
||||||
|
return payload;
|
||||||
|
};
|
||||||
const esc = (value) => window.BT ? BT.escape(value) : String(value ?? "").replace(/[&<>"']/g, (ch) => ({"&": "&", "<": "<", ">": ">", '"': """, "'": "'"}[ch]));
|
const esc = (value) => window.BT ? BT.escape(value) : String(value ?? "").replace(/[&<>"']/g, (ch) => ({"&": "&", "<": "<", ">": ">", '"': """, "'": "'"}[ch]));
|
||||||
const uid = (prefix) => `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
const uid = (prefix) => `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,14 @@ def sample_plan() -> dict:
|
|||||||
"warmup": {"items": ["Mobilisieren"]},
|
"warmup": {"items": ["Mobilisieren"]},
|
||||||
"cooldown": {"items": ["Atmen"]},
|
"cooldown": {"items": ["Atmen"]},
|
||||||
"exercises": [{"id": "item-1", "exercise_id": "exercise-push"}],
|
"exercises": [{"id": "item-1", "exercise_id": "exercise-push"}],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "day-2",
|
||||||
|
"num": 2,
|
||||||
|
"name": "Tag 2",
|
||||||
|
"warmup": {"items": []},
|
||||||
|
"cooldown": {"items": []},
|
||||||
|
"exercises": [{"id": "item-2", "exercise_id": "exercise-push"}],
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -79,6 +87,14 @@ def sample_plan() -> dict:
|
|||||||
"warmup": {"items": ["Mobilisieren"]},
|
"warmup": {"items": ["Mobilisieren"]},
|
||||||
"cooldown": {"items": ["Atmen"]},
|
"cooldown": {"items": ["Atmen"]},
|
||||||
"exercises": [{"id": "item-1", "exercise_id": "exercise-push"}],
|
"exercises": [{"id": "item-1", "exercise_id": "exercise-push"}],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "day-2",
|
||||||
|
"num": 2,
|
||||||
|
"name": "Tag 2",
|
||||||
|
"warmup": {"items": []},
|
||||||
|
"cooldown": {"items": []},
|
||||||
|
"exercises": [{"id": "item-2", "exercise_id": "exercise-push"}],
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -124,6 +140,12 @@ def test_current_progression_update_writes_config_and_draft(tmp_path: Path):
|
|||||||
payload = response.get_json()
|
payload = response.get_json()
|
||||||
exercise = payload["plan"]["config"]["exercises"][0]
|
exercise = payload["plan"]["config"]["exercises"][0]
|
||||||
assert exercise["current_progression_id"] == "progression-negative"
|
assert exercise["current_progression_id"] == "progression-negative"
|
||||||
|
day_progressions = [
|
||||||
|
item["exercise"]["current_progression"]["id"]
|
||||||
|
for day in payload["plan"]["config"]["days"]
|
||||||
|
for item in day["exercises"]
|
||||||
|
]
|
||||||
|
assert day_progressions == ["progression-negative", "progression-negative"]
|
||||||
|
|
||||||
saved = json.loads(plan_file.read_text(encoding="utf-8"))
|
saved = json.loads(plan_file.read_text(encoding="utf-8"))
|
||||||
assert saved["config"]["exercises"][0]["current_progression_id"] == "progression-negative"
|
assert saved["config"]["exercises"][0]["current_progression_id"] == "progression-negative"
|
||||||
|
|||||||
Reference in New Issue
Block a user