Merge lp:~mhall119/summit/ubuntu_website_theme into lp:summit
- ubuntu_website_theme
- Merge into trunk
| 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 |
| Related bugs: |
| 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:
|
|||
This proposal supersedes a proposal from 2010-08-29.
Commit Message
Description of the Change
Converted to new theme.
Screenshots: http://
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.
| Martin Meredith (mez) wrote : | # |
Text is TINY for stuff like:-
"This field is required."
http://
Time markers on schedules are cut off...
http://
| 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. :)
Preview Diff
| 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 | - |
| 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 | - |
| 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>© 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"> </div><div id="bottom-right"> </div> |
| 702 | - </div> |
| 703 | - <div id="bg-left"> </div><div id="bottom-left"> </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 | +© 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 | ) |

Text conflict - please resolve.