X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/276656dcc680e1a35103d310dea046152ddc3785..8139f82c719f4a041b18fd445026b8cf78aca4a6:/apps/ajaxable/utils.py diff --git a/apps/ajaxable/utils.py b/apps/ajaxable/utils.py index e32356aee..79eca5298 100755 --- a/apps/ajaxable/utils.py +++ b/apps/ajaxable/utils.py @@ -53,6 +53,12 @@ def require_login(request): return HttpResponseRedirect('/uzytkownicy/zaloguj')# next?=request.build_full_path()) +def placeholdized(form): + for field in form.fields.values(): + field.widget.attrs['placeholder'] = field.label + return form + + class AjaxableFormView(object): """Subclass this to create an ajaxable view for any form. @@ -60,6 +66,7 @@ class AjaxableFormView(object): """ form_class = None + placeholdize = False # override to customize form look template = "ajaxable/form.html" submit = _('Send') @@ -74,7 +81,8 @@ class AjaxableFormView(object): @method_decorator(vary_on_headers('X-Requested-With')) def __call__(self, request, *args, **kwargs): """A view displaying a form, or JSON if request is AJAX.""" - form_args, form_kwargs = self.form_args(request, *args, **kwargs) + obj = self.get_object(request, *args, **kwargs) + form_args, form_kwargs = self.form_args(request, obj) if self.form_prefix: form_kwargs['prefix'] = self.form_prefix @@ -104,6 +112,8 @@ class AjaxableFormView(object): else: errors = form.errors response_data = {'success': False, 'errors': errors} + else: + response_data = None if request.is_ajax(): return HttpResponse(LazyEncoder(ensure_ascii=False).encode(response_data)) else: @@ -114,28 +124,46 @@ class AjaxableFormView(object): form = self.form_class(*form_args, **form_kwargs) response_data = None - template = self.template if request.is_ajax() else self.full_template + title = self.title + if request.is_ajax(): + template = self.template + else: + template = self.full_template + cd = self.context_description(request, obj) + if cd: + title += ": " + cd + if self.placeholdize: + form = placeholdized(form) context = { self.formname: form, - "title": self.title, + "title": title, + "placeholdize": self.placeholdize, "submit": self.submit, "response_data": response_data, "ajax_template": self.template, "view_args": args, "view_kwargs": kwargs, } - context.update(self.extra_context()) + context.update(self.extra_context(request, obj)) return render_to_response(template, context, context_instance=RequestContext(request)) - def form_args(self, request, *args, **kwargs): + def get_object(self, request, *args, **kwargs): + """Override to parse view args and get some associated data.""" + return None + + def form_args(self, request, obj): """Override to parse view args and give additional args to the form.""" return (), {} - def extra_context(self): + def extra_context(self, request, obj): """Override to pass something to template.""" return {} + def context_description(self, request, obj): + """Description to appear in standalone form, but not in AJAX form.""" + return "" + def success(self, form, request): """What to do when the form is valid.