From 82dc0ab2f6928be28502434c1ddc19d113403f60 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 19 Feb 2015 17:25:33 +0000 Subject: [PATCH 1/7] adding ability to link user to chosen page --- .../static/wagtailadmin/js/page-chooser.js | 2 ++ .../static/wagtailadmin/scss/components/forms.scss | 10 ++++++++++ .../templates/wagtailadmin/pages/list.html | 4 ++-- .../templates/wagtailadmin/widgets/chooser.html | 9 +++++---- wagtail/wagtailadmin/widgets.py | 13 +++++++++++++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/page-chooser.js b/wagtail/wagtailadmin/static/wagtailadmin/js/page-chooser.js index b1e4b849f5..b3488e05ad 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/page-chooser.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/page-chooser.js @@ -2,6 +2,7 @@ function createPageChooser(id, pageType, openAtParentId) { var chooserElement = $('#' + id + '-chooser'); var pageTitle = chooserElement.find('.title'); var input = $('#' + id); + var editLink = chooserElement.find('.edit-link'); $('.action-choose', chooserElement).click(function() { var initialUrl = window.chooserUrls.pageChooser; @@ -17,6 +18,7 @@ function createPageChooser(id, pageType, openAtParentId) { openAtParentId = pageData.parentId; pageTitle.text(pageData.title); chooserElement.removeClass('blank'); + editLink.attr('href', pageData.editUrl); } } }); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss index 2639eb2446..dea39c69ba 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss @@ -655,6 +655,16 @@ ul.inline li:first-child, li.inline:first-child{ display: none; } + .actions{ + overflow:hidden; + @include clearfix; + + li{ + float:left; + margin:0.3em; + } + } + /* ...unless the .page-chooser has the 'blank' class set */ &.blank { .chosen { display: none; } diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html index 367e2dd2de..8c620ae238 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html @@ -48,7 +48,7 @@ {% elif choosing %}

{% if parent_page.can_choose %} - {{ parent_page.title }} + {{ parent_page.title }} {% else %} {{ parent_page.title }} {% endif %} @@ -183,7 +183,7 @@ {% endif %} {% elif choosing %} {% if page.can_choose %} - {{ page.title }} + {{ page.title }} {% else %} {{ page.title }} {% endif %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html b/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html index cc5e9218f0..aff5c34481 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html @@ -12,12 +12,13 @@
{% block chosen_state_view %}{% endblock %} -
+
    {% if not widget.is_required %} - +
  • {% endif %} - -
+
  • +
  • {{ widget.link_to_chosen_text }}
  • +
    diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py index ae127f2bb5..2031821f42 100644 --- a/wagtail/wagtailadmin/widgets.py +++ b/wagtail/wagtailadmin/widgets.py @@ -41,6 +41,8 @@ class AdminChooser(WidgetWithScript, widgets.Input): choose_one_text = _("Choose an item") choose_another_text = _("Choose another item") clear_choice_text = _("Clear choice") + link_to_chosen_url = "#" + link_to_chosen_text = _("Edit this item") def get_instance(self, model_class, value): # helper method for cleanly turning 'value' into an instance object @@ -68,6 +70,10 @@ class AdminChooser(WidgetWithScript, widgets.Input): self.choose_another_text = kwargs.pop('choose_another_text') if 'clear_choice_text' in kwargs: self.clear_choice_text = kwargs.pop('clear_choice_text') + if 'link_to_chosen_text' in kwargs: + self.link_to_chosen_text = kwargs.pop('link_to_chosen_text') + if 'link_to_chosen_url' in kwargs: + self.link_to_chosen_url = kwargs.pop('link_to_chosen_url') super(AdminChooser, self).__init__(**kwargs) @@ -75,6 +81,8 @@ class AdminPageChooser(AdminChooser): target_content_type = None choose_one_text = _('Choose a page') choose_another_text = _('Choose another page') + link_to_chosen_url = "" + link_to_chosen_text = _('Edit this page') def __init__(self, content_type=None, **kwargs): super(AdminPageChooser, self).__init__(**kwargs) @@ -86,6 +94,11 @@ class AdminPageChooser(AdminChooser): model_class = self.target_content_type.model_class() instance = self.get_instance(model_class, value) + try: + self.link_to_chosen_url = reverse('wagtailadmin_pages_edit', args=(instance.id,)) + except AttributeError: + pass + return render_to_string("wagtailadmin/widgets/page_chooser.html", { 'widget': self, 'original_field_html': original_field_html, From d6180418c29b97a2fa18e23b3d5d4ef2428fd69c Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 19 Feb 2015 17:33:08 +0000 Subject: [PATCH 2/7] added ability to link user to chosen image --- wagtail/wagtailadmin/widgets.py | 2 +- .../static/wagtailimages/js/image-chooser.js | 2 ++ wagtail/wagtailimages/views/chooser.py | 3 +++ wagtail/wagtailimages/widgets.py | 9 +++++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py index 2031821f42..00591e6783 100644 --- a/wagtail/wagtailadmin/widgets.py +++ b/wagtail/wagtailadmin/widgets.py @@ -81,7 +81,7 @@ class AdminPageChooser(AdminChooser): target_content_type = None choose_one_text = _('Choose a page') choose_another_text = _('Choose another page') - link_to_chosen_url = "" + link_to_chosen_url = "#" link_to_chosen_text = _('Edit this page') def __init__(self, content_type=None, **kwargs): diff --git a/wagtail/wagtailimages/static/wagtailimages/js/image-chooser.js b/wagtail/wagtailimages/static/wagtailimages/js/image-chooser.js index c6ab2af3ed..75119d7990 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/image-chooser.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/image-chooser.js @@ -2,6 +2,7 @@ function createImageChooser(id) { var chooserElement = $('#' + id + '-chooser'); var previewImage = chooserElement.find('.preview-image img'); var input = $('#' + id); + var editLink = chooserElement.find('.edit-link'); $('.action-choose', chooserElement).click(function() { ModalWorkflow({ @@ -16,6 +17,7 @@ function createImageChooser(id) { 'alt': imageData.title }); chooserElement.removeClass('blank'); + editLink.attr('href', imageData.edit_link); } } }); diff --git a/wagtail/wagtailimages/views/chooser.py b/wagtail/wagtailimages/views/chooser.py index 00569bc358..fbfd9bbb29 100644 --- a/wagtail/wagtailimages/views/chooser.py +++ b/wagtail/wagtailimages/views/chooser.py @@ -1,5 +1,6 @@ import json +from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404, render from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib.auth.decorators import permission_required @@ -23,6 +24,7 @@ def get_image_json(image): return json.dumps({ 'id': image.id, + 'edit_link': reverse('wagtailimages_edit_image', args=(image.id,)), 'title': image.title, 'preview': { 'url': preview_image.url, @@ -165,6 +167,7 @@ def chooser_select_format(request, image_id): 'format': format.name, 'alt': form.cleaned_data['alt_text'], 'class': format.classnames, + 'edit_link': reverse('wagtailimages_edit_image', args=(image.id,)), 'preview': { 'url': preview_image.url, 'width': preview_image.width, diff --git a/wagtail/wagtailimages/widgets.py b/wagtail/wagtailimages/widgets.py index e628ed4e91..d579827b33 100644 --- a/wagtail/wagtailimages/widgets.py +++ b/wagtail/wagtailimages/widgets.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals import json +from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -13,6 +14,9 @@ class AdminImageChooser(AdminChooser): choose_one_text = _('Choose an image') choose_another_text = _('Choose another image') clear_choice_text = _('Clear image') + link_to_chosen_url = "#" + link_to_chosen_text = _('Edit this image') + def __init__(self, **kwargs): super(AdminImageChooser, self).__init__(**kwargs) @@ -23,6 +27,11 @@ class AdminImageChooser(AdminChooser): instance = self.get_instance(self.image_model, value) + try: + self.link_to_chosen_url = reverse('wagtailimages_edit_image', args=(instance.id,)) + except AttributeError: + pass + return render_to_string("wagtailimages/widgets/image_chooser.html", { 'widget': self, 'original_field_html': original_field_html, From c496c319458d01006ebaa8eee44c6b23fe649edf Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 19 Feb 2015 17:44:03 +0000 Subject: [PATCH 3/7] added documents --- .../static/wagtaildocs/js/document-chooser.js | 2 ++ wagtail/wagtaildocs/views/chooser.py | 20 ++++++++++++++----- wagtail/wagtaildocs/widgets.py | 8 ++++++++ wagtail/wagtailimages/widgets.py | 2 -- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/wagtail/wagtaildocs/static/wagtaildocs/js/document-chooser.js b/wagtail/wagtaildocs/static/wagtaildocs/js/document-chooser.js index 7549e965e0..5579552e0c 100644 --- a/wagtail/wagtaildocs/static/wagtaildocs/js/document-chooser.js +++ b/wagtail/wagtaildocs/static/wagtaildocs/js/document-chooser.js @@ -2,6 +2,7 @@ function createDocumentChooser(id) { var chooserElement = $('#' + id + '-chooser'); var docTitle = chooserElement.find('.title'); var input = $('#' + id); + var editLink = chooserElement.find('.edit-link'); $('.action-choose', chooserElement).click(function() { ModalWorkflow({ @@ -11,6 +12,7 @@ function createDocumentChooser(id) { input.val(docData.id); docTitle.text(docData.title); chooserElement.removeClass('blank'); + editLink.attr('href', docData.edit_link); } } }); diff --git a/wagtail/wagtaildocs/views/chooser.py b/wagtail/wagtaildocs/views/chooser.py index 3da048c87e..1b8c0ef5bb 100644 --- a/wagtail/wagtaildocs/views/chooser.py +++ b/wagtail/wagtaildocs/views/chooser.py @@ -1,5 +1,6 @@ import json +from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404, render from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib.auth.decorators import permission_required @@ -11,6 +12,18 @@ from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtaildocs.models import Document from wagtail.wagtaildocs.forms import DocumentForm +def get_document_json(document): + """ + helper function: given a document, return the json to pass back to the + chooser panel + """ + + return json.dumps({ + 'id': document.id, + 'title': document.title, + 'edit_link': reverse('wagtaildocs_edit_document', args=(document.id,)), + }) + def chooser(request): if request.user.has_perm('wagtaildocs.add_document'): @@ -79,11 +92,9 @@ def chooser(request): def document_chosen(request, document_id): document = get_object_or_404(Document, id=document_id) - document_json = json.dumps({'id': document.id, 'title': document.title}) - return render_modal_workflow( request, None, 'wagtaildocs/chooser/document_chosen.js', - {'document_json': document_json} + {'document_json': get_document_json(document)} ) @@ -100,10 +111,9 @@ def chooser_upload(request): for backend in get_search_backends(): backend.add(document) - document_json = json.dumps({'id': document.id, 'title': document.title}) return render_modal_workflow( request, None, 'wagtaildocs/chooser/document_chosen.js', - {'document_json': document_json} + {'document_json': get_document_json(document)} ) else: form = DocumentForm() diff --git a/wagtail/wagtaildocs/widgets.py b/wagtail/wagtaildocs/widgets.py index 73267b5392..e0d256e6fa 100644 --- a/wagtail/wagtaildocs/widgets.py +++ b/wagtail/wagtaildocs/widgets.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals import json +from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -12,12 +13,19 @@ from wagtail.wagtaildocs.models import Document class AdminDocumentChooser(AdminChooser): choose_one_text = _('Choose a document') choose_another_text = _('Choose another document') + link_to_chosen_url = "#" + link_to_chosen_text = _('Edit this document') def render_html(self, name, value, attrs): original_field_html = super(AdminDocumentChooser, self).render_html(name, value, attrs) instance = self.get_instance(Document, value) + try: + self.link_to_chosen_url = reverse('wagtaildocs_edit_document', args=(instance.id,)) + except AttributeError: + pass + return render_to_string("wagtaildocs/widgets/document_chooser.html", { 'widget': self, 'original_field_html': original_field_html, diff --git a/wagtail/wagtailimages/widgets.py b/wagtail/wagtailimages/widgets.py index d579827b33..d7dcd9b0b6 100644 --- a/wagtail/wagtailimages/widgets.py +++ b/wagtail/wagtailimages/widgets.py @@ -13,11 +13,9 @@ from wagtail.wagtailimages.models import get_image_model class AdminImageChooser(AdminChooser): choose_one_text = _('Choose an image') choose_another_text = _('Choose another image') - clear_choice_text = _('Clear image') link_to_chosen_url = "#" link_to_chosen_text = _('Edit this image') - def __init__(self, **kwargs): super(AdminImageChooser, self).__init__(**kwargs) self.image_model = get_image_model() From 0a6d7ee44cce3892165bbdd1f72e76c42691e82a Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 20 Feb 2015 10:09:12 +0000 Subject: [PATCH 4/7] added snippets --- .../static/wagtailsnippets/js/snippet-chooser.js | 2 ++ wagtail/wagtailsnippets/views/chooser.py | 2 ++ wagtail/wagtailsnippets/widgets.py | 10 +++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailsnippets/static/wagtailsnippets/js/snippet-chooser.js b/wagtail/wagtailsnippets/static/wagtailsnippets/js/snippet-chooser.js index 030ddb0a9b..3a87260f0c 100644 --- a/wagtail/wagtailsnippets/static/wagtailsnippets/js/snippet-chooser.js +++ b/wagtail/wagtailsnippets/static/wagtailsnippets/js/snippet-chooser.js @@ -2,6 +2,7 @@ function createSnippetChooser(id, contentType) { var chooserElement = $('#' + id + '-chooser'); var docTitle = chooserElement.find('.title'); var input = $('#' + id); + var editLink = chooserElement.find('.edit-link'); $('.action-choose', chooserElement).click(function() { ModalWorkflow({ @@ -11,6 +12,7 @@ function createSnippetChooser(id, contentType) { input.val(snippetData.id); docTitle.text(snippetData.string); chooserElement.removeClass('blank'); + editLink.attr('href', snippetData.edit_link); } } }); diff --git a/wagtail/wagtailsnippets/views/chooser.py b/wagtail/wagtailsnippets/views/chooser.py index fdbcb6f4ab..b58b7a2dbf 100644 --- a/wagtail/wagtailsnippets/views/chooser.py +++ b/wagtail/wagtailsnippets/views/chooser.py @@ -2,6 +2,7 @@ import json from six import text_type +from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 from wagtail.wagtailadmin.modal_workflow import render_modal_workflow @@ -35,6 +36,7 @@ def chosen(request, content_type_app_name, content_type_model_name, id): snippet_json = json.dumps({ 'id': item.id, 'string': text_type(item), + 'edit_link': reverse('wagtailsnippets_edit', args=(content_type_app_name, content_type_model_name, item.id,)) }) return render_modal_workflow( diff --git a/wagtail/wagtailsnippets/widgets.py b/wagtail/wagtailsnippets/widgets.py index 611efc40fe..67e39f390b 100644 --- a/wagtail/wagtailsnippets/widgets.py +++ b/wagtail/wagtailsnippets/widgets.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals import json +from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -10,12 +11,14 @@ from wagtail.wagtailadmin.widgets import AdminChooser class AdminSnippetChooser(AdminChooser): target_content_type = None - + link_to_chosen_url = "#" + def __init__(self, content_type=None, **kwargs): if 'snippet_type_name' in kwargs: snippet_type_name = kwargs.pop('snippet_type_name') self.choose_one_text = _('Choose %s') % snippet_type_name self.choose_another_text = _('Choose another %s') % snippet_type_name + self.link_to_chosen_text = _('Edit this %s') % snippet_type_name super(AdminSnippetChooser, self).__init__(**kwargs) if content_type is not None: @@ -27,6 +30,11 @@ class AdminSnippetChooser(AdminChooser): model_class = self.target_content_type.model_class() instance = self.get_instance(model_class, value) + try: + self.link_to_chosen_url = reverse('wagtailsnippets_edit', args=(self.target_content_type.app_label, self.target_content_type, instance.id,)) + except AttributeError: + pass + return render_to_string("wagtailsnippets/widgets/snippet_chooser.html", { 'widget': self, 'original_field_html': original_field_html, From 6040b3ada4e74c4368ffda4b5f13966b61ff69a6 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 20 Feb 2015 15:43:09 +0000 Subject: [PATCH 5/7] refactor to avoid passing to AdminChooser --- .../templates/wagtailadmin/widgets/chooser.html | 2 +- .../templates/wagtailadmin/widgets/page_chooser.html | 2 ++ wagtail/wagtailadmin/widgets.py | 9 --------- .../templates/wagtaildocs/widgets/document_chooser.html | 2 ++ wagtail/wagtaildocs/widgets.py | 7 ------- .../templates/wagtailimages/widgets/image_chooser.html | 2 ++ wagtail/wagtailimages/widgets.py | 7 ------- .../wagtailsnippets/widgets/snippet_chooser.html | 2 ++ wagtail/wagtailsnippets/widgets.py | 7 ------- 9 files changed, 9 insertions(+), 31 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html b/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html index aff5c34481..98b1bfb8b8 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/widgets/chooser.html @@ -17,7 +17,7 @@
  • {% endif %}
  • -
  • {{ widget.link_to_chosen_text }}
  • +
  • {{ widget.link_to_chosen_text }}
  • diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/widgets/page_chooser.html b/wagtail/wagtailadmin/templates/wagtailadmin/widgets/page_chooser.html index 487cce366f..f029913a90 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/widgets/page_chooser.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/widgets/page_chooser.html @@ -3,3 +3,5 @@ {% block chosen_state_view %} {{ page.title }} {% endblock %} + +{% block edit_chosen_item_url %}{% if page %}{% url 'wagtailadmin_pages_edit' page.id %}{% endif %}{% endblock %} diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py index 00591e6783..287df72515 100644 --- a/wagtail/wagtailadmin/widgets.py +++ b/wagtail/wagtailadmin/widgets.py @@ -41,7 +41,6 @@ class AdminChooser(WidgetWithScript, widgets.Input): choose_one_text = _("Choose an item") choose_another_text = _("Choose another item") clear_choice_text = _("Clear choice") - link_to_chosen_url = "#" link_to_chosen_text = _("Edit this item") def get_instance(self, model_class, value): @@ -72,8 +71,6 @@ class AdminChooser(WidgetWithScript, widgets.Input): self.clear_choice_text = kwargs.pop('clear_choice_text') if 'link_to_chosen_text' in kwargs: self.link_to_chosen_text = kwargs.pop('link_to_chosen_text') - if 'link_to_chosen_url' in kwargs: - self.link_to_chosen_url = kwargs.pop('link_to_chosen_url') super(AdminChooser, self).__init__(**kwargs) @@ -81,7 +78,6 @@ class AdminPageChooser(AdminChooser): target_content_type = None choose_one_text = _('Choose a page') choose_another_text = _('Choose another page') - link_to_chosen_url = "#" link_to_chosen_text = _('Edit this page') def __init__(self, content_type=None, **kwargs): @@ -94,11 +90,6 @@ class AdminPageChooser(AdminChooser): model_class = self.target_content_type.model_class() instance = self.get_instance(model_class, value) - try: - self.link_to_chosen_url = reverse('wagtailadmin_pages_edit', args=(instance.id,)) - except AttributeError: - pass - return render_to_string("wagtailadmin/widgets/page_chooser.html", { 'widget': self, 'original_field_html': original_field_html, diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/widgets/document_chooser.html b/wagtail/wagtaildocs/templates/wagtaildocs/widgets/document_chooser.html index ac023728ad..d4944904d3 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/widgets/document_chooser.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/widgets/document_chooser.html @@ -4,3 +4,5 @@ {% block chosen_state_view %} {{ document.title }} {% endblock %} + +{% block edit_chosen_item_url %}{% if document %}{% url 'wagtaildocs_edit_document' document.id %}{% endif %}{% endblock %} diff --git a/wagtail/wagtaildocs/widgets.py b/wagtail/wagtaildocs/widgets.py index e0d256e6fa..a348f1e58d 100644 --- a/wagtail/wagtaildocs/widgets.py +++ b/wagtail/wagtaildocs/widgets.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals import json -from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -13,7 +12,6 @@ from wagtail.wagtaildocs.models import Document class AdminDocumentChooser(AdminChooser): choose_one_text = _('Choose a document') choose_another_text = _('Choose another document') - link_to_chosen_url = "#" link_to_chosen_text = _('Edit this document') def render_html(self, name, value, attrs): @@ -21,11 +19,6 @@ class AdminDocumentChooser(AdminChooser): instance = self.get_instance(Document, value) - try: - self.link_to_chosen_url = reverse('wagtaildocs_edit_document', args=(instance.id,)) - except AttributeError: - pass - return render_to_string("wagtaildocs/widgets/document_chooser.html", { 'widget': self, 'original_field_html': original_field_html, diff --git a/wagtail/wagtailimages/templates/wagtailimages/widgets/image_chooser.html b/wagtail/wagtailimages/templates/wagtailimages/widgets/image_chooser.html index 428b12247b..e77cd78c57 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/widgets/image_chooser.html +++ b/wagtail/wagtailimages/templates/wagtailimages/widgets/image_chooser.html @@ -12,3 +12,5 @@ {% endif %} {% endblock %} + +{% block edit_chosen_item_url %}{% if image %}{% url 'wagtailimages_edit_image' image.id %}{% endif %}{% endblock %} diff --git a/wagtail/wagtailimages/widgets.py b/wagtail/wagtailimages/widgets.py index d7dcd9b0b6..aa0fae71c4 100644 --- a/wagtail/wagtailimages/widgets.py +++ b/wagtail/wagtailimages/widgets.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals import json -from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -13,7 +12,6 @@ from wagtail.wagtailimages.models import get_image_model class AdminImageChooser(AdminChooser): choose_one_text = _('Choose an image') choose_another_text = _('Choose another image') - link_to_chosen_url = "#" link_to_chosen_text = _('Edit this image') def __init__(self, **kwargs): @@ -25,11 +23,6 @@ class AdminImageChooser(AdminChooser): instance = self.get_instance(self.image_model, value) - try: - self.link_to_chosen_url = reverse('wagtailimages_edit_image', args=(instance.id,)) - except AttributeError: - pass - return render_to_string("wagtailimages/widgets/image_chooser.html", { 'widget': self, 'original_field_html': original_field_html, diff --git a/wagtail/wagtailsnippets/templates/wagtailsnippets/widgets/snippet_chooser.html b/wagtail/wagtailsnippets/templates/wagtailsnippets/widgets/snippet_chooser.html index b46f3dbdc2..07425a633d 100644 --- a/wagtail/wagtailsnippets/templates/wagtailsnippets/widgets/snippet_chooser.html +++ b/wagtail/wagtailsnippets/templates/wagtailsnippets/widgets/snippet_chooser.html @@ -5,3 +5,5 @@ {% block chosen_state_view %} {{ item }} {% endblock %} + +{% block edit_chosen_item_url %}{% if item %}{% url 'wagtailsnippets_edit' widget.target_content_type.app_label widget.target_content_type item.id %}{% endif %}{% endblock %} diff --git a/wagtail/wagtailsnippets/widgets.py b/wagtail/wagtailsnippets/widgets.py index 67e39f390b..7e4197f8ef 100644 --- a/wagtail/wagtailsnippets/widgets.py +++ b/wagtail/wagtailsnippets/widgets.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals import json -from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ @@ -11,7 +10,6 @@ from wagtail.wagtailadmin.widgets import AdminChooser class AdminSnippetChooser(AdminChooser): target_content_type = None - link_to_chosen_url = "#" def __init__(self, content_type=None, **kwargs): if 'snippet_type_name' in kwargs: @@ -30,11 +28,6 @@ class AdminSnippetChooser(AdminChooser): model_class = self.target_content_type.model_class() instance = self.get_instance(model_class, value) - try: - self.link_to_chosen_url = reverse('wagtailsnippets_edit', args=(self.target_content_type.app_label, self.target_content_type, instance.id,)) - except AttributeError: - pass - return render_to_string("wagtailsnippets/widgets/snippet_chooser.html", { 'widget': self, 'original_field_html': original_field_html, From c6865e6f5e1ec842377c8a5441f4c80271023f81 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 20 Feb 2015 15:43:20 +0000 Subject: [PATCH 6/7] test for #1014 --- wagtail/wagtailadmin/tests/test_edit_handlers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wagtail/wagtailadmin/tests/test_edit_handlers.py b/wagtail/wagtailadmin/tests/test_edit_handlers.py index 281c6f92c9..f2ccc20d4b 100644 --- a/wagtail/wagtailadmin/tests/test_edit_handlers.py +++ b/wagtail/wagtailadmin/tests/test_edit_handlers.py @@ -360,6 +360,10 @@ class TestPageChooserPanel(TestCase): def test_render_as_field(self): result = self.page_chooser_panel.render_as_field() self.assertIn('

    help text

    ', result) + self.assertIn('Christmas', result) + self.assertIn( + 'Edit this page' % self.christmas_page.id, + result) def test_render_error(self): form = self.PageChooserForm({'page': ''}, instance=self.test_instance) From d7e1fd497e9277e473cac1a8637ce69ef7bebdff Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 20 Feb 2015 15:45:38 +0000 Subject: [PATCH 7/7] release note for #1014 --- CHANGELOG.txt | 1 + docs/releases/0.9.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 95d75eeda1..6db21b901e 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -27,6 +27,7 @@ Changelog * SCSS files in wagtailadmin now use absolute imports, to permit overriding by user stylesheets (Martin Sanders) * Bare text entered in rich text areas is now automatically wrapped in a paragraph element * Added pagination to the snippets listing and chooser (Martin Sanders) + * Page / document / image / snippet choosers now include a link to edit the chosen item * Fix: The `document_served` signal now correctly passes the Document class as `sender` and the document as `instance` 0.8.5 (17.02.2015) diff --git a/docs/releases/0.9.rst b/docs/releases/0.9.rst index 3f1b6ed595..779edd5a2c 100644 --- a/docs/releases/0.9.rst +++ b/docs/releases/0.9.rst @@ -34,6 +34,7 @@ Admin * Added contextual links to admin notification messages * When copying pages, it is now possible to specify a place to copy to * Added pagination to the snippets listing and chooser + * Page / document / image / snippet choosers now include a link to edit the chosen item **Page editor**