~doctormo/erato/trunk

« back to all changes in this revision

Viewing changes to art_website/common/widgets.py

  • Committer: Martin Owens
  • Date: 2010-10-20 20:33:00 UTC
  • Revision ID: doctormo@gmail.com-20101020203300-9vsolpbwc2tbcxoc
Manual merge in changes from designhub branch for common directory.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#
2
 
# Copyright 2010, Martin Owens and Adnane Belmadiaf.
3
 
#
4
 
# This program is free software: you can redistribute it and/or modify
5
 
# it under the terms of the GNU Affero General Public License as
6
 
# published by the Free Software Foundation, either version 3 of the
7
 
# License, or (at your option) any later version.
8
 
#
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU Affero General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU Affero General Public License
15
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
 
#
17
 
 
18
 
# Modified copy of django.contrib.admin.widgets.RelatedFieldWidgetWrapper
19
 
# Removed reverences to admin_site, and instead accept a popup_url
20
 
 
21
 
from django import forms
22
 
from django.conf import settings
23
 
from django.utils.translation import ugettext as _
24
 
from django.utils.safestring import mark_safe
25
 
import copy
26
 
 
27
 
class PopupRelatedFieldWidgetWrapper(forms.Widget):
28
 
    """
29
 
    This class is a wrapper to a given widget to add the add icon for the
30
 
    admin interface.
31
 
    """
32
 
    def __init__(self, widget, popup_url):
33
 
        self.is_hidden = widget.is_hidden
34
 
        self.needs_multipart_form = widget.needs_multipart_form
35
 
        self.attrs = widget.attrs
36
 
        self.choices = widget.choices
37
 
        self.widget = widget
38
 
        self.popup_url = popup_url
39
 
 
40
 
    def __deepcopy__(self, memo):
41
 
        obj = copy.copy(self)
42
 
        obj.widget = copy.deepcopy(self.widget, memo)
43
 
        obj.attrs = self.widget.attrs
44
 
        memo[id(self)] = obj
45
 
        return obj
46
 
 
47
 
    def _media(self):
48
 
        wm = self.widget.media
49
 
        wm.add_js(['%sjs/admin/RelatedObjectLookups.js'%settings.ADMIN_MEDIA_PREFIX,])
50
 
        return wm
51
 
    media = property(_media)
52
 
 
53
 
    def render(self, name, value, *args, **kwargs):
54
 
 
55
 
        self.widget.choices = self.choices
56
 
        output = [self.widget.render(name, value, *args, **kwargs)]
57
 
        output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
58
 
            (self.popup_url, name))
59
 
        output.append(u'<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (settings.ADMIN_MEDIA_PREFIX, _('Add Another')))
60
 
        return mark_safe(u''.join(output))
61
 
 
62
 
    def build_attrs(self, extra_attrs=None, **kwargs):
63
 
        "Helper function for building an attribute dictionary."
64
 
        self.attrs = self.widget.build_attrs(extra_attrs=None, **kwargs)
65
 
        return self.attrs
66
 
 
67
 
    def value_from_datadict(self, data, files, name):
68
 
        return self.widget.value_from_datadict(data, files, name)
69
 
 
70
 
    def _has_changed(self, initial, data):
71
 
        return self.widget._has_changed(initial, data)
72
 
 
73
 
    def id_for_label(self, id_):
74
 
        return self.widget.id_for_label(id_)
75