Skip to content

Commit d968a0b

Browse files
committed
Merged [2679] from adam@nostrum.com:
Added week-at-a-time view to agenda page when viewing selected areas and/or groups. If no groups are selected, the week view is hidden, leaving the base-level functionality unchanged. - Legacy-Id: 2682 Note: SVN reference [2679] has been migrated to Git commit b1b23b6
1 parent 6340282 commit d968a0b

4 files changed

Lines changed: 303 additions & 0 deletions

File tree

ietf/meeting/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
(r'^agenda/$', views.html_agenda),
99
(r'^agenda(?:.html)?$', views.html_agenda),
1010
(r'^agenda.txt$', views.text_agenda),
11+
(r'^agenda/week-view.html$', views.week_view),
12+
(r'^week-view.html$', views.week_view),
1113
(r'^(?P<num>\d+)/agenda(?:.html)?/?$', views.html_agenda),
1214
(r'^(?P<num>\d+)/agenda.txt$', views.text_agenda),
15+
(r'^(?P<num>\d+)/week-view.html$', views.week_view),
1316
(r'^(?P<num>\d+)/agenda/(?P<session>[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf),
1417
(r'^(?P<num>\d+)/agenda/(?P<session>[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile),
1518
(r'^(?P<num>\d+)/agenda/(?P<session>[A-Za-z0-9-]+)(?P<ext>\.[A-Za-z0-9]+)?$', views.session_agenda),

ietf/meeting/views.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ def html_agenda(request, num=None):
126126
"wg_list" : wgs, "rg_list" : rgs, "area_list" : areas},
127127
context_instance=RequestContext(request))
128128

129+
129130
def text_agenda(request, num=None):
130131
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
131132
plenaryw_agenda = " "+plenaryw_agenda.strip().replace("\n", "\n ")
@@ -306,3 +307,17 @@ def session_draft_pdf(request, num, session):
306307
os.unlink(pmn)
307308
os.unlink(pdfn)
308309
return HttpResponse(pdf_contents, mimetype="application/pdf")
310+
311+
def week_view(request, num=None):
312+
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
313+
wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).order_by('group_acronym__acronym')
314+
rgs = IRTF.objects.all().order_by('acronym')
315+
areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym')
316+
template = "meeting/week-view.html"
317+
return render_to_response(template,
318+
{"timeslots":timeslots, "update":update, "meeting":meeting,
319+
"venue":venue, "ads":ads, "plenaryw_agenda":plenaryw_agenda,
320+
"plenaryt_agenda":plenaryt_agenda, "wg_list" : wgs,
321+
"rg_list" : rgs, "area_list" : areas},
322+
context_instance=RequestContext(request))
323+

ietf/templates/meeting/agenda.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
#wg-selector-toggle-text { text-decoration: underline; cursor: pointer; }
1818
#wg-selector-triangle-right { vertical-align: text-top; }
1919
#wg-selector-triangle-down { vertical-align: text-top; }
20+
21+
#weekview.hidden { display: none; }
22+
#weekview { border: none; margin: 10px 0 0 0;}
23+
2024
img.hidden { display: none; }
2125

2226
.ietf-agenda-palette { border-collapse:collapse; border:2px solid black; background:white; overflow:hidden; }
@@ -56,10 +60,22 @@
5660
window.setTimeout("setGroupState()",1000);
5761
if (frag == lastfrag) { return; }
5862

63+
var weekview = document.getElementById('weekview');
64+
5965
lastfrag = frag;
6066

6167
var fragment = frag.split(',');
6268

69+
if (frag.length)
70+
{
71+
weekview.setAttribute("src","week-view.html#"+frag);
72+
weekview.className = '';
73+
}
74+
else
75+
{
76+
weekview.className = 'hidden';
77+
}
78+
6379
var selectors = document.getElementsByTagName('div');
6480
var re = RegExp("^selector-");
6581
var re2 = RegExp("^selector-(" + fragment.join('|') + ")$");
@@ -228,6 +244,7 @@ <h1>IETF {{ meeting.num }} Meeting Agenda</h1>
228244
</tr>
229245
</table>
230246

247+
<iframe id="weekview" class="hidden" width="100%" height="600px" src="about:blank"></iframe>
231248

232249
<table id="agenda" width="100%">
233250
{% for slot in timeslots %}
Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
{# Copyright The IETF Trust 2007, All Rights Reserved #}
2+
{% load humanize %}
3+
4+
<html> <head>
5+
<script type="text/javascript" src='/js/agenda2.js'></script>
6+
<script type="text/javascript">
7+
var items = new Array();
8+
{% autoescape off %}
9+
{% for slot in timeslots %}{% for session in slot.sessions %}
10+
items.push({day:{{slot.day_id}}, time:"{{slot.time_desc}}", time_id:{{slot.time_id}}, name:"{{session.acronym_name}}", wg:"{{session.acronym}}", area:"{{session.area}}", room:"{{session.room_id.room_name}}"});{% endfor %}{% endfor %}
11+
{% endautoescape %}
12+
13+
var fg = {
14+
'app': "#008",
15+
'gen': "#080",
16+
'int': "#088",
17+
'ops': "#800",
18+
'rai': "#808",
19+
'rtg': "#880",
20+
'sec': "#488",
21+
'tsv': "#484",
22+
'irtf': "#448"
23+
};
24+
25+
var bg = {
26+
'app': "#eef",
27+
'gen': "#efe",
28+
'int': "#eff",
29+
'ops': "#fee",
30+
'rai': "#fef",
31+
'rtg': "#ffe",
32+
'sec': "#dff",
33+
'tsv': "#dfd",
34+
'irtf': "#ddf"
35+
};
36+
37+
var day = [
38+
'Saturday',
39+
'Sunday',
40+
'Monday',
41+
'Tuesday',
42+
'Wednesday',
43+
'Thursday',
44+
'Friday'
45+
];
46+
47+
var lastfrag;
48+
var lastheight;
49+
var lastwidth;
50+
51+
function draw_calendar()
52+
{
53+
window.setTimeout("draw_calendar()",1000);
54+
55+
var width = document.body.clientWidth;
56+
var height = document.body.clientHeight;
57+
58+
if (lastheight == height &&
59+
lastwidth == width &&
60+
lastfrag == window.location.hash)
61+
{
62+
return;
63+
}
64+
65+
var i;
66+
var text="";
67+
var start_day = items[0].day;
68+
var end_day = start_day;
69+
var sessions = Array();
70+
var used = Array();
71+
72+
var day_start = 0;
73+
var day_end = 0;
74+
var include = Array();
75+
76+
var frag = window.location.hash.replace("#",'').split(',');
77+
for (i = 0; i < frag.length; i++)
78+
{
79+
include[(frag[i]+"").toLowerCase()] = true;
80+
}
81+
include[''] = true;
82+
include['1plenary'] = true;
83+
include['2plenary'] = true;
84+
85+
/* Find our boundaries */
86+
for (i = 0; i < items.length; i++)
87+
{
88+
if (include[(items[i].wg).toLowerCase()]
89+
|| include[(items[i].area).toLowerCase()])
90+
{
91+
var start_time = parseInt(items[i].time.substr(0,2),10) * 60 +
92+
parseInt(items[i].time.substr(2,2),10);
93+
var end_time = parseInt(items[i].time.substr(5,2),10) * 60 +
94+
parseInt(items[i].time.substr(7,2),10);
95+
96+
if (!day_start || start_time < day_start) { day_start = start_time; }
97+
if (end_time > day_end) { day_end = end_time; }
98+
99+
if (items[i].day < start_day) { start_day = items[i].day; }
100+
if (items[i].day > end_day) { end_day = items[i].day; }
101+
if (sessions[items[i].time_id])
102+
{
103+
sessions[items[i].time_id]++;
104+
}
105+
else
106+
{
107+
sessions[items[i].time_id] = 1;
108+
used[items[i].time_id] = 0;
109+
}
110+
}
111+
}
112+
113+
var header_height = height * 0.05 ;
114+
115+
var num_days = end_day - start_day + 1;
116+
var num_minutes = day_end - day_start;
117+
var day_width = width / num_days;
118+
var minute_height = (height - header_height)/num_minutes;
119+
var body = document.body;
120+
while (body.childNodes.length) { body.removeChild(body.childNodes[0]); }
121+
var padding = 2;
122+
var border = 1;
123+
124+
for (i = 0; i < num_days; i++)
125+
{
126+
var e = document.createElement("div");
127+
128+
e.style.border="solid";
129+
e.style.borderWidth=border;
130+
131+
e.style.background="#000";
132+
e.style.color="#fff";
133+
e.style.borderColor="#000 #fff";
134+
135+
e.style.display="block";
136+
e.style.overflow="hidden";
137+
e.style.position="absolute";
138+
139+
e.style.top=0;
140+
e.style.left = i*day_width;
141+
e.style.width=day_width - 2 * (padding + border);
142+
e.style.height=header_height;
143+
144+
e.style.margin=0;
145+
e.style.padding=padding;
146+
e.style.fontFamily="sans-serif";
147+
e.style.fontSize=header_height * 0.6;
148+
149+
e.style.textAlign="center";
150+
151+
var div = document.createElement("div");
152+
div.appendChild(document.createTextNode(day[i]));
153+
e.appendChild(div);
154+
body.appendChild(e);
155+
156+
//-----------------------------------------------------------------
157+
e = document.createElement("div");
158+
159+
e.style.border="solid";
160+
e.style.borderWidth=border;
161+
162+
e.style.background="#fff";
163+
e.style.color="#000";
164+
e.style.borderColor="#fff #000";
165+
166+
e.style.display="block";
167+
e.style.overflow="hidden";
168+
e.style.position="absolute";
169+
170+
e.style.top=header_height;
171+
e.style.left=i*day_width;
172+
e.style.width=day_width - 2 * (padding + border);
173+
e.style.height=height -
174+
2 * (padding + border) - header_height;
175+
176+
e.style.margin=0;
177+
e.style.padding=padding;
178+
179+
body.appendChild(e);
180+
}
181+
182+
183+
for (i = 0; i < items.length; i++)
184+
{
185+
if (include[(items[i].wg).toLowerCase()]
186+
|| include[(items[i].area).toLowerCase()])
187+
{
188+
var start_time = parseInt(items[i].time.substr(0,2),10) * 60 +
189+
parseInt(items[i].time.substr(2,2),10);
190+
var end_time = parseInt(items[i].time.substr(5,2),10) * 60 +
191+
parseInt(items[i].time.substr(7,2),10);
192+
193+
var sess_width = day_width / sessions[items[i].time_id];
194+
var sess_height = ((end_time - start_time) * minute_height)
195+
- 2 * (padding + border);
196+
var sess_left = ((items[i].day - start_day) * day_width
197+
+ sess_width * used[items[i].time_id]);
198+
var sess_top = ((start_time - day_start) * minute_height) + header_height;
199+
200+
sess_width = sess_width - 2 * (padding + border);
201+
202+
used[items[i].time_id]++;
203+
204+
var e = document.createElement("div");
205+
e.style.border="solid";
206+
e.style.borderWidth=border;
207+
208+
if (fg[items[i].area])
209+
{
210+
e.style.background=bg[items[i].area];
211+
e.style.color=fg[items[i].area];
212+
e.style.borderColor=fg[items[i].area];
213+
}
214+
else
215+
{
216+
e.style.background="#e0e0e0";
217+
e.style.color="#000000";
218+
e.style.borderColor="#000000";
219+
}
220+
221+
e.style.display="block";
222+
e.style.overflow="hidden";
223+
e.style.position="absolute";
224+
e.style.top=sess_top;
225+
e.style.left=sess_left;
226+
e.style.width=sess_width;
227+
e.style.height=sess_height;
228+
e.style.margin=0;
229+
e.style.padding=padding;
230+
e.style.fontFamily="sans-serif";
231+
e.style.fontSize="8pt";
232+
233+
var div = document.createElement("div");
234+
div.appendChild(document.createTextNode(items[i].time));
235+
div.appendChild(document.createElement("br"));
236+
237+
var label = items[i].name;
238+
if (fg[items[i].area])
239+
{
240+
label = label + " (" + items[i].wg + ")";
241+
}
242+
var bold = document.createElement("span");
243+
bold.appendChild(document.createTextNode(label));
244+
bold.style.fontWeight="bold";
245+
div.appendChild(bold);
246+
247+
div.appendChild(document.createElement("br"));
248+
var italics = document.createElement("span");
249+
italics.appendChild(document.createTextNode(items[i].room));
250+
italics.style.fontStyle="oblique";
251+
div.appendChild(italics);
252+
253+
e.appendChild(div);
254+
body.appendChild(e);
255+
256+
}
257+
}
258+
259+
lastheight = height;
260+
lastwidth = width;
261+
lastfrag = window.location.hash;
262+
}
263+
264+
</script>
265+
</head>
266+
<body onload="draw_calendar()" onresize="draw_calendar()" id="body">
267+
<div id="cal"><span>Error loading calendar</span></div>
268+
</body></html>

0 commit comments

Comments
 (0)