changeset 1508:ec3ad9abf9f9

pages (calendar): calendar page, first draft
author Goffi <goffi@goffi.org>
date Fri, 07 Apr 2023 15:20:40 +0200
parents ae5158f3c420
children 106bae41f5c8
files libervia/pages/calendar/_browser/__init__.py libervia/pages/calendar/page_meta.py libervia/server/constants.py
diffstat 3 files changed, 78 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libervia/pages/calendar/_browser/__init__.py	Fri Apr 07 15:20:40 2023 +0200
@@ -0,0 +1,25 @@
+from browser import document, window
+from browser.timer import set_interval
+
+calendar_start = window.calendar_start
+
+
+def update_current_time_line():
+    now = window.Date.new()
+
+    # Calculate the position of the current-time-line
+    now_ts = now.getTime() / 1000
+    minutes_passed = (now_ts - calendar_start) / 60
+
+    new_top = minutes_passed + 15
+
+    # Update the current-time-line position and make it visible
+    current_time_line = document["current-time-line"]
+    current_time_line.style.top = f"{new_top}px"
+    current_time_line.hidden = False
+
+# Initial update
+update_current_time_line()
+
+# Update the current-time-line every minute
+set_interval(update_current_time_line, 60 * 1000)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libervia/pages/calendar/page_meta.py	Fri Apr 07 15:20:40 2023 +0200
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+
+
+from sat.core.i18n import _
+from sat.core.log import getLogger
+from sat.tools.common import data_format
+from twisted.internet import defer
+import datetime
+import time
+from dateutil import tz
+
+from libervia.server.constants import Const as C
+
+log = getLogger(__name__)
+
+
+name = "calendar"
+access = C.PAGES_ACCESS_PROFILE
+template = "calendar/daily.html"
+
+
+async def prepare_render(self, request):
+    profile = self.getProfile(request)
+    template_data = request.template_data
+    # template_data["url_event_new"] = self.getSubPageURL(request, "event_new")
+    if profile is not None:
+        try:
+            events = data_format.deserialise(
+                await self.host.bridgeCall("eventsGet", "", "", [], "", profile),
+                type_check=list
+            )
+        except Exception as e:
+            log.warning(_("Can't get events list for {profile}: {reason}").format(
+                profile=profile, reason=e))
+        else:
+            template_data["events"] = events
+
+    tz_name = template_data["tz_name"] = time.tzname[0]
+    local_tz = tz.tzlocal()
+    today_local = datetime.datetime.now(local_tz).date()
+    calendar_start = template_data["calendar_start"] = datetime.datetime.combine(
+        today_local, datetime.time.min, tzinfo=local_tz
+    ).timestamp()
+    calendar_end = template_data["calendar_end"] = datetime.datetime.combine(
+        today_local, datetime.time.max, tzinfo=local_tz
+    ).timestamp()
+    self.exposeToScripts(
+        request,
+        calendar_start=calendar_start,
+        calendar_end=calendar_end,
+        tz_name=tz_name,
+    )
--- a/libervia/server/constants.py	Fri Apr 07 15:20:36 2023 +0200
+++ b/libervia/server/constants.py	Fri Apr 07 15:20:40 2023 +0200
@@ -91,6 +91,7 @@
         "forums",
         "photos",
         "files",
+        "calendar",
         "events",
         "lists",
         "merge-requests",