gitoriaLog in with ident

calendar

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit76edaa6276edaa62calendar: Hybriel master ff51cf46 (re-vendor round, static workaround removed)mre76edaa62/components/calendar.hl

3.9 KB

  1. // calendar.hl — `/`: the month view under the app header, with the user's private events (ticket calendar#2).
  2. // The events live in events.hl; the faces below are what the month view calls (`emit server …`, the trailing
  3. // `session` is always the server's since hybriel #16). Each answers with the events of the six weeks on screen.
  4. // Signed out: no session user → nothing is read or written.
  5. parent './main.hl'
  6. import MonthView from './month-view/month-view.hl'
  7. import { userIdOfSession } from '../users.hl'
  8. import { eventsBetween, saveEvent, deleteEvent, defaultsOf, saveDefaults, upcoming } from '../events.hl'
  9. import { describe, shift } from './month-view/reminders.hl'
  10. import { serverToday } from './month-view/clock.hl'
  11. import { isDate } from './month-view/dates.hl'
  12. __title = 'Calendar'
  13. // the request's headers (hybriel #105, names lowercase): the month view writes its names in the request's language on
  14. // the first render (calendar#6)
  15. headers = null
  16. String requestLanguage = headers != null && headers['accept-language'] != null ? headers['accept-language'] : ''
  17. View {
  18. calendarPage {
  19. MonthView { acceptLanguage = requestLanguage }
  20. }
  21. }
  22. // the window is two dates the page shows; anything else is refused
  23. validWindow = (first, last) => { return isDate(first) && isDate(last) }
  24. on server calLoad(first, last, session) {
  25. let u = userIdOfSession(session)
  26. if (u == null) { return { error = 'log in with ident first' } }
  27. if (!validWindow(first, last)) { return { error = 'not a date' } }
  28. return { events = eventsBetween(u, first, last) defaults = describe(defaultsOf(u)) soon = soonOf(u) defaultRows = defaultsOf(u) }
  29. }
  30. on server calSave(fields, first, last, session) {
  31. let u = userIdOfSession(session)
  32. if (u == null) { return { error = 'log in with ident first' } }
  33. if (!validWindow(first, last)) { return { error = 'not a date' } }
  34. if (fields == null || hlTypeName(fields) != 'Hybrid') { return { error = 'the event must be an object' } }
  35. let r = saveEvent(u, fields)
  36. if (r.error != null) { return { error = r.error } }
  37. return { events = eventsBetween(u, first, last) defaults = describe(defaultsOf(u)) soon = soonOf(u) defaultRows = defaultsOf(u) }
  38. }
  39. on server calDelete(id, first, last, session) {
  40. let u = userIdOfSession(session)
  41. if (u == null) { return { error = 'log in with ident first' } }
  42. if (!validWindow(first, last)) { return { error = 'not a date' } }
  43. let r = deleteEvent(u, id)
  44. if (r.error != null) { return { error = r.error } }
  45. return { events = eventsBetween(u, first, last) defaults = describe(defaultsOf(u)) soon = soonOf(u) defaultRows = defaultsOf(u) }
  46. }
  47. // the events with the reminders that apply, from two days back to nine days ahead (what the browser plans its notifications from)
  48. soonOf = (u) => {
  49. let t = serverToday()
  50. return upcoming(u, shift(t, -2), shift(t, 9))
  51. }
  52. // the calendar settings: the default reminders (rows)
  53. on server calSettingsLoad(session) {
  54. let u = userIdOfSession(session)
  55. if (u == null) { return { error = 'log in with ident first' } }
  56. return { rows = defaultsOf(u) defaults = describe(defaultsOf(u)) soon = soonOf(u) defaultRows = defaultsOf(u) }
  57. }
  58. on server calSettingsSave(rows, session) {
  59. let u = userIdOfSession(session)
  60. if (u == null) { return { error = 'log in with ident first' } }
  61. let r = saveDefaults(u, rows)
  62. if (r.error != null) { return { error = r.error } }
  63. return { rows = defaultsOf(u) defaults = describe(defaultsOf(u)) soon = soonOf(u) defaultRows = defaultsOf(u) }
  64. }
  65. // the same save as calSave, sent while the server cannot be reached: a statement-form emit the offline layer queues and
  66. // replays (an event that is also emitted in value form is never queued — hence its own name)
  67. on server calSaveQueued(fields, first, last, session) {
  68. let u = userIdOfSession(session)
  69. if (u == null) { return { error = 'log in with ident first' } }
  70. if (fields == null || hlTypeName(fields) != 'Hybrid') { return { error = 'the event must be an object' } }
  71. let r = saveEvent(u, fields)
  72. if (r.error != null) { return { error = r.error } }
  73. return { ok = true }
  74. }

Branches

Latest commits

  • 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