diff options
Diffstat (limited to 'chimere/widgets.py')
| -rw-r--r-- | chimere/widgets.py | 102 | 
1 files changed, 100 insertions, 2 deletions
| diff --git a/chimere/widgets.py b/chimere/widgets.py index ce848ea..c0f08c7 100644 --- a/chimere/widgets.py +++ b/chimere/widgets.py @@ -26,6 +26,9 @@ from django.core.exceptions import ObjectDoesNotExist  from django.conf import settings  from django.contrib.gis.db import models  from django.contrib.gis.geos import fromstr +from django.utils.html import conditional_escape +from django.forms.widgets import RadioInput, RadioFieldRenderer +from django.utils.encoding import force_unicode  from django.utils.safestring import mark_safe  from django.utils.translation import ugettext as _ @@ -100,13 +103,48 @@ class ChosenSelectWidget(forms.Select):          u"</script>\n" % kwargs['attrs']['id']          return mark_safe(rendered) +""" +JQuery UI button select widget. +""" +class ButtonRadioInput(RadioInput): +    def render(self, name=None, value=None, attrs=None, choices=()): +        name = name or self.name +        value = value or self.value +        attrs = attrs or self.attrs +        if 'id' in self.attrs: +            label_for = ' for="%s_%s"' % (self.attrs['id'], self.index) +        else: +            label_for = '' +        choice_label = conditional_escape(force_unicode(self.choice_label)) +        return mark_safe(u'%s <label%s>%s</label>' % (self.tag(), label_for, +                                                      choice_label)) +class ButtonRadioFieldRenderer(RadioFieldRenderer): +    def __iter__(self): +        for i, choice in enumerate(self.choices): +            yield ButtonRadioInput(self.name, self.value, self.attrs.copy(), +                                   choice, i) +    def render(self): +        return mark_safe(u'\n'.join([force_unicode(w) for w in self])) +class ButtonSelectWidget(forms.RadioSelect): +    def __init__(self, *args, **kwargs): +        self.renderer = ButtonRadioFieldRenderer +        super(ButtonSelectWidget, self).__init__(*args, **kwargs) + +    def render(self, *args, **kwargs): +        rendered = "<div id='%s'>\n" % kwargs['attrs']['id'] +        rendered += super(ButtonSelectWidget, self).render(*args, **kwargs) +        rendered += u"\n<script type='text/javascript'>\n"\ +        u"  $('#%s').buttonset();\n"\ +        u"</script>\n</div>\n" % kwargs['attrs']['id'] +        return mark_safe(rendered) +  class TextareaWidget(forms.Textarea):      """      Manage the edition of a text using TinyMCE      """      class Media: -        js = ["%stiny_mce.js" % settings.TINYMCE_URL, -              "%schimere/js/textareas.js" % settings.STATIC_URL,] +        js = ["%stiny_mce.js" % settings.TINYMCE_URL] +      def render(self, *args, **kwargs):          if 'attrs' not in kwargs:              kwargs['attrs'] = {} @@ -116,6 +154,45 @@ class TextareaWidget(forms.Textarea):              kwargs['attrs']['class'] += ' '          kwargs['attrs']['class'] += 'mceEditor'          rendered = super(TextareaWidget, self).render(*args, **kwargs) +        rendered += u"""<script type='text/javascript'> +tinyMCE.init({ +    mode : "textareas", +    theme : "advanced", +    relative_urls : false, +    editor_selector : "mceEditor", +    theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,bullist,numlist,separator,hr,separator,link", +    theme_advanced_buttons2 : "", +    theme_advanced_buttons3 : "" +}); +</script> +""" +        return mark_safe(rendered) + +class FullTextareaWidget(forms.Textarea): +    """ +    Manage the edition of a text using TinyMCE +    """ +    class Media: +        js = ["%stiny_mce.js" % settings.TINYMCE_URL] + +    def render(self, *args, **kwargs): +        if 'attrs' not in kwargs: +            kwargs['attrs'] = {} +        if 'class' not in kwargs['attrs']: +            kwargs['attrs']['class'] = '' +        else: +            kwargs['attrs']['class'] += ' ' +        kwargs['attrs']['class'] += 'mceEditor' +        rendered = super(FullTextareaWidget, self).render(*args, **kwargs) +        rendered += u"""<script type='text/javascript'> +tinyMCE.init({ +    mode : "textareas", +    theme : "advanced", +    relative_urls : false, +    editor_selector : "mceEditor" +}); +</script> +"""          return mark_safe(rendered)  class DatePickerWidget(forms.TextInput): @@ -131,6 +208,27 @@ class DatePickerWidget(forms.TextInput):          u"</script>\n" % kwargs['attrs']['id']          return mark_safe(rendered) +class NominatimWidget(forms.TextInput): +    class Media: +        js = ["%schimere/js/nominatim-widget.js" % settings.STATIC_URL] +    def render(self, name, value, attrs=None, area_name=''): +        tpl = u""" +<input type='hidden' name='nominatim_%(id)s_lat' id='nominatim_%(id)s_lat'/> +<input type='hidden' name='nominatim_%(id)s_lon' id='nominatim_%(id)s_lon'/> +<input type='text' class='nominatim-widget' name='nominatim_%(id)s' id='nominatim_%(id)s' value=""/> +<label class='nominatim-label' id='nominatim_%(id)s_label'> </label> +<script type='text/javascript'> +var default_nominatim_lbl = "%(label)s"; +var nominatim_url = "%(nominatim_url)s"; +$("#nominatim_%(id)s").val(default_nominatim_lbl); +$("#nominatim_%(id)s").click(function(){ +    $("#nominatim_%(id)s").val(''); +}); +</script> +""" % {'id':name, 'nominatim_url':settings.NOMINATIM_URL, +       'label':_(u"Street, City, Country")} +        return mark_safe(tpl) +  class PointChooserWidget(forms.TextInput):      """      Manage the edition of point on a map | 
