From 75b127a07c5615a5d1a245b4e032a3488d585bef Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 8 Apr 2014 16:14:30 +0100 Subject: [PATCH] Support within wagtailadmin for selecting a view mode in which to preview a page. The 'preview' option is split out from the 'save' popup menu into its own button (it was deemed appropriate to split it off since it doesn't perform any database-level actions). If the page defines multiple page modes in get_page_modes, this button becomes a popup, allowing the editor to choose a mode. Finally, preview_on_create and preview_on_edit are updated to pass the chosen mode into the page's show_as_mode method. --- .../static/wagtailadmin/js/page-editor.js | 2 +- .../pages/_preview_button_on_create.html | 4 ++++ .../pages/_preview_button_on_edit.html | 4 ++++ .../templates/wagtailadmin/pages/create.html | 20 ++++++++++++++++++- .../templates/wagtailadmin/pages/edit.html | 20 +++++++++++++++++-- wagtail/wagtailadmin/views/pages.py | 15 ++++++++++++-- 6 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_create.html create mode 100644 wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_edit.html diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js index e34bbaf609d..4a2dd4d6593 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js @@ -318,7 +318,7 @@ $(function() { }); /* Set up behaviour of preview button */ - $('#action-preview').click(function() { + $('.action-preview').click(function() { var previewWindow = window.open($(this).data('placeholder'), $(this).data('windowname')); $.ajax({ diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_create.html new file mode 100644 index 00000000000..d8d12a9be58 --- /dev/null +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_create.html @@ -0,0 +1,4 @@ + diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_edit.html new file mode 100644 index 00000000000..15f35245b41 --- /dev/null +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/_preview_button_on_edit.html @@ -0,0 +1,4 @@ + diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html index 1bfc1838194..11cb8a57235 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html @@ -21,7 +21,6 @@ + +
  • + {% trans 'Preview' as preview_label %} + {% if display_modes|length > 1 %} + + {% else %} + {% include "wagtailadmin/pages/_preview_button_on_create.html" with label=preview_label %} + {% endif %} +
  • diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html index c124195632b..8a954ba490f 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html @@ -48,13 +48,29 @@

    {% blocktrans with title=page.title %}Editing {{ title }}{% end
  • {% endif %}
  • -
  • -
  • +
  • + {% trans 'Preview' as preview_label %} + {% if display_modes|length > 1 %} + + {% else %} + {% include "wagtailadmin/pages/_preview_button_on_edit.html" with label=preview_label %} + {% endif %}
  • +
  • {% if page.get_latest_revision %} diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index a2947781320..c09805def04 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -208,6 +208,7 @@ def clean_slug(slug): 'page_class': page_class, 'parent_page': parent_page, 'edit_handler': edit_handler, + 'display_modes': page.get_page_modes(), }) @@ -292,6 +293,7 @@ def clean_slug(slug): 'page': page, 'edit_handler': edit_handler, 'errors_debug': errors_debug, + 'display_modes': page.get_page_modes(), }) @@ -345,7 +347,11 @@ def preview_on_edit(request, page_id): # an HTML error response request.META.pop('HTTP_X_REQUESTED_WITH', None) - display_mode = page.get_page_modes()[0] + try: + display_mode = request.GET['mode'] + except KeyError: + display_mode = page.get_page_modes()[0] + response = page.show_as_mode(display_mode) response['X-Wagtail-Preview'] = 'ok' @@ -357,6 +363,7 @@ def preview_on_edit(request, page_id): response = render(request, 'wagtailadmin/pages/edit.html', { 'page': page, 'edit_handler': edit_handler, + 'display_modes': page.get_page_modes(), }) response['X-Wagtail-Preview'] = 'error' return response @@ -388,7 +395,10 @@ def preview_on_create(request, content_type_app_name, content_type_model_name, p # an HTML error response request.META.pop('HTTP_X_REQUESTED_WITH', None) - display_mode = page.get_page_modes()[0] + try: + display_mode = request.GET['mode'] + except KeyError: + display_mode = page.get_page_modes()[0] response = page.show_as_mode(display_mode) response['X-Wagtail-Preview'] = 'ok' @@ -403,6 +413,7 @@ def preview_on_create(request, content_type_app_name, content_type_model_name, p 'page_class': page_class, 'parent_page': parent_page, 'edit_handler': edit_handler, + 'display_modes': page.get_page_modes(), }) response['X-Wagtail-Preview'] = 'error' return response