calendar
All repositories: gitoria
3.2 KB
// components/calendar.hl — `/`: the month view under the app header, with the user's private events (ticket calendar#2).// The faces below are what the month view calls (`emit server …`, the trailing `session` is always the server's since// hybriel #16): thin wrappers — the session and the window are checked here, the events live in lib/events.hl (the// answer: calendarView / settingsView, the six weeks on screen), the default reminders in lib/settings.hl.// Signed out: no session user → nothing is read or written.parent './main.hl'import MonthView from './month-view/month-view.hl'import { userIdOfSession } from '../lib/users.hl'import { saveEvent, deleteEvent, calendarView, settingsView } from '../lib/events.hl'import { saveDefaults } from '../lib/settings.hl'import { validWindow } from '../lib/events-helpers.hl'__title = 'Calendar'// the request's headers (hybriel #105, names lowercase): the month view writes its names in the request's language on// the first render (calendar#6)headers = nullString requestLanguage = headers != null && headers['accept-language'] != null ? headers['accept-language'] : ''View {calendarPage {MonthView { acceptLanguage = requestLanguage }}}on server calLoad(first, last, session) {let u = userIdOfSession(session)if (u == null) { return { error = 'log in with ident first' } }if (!validWindow(first, last)) { return { error = 'not a date' } }return calendarView(u, first, last)}on server calSave(fields, first, last, session) {let u = userIdOfSession(session)if (u == null) { return { error = 'log in with ident first' } }if (!validWindow(first, last)) { return { error = 'not a date' } }if (fields == null || hlTypeName(fields) != 'Hybrid') { return { error = 'the event must be an object' } }let r = saveEvent(u, fields)if (r.error != null) { return { error = r.error } }return calendarView(u, first, last)}on server calDelete(id, first, last, session) {let u = userIdOfSession(session)if (u == null) { return { error = 'log in with ident first' } }if (!validWindow(first, last)) { return { error = 'not a date' } }let r = deleteEvent(u, id)if (r.error != null) { return { error = r.error } }return calendarView(u, first, last)}// the calendar settings: the default reminders (rows)on server calSettingsLoad(session) {let u = userIdOfSession(session)if (u == null) { return { error = 'log in with ident first' } }return settingsView(u)}on server calSettingsSave(rows, session) {let u = userIdOfSession(session)if (u == null) { return { error = 'log in with ident first' } }let r = saveDefaults(u, rows)if (r.error != null) { return { error = r.error } }return settingsView(u)}// the same save as calSave, sent while the server cannot be reached: a statement-form emit the offline layer queues and// replays (an event that is also emitted in value form is never queued — hence its own name)on server calSaveQueued(fields, first, last, session) {let u = userIdOfSession(session)if (u == null) { return { error = 'log in with ident first' } }if (fields == null || hlTypeName(fields) != 'Hybrid') { return { error = 'the event must be an object' } }let r = saveEvent(u, fields)if (r.error != null) { return { error = r.error } }return { ok = true }}
Branches
- mainmain branch
Latest commits
- f5ce6b1dcalendar mission 001 (2/4): code order — topics, map, thin faces: lib/util.hl, lib/events(-helpers).hl (+calendarView/settingsView/soonOf), lib/settings.hl, lib/users.hl (+userOfLoginCode, tagOf), lib/api(-helpers).hl; project.hl = map; login route takes &req/&sessions (failed-login reason now kept); gates 78/0 + 18/0mre
- c6fbd011calendar mission 001 (1/4): code order — files moved: lib/events.hl, lib/users.hl, components/styles.hl (imports only); gates 78/0 + 18/0, live-data run identicalmre
- d6c59290calendar: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); gates 78/0 + 18/0mre
- 7bd0337ccalendar: Hybriel master 190aa11d (fc838894 GC correctness, #126 closure scopes, #127); gates 78/0 + 18/0mre
- ff41310ccalendar: Hybriel master 8efba065 (#126 memory, #48 lambda copy; audit: no & needed)mre
- 14ba08c7antcolony#40: mission references point to the moved missionsmre
- 99c73346antcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- 76edaa62calendar: Hybriel master ff51cf46 (re-vendor round, static workaround removed)mre
- 90a3fc2cdeploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- 6722b72ddeploy.sh: never send .git or .gitignore to Byrodinmre
- be099807State of 2026-09-27, before the move to gitoriamre