summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/calendar_plugin2.py112
-rw-r--r--scripts/plugin.py2
-rw-r--r--scripts/template.conf1
3 files changed, 115 insertions, 0 deletions
diff --git a/scripts/calendar_plugin2.py b/scripts/calendar_plugin2.py
new file mode 100644
index 0000000..7138655
--- /dev/null
+++ b/scripts/calendar_plugin2.py
@@ -0,0 +1,112 @@
+import template
+import plugin
+import string
+import os
+
+import locale
+from datetime import datetime,timedelta,date
+import jinja2
+import json
+
+class TabularCalendarPlugin:
+ def __init__(self):
+ calpath = os.path.join(template.path, 'calendar.json')
+
+ with open(calpath, 'r') as calfile:
+ events = json.load(calfile)
+ for event in events:
+ event['start'] = datetime.strptime(event['start'], '%Y-%m-%dT%H:%M:%S')
+ event['end'] = datetime.strptime(event['end'], '%Y-%m-%dT%H:%M:%S')
+ event['multiday'] = (event['end'] - event['start']) > timedelta(days=1)
+ events = sorted(events, key=lambda x:x['start'])
+
+ i = 0
+ for event in events:
+ event['id'] = i
+ i += 1
+
+ first = events[0]['start']
+ last = events[-1]['end']
+
+ calendar_start = first - timedelta(days=first.weekday())
+ if calendar_start.month != first.month:
+ calendar_start = date(first.year, first.month, 1)
+ else:
+ calendar_start = date(calendar_start.year,
+ calendar_start.month,
+ calendar_start.day)
+ calendar_end = last + timedelta(days=6 - last.weekday())
+ if calendar_end.month != last.month:
+ calendar_end = date(last.year,last.month,last.day)
+ while True:
+ next_end = calendar_end + timedelta(days=1)
+ if next_end.month != calendar_end.month:
+ break
+ calendar_end = next_end
+ else:
+ calendar_end = date(calendar_end.year,
+ calendar_end.month,
+ calendar_end.day)
+
+ months = []
+ cur_day = calendar_start
+ active_month = None
+ active_week = None
+ while cur_day <= calendar_end:
+ cur_month = cur_day.month
+ cur_week = cur_day.isocalendar()[1]
+
+ if cur_month != active_month:
+ months.append({
+ 'year': cur_day.year,
+ 'month': cur_day.month,
+ 'date': date(cur_day.year, cur_day.month, 1),
+ 'weeks': [[]]
+ })
+ active_week = cur_week
+ active_month = cur_month
+ if cur_week != active_week:
+ months[-1]['weeks'].append([])
+
+ week_list = months[-1]['weeks'][-1]
+ week_list.append({
+ 'year': cur_day.year,
+ 'month': cur_day.month,
+ 'day': cur_day.day,
+ 'weekday': cur_day.weekday(),
+ 'events': []
+ })
+ event_list = week_list[-1]['events']
+ day_start = datetime(cur_day.year, cur_day.month, cur_day.day)
+ day_end = day_start + timedelta(days=1)
+
+ for event in events:
+ if event['start'] >= day_end \
+ or event['end'] <= day_start:
+ continue
+ event_list.append(event)
+
+ cur_day += timedelta(days=1)
+
+ self.months = months
+ self.events = events
+ template_loader = jinja2.FileSystemLoader(searchpath=os.path.join(template.path))
+ self.template_env = jinja2.Environment(loader=template_loader)
+ locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
+
+ def _get_calendar(self):
+ return self.template_env.get_template('tabcalendar.j2').render({
+ 'months': self.months,
+ 'events': self.events,
+ }).encode('utf-8')
+
+ def process_content(self, page_content):
+ return_value = {}
+ for filename, content in page_content.iteritems():
+ t = string.Template(content)
+ return_value[filename] = t.safe_substitute(
+ tabcalendar = self._get_calendar(),
+ )
+ return return_value
+
+plugin.plugin_manager.register(TabularCalendarPlugin())
diff --git a/scripts/plugin.py b/scripts/plugin.py
index 08f0461..b6f21ff 100644
--- a/scripts/plugin.py
+++ b/scripts/plugin.py
@@ -1,3 +1,5 @@
+import sys
+
class PluginManager(object):
def __init__(self):
self.plugins = []
diff --git a/scripts/template.conf b/scripts/template.conf
index 105f94a..8e6192a 100644
--- a/scripts/template.conf
+++ b/scripts/template.conf
@@ -8,4 +8,5 @@ target = ../public/
[Plugins]
calendar_plugin=load
+calendar_plugin2=load
news=load