Merge lp:~mhall119/summit/fixes-793019 into lp:summit
- fixes-793019
- Merge into trunk
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 |
Related bugs: |
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 : | # |
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 |
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?