Merge lp:~mhall119/summit/ubuntu_website_theme into lp:summit

Proposed by Michael Hall on 2010-08-30
Status: Merged
Approved by: Dave Walker on 2010-09-14
Approved revision: 19
Merged at revision: 20
Proposed branch: lp:~mhall119/summit/ubuntu_website_theme
Merge into: lp:summit
Diff against target: 772 lines (+466/-94)
15 files modified
summit/media/css/twidenash.css (+20/-0)
summit/media/twidenash.js (+122/-0)
summit/schedule/context_processors.py (+4/-0)
summit/schedule/migrations/0002_add_summit_dates.py (+162/-0)
summit/schedule/models/summitmodel.py (+9/-1)
summit/schedule/templates/schedule/index.html (+15/-10)
summit/schedule/templates/schedule/schedule_list.html (+0/-1)
summit/schedule/templates/schedule/summit.html (+26/-22)
summit/schedule/views.py (+2/-6)
summit/settings.py (+14/-0)
summit/sponsor/templates/sponsor/done.html (+4/-0)
summit/sponsor/templates/sponsor/step0.html (+9/-2)
summit/sponsor/templates/sponsor/step1.html (+10/-2)
summit/templates/base.html (+64/-50)
summit/urls.py (+5/-0)
To merge this branch: bzr merge lp:~mhall119/summit/ubuntu_website_theme
Reviewer Review Type Date Requested Status
Dave Walker (community) Approve on 2010-09-14
Martin Meredith (community) 2010-08-30 Needs Fixing on 2010-08-30
Review via email: mp+34075@code.launchpad.net

This proposal supersedes a proposal from 2010-08-29.

Description of the Change

Converted to new theme.
Screenshots: http://img80.imageshack.us/g/summitlist.png/

Will need to "bzr branch lp:ubuntu-website/light_django_theme ubuntu_website" in the project directory.

Also adds a migration to add start/end dates to the summit itself, independent of the schedule.

To post a comment you must log in.
Martin Meredith (mez) wrote : Posted in a previous version of this proposal

Text conflict - please resolve.

review: Disapprove
Martin Meredith (mez) wrote :

Text is TINY for stuff like:-

"This field is required."
http://people.ubuntu.com/~mez/summit/tinyerror.jpg

Time markers on schedules are cut off...
http://people.ubuntu.com/~mez/summit/stuntedmarkers.jpg

review: Needs Fixing
Dave Walker (davewalker) wrote :

Whilst this in indeed true, for an imminent deployment that is something that can be fixed post release as it's not required just yet. This branch is better than what is currently there. :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'summit/media/css/twidenash.css'
2--- summit/media/css/twidenash.css 1970-01-01 00:00:00 +0000
3+++ summit/media/css/twidenash.css 2010-08-30 14:41:04 +0000
4@@ -0,0 +1,20 @@
5+ul.twidenash li {
6+ list-style-type: none;
7+ clear: both;
8+ padding: 3px;
9+ font-size: 100%;
10+}
11+ul.twidenash li img {
12+ float: left;
13+ vertical-align: top;
14+ padding-right: 10px;
15+}
16+ul.twidenash li .comment {
17+ margin-left: 5px;
18+ display: block;
19+}
20+
21+ul.twidenash li .nick {
22+ font-weight: bold;
23+}
24+
25
26=== added file 'summit/media/twidenash.js'
27--- summit/media/twidenash.js 1970-01-01 00:00:00 +0000
28+++ summit/media/twidenash.js 2010-08-30 14:41:04 +0000
29@@ -0,0 +1,122 @@
30+/*
31+*
32+* Copyright (c) 2010 Stuart Langridge
33+*
34+* Permission is hereby granted, free of charge, to any person obtaining a copy
35+* of this software and associated documentation files (the "Software"), to deal
36+* in the Software without restriction, including without limitation the rights
37+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38+* copies of the Software, and to permit persons to whom the Software is
39+* furnished to do so, subject to the following conditions:
40+*
41+* The above copyright notice and this permission notice shall be included in
42+* all copies or substantial portions of the Software.
43+*
44+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
50+* THE SOFTWARE.
51+*
52+* Website: http://code.google.com/p/twidenash/
53+*/
54+
55+/*
56+* With modification by Michael Hall for use in loco.ubuntu.com
57+*/
58+
59+twidenash = {
60+ init: function() {
61+ if (!twidenash.hashtag) return;
62+ // request hashtag search values for both twitter and identica
63+ twidenash.callbacks = 0;
64+ twidenash.items = [];
65+ twidenash.add_script("http://locoteams.status.net/api/search.json?" +
66+ "callback=twidenash.cb&rpp=10&q=%23" + twidenash.hashtag);
67+ twidenash.add_script("http://identi.ca/api/search.json?" +
68+ "callback=twidenash.cb&rpp=10&q=%23" + twidenash.hashtag);
69+ twidenash.add_script("http://search.twitter.com/search.json?" +
70+ "callback=twidenash.cb&rpp=10&q=%23" + twidenash.hashtag);
71+ twidenash.printed = 0;
72+ },
73+ add_script: function(url) {
74+ var scr = document.createElement("script");
75+ scr.src = url;
76+ document.getElementsByTagName("head")[0].appendChild(scr);
77+ },
78+ cb: function(data) {
79+ for (var i=0; i<data.results.length; i++) {
80+ var dupe = false;
81+ for (var j=0; j<twidenash.items.length; j++) {
82+ // Strip characters that may be specific to networks
83+ var comp1 = data.results[i].text.replace(/[♺\!\#\@]/g, '');
84+ var comp2 = twidenash.items[j].text.replace(/[♺\!\#\@]/g, '');
85+ var compdate = Date.parse(data.results[i].created_at);
86+ var datediff = Math.abs(Date.parse(data.results[i].created_at) - twidenash.items[j].dt)
87+ if (comp1 == comp2 && datediff < 120000) {
88+ dupe = true;
89+ break;
90+ }
91+ }
92+ if (dupe) continue;
93+ twidenash.items.push({ text: data.results[i].text,
94+ img: data.results[i].profile_image_url,
95+ dt: Date.parse(data.results[i].created_at),
96+ user: data.results[i].from_user })
97+ }
98+ twidenash.callbacks += 1;
99+ if (twidenash.callbacks == 2) {
100+ twidenash.items.sort(function(a,b) { return b.dt - a.dt });
101+ var ul = document.createElement("ul");
102+ ul.className = "twidenash";
103+ for (i=0; i<twidenash.items.length && twidenash.printed < 5; i++) {
104+ var li = document.createElement("li");
105+ var img = document.createElement("img");
106+ img.src = twidenash.items[i].img;
107+ img.width = 48;
108+ var span = document.createElement("span");
109+ span.className = 'comment';
110+ var nick = document.createElement("span");
111+ nick.className = 'nick';
112+ nick.appendChild(document.createTextNode(twidenash.items[i].user +
113+ ": "));
114+ var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
115+ span.innerHTML = twidenash.items[i].text.replace(exp,"<a href='$1' target='_blank'>$1</a>");
116+ li.appendChild(img);
117+ li.appendChild(nick);
118+ li.appendChild(span);
119+ ul.appendChild(li);
120+ twidenash.printed++;
121+ }
122+ twidenash.scriptelement.parentNode.insertBefore(ul, twidenash.scriptelement);
123+ }
124+ },
125+ cache_scriptname: function() {
126+ // called before page load so we can find our own name
127+ var scr = document.getElementsByTagName("script");
128+ var url = scr[scr.length-1].getAttribute("src");
129+ if (!url) {
130+ var twidenash_script = document.getElementById("twidenash_script");
131+ if (twidenash_script) url = twidenash_script.getAttribute("src");
132+ }
133+ if (url && url.lastIndexOf('?') != -1) {
134+ twidenash.hashtag = url.substr(url.lastIndexOf('?')+1);
135+ if (twidenash_script) {
136+ twidenash.scriptelement = twidenash_script;
137+ } else {
138+ twidenash.scriptelement = scr[scr.length-1];
139+ }
140+ }
141+ }
142+};
143+(function(i) {var u =navigator.userAgent;var e=/*@cc_on!@*/false; var st =
144+setTimeout;if(/webkit/i.test(u)){st(function(){var dr=document.readyState;
145+if(dr=="loaded"||dr=="complete"){i()}else{st(arguments.callee,10);}},10);}
146+else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
147+document.addEventListener("DOMContentLoaded",i,false); } else if(e){ (
148+function(){var t=document.createElement('doc:rdy');try{t.doScroll('left');
149+i();t=null;}catch(e){st(arguments.callee,0);}})();}else{window.onload=i;}})(twidenash.init);
150+twidenash.cache_scriptname();
151+
152
153=== added file 'summit/schedule/context_processors.py'
154--- summit/schedule/context_processors.py 1970-01-01 00:00:00 +0000
155+++ summit/schedule/context_processors.py 2010-08-30 14:41:04 +0000
156@@ -0,0 +1,4 @@
157+from schedule.models.summitmodel import Summit
158+
159+def next_summit(request):
160+ return {'next_summit': Summit.objects.next() }
161
162=== added file 'summit/schedule/migrations/0002_add_summit_dates.py'
163--- summit/schedule/migrations/0002_add_summit_dates.py 1970-01-01 00:00:00 +0000
164+++ summit/schedule/migrations/0002_add_summit_dates.py 2010-08-30 14:41:04 +0000
165@@ -0,0 +1,162 @@
166+
167+from south.db import db
168+from django.db import models
169+from summit.schedule.models import *
170+
171+class Migration:
172+
173+ def forwards(self, orm):
174+
175+ # Adding field 'Summit.date_end'
176+ db.add_column('schedule_summit', 'date_end', orm['schedule.summit:date_end'])
177+
178+ # Adding field 'Summit.date_start'
179+ db.add_column('schedule_summit', 'date_start', orm['schedule.summit:date_start'])
180+
181+
182+
183+ def backwards(self, orm):
184+
185+ # Deleting field 'Summit.date_end'
186+ db.delete_column('schedule_summit', 'date_end')
187+
188+ # Deleting field 'Summit.date_start'
189+ db.delete_column('schedule_summit', 'date_start')
190+
191+
192+
193+ models = {
194+ 'auth.group': {
195+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
196+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
197+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
198+ },
199+ 'auth.permission': {
200+ 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
201+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
202+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
203+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
204+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
205+ },
206+ 'auth.user': {
207+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
208+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
209+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
210+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
211+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
212+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
213+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
214+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
215+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
216+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
217+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
218+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
219+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
220+ },
221+ 'contenttypes.contenttype': {
222+ 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
223+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
224+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
225+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
226+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
227+ },
228+ 'schedule.agenda': {
229+ 'Meta': {'unique_together': "(('slot', 'room'),)"},
230+ 'auto': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
231+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
232+ 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}),
233+ 'room': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Room']"}),
234+ 'slot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Slot']"})
235+ },
236+ 'schedule.attendee': {
237+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
238+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
239+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}),
240+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
241+ 'topics': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Topic']", 'blank': 'True'}),
242+ 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'blank': 'True'}),
243+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
244+ },
245+ 'schedule.attendeebusy': {
246+ 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Attendee']"}),
247+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
248+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
249+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"})
250+ },
251+ 'schedule.meeting': {
252+ 'approver': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'approver_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
253+ 'assignee': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'assignee_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
254+ 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}),
255+ 'drafter': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'drafter_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
256+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
257+ 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50', 'blank': 'True'}),
258+ 'participants': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Attendee']", 'blank': 'True'}),
259+ 'priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
260+ 'private': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
261+ 'scribe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scribe_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
262+ 'slots': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
263+ 'spec_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
264+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
265+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
266+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
267+ 'topics': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Topic']", 'blank': 'True'}),
268+ 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'blank': 'True'}),
269+ 'type': ('django.db.models.fields.CharField', [], {'default': "u'blueprint'", 'max_length': '15'}),
270+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
271+ },
272+ 'schedule.participant': {
273+ 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Attendee']"}),
274+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
275+ 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}),
276+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'})
277+ },
278+ 'schedule.room': {
279+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'end'", 'blank': 'True'}),
280+ 'icecast_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
281+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
282+ 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}),
283+ 'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
284+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'start'", 'blank': 'True'}),
285+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
286+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
287+ 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'blank': 'True'}),
288+ 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'})
289+ },
290+ 'schedule.roombusy': {
291+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
292+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
293+ 'room': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Room']"}),
294+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"})
295+ },
296+ 'schedule.slot': {
297+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
298+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
299+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}),
300+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
301+ 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'})
302+ },
303+ 'schedule.summit': {
304+ 'date_end': ('django.db.models.fields.DateField', [], {'null': 'True'}),
305+ 'date_start': ('django.db.models.fields.DateField', [], {'null': 'True'}),
306+ 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}),
307+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
308+ 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
309+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
310+ 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}),
311+ 'state': ('django.db.models.fields.CharField', [], {'default': "u'sponsor'", 'max_length': '10'}),
312+ 'timezone': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
313+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
314+ },
315+ 'schedule.topic': {
316+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
317+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
318+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
319+ },
320+ 'schedule.track': {
321+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
322+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
323+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
324+ }
325+ }
326+
327+ complete_apps = ['schedule']
328
329=== modified file 'summit/schedule/models/summitmodel.py'
330--- summit/schedule/models/summitmodel.py 2010-05-05 08:49:24 +0000
331+++ summit/schedule/models/summitmodel.py 2010-08-30 14:41:04 +0000
332@@ -35,6 +35,10 @@
333 'Summit',
334 )
335
336+class SummitManager(models.Manager):
337+
338+ def next(self):
339+ return self.order_by('-date_start')[0]
340
341 class Summit(models.Model):
342 STATE_CHOICES = (
343@@ -52,7 +56,11 @@
344 last_update = models.DateTimeField(null=True, blank=True)
345 state = models.CharField(max_length=10, choices=STATE_CHOICES,
346 default=STATE_CHOICES[0][0])
347-
348+ date_start = models.DateField(blank=False, null=True)
349+ date_end = models.DateField(blank=False, null=True)
350+
351+ objects = SummitManager()
352+
353 class Meta:
354 app_label = 'schedule'
355 ordering = ('name', )
356
357=== modified file 'summit/schedule/templates/schedule/index.html'
358--- summit/schedule/templates/schedule/index.html 2010-03-05 10:33:36 +0000
359+++ summit/schedule/templates/schedule/index.html 2010-08-30 14:41:04 +0000
360@@ -1,16 +1,21 @@
361 {% extends "base.html" %}
362 {% load datetime %}
363+{% load i18n %}
364
365+{% block sub_nav %}{% endblock %}
366 {% block content %}
367-{% if summit_list %}
368- <ul class="summit_list">
369- {% for summit in summit_list %}
370- <li><h1><a href="/{{ summit.name }}">{{ summit.title }}</a></h1>
371- {% include "schedule/summit_info.html" %}
372- </li>
373- {% endfor %}
374- </ul>
375-{% else %}
376+<article class="minor-content">
377+ {% if summit %}
378+ <h1><a href="/{{ summit.name }}">{{ summit.title }}</a></h1>
379+ <p>
380+ {% include "schedule/summit_info.html" %}
381+ </p>
382+ {% else %}
383 <p>No summits registered.</p>
384-{% endif %}
385+ {% endif %}
386+</article>
387+<article class="minor-content alone">
388+ <h2>{% trans "Microblogging" %} #UDS</h2>
389+ <p><script src="/media/twidenash.js?uds"></script></p>
390+</article>
391 {% endblock %}
392
393=== modified file 'summit/schedule/templates/schedule/schedule_list.html'
394--- summit/schedule/templates/schedule/schedule_list.html 2010-03-05 10:33:36 +0000
395+++ summit/schedule/templates/schedule/schedule_list.html 2010-08-30 14:41:04 +0000
396@@ -1,6 +1,5 @@
397 {% load datetime %}
398
399-<p><img src="/media/img/rule.png" width="690" height="1" alt="" class="rule" /></p>
400 <h2>Schedule</h2>
401 <table class="column">
402 <tr>
403
404=== modified file 'summit/schedule/templates/schedule/summit.html'
405--- summit/schedule/templates/schedule/summit.html 2010-03-05 10:33:36 +0000
406+++ summit/schedule/templates/schedule/summit.html 2010-08-30 14:41:04 +0000
407@@ -1,35 +1,35 @@
408 {% extends "base.html" %}
409 {% load datetime %}
410+{% load i18n %}
411
412 {% block title %}{{ summit.title }}{% endblock %}
413
414-{% block content %}
415-<h1>{{ summit.title }}</h1>
416-{% include "schedule/summit_info.html" %}
417+{% block sub_nav_links %}
418
419 {% ifequal summit.state "sponsor" %}
420-<p><img src="/media/img/rule.png" width="690" height="1" alt="" class="rule" /></p>
421-
422-<p class="request" style="font-size: 150%">
423- <a href="/{{ summit.name }}/sponsorship">Request Sponsorship</a>
424-</p>
425-{% if perms.sponsor.add_sponsorshipscore %}
426-<p class="suggest" style="font-size: 150%">
427- <a href="/{{ summit.name }}/suggestsponsorship">Suggest Sponsorship</a>
428-</p>
429-{% endif %}
430+ <a class="sub-nav-item" href="/{{ summit.name }}/sponsorship">{% trans 'Request Sponsorship' %}</a>
431+ {% if perms.sponsor.add_sponsorshipscore %}
432+ <a class="sub-nav-item" href="/{{ summit.name }}/suggestsponsorship">{% trans 'Suggest Sponsorship' %}</a>
433+ {% endif %}
434 {% endifequal %}
435
436 {% ifnotequal summit.state "public" %}
437-{% if perms.sponsor.add_sponsorshipscore %}
438-<p><img src="/media/img/rule.png" width="690" height="1" alt="" class="rule" /></p>
439-
440-<p><a href="/{{ summit.name }}/sponsorship/review">Review Sponsorship Requests</a></p>
441-{% endif %}
442+ {% if perms.sponsor.add_sponsorshipscore %}
443+ <a class="sub-nav-item" href="/{{ summit.name }}/sponsorship/review">{% trans 'Review Sponsorship Requests' %}</a>
444+ {% endif %}
445 {% endifnotequal %}
446-
447-<p><img src="/media/img/rule.png" width="690" height="1" alt="" class="rule" /></p>
448-
449+{% endblock %}
450+
451+{% block content %}
452+
453+<article class="main-content">
454+<h1>{{ summit.title }}</h1>
455+<p>
456+{% include "schedule/summit_info.html" %}
457+</p>
458+</article>
459+
460+<article class="main-content">
461 {% if attendee %}
462 <p>You are attending, you can update the days and times of your attendance in
463 <a class="launchpad" href="http://launchpad.net/sprints/{{ summit.name }}/+attend"><img src="/media/img/gem-sm.png" /> Launchpad</a>.</p>
464@@ -46,7 +46,11 @@
465 <p><a href="/openid/login">Log in now</a></p>
466 {% endif %}
467 {% endif %}
468+</article>
469
470+<article class="main-content">
471+<p>
472 {% include "schedule/schedule_list.html" %}
473-
474+</p>
475+</article>
476 {% endblock %}
477
478=== modified file 'summit/schedule/views.py'
479--- summit/schedule/views.py 2010-03-05 10:33:36 +0000
480+++ summit/schedule/views.py 2010-08-30 14:41:04 +0000
481@@ -42,14 +42,10 @@
482
483
484 def index(request):
485- summit_list = Summit.objects.all()
486-
487- if len(summit_list) == 1 \
488- and 'hack' not in request.GET:
489- return HttpResponseRedirect("/%s" % summit_list[0].name)
490+ summit = Summit.objects.next()
491
492 context = {
493- 'summit_list': summit_list,
494+ 'summit': summit,
495 }
496 return render_to_response("schedule/index.html", context,
497 context_instance=RequestContext(request))
498
499=== modified file 'summit/settings.py'
500--- summit/settings.py 2010-04-08 16:56:52 +0000
501+++ summit/settings.py 2010-08-30 14:41:04 +0000
502@@ -83,10 +83,12 @@
503 "django.core.context_processors.i18n",
504 "django.core.context_processors.media",
505 "django.core.context_processors.request",
506+ "schedule.context_processors.next_summit",
507 )
508
509 MIDDLEWARE_CLASSES = (
510 'django.middleware.common.CommonMiddleware',
511+ 'django.middleware.locale.LocaleMiddleware',
512 'django.contrib.sessions.middleware.SessionMiddleware',
513 'django.contrib.auth.middleware.AuthenticationMiddleware',
514 )
515@@ -100,6 +102,18 @@
516 os.path.join(THIS_DIR, 'templates'),
517 )
518
519+try:
520+ import ubuntu_website
521+ TEMPLATE_CONTEXT_PROCESSORS += (
522+ "ubuntu_website.media_processor",
523+ "ubuntu_website.popup_check",
524+ )
525+ TEMPLATE_DIRS += (
526+ ubuntu_website.TEMPLATE_DIR,
527+ )
528+except ImportError:
529+ print "You will need to include lp:ubuntu-website/light-django-theme into ./ubuntu_website for the theme to fully work."
530+
531 INSTALLED_APPS = (
532 'django.contrib.auth',
533 'django.contrib.contenttypes',
534
535=== modified file 'summit/sponsor/templates/sponsor/done.html'
536--- summit/sponsor/templates/sponsor/done.html 2010-08-26 09:20:57 +0000
537+++ summit/sponsor/templates/sponsor/done.html 2010-08-30 14:41:04 +0000
538@@ -1,10 +1,14 @@
539 {% extends "base.html" %}
540
541+{% block sub_nav %}{% endblock %}
542+
543 {% block content %}
544+<article class="main-content alone">
545 <h1>Request Sponsorship</h1>
546 <p>
547 Thanks very much for requesting sponsorship to {{ summit.name }}. If you
548 have any queries about your request, please e-mail
549 <a href="mailto:jorge@ubuntu.com">jorge@ubuntu.com</a>.
550 </p>
551+</article>
552 {% endblock %}
553
554=== modified file 'summit/sponsor/templates/sponsor/step0.html'
555--- summit/sponsor/templates/sponsor/step0.html 2010-03-05 10:33:36 +0000
556+++ summit/sponsor/templates/sponsor/step0.html 2010-08-30 14:41:04 +0000
557@@ -1,10 +1,14 @@
558 {% extends "base.html" %}
559
560-{% block head %}
561+{% block extrahead %}
562+{{ block.super }}
563 {{ form.media }}
564 {% endblock %}
565
566+{% block sub_nav %}{% endblock %}
567+
568 {% block content %}
569+<article class="main-content alone">
570 <h1>Request Sponsorship</h1>
571 <p>
572 To request sponsorship we need a few details off you, such as where you'll
573@@ -12,11 +16,13 @@
574 judge your request, we'll get some of that from Launchpad, but please take
575 the time to tell us about yourself in your own words.
576 </p>
577-
578 <p>
579 If you have any problems with this app, please contact
580 <a href="mailto:scott@ubuntu.com">scott@ubuntu.com</a>.
581 </p>
582+</article>
583+
584+<article class='main-content'>
585
586 <form method="post">
587 <table>
588@@ -30,4 +36,5 @@
589 {{ previous_fields|safe }}
590 <input type="submit" value="Next"/>
591 </form>
592+</article>
593 {% endblock %}
594
595=== modified file 'summit/sponsor/templates/sponsor/step1.html'
596--- summit/sponsor/templates/sponsor/step1.html 2010-03-05 10:33:36 +0000
597+++ summit/sponsor/templates/sponsor/step1.html 2010-08-30 14:41:04 +0000
598@@ -1,19 +1,26 @@
599 {% extends "base.html" %}
600
601-{% block head %}
602+{% block extrahead %}
603+{{ block.super }}
604 {{ form.media }}
605 {% endblock %}
606
607+{% block sub_nav %}{% endblock %}
608+
609 {% block content %}
610+<article class="main-content alone">
611 <h1>Request Sponsorship</h1>
612+
613+<br />
614 <h2>Further information</h2>
615-
616 <p>
617 Almost done, there's just a few final details we need for your application;
618 and you've a chance to add anything else that you think is important when
619 judging your request.
620 </p>
621+</article>
622
623+<article class="main-content">
624 <form method="post">
625 <table>
626 {{ form }}
627@@ -22,4 +29,5 @@
628 {{ previous_fields|safe }}
629 <input type="submit" value="Finish"/>
630 </form>
631+</article>
632 {% endblock %}
633
634=== modified file 'summit/templates/base.html'
635--- summit/templates/base.html 2010-08-24 07:26:08 +0000
636+++ summit/templates/base.html 2010-08-30 14:41:04 +0000
637@@ -1,54 +1,68 @@
638-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
639- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
640-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
641-<head>
642- <title>{% block title %}Ubuntu Developer Summit{% endblock %}</title>
643+{% extends "ubuntu_website_base.html" %}
644+{% load i18n %}
645+
646+{% block title %}Ubuntu Developer Summit{% endblock %}
647+
648+{% block logo_text %}Ubuntu Developer Summit{% endblock %}
649+
650+{% block extrahead %}
651 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
652- <link rel="stylesheet" type="text/css" media="screen" href="/media/css/chrome.css" />
653- <link rel="stylesheet" type="text/css" media="screen" href="/media/css/layout.css" />
654- <link rel="stylesheet" type="text/css" media="screen" href="/media/css/style.css" />
655+ <link rel="stylesheet" type="text/css" media="screen" href="/media/css/layout.css" />
656+ <link rel="stylesheet" type="text/css" media="screen" href="/media/css/style.css" />
657+ <link rel="stylesheet" type="text/css" media="screen" href="/media/css/twidenash.css" />
658 {% block head %}{% endblock %}
659-</head>
660+{% endblock %}
661
662-<body{% block body_extra %}{% endblock %}>
663-<div id="container">
664- <div id="content">
665- <div id="topNav">
666- <p id="whoami">{% if user.is_authenticated %}
667- {{ user.get_full_name }}
668- &nbsp;
669+{% block main_nav_links %}
670+ <a class="main-nav-item" href="{% url summit.schedule.views.summit next_summit.name %}" title="{% trans "Summit" %}">{% trans "Summit" %}</a>
671+ <a class="main-nav-item" href="{% url summit.sponsor.views.sponsorship next_summit.name %}" title="{% trans "Sponsorship" %}">{% trans "Sponsorship" %}</a>
672+ {% if user.is_authenticated %}
673 {% if user.is_staff %}
674- <a href="/admin">Admin</a>
675- &nbsp;
676- {% endif %}
677- <a href="/logout/">Log out</a>
678- {% else %}
679- <a href="/openid/login">Log in</a>
680- {% endif %}</p>
681- <a href="http://uds.ubuntu.com"><img id="ubuntulogo" src="/media/img/ubuntulogo.png" alt="Ubuntu" /></a>
682- </div>
683- <div id="body">
684- {% if messages %}
685- <ul class="messagelist">
686- {% for message in messages %}
687- <li>{{ message }}</li>
688- {% endfor %}
689- </ul>
690- {% endif %}
691- {% block content %}{% endblock %}
692- </div>
693- <div id="footer">
694- <div class="wrapper">
695- <img src="/media/img/rule.png" width="740" height="1" alt="" class="rule" />
696- <p>&copy; 2008 Canonical Ltd. Ubuntu and Canonical are registered
697- trademarks of Canonical Ltd.</p>
698- {% block footer %}{% endblock %}
699- </div>
700- </div>
701- <div id="bg-right">&nbsp;</div><div id="bottom-right">&nbsp;</div>
702- </div>
703- <div id="bg-left">&nbsp;</div><div id="bottom-left">&nbsp;</div>
704-</div>
705-</body>
706-
707-</html>
708+ <a class="main-nav-item" href="/admin" title="{% trans "Admin" %}">{% trans "Admin" %}</a>
709+ {% endif %}
710+ <a class="main-nav-item" href="/logout" title="{% trans "Log Out" %}: {{ user.username }}">{% trans "Log Out" %}</a>
711+ {% else %}
712+ <a class="main-nav-item" href="/openid/login?next={{login_next}}" title="{% trans "Log In" %}">{% trans "Log In" %}</a>
713+ {% endif %}
714+{% endblock %}
715+
716+{% block search %}{% endblock %}
717+
718+{% block sub_nav_links %}
719+{% endblock %}
720+
721+{% block messages %}
722+ {% if messages %}
723+ {% for message in messages %}
724+ <div class = 'message' ><div class = 'content-shim' >{{ message }}</div></div>
725+ {% endfor %}
726+ {% endif %}
727+{% endblock %}
728+
729+{% block content %}
730+{% block body_extra %}{% endblock %}
731+{% endblock %}
732+
733+{% block general %}
734+{% endblock %}
735+
736+{% block footer %}
737+<div style="height: 40px;">
738+ <div class="loggedin">{% if user.is_authenticated %}{% trans "Logged in as" %}: <a href="http://launchpad.net/~{{ user.username }}">{{ user.username }}</a>{% endif %}</div>
739+</div>
740+<div class="copyright">
741+&copy; 2008-{% now "Y" %} Canonical Ltd., Ubuntu Community. Ubuntu is a registered trademark of Canonical Ltd.<br />
742+</div>
743+{% endblock %}
744+
745+{% block footer_list_1 %}
746+{% endblock %}
747+
748+{% block footer_list_2 %}
749+{% endblock %}
750+
751+{% block footer_list_3 %}
752+{% endblock %}
753+
754+{% block footer_note %}
755+{% endblock %}
756
757=== modified file 'summit/urls.py'
758--- summit/urls.py 2010-03-19 14:48:42 +0000
759+++ summit/urls.py 2010-08-30 14:41:04 +0000
760@@ -64,7 +64,12 @@
761 )
762
763 if settings.DEBUG:
764+ import ubuntu_website
765 urlpatterns += patterns('',
766 (r'^media/(?P<path>.*)$', 'django.views.static.serve',
767 {'document_root': settings.MEDIA_ROOT}),
768+ (r'^(robots.txt)$', 'django.views.static.serve',
769+ {'document_root': settings.MEDIA_ROOT}),
770+ (r'^ubuntu-website/media/(?P<path>.*)$', 'django.views.static.serve',
771+ {'document_root': ubuntu_website.MEDIA_ROOT}),
772 )

Subscribers

People subscribed via source and target branches