Merge lp:~mhall119/summit/fixes-793019 into lp:summit

Proposed by Michael Hall
Status: Merged
Approved by: Michael Hall
Approved revision: 158
Merged at revision: 158
Proposed branch: lp:~mhall119/summit/fixes-793019
Merge into: lp:summit
Diff against target: 235 lines (+182/-18)
4 files modified
summit/media/css/schedule.css (+0/-18)
summit/schedule/migrations/0002_add_track_color.py (+179/-0)
summit/schedule/models/trackmodel.py (+1/-0)
summit/schedule/render.py (+2/-0)
To merge this branch: bzr merge lp:~mhall119/summit/fixes-793019
Reviewer Review Type Date Requested Status
Chris Johnston Approve
Review via email: mp+73929@code.launchpad.net

Commit message

Adds a new 'color' field to the Track record, this contains a 6-char hex color code that will be used as the background for meeting blocks on the schedule.

Description of the change

Adds a new 'color' field to the Track record, this contains a 6-char hex color code that will be used as the background for meeting blocks on the schedule.

To post a comment you must log in.
Revision history for this message
Chris Johnston (cjohnston) wrote :

Mike, would it be possible that when we assign a color, say green to community for uds-p, that if community exists at uds-q, it would default to green?

Revision history for this message
Chris Johnston (cjohnston) wrote :

Works well.. Approving as is, but not changing the status until my question is answered. Feel free to change status to approved for merging.

review: Approve
Revision history for this message
Nigel Babu (nigelbabu) wrote :

Hrm, can we script this so that the most common tracks can just be created from the commandline? That way we can give it a default color to take.

Revision history for this message
Michael Hall (mhall119) wrote :

It's certainly possible, but not something that I think we should block on this cycle. I'm marking this as approved to tarmac will land it.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/media/css/schedule.css'
2--- summit/media/css/schedule.css 2011-09-02 20:53:38 +0000
3+++ summit/media/css/schedule.css 2011-09-03 02:18:23 +0000
4@@ -216,24 +216,6 @@
5 /* Meetings have additional classes for their type, which we use to set
6 * a pretty background colour.
7 */
8-div.meeting.community { background-color: #ffb9f4; }
9-div.meeting.design { background-color: #ac7c96; }
10-div.meeting.desktop { background-color: #f8f5a4; }
11-div.meeting.foundations { background-color: #bc3c5d; }
12-div.meeting.hardware { background-color: #ffd700; }
13-div.meeting.other { background-color: #deb887; }
14-div.meeting.qa { background-color: #fb9e70; }
15-div.meeting.security { background-color: #97fb70; }
16-div.meeting.server { background-color: #ccccff; }
17-div.meeting.linaro-android { background-color: #a5ca39; }
18-div.meeting.linaro-graphics { background-color: #b5aca8; }
19-div.meeting.linaro-kernel { background-color: #5375f1; }
20-div.meeting.linaro-multimedia { background-color: #99e8e3; }
21-div.meeting.linaro-platforms { background-color: #f429e8; }
22-div.meeting.linaro-power-management { background-color: #eaaf3c; }
23-div.meeting.linaro-toolchain { background-color: #fdff58; }
24-div.meeting.linaro-other { background-color: #ccccff; }
25-
26 div.meeting.plenary { background-color: #ffffe0; }
27 div.meeting.special { background-color: #ffffe0; }
28 div.meeting.talk { background-color: #e0ffe0; }
29
30=== added file 'summit/schedule/migrations/0002_add_track_color.py'
31--- summit/schedule/migrations/0002_add_track_color.py 1970-01-01 00:00:00 +0000
32+++ summit/schedule/migrations/0002_add_track_color.py 2011-09-03 02:18:23 +0000
33@@ -0,0 +1,179 @@
34+# encoding: utf-8
35+import datetime
36+from south.db import db
37+from south.v2 import SchemaMigration
38+from django.db import models
39+
40+class Migration(SchemaMigration):
41+
42+ def forwards(self, orm):
43+
44+ # Adding field 'Track.color'
45+ db.add_column('schedule_track', 'color', self.gf('django.db.models.fields.CharField')(default='FFFFFF', max_length=6), keep_default=False)
46+
47+
48+ def backwards(self, orm):
49+
50+ # Deleting field 'Track.color'
51+ db.delete_column('schedule_track', 'color')
52+
53+
54+ models = {
55+ 'auth.group': {
56+ 'Meta': {'object_name': 'Group'},
57+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
58+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
59+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
60+ },
61+ 'auth.permission': {
62+ 'Meta': {'ordering': "('content_type__app_label', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
63+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
64+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
65+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
66+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
67+ },
68+ 'auth.user': {
69+ 'Meta': {'object_name': 'User'},
70+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
71+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
72+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
73+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
74+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
76+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
77+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
78+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
79+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
80+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
81+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
82+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
83+ },
84+ 'contenttypes.contenttype': {
85+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
86+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
87+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
88+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
89+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
90+ },
91+ 'schedule.agenda': {
92+ 'Meta': {'ordering': "('slot', 'room')", 'unique_together': "(('slot', 'room'),)", 'object_name': 'Agenda'},
93+ 'auto': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
94+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
95+ 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}),
96+ 'room': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Room']"}),
97+ 'slot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Slot']"})
98+ },
99+ 'schedule.attendee': {
100+ 'Meta': {'ordering': "('summit', 'user')", 'object_name': 'Attendee'},
101+ 'crew': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_column': "'crew'"}),
102+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
103+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
104+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}),
105+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
106+ 'topics': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Topic']", 'symmetrical': 'False', 'blank': 'True'}),
107+ 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}),
108+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
109+ },
110+ 'schedule.attendeebusy': {
111+ 'Meta': {'ordering': "('attendee', 'start_utc', 'end_utc')", 'object_name': 'AttendeeBusy'},
112+ 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Attendee']"}),
113+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
114+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
115+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"})
116+ },
117+ 'schedule.crew': {
118+ 'Meta': {'ordering': "('date_utc', 'attendee')", 'object_name': 'Crew'},
119+ 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'crew_schedule'", 'to': "orm['schedule.Attendee']"}),
120+ 'date_utc': ('django.db.models.fields.DateField', [], {'db_column': "'date'"}),
121+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
122+ },
123+ 'schedule.meeting': {
124+ 'Meta': {'object_name': 'Meeting'},
125+ 'approver': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'approver_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
126+ 'assignee': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'assignee_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
127+ 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}),
128+ 'drafter': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'drafter_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
129+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
130+ 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50', 'blank': 'True'}),
131+ 'pad_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
132+ 'participants': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Attendee']", 'symmetrical': 'False', 'through': "'Participant'", 'blank': 'True'}),
133+ 'priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
134+ 'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
135+ 'scribe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scribe_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
136+ 'slots': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
137+ 'spec_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
138+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
139+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
140+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
141+ 'topics': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Topic']", 'symmetrical': 'False', 'blank': 'True'}),
142+ 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}),
143+ 'type': ('django.db.models.fields.CharField', [], {'default': "u'blueprint'", 'max_length': '15'}),
144+ 'videographer1': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'videographer1_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
145+ 'videographer2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'videographer2_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
146+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
147+ },
148+ 'schedule.participant': {
149+ 'Meta': {'object_name': 'Participant'},
150+ 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Attendee']"}),
151+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
152+ 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}),
153+ 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
154+ },
155+ 'schedule.room': {
156+ 'Meta': {'ordering': "('summit', 'name')", 'object_name': 'Room'},
157+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'end'", 'blank': 'True'}),
158+ 'icecast_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
159+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
160+ 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}),
161+ 'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
162+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'start'", 'blank': 'True'}),
163+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
164+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
165+ 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}),
166+ 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'})
167+ },
168+ 'schedule.roombusy': {
169+ 'Meta': {'ordering': "('room', 'start_utc', 'end_utc')", 'object_name': 'RoomBusy'},
170+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
171+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172+ 'room': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Room']"}),
173+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"})
174+ },
175+ 'schedule.slot': {
176+ 'Meta': {'ordering': "('summit', 'start_utc', 'end_utc')", 'object_name': 'Slot'},
177+ 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
178+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
179+ 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}),
180+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
181+ 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'})
182+ },
183+ 'schedule.summit': {
184+ 'Meta': {'ordering': "('name',)", 'object_name': 'Summit'},
185+ 'date_end': ('django.db.models.fields.DateField', [], {'null': 'True'}),
186+ 'date_start': ('django.db.models.fields.DateField', [], {'null': 'True'}),
187+ 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}),
188+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
189+ 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
190+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
191+ 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}),
192+ 'state': ('django.db.models.fields.CharField', [], {'default': "u'sponsor'", 'max_length': '10'}),
193+ 'timezone': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
194+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
195+ },
196+ 'schedule.topic': {
197+ 'Meta': {'ordering': "('summit', 'title')", 'object_name': 'Topic'},
198+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
199+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
200+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
201+ },
202+ 'schedule.track': {
203+ 'Meta': {'ordering': "('summit', 'title', 'slug')", 'object_name': 'Track'},
204+ 'color': ('django.db.models.fields.CharField', [], {'default': "'FFFFFF'", 'max_length': '6'}),
205+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
206+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
207+ 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
208+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
209+ }
210+ }
211+
212+ complete_apps = ['schedule']
213
214=== modified file 'summit/schedule/models/trackmodel.py'
215--- summit/schedule/models/trackmodel.py 2011-06-10 04:53:01 +0000
216+++ summit/schedule/models/trackmodel.py 2011-09-03 02:18:23 +0000
217@@ -27,6 +27,7 @@
218 summit = models.ForeignKey(Summit)
219 title = models.CharField(max_length=100)
220 slug = models.CharField(max_length=100, null=True, blank=False)
221+ color = models.CharField(max_length=6, null=False, blank=False, default='FFFFFF')
222
223 class Meta:
224 app_label = 'schedule'
225
226=== modified file 'summit/schedule/render.py'
227--- summit/schedule/render.py 2011-09-02 21:00:34 +0000
228+++ summit/schedule/render.py 2011-09-03 02:18:23 +0000
229@@ -46,6 +46,8 @@
230 'height': '%dpx' % height,
231 'min-height': '%dpx' % height,
232 }
233+ if meeting.tracks.count() > 0:
234+ style['background-color'] = '#'+meeting.tracks.all()[0].color
235 return '; '.join(': '.join(x) for x in style.items())
236
237

Subscribers

People subscribed via source and target branches