def chooser_select_format(request, image_id): image = get_object_or_404(get_image_model(), id=image_id) if request.method == 'POST': form = ImageInsertionForm(request.POST, initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion') if form.is_valid(): format = get_image_format(form.cleaned_data['format']) preview_image = image.get_rendition(format.filter_spec) image_data = { 'id': image.id, 'title': image.title, 'format': format.name, 'alt': form.cleaned_data['alt_text'], 'class': format.classnames, 'edit_link': reverse('wagtailimages:edit', args=(image.id, )), 'preview': { 'url': preview_image.url, 'width': preview_image.width, 'height': preview_image.height, }, 'html': format.image_to_editor_html(image, form.cleaned_data['alt_text']), } return render_modal_workflow(request, None, None, None, json_data={ 'step': 'image_chosen', 'result': image_data }) else: initial = {'alt_text': image.default_alt_text} initial.update(request.GET.dict()) # If you edit an existing image, and there is no alt text, ensure that # "image is decorative" is ticked when you open the form initial['image_is_decorative'] = initial['alt_text'] == '' form = ImageInsertionForm(initial=initial, prefix='image-chooser-insertion') return render_modal_workflow(request, 'wagtailimages/chooser/select_format.html', None, { 'image': image, 'form': form }, json_data={'step': 'select_format'})
def post(self, request, image_id): image = get_object_or_404(get_image_model(), id=image_id) self.form = ImageInsertionForm( request.POST, initial={"alt_text": image.default_alt_text}, prefix="image-chooser-insertion", ) if self.form.is_valid(): return self.get_chosen_response(image) else: return self.render_select_format_response(image, self.form)
def chooser_select_format(request, image_id): image = get_object_or_404(get_image_model(), id=image_id) if request.method == 'POST': form = ImageInsertionForm(request.POST, initial={'alt_text': image.default_alt_text}) if form.is_valid(): format = get_image_format(form.cleaned_data['format']) preview_image = image.get_rendition(format.filter_spec) image_json = json.dumps({ 'id': image.id, 'title': image.title, 'format': format.name, 'alt': form.cleaned_data['alt_text'], 'class': format.classnames, 'edit_link': reverse('wagtailimages:edit', args=(image.id, )), 'preview': { 'url': preview_image.url, 'width': preview_image.width, 'height': preview_image.height, }, 'html': format.image_to_editor_html(image, form.cleaned_data['alt_text']), }) return render_modal_workflow( request, None, 'wagtailimages/chooser/image_chosen.js', {'image_json': image_json}) else: initial = {'alt_text': image.default_alt_text} initial.update(request.GET.dict()) form = ImageInsertionForm(initial=initial) return render_modal_workflow(request, 'wagtailimages/chooser/select_format.html', 'wagtailimages/chooser/select_format.js', { 'image': image, 'form': form })
def post(self, request): self.model = get_image_model() self.form = self.get_creation_form() if self.form.is_valid(): image = self.save_form(self.form) duplicates = find_image_duplicates( image=image, user=request.user, permission_policy=permission_policy, ) existing_image = duplicates.first() if existing_image: return self.render_duplicate_found_response( request, image, existing_image ) if request.GET.get("select_format"): insertion_form = ImageInsertionForm( initial={"alt_text": image.default_alt_text}, prefix="image-chooser-insertion", ) return self.render_select_format_response(image, insertion_form) else: # not specifying a format; return the image details now return self.get_chosen_response(image) else: # form is invalid return self.get_reshow_creation_form_response()
def chooser_upload(request): Image = get_image_model() ImageForm = get_image_form(Image) if request.method == 'POST': image = Image(uploaded_by_user=request.user) form = ImageForm( request.POST, request.FILES, instance=image, user=request.user, prefix='image-chooser-upload' ) if form.is_valid(): # Set image file size image.file_size = image.file.size # Set image file hash image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) if request.GET.get('select_format'): form = ImageInsertionForm( initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion' ) return render_modal_workflow( request, 'wagtailimages/chooser/select_format.html', None, {'image': image, 'form': form}, json_data={'step': 'select_format'} ) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, None, None, json_data={'step': 'image_chosen', 'result': get_image_result_data(image)} ) else: form = ImageForm(user=request.user, prefix='image-chooser-upload') images = Image.objects.order_by('-created_at') # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_image_chooser_queryset'): images = hook(images, request) paginator = Paginator(images, per_page=CHOOSER_PAGE_SIZE) images = paginator.get_page(request.GET.get('p')) context = get_chooser_context(request) context.update({ 'images': images, 'uploadform': form, }) return render_modal_workflow( request, 'wagtailimages/chooser/chooser.html', None, context, json_data=get_chooser_js_data() )
def get(self, request, image_id): image = get_object_or_404(self.model, id=image_id) initial = {"alt_text": image.default_alt_text} initial.update(request.GET.dict()) # If you edit an existing image, and there is no alt text, ensure that # "image is decorative" is ticked when you open the form initial["image_is_decorative"] = initial["alt_text"] == "" form = ImageInsertionForm(initial=initial, prefix="image-chooser-insertion") return self.render_select_format_response(image, form)
def chooser_upload(request): Image = get_image_model() ImageForm = get_image_form(Image) if request.method == 'POST': image = Image(uploaded_by_user=request.user) form = ImageForm( request.POST, request.FILES, instance=image, user=request.user, prefix='image-chooser-upload' ) if form.is_valid(): # Set image file size image.file_size = image.file.size # Set image file hash image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) if request.GET.get('select_format'): form = ImageInsertionForm( initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion' ) return render_modal_workflow( request, 'wagtailimages/chooser/select_format.html', None, {'image': image, 'form': form}, json_data={'step': 'select_format'} ) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, None, None, json_data={'step': 'image_chosen', 'result': get_image_result_data(image)} ) else: form = ImageForm(user=request.user, prefix='image-chooser-upload') upload_form_html = render_to_string('wagtailimages/chooser/upload_form.html', { 'form': form, 'will_select_format': request.GET.get('select_format'), }, request) return render_modal_workflow( request, None, None, None, json_data={ 'step': 'reshow_upload_form', 'htmlFragment': upload_form_html } )
def chooser_select_format(request, image_id): image = get_object_or_404(get_image_model(), id=image_id) if request.method == 'POST': form = ImageInsertionForm( request.POST, initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion' ) if form.is_valid(): format = get_image_format(form.cleaned_data['format']) preview_image = image.get_rendition(format.filter_spec) image_data = { 'id': image.id, 'title': image.title, 'format': format.name, 'alt': form.cleaned_data['alt_text'], 'class': format.classnames, 'edit_link': reverse('wagtailimages:edit', args=(image.id,)), 'preview': { 'url': preview_image.url, 'width': preview_image.width, 'height': preview_image.height, }, 'html': format.image_to_editor_html(image, form.cleaned_data['alt_text']), } return render_modal_workflow( request, None, None, None, json_data={'step': 'image_chosen', 'result': image_data} ) else: initial = {'alt_text': image.default_alt_text} initial.update(request.GET.dict()) form = ImageInsertionForm(initial=initial, prefix='image-chooser-insertion') return render_modal_workflow( request, 'wagtailimages/chooser/select_format.html', None, {'image': image, 'form': form}, json_data={'step': 'select_format'} )
def chooser_upload(request): Image = get_image_model() ImageForm = get_image_form(Image) if request.method == 'POST': image = Image(uploaded_by_user=request.user) form = ImageForm(request.POST, request.FILES, instance=image, user=request.user) if form.is_valid(): form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) if request.GET.get('select_format'): form = ImageInsertionForm( initial={'alt_text': image.default_alt_text}) return render_modal_workflow( request, 'wagtailimages/chooser/select_format.html', 'wagtailimages/chooser/select_format.js', { 'image': image, 'form': form }) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, 'wagtailimages/chooser/image_chosen.js', {'image_json': get_image_json(image)}) else: form = ImageForm(user=request.user) images = Image.objects.order_by('-created_at') # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_image_chooser_queryset'): images = hook(images, request) paginator, images = paginate(request, images, per_page=12) context = get_chooser_context(request) context.update({ 'images': images, 'uploadform': form, }) return render_modal_workflow(request, 'wagtailimages/chooser/chooser.html', 'wagtailimages/chooser/chooser.js', context)
def chooser_upload(request): Image = get_image_model() ImageForm = get_image_form(Image) searchform = SearchForm() if request.method == 'POST': image = Image(uploaded_by_user=request.user) form = ImageForm(request.POST, request.FILES, instance=image, user=request.user) if form.is_valid(): # Set image file size image.file_size = image.file.size # Set image file hash image.file.seek(0) image._set_file_hash(image.file.read()) form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) if request.GET.get('select_format'): form = ImageInsertionForm(initial={'alt_text': image.default_alt_text}) return render_modal_workflow( request, 'wagtailimages/chooser/select_format.html', None, {'image': image, 'form': form}, json_data={'step': 'select_format'} ) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, None, None, json_data={'step': 'image_chosen', 'result': get_image_result_data(image)} ) else: form = ImageForm(user=request.user) images = Image.objects.order_by('-created_at') paginator, images = paginate(request, images, per_page=12) return render_modal_workflow( request, 'wagtailimages/chooser/chooser.html', None, {'images': images, 'uploadform': form, 'searchform': searchform}, json_data=get_chooser_context() )
class ImageSelectFormatView(SelectFormatResponseMixin, ImageChosenResponseMixin, View): model = None def get(self, request, image_id): image = get_object_or_404(self.model, id=image_id) initial = {"alt_text": image.default_alt_text} initial.update(request.GET.dict()) # If you edit an existing image, and there is no alt text, ensure that # "image is decorative" is ticked when you open the form initial["image_is_decorative"] = initial["alt_text"] == "" form = ImageInsertionForm(initial=initial, prefix="image-chooser-insertion") return self.render_select_format_response(image, form) def get_chosen_response_data(self, image): format = get_image_format(self.form.cleaned_data["format"]) alt_text = self.form.cleaned_data["alt_text"] response_data = super().get_chosen_response_data( image, preview_image_filter=format.filter_spec ) response_data.update( { "format": format.name, "alt": alt_text, "class": format.classnames, "html": format.image_to_editor_html(image, alt_text), } ) return response_data def post(self, request, image_id): image = get_object_or_404(get_image_model(), id=image_id) self.form = ImageInsertionForm( request.POST, initial={"alt_text": image.default_alt_text}, prefix="image-chooser-insertion", ) if self.form.is_valid(): return self.get_chosen_response(image) else: return self.render_select_format_response(image, self.form)
def image_select_format(request, image_id): image = get_object_or_404(get_image_model(), id=image_id) if request.method == "POST": form = ImageInsertionForm( request.POST, initial={"alt_text": image.default_alt_text}, prefix="image-chooser-insertion", ) if form.is_valid(): format = get_image_format(form.cleaned_data["format"]) preview_image = image.get_rendition(format.filter_spec) image_data = { "id": image.id, "title": image.title, "format": format.name, "alt": form.cleaned_data["alt_text"], "class": format.classnames, "edit_link": reverse("wagtailimages:edit", args=(image.id, )), "preview": { "url": preview_image.url, "width": preview_image.width, "height": preview_image.height, }, "html": format.image_to_editor_html(image, form.cleaned_data["alt_text"]), } return render_modal_workflow( request, None, None, None, json_data={ "step": "image_chosen", "result": image_data }, ) else: initial = {"alt_text": image.default_alt_text} initial.update(request.GET.dict()) form = ImageInsertionForm(initial=initial, prefix="image-chooser-insertion") return render_modal_workflow( request, "non_admin_draftail/image/select_format.html", None, { "image": image, "form": form }, json_data={"step": "select_format"}, )
def image_chooser_and_upload(request): Image = get_image_model() ImageForm = get_image_form(Image) if request.method == "POST": image = Image(uploaded_by_user=request.user) form = ImageForm( request.POST, request.FILES, instance=image, user=request.user, prefix="image-chooser-upload", ) if form.is_valid(): # Set image file size image.file_size = image.file.size # Set image file hash image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) if request.GET.get("select_format"): form = ImageInsertionForm( initial={"alt_text": image.default_alt_text}, prefix="image-chooser-insertion", ) return render_modal_workflow( request, "non_admin_draftail/image/select_format.html", None, { "image": image, "form": form }, json_data={"step": "select_format"}, ) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, None, None, json_data={ "step": "image_chosen", "result": get_image_result_data(image), }, ) else: form = ImageForm(user=request.user, prefix="image-chooser-upload") context = get_chooser_context(request) context.update({"uploadform": form}) return render_modal_workflow( request, "non_admin_draftail/image/upload.html", None, context, json_data=get_chooser_js_data(), )
def chooser_upload(request): Image = get_image_model() ImageForm = get_image_form(Image) if request.method == "POST": image = Image(uploaded_by_user=request.user) form = ImageForm( request.POST, request.FILES, instance=image, user=request.user, prefix="image-chooser-upload", ) if form.is_valid(): # Set image file size image.file_size = image.file.size # Set image file hash image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) duplicates = find_image_duplicates( image=image, user=request.user, permission_policy=permission_policy, ) existing_image = duplicates.first() if existing_image: return duplicate_found(request, image, existing_image) if request.GET.get("select_format"): form = ImageInsertionForm( initial={"alt_text": image.default_alt_text}, prefix="image-chooser-insertion", ) return render_modal_workflow( request, "wagtailimages/chooser/select_format.html", None, { "image": image, "form": form }, json_data={"step": "select_format"}, ) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, None, None, json_data={ "step": "image_chosen", "result": get_image_result_data(image), }, ) else: form = ImageForm(user=request.user, prefix="image-chooser-upload") upload_form_html = render_to_string( "wagtailimages/chooser/upload_form.html", { "form": form, "will_select_format": request.GET.get("select_format"), }, request, ) return render_modal_workflow( request, None, None, None, json_data={ "step": "reshow_upload_form", "htmlFragment": upload_form_html }, )
def chooser_select(request, image_id): Image = get_image_model() ImageForm = get_image_form(Image, hide_file=True) image = get_object_or_404(Image, id=image_id) if not request.is_ajax(): return HttpResponseBadRequest("Cannot POST to this view without AJAX") if not image.is_editable_by_user(request.user): raise PermissionDenied form = ImageForm(request.POST, request.FILES, instance=image, prefix='image-' + image_id, user=request.user) if form.is_valid(): form.save() # Reindex the image to make sure all tags are indexed search_index.insert_or_update_object(image) # several possibilities starting from here, based on the GET params # will_select_format = request.GET.get('select_format') will_select_rendition = request.GET.get('select_rendition') if will_select_format: form = ImageInsertionForm( initial={'alt_text': image.default_alt_text}) return render_modal_workflow( request, 'wagtailimages/chooser/select_format.html', 'wagtailimages/chooser/select_format.js', { 'image': image, 'form': form }) elif will_select_rendition: form = ImageCropperForm(**get_cropper_settings(request, image)) return render_modal_workflow( request, 'wagtailimages/chooser/select_rendition.html', 'wagtailimages/chooser/select_rendition.js', { 'image': image, 'form': form }) else: # not specifying a format; return the image details now return render_modal_workflow( request, None, 'wagtailimages/chooser/image_chosen.js', {'image_json': get_image_json(image)}) else: # something was wrong with the submitted data # return JsonResponse({ 'success': False, 'image_id': int(image_id), 'form': render_to_string('wagtailimages/chooser/update.html', { 'image': image, 'form': form, 'additional_params': get_cropper_params(request), }, request=request), })