Merge lp:~mhall119/loco-team-portal/579828 into lp:loco-team-portal

Proposed by Michael Hall
Status: Superseded
Proposed branch: lp:~mhall119/loco-team-portal/579828
Merge into: lp:loco-team-portal
Diff against target: 145 lines (+74/-4)
5 files modified
loco_directory/common/widgets.py (+59/-0)
loco_directory/events/forms.py (+3/-0)
loco_directory/settings.py (+1/-0)
loco_directory/templates/venues/venue_update.html (+1/-1)
loco_directory/venues/views.py (+10/-3)
To merge this branch: bzr merge lp:~mhall119/loco-team-portal/579828
Reviewer Review Type Date Requested Status
Daniel Holbach (community) Needs Information
Review via email: mp+30452@code.launchpad.net

This proposal has been superseded by a proposal from 2010-07-28.

Description of the change

Uses some modified bits of code from the Django Admin app to allow a popup window creating new venues without leaving the Event edit page.

Requires an update of ubuntu_website

To post a comment you must log in.
lp:~mhall119/loco-team-portal/579828 updated
197. By Daniel Holbach

merged lp:~nhandler/loco-directory/fixes-lp-607552

198. By Daniel Holbach

updated translation template

Revision history for this message
Daniel Holbach (dholbach) wrote :

A few quick things:
 - we need to use our version of "reverse"
 - a left-over print

Which part is borrowed from which part of Django Admin? How was it modified?

Is copy imported somewhere?

Is all of this needed? Or can we drop some parts?

review: Needs Fixing
lp:~mhall119/loco-team-portal/579828 updated
199. By Chris Johnston

Makes template and text changes to fix the /events/history/ page

Revision history for this message
Daniel Holbach (dholbach) wrote :

Which part is borrowed from which part of Django Admin? How was it modified?

review: Needs Information
lp:~mhall119/loco-team-portal/579828 updated
200. By Daniel Holbach

merged lp:~chrisjohnston/loco-directory/bugfix-lp-607615 and resolved conflicts

202. By Michael Hall <mhall@mhall-laptop>

Added import copy and remove debugging print statement

203. By Michael Hall <mhall@mhall-laptop>

Revert back to using admin media for add link icon and related object javascript

204. By Michael Hall <mhall@mhall-laptop>

Remove unused media

205. By Michael Hall

Removed unused reverse function import

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'loco_directory/common/widgets.py'
2--- loco_directory/common/widgets.py 1970-01-01 00:00:00 +0000
3+++ loco_directory/common/widgets.py 2010-07-28 13:18:43 +0000
4@@ -0,0 +1,59 @@
5+# Modified copy of django.contrib.admin.widgets.RelatedFieldWidgetWrapper
6+# Removed reverences to admin_site, and instead accept a popup_url
7+
8+from django import forms
9+from django.conf import settings
10+from django.core.urlresolvers import reverse
11+from django.utils.translation import ugettext as _
12+from django.utils.safestring import mark_safe
13+import copy
14+
15+class PopupRelatedFieldWidgetWrapper(forms.Widget):
16+ """
17+ This class is a wrapper to a given widget to add the add icon for the
18+ admin interface.
19+ """
20+ def __init__(self, widget, popup_url):
21+ self.is_hidden = widget.is_hidden
22+ self.needs_multipart_form = widget.needs_multipart_form
23+ self.attrs = widget.attrs
24+ self.choices = widget.choices
25+ self.widget = widget
26+ self.popup_url = popup_url
27+
28+ def __deepcopy__(self, memo):
29+ obj = copy.copy(self)
30+ obj.widget = copy.deepcopy(self.widget, memo)
31+ obj.attrs = self.widget.attrs
32+ memo[id(self)] = obj
33+ return obj
34+
35+ def _media(self):
36+ wm = self.widget.media
37+ wm.add_js(['%sjs/admin/RelatedObjectLookups.js'%settings.ADMIN_MEDIA_PREFIX,])
38+ return wm
39+ media = property(_media)
40+
41+ def render(self, name, value, *args, **kwargs):
42+
43+ self.widget.choices = self.choices
44+ output = [self.widget.render(name, value, *args, **kwargs)]
45+ output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
46+ (self.popup_url, name))
47+ output.append(u'<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (settings.ADMIN_MEDIA_PREFIX, _('Add Another')))
48+ return mark_safe(u''.join(output))
49+
50+ def build_attrs(self, extra_attrs=None, **kwargs):
51+ "Helper function for building an attribute dictionary."
52+ self.attrs = self.widget.build_attrs(extra_attrs=None, **kwargs)
53+ return self.attrs
54+
55+ def value_from_datadict(self, data, files, name):
56+ return self.widget.value_from_datadict(data, files, name)
57+
58+ def _has_changed(self, initial, data):
59+ return self.widget._has_changed(initial, data)
60+
61+ def id_for_label(self, id_):
62+ return self.widget.id_for_label(id_)
63+
64
65=== modified file 'loco_directory/events/forms.py'
66--- loco_directory/events/forms.py 2010-06-19 21:35:39 +0000
67+++ loco_directory/events/forms.py 2010-07-28 13:18:43 +0000
68@@ -2,6 +2,7 @@
69
70 from django import forms
71 from django.utils.translation import ugettext as _
72+from django.core.urlresolvers import reverse
73
74 from models import BaseEvent, GlobalEvent, TeamEvent, Attendee, TeamEventComment
75 from venues.models import Venue
76@@ -60,6 +61,8 @@
77 def __init__(self, *args, **kargs):
78 super(TeamEventForm, self).__init__(*args, **kargs)
79 self.fields['venue'].choices = self.grouped_venue_list()
80+ from common.widgets import PopupRelatedFieldWidgetWrapper
81+ self.fields['venue'].widget = PopupRelatedFieldWidgetWrapper(self.fields['venue'].widget, reverse('venue-new'))
82
83 def grouped_venue_list(self):
84 """
85
86=== modified file 'loco_directory/settings.py'
87--- loco_directory/settings.py 2010-07-18 16:34:12 +0000
88+++ loco_directory/settings.py 2010-07-28 13:18:43 +0000
89@@ -100,6 +100,7 @@
90 if uw_import:
91 TEMPLATE_CONTEXT_PROCESSORS += (
92 "ubuntu_website.media_processor",
93+ "ubuntu_website.popup_check",
94 )
95 TEMPLATE_DIRS += (
96 ubuntu_website.TEMPLATE_DIR,
97
98=== modified file 'loco_directory/templates/venues/venue_update.html'
99--- loco_directory/templates/venues/venue_update.html 2010-06-24 19:18:57 +0000
100+++ loco_directory/templates/venues/venue_update.html 2010-07-28 13:18:43 +0000
101@@ -30,7 +30,7 @@
102 <table>
103 {{ form.as_table }}
104 </table>
105- <p><input type="submit" value="Submit" /></p>
106+ <p>{% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %}<input type="submit" value="Submit" /></p>
107 </form>
108 </article>
109
110
111=== modified file 'loco_directory/venues/views.py'
112--- loco_directory/venues/views.py 2010-06-19 20:20:12 +0000
113+++ loco_directory/venues/views.py 2010-07-28 13:18:43 +0000
114@@ -2,9 +2,10 @@
115 from django.shortcuts import render_to_response
116 from django.shortcuts import get_object_or_404
117 from django.contrib.auth.decorators import login_required
118-from django.http import HttpResponseRedirect
119+from django.http import HttpResponse, HttpResponseRedirect
120 from django.core.urlresolvers import reverse
121 from django.utils.translation import ugettext as _
122+from django.utils.html import escape
123 from django.db.models import Q
124
125 from models import Venue
126@@ -47,12 +48,18 @@
127 """
128 new venue
129 """
130+ venue_object = Venue()
131 if request.method == 'POST':
132- form = VenueForm(data=request.POST)
133+ form = VenueForm(data=request.POST, instance=venue_object)
134 if form.is_valid():
135 form.save()
136 request.user.message_set.create(message=_('New Venue created'))
137- return HttpResponseRedirect( reverse( 'venue-list' ) )
138+ if request.REQUEST.has_key('_popup'):
139+ return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", "%s");</script>' % \
140+ # escape() calls force_unicode.
141+ (escape(venue_object.pk), escape(venue_object)))
142+ else:
143+ return HttpResponseRedirect( reverse( 'venue-list' ) )
144 else:
145 form = VenueForm()
146

Subscribers

People subscribed via source and target branches