X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/3d1fb545dd1f49e0624d3adf20e5568b1c33d8ec..e7ef95e5867bba96cb445fef0d8932ab5ed6c938:/apps/catalogue/fields.py?ds=sidebyside diff --git a/apps/catalogue/fields.py b/apps/catalogue/fields.py index 4de2e7cb6..57ce58189 100644 --- a/apps/catalogue/fields.py +++ b/apps/catalogue/fields.py @@ -73,20 +73,12 @@ class JSONField(models.TextField): class JQueryAutoCompleteWidget(forms.TextInput): - def __init__(self, source, options=None, *args, **kwargs): - self.source = source - self.options = None - if options: - self.options = dumps(options) + def __init__(self, options, *args, **kwargs): + self.options = dumps(options) super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs) - def render_js(self, field_id): - source = "'%s'" % escape(self.source) - options = '' - if self.options: - options += ', %s' % self.options - - return u'$(\'#%s\').autocomplete(%s%s).result(autocomplete_result_handler);' % (field_id, source, options) + def render_js(self, field_id, options): + return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options) def render(self, name, value=None, attrs=None): final_attrs = self.build_attrs(attrs, name=name) @@ -100,32 +92,45 @@ class JQueryAutoCompleteWidget(forms.TextInput): ''' % { - 'attrs' : flatatt(final_attrs), - 'js' : self.render_js(final_attrs['id']), + 'attrs': flatatt(final_attrs), + 'js' : self.render_js(final_attrs['id'], self.options), } return mark_safe(html) +class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget): + def __init__(self, *args, **kwargs): + super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs) + + def render_js(self, field_id, options): + return u""" + $('#%s') + .autocomplete($.extend({ + minLength: 0, + select: autocomplete_result_handler, + focus: function (ui, item) { return false; } + }, %s)) + .data("autocomplete")._renderItem = autocomplete_format_item; + """ % (field_id, options) + + class JQueryAutoCompleteField(forms.CharField): - def __init__(self, source, options=None, *args, **kwargs): + def __init__(self, source, options={}, *args, **kwargs): if 'widget' not in kwargs: - kwargs['widget'] = JQueryAutoCompleteWidget(source, options) + options['source'] = source + kwargs['widget'] = JQueryAutoCompleteWidget(options) super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) -try: - # check for south - from south.modelsinspector import add_introspection_rules - add_introspection_rules([ - ( - [JSONField], # Class(es) these apply to - [], # Positional arguments (not used) - {}, # Keyword argument - ), ], ["^catalogue\.fields\.JSONField"]) -except ImportError: - pass +class JQueryAutoCompleteSearchField(forms.CharField): + def __init__(self, source, options={}, *args, **kwargs): + if 'widget' not in kwargs: + options['source'] = source + kwargs['widget'] = JQueryAutoCompleteSearchWidget(options) + + super(JQueryAutoCompleteSearchField, self).__init__(*args, **kwargs) class OverwritingFieldFile(FieldFile): @@ -133,13 +138,25 @@ class OverwritingFieldFile(FieldFile): Deletes the old file before saving the new one. """ - def save(self, *args, **kwargs): + def save(self, name, content, *args, **kwargs): leave = kwargs.pop('leave', None) - if not leave and self: + # delete if there's a file already and there's a new one coming + if not leave and self and (not hasattr(content, 'path') or + content.path != self.path): self.delete(save=False) - return super(OverwritingFieldFile, self).save(*args, **kwargs) + return super(OverwritingFieldFile, self).save( + name, content, *args, **kwargs) class OverwritingFileField(models.FileField): attr_class = OverwritingFieldFile + +try: + # check for south + from south.modelsinspector import add_introspection_rules + + add_introspection_rules([], ["^catalogue\.fields\.JSONField"]) + add_introspection_rules([], ["^catalogue\.fields\.OverwritingFileField"]) +except ImportError: + pass