Refactor context setting to reduce duplication and remove unnecessary helper functions

pull/7507/head
Matt Westcott 2021-09-03 20:53:48 +01:00 zatwierdzone przez LB (Ben Johnston)
rodzic 107d1a8aeb
commit a96035a619
1 zmienionych plików z 49 dodań i 57 usunięć

Wyświetl plik

@ -24,16 +24,6 @@ permission_checker = PermissionPolicyChecker(permission_policy)
CHOOSER_PAGE_SIZE = getattr(settings, 'WAGTAILIMAGES_CHOOSER_PAGE_SIZE', 12)
def get_chooser_js_data():
"""construct context variables needed by the chooser JS"""
return {
'step': 'chooser',
'error_label': _("Server Error"),
'error_message': _("Report this error to your webmaster with the following information:"),
'tag_autocomplete_url': reverse('wagtailadmin_tag_autocomplete'),
}
def get_image_result_data(image):
"""
helper function: given an image, return the json data to pass back to the
@ -53,34 +43,9 @@ def get_image_result_data(image):
}
def get_chooser_context(request):
"""Helper function to return common template context variables for the main chooser view"""
collections = permission_policy.collections_user_has_permission_for(
request.user, 'choose'
)
if len(collections) < 2:
collections = None
return {
'searchform': SearchForm(),
'is_searching': False,
'query_string': None,
'will_select_format': request.GET.get('select_format'),
'popular_tags': popular_tags_for_model(get_image_model()),
'collections': collections,
}
class BaseChooseView(View):
def get(self, request):
Image = get_image_model()
if permission_policy.user_has_permission(request.user, 'add'):
ImageForm = get_image_form(Image)
self.uploadform = ImageForm(user=request.user, prefix='image-chooser-upload')
else:
self.uploadform = None
self.image_model = get_image_model()
images = permission_policy.instances_user_has_any_permission_for(
request.user, ['choose']
@ -94,16 +59,19 @@ class BaseChooseView(View):
if collection_id:
images = images.filter(collection=collection_id)
searchform = SearchForm(request.GET)
if searchform.is_valid():
self.q = searchform.cleaned_data['q']
self.is_searching = False
self.q = None
images = images.search(self.q)
self.is_searching = True
if 'q' in request.GET:
self.search_form = SearchForm(request.GET)
if self.search_form.is_valid():
self.q = self.search_form.cleaned_data['q']
self.is_searching = True
images = images.search(self.q)
else:
self.is_searching = False
self.q = None
self.search_form = SearchForm()
if not self.is_searching:
tag_name = request.GET.get('tag')
if tag_name:
images = images.filter(tags__name=tag_name)
@ -113,33 +81,57 @@ class BaseChooseView(View):
self.images = paginator.get_page(request.GET.get('p'))
return self.render_to_response()
def get_context_data(self):
return {
'images': self.images,
'is_searching': self.is_searching,
'query_string': self.q,
'will_select_format': self.request.GET.get('select_format')
}
def render_to_response(self):
raise NotImplementedError()
class ChooseView(BaseChooseView):
def render_to_response(self):
context = get_chooser_context(self.request)
def get_context_data(self):
context = super().get_context_data()
if permission_policy.user_has_permission(self.request.user, 'add'):
ImageForm = get_image_form(self.image_model)
uploadform = ImageForm(user=self.request.user, prefix='image-chooser-upload')
else:
uploadform = None
collections = permission_policy.collections_user_has_permission_for(
self.request.user, 'choose'
)
if len(collections) < 2:
collections = None
context.update({
'images': self.images,
'is_searching': self.is_searching,
'query_string': self.q,
'uploadform': self.uploadform,
'searchform': self.search_form,
'popular_tags': popular_tags_for_model(self.image_model),
'collections': collections,
'uploadform': uploadform,
})
return context
def render_to_response(self):
return render_modal_workflow(
self.request, 'wagtailimages/chooser/chooser.html', None, context,
json_data=get_chooser_js_data()
self.request, 'wagtailimages/chooser/chooser.html', None, self.get_context_data(),
json_data={
'step': 'chooser',
'error_label': _("Server Error"),
'error_message': _("Report this error to your webmaster with the following information:"),
'tag_autocomplete_url': reverse('wagtailadmin_tag_autocomplete'),
}
)
class ChooseResultsView(BaseChooseView):
def render_to_response(self):
return TemplateResponse(self.request, "wagtailimages/chooser/results.html", {
'images': self.images,
'is_searching': self.is_searching,
'query_string': self.q,
'will_select_format': self.request.GET.get('select_format')
})
return TemplateResponse(self.request, "wagtailimages/chooser/results.html", self.get_context_data())
def image_chosen(request, image_id):