Commit 02075d37 authored by Simon Daron's avatar Simon Daron
Browse files

Merge branch 'master' of ssh://git.domainepublic.net/panikweb

parents 2aabe7ef 4853b9ea
from django import template
register = template.Library()
@register.filter(name='zip')
def zip_lists(a, b):
return zip(a, b)
......@@ -125,6 +125,7 @@ INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.admindocs',
'panikweb_templates',
'panikweb.paniktags',
'jquery',
'ckeditor',
'emissions',
......
import datetime
import math
from django.views.generic.base import TemplateView
......@@ -19,6 +20,120 @@ class ProgramView(TemplateView):
program = ProgramView.as_view()
class TimeCell:
emissions = None
nonstop = None
w = 1
h = 1
def __init__(self, i, j):
self.x = i
self.y = j
self.emissions = []
def add_emission(self, emission):
self.emissions.append(emission)
def __unicode__(self):
if self.emissions:
return ', '.join([x.title for x in self.emissions])
else:
return self.nonstop
def __eq__(self, other):
return (unicode(self) == unicode(other))
class Grid(TemplateView):
template_name = 'grid.html'
def get_context_data(self, **kwargs):
context = super(Grid, self).get_context_data(**kwargs)
schedules = Schedule.objects.all().order_by('datetime')
nb_lines = 2 * 24 # the cells are half hours
grid = []
times = ['%02d:%02d' % (x/2, x%2*30) for x in range(nb_lines)]
# grid starts at 5am
times = times[2*5:] + times[:2*5]
nonstops = [[0, 2, 'Biodiversite'],
[2, 5, 'Reveries'],
[5, 7.5, 'La Panique'],
[7.5, 10, 'Matin tranquille'],
[10, 12, 'Up Beat Tempo'],
[12, 13, 'L\'heure de pointe'],
[13, 16, 'Le Mange Disque'],
[16, 19, 'Hop Bop and co'],
[19, 22, 'Acouphene'],
[22, 24, 'Biodiversite']
]
for i in range(nb_lines):
grid.append([])
for j in range(7):
grid[-1].append(TimeCell(i, j))
nonstop = [x for x in nonstops if i>=x[0]*2 and i<x[1]*2][0]
for time_cell in grid[-1]:
time_cell.nonstop = nonstop[2]
for schedule in Schedule.objects.all():
row_start = schedule.datetime.hour * 2 + \
int(math.ceil(schedule.datetime.minute / 30))
day_no = schedule.get_weekday()
for step in range(int(math.ceil(schedule.emission.duration / 30))):
if grid[row_start+step][day_no] is None:
print 'creating a time cell at', row_start+step, day_no
grid[row_start+step][day_no] = TimeCell()
grid[row_start+step][day_no].add_emission(schedule.emission)
# start grid at 5am
grid = grid[2*5:] + grid[:2*5]
# merge adjacent cells
for i in range(nb_lines):
for j, cell in enumerate(grid[i]):
if grid[i][j] is None:
continue
t = 1
try:
while grid[i][j+t] == cell:
cell.w += 1
grid[i][j+t] = None
t += 1
except IndexError:
pass
grid[i] = [x for x in grid[i] if x is not None]
for i in range(nb_lines):
grid[i] = [x for x in grid[i] if x is not None]
for j, cell in enumerate(grid[i]):
if grid[i][j] is None:
continue
t = 1
try:
while True:
same_cell_below = [(bj, x) for bj, x in enumerate(grid[i+cell.h])
if x == cell and x.y == cell.y and x.w == cell.w]
if not same_cell_below:
break
bj, same_cell_below = same_cell_below[0]
del grid[i+cell.h][bj]
cell.h += 1
except IndexError:
pass
context['grid'] = grid
context['times'] = times
return context
grid = Grid.as_view()
class Home(TemplateView):
template_name = 'home.html'
......
{% extends "base.html" %}
{% load paniktags %}
{% block content %}
<h2>Grille</h2>
<table border=1>
{% for time_header, time_cells in times|zip:grid %}
<tr>
<td>{{ time_header }}</td>
{% for cell in time_cells %}
<td {% if cell.w > 1 %}colspan="{{cell.w}}"{% endif %}
{% if cell.h > 1 %}rowspan="{{cell.h}}"{% endif %}>{{ cell }}</td>
{% endfor %}
<td>{{ time_header }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
{% block news %}
{% endblock %}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment