Make a noscript fallback version of the schedule.

This commit is contained in:
Vidir Valberg Gudmundsson 2017-07-23 11:31:22 +02:00
parent d77564064f
commit 3411aee34a
3 changed files with 34 additions and 42 deletions

View file

@ -132,6 +132,11 @@ urlpatterns = [
ScheduleView.as_view(), ScheduleView.as_view(),
name='schedule_index' name='schedule_index'
), ),
url(
r'^noscript/$',
NoScriptScheduleView.as_view(),
name='noscript_schedule_index'
),
url( url(
r'^ics/', ICSView.as_view(), name="ics_view" r'^ics/', ICSView.as_view(), name="ics_view"
), ),

View file

@ -3,8 +3,27 @@
{% load commonmark %} {% load commonmark %}
{% load staticfiles %} {% load staticfiles %}
{% block extra_head %}
<noscript>
<meta http-equiv="refresh" content="3; url={% url "noscript_schedule_index" camp_slug=camp.slug %}" />
</noscript>
{% endblock %}
{% block program_content %} {% block program_content %}
<noscript>
<div class="row">
<p>
No javascript? Don't worry, we have a HTML only version of the schedule! Redirecting you there now.
</p>
<p>
<a href="{% url "noscript_schedule_index" camp_slug=camp.slug %}">
Click here if you are not redirected.
</a>
</p>
</div>
</noscript>
<div id="schedule-container"></div> <div id="schedule-container"></div>
<script src="{% static "js/elm_based_schedule.js" %}"></script> <script src="{% static "js/elm_based_schedule.js" %}"></script>

View file

@ -263,54 +263,22 @@ class EventDetailView(CampViewMixin, DetailView):
################## schedule ############################################# ################## schedule #############################################
class NoScriptScheduleView(CampViewMixin, TemplateView):
template_name = "noscript_schedule_view.html"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
context['eventinstances'] = models.EventInstance.objects.filter(event__camp=self.camp).order_by('when')
return context
class ScheduleView(CampViewMixin, TemplateView): class ScheduleView(CampViewMixin, TemplateView):
template_name = 'schedule_overview.html' template_name = 'schedule_overview.html'
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):
context = super(ScheduleView, self).get_context_data(**kwargs) context = super(ScheduleView, self).get_context_data(**kwargs)
# Do stuff if we are dealing with a day schedule
if 'day' in kwargs:
when = datetime.datetime(year=int(self.kwargs['year']), month=int(self.kwargs['month']), day=int(self.kwargs['day']))
eventinstances = models.EventInstance.objects.filter(event__in=self.camp.events.all())
skip = []
for ei in eventinstances:
if ei.schedule_date != when.date():
skip.append(ei.id)
else:
if 'type' in self.request.GET:
eventtype = models.EventType.objects.get(
slug=self.request.GET['type']
)
if ei.event.event_type != eventtype:
skip.append(ei.id)
eventinstances = eventinstances.exclude(id__in=skip).order_by('event__event_type')
if 'location' in self.request.GET:
eventlocation = models.EventLocation.objects.get(
camp=self.camp,
slug=self.request.GET['location']
)
eventinstances = eventinstances.filter(location=eventlocation)
context['eventinstances'] = eventinstances
start = when + datetime.timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS)
timeslots = []
# calculate how many timeslots we have in the schedule based on the lenght of the timeslots in minutes,
# and the number of minutes in 24 hours
for i in range(0,int((24*60)/settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES)):
timeslot = start + datetime.timedelta(minutes=i*settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES)
timeslots.append(timeslot)
context['timeslots'] = timeslots
# include the components to make the urls
context['urlyear'] = self.kwargs['year']
context['urlmonth'] = self.kwargs['month']
context['urlday'] = self.kwargs['day']
context['schedule_timeslot_length_minutes'] = settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES;
context['schedule_midnight_offset_hours'] = settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS; context['schedule_midnight_offset_hours'] = settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS;
return context return context