Skip to content

Commit

Permalink
Support within wagtailadmin for selecting a view mode in which to pre…
Browse files Browse the repository at this point in the history
…view 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.
  • Loading branch information
gasman committed Apr 8, 2014
1 parent d6cab0a commit 75b127a
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 6 deletions.
2 changes: 1 addition & 1 deletion wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
Expand Up @@ -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({
Expand Down
@@ -0,0 +1,4 @@
<input type="button" class="action-preview button"
data-action="{% url 'wagtailadmin_pages_preview_on_create' content_type.app_label content_type.model parent_page.id %}{% if mode %}?mode={{ mode|urlencode }}{% endif %}"
data-placeholder="{% url 'wagtailadmin_pages_preview_placeholder' %}"
data-windowname="wagtail_preview_{{ parent_page.id }}_child" value="{{ label }}" />
@@ -0,0 +1,4 @@
<input type="button" class="action-preview button"
data-action="{% url 'wagtailadmin_pages_preview_on_edit' page.id %}{% if mode %}?mode={{ mode|urlencode }}{% endif %}"
data-placeholder="{% url 'wagtailadmin_pages_preview_placeholder' %}"
data-windowname="wagtail_preview_{{ page.id }}" value="{{ label }}" />
20 changes: 19 additions & 1 deletion wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html
Expand Up @@ -21,14 +21,32 @@
<input type="submit" value="{% trans 'Save as draft' %}" class="button" />
<div class="dropdown-toggle icon icon-arrow-up"></div>
<ul role="menu">
<li><input type="button" id="action-preview" data-action="{% url 'wagtailadmin_pages_preview_on_create' content_type.app_label content_type.model parent_page.id %}" data-placeholder="{% url 'wagtailadmin_pages_preview_placeholder' %}" data-windowname="wagtail_preview_{{ parent_page.id }}_child" value="{% trans 'Preview' %}" class="button" /></li>
{% if parent_page_perms.can_publish_subpage %}
<li><input type="submit" name="action-publish" value="{% trans 'Publish' %}" class="button" /></li>
{% endif %}
<li><input type="submit" name="action-submit" value="{% trans 'Submit for moderation' %}" class="button" /></li>
</ul>
</div>
</li>

<li class="actions">
{% trans 'Preview' as preview_label %}
{% if display_modes|length > 1 %}
<div class="dropdown dropup match-width">
{% include "wagtailadmin/pages/_preview_button_on_create.html" with label=preview_label %}
<div class="dropdown-toggle icon icon-arrow-up"></div>
<ul role="menu">
{% for mode_name, mode_display_name in display_modes %}
<li>
{% include "wagtailadmin/pages/_preview_button_on_create.html" with mode=mode_name label=mode_display_name %}
</li>
{% endfor %}
</ul>
</div>
{% else %}
{% include "wagtailadmin/pages/_preview_button_on_create.html" with label=preview_label %}
{% endif %}
</li>
</ul>
</footer>
</form>
Expand Down
20 changes: 18 additions & 2 deletions wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html
Expand Up @@ -48,13 +48,29 @@ <h1>{% blocktrans with title=page.title %}Editing <span>{{ title }}</span>{% end
<li><input type="submit" name="action-publish" value="{% trans 'Publish' %}" class="button" /></li>
{% endif %}
<li><input type="submit" name="action-submit" value="{% trans 'Submit for moderation' %}" class="button" /></li>
<li><input type="button" id="action-preview" data-action="{% url 'wagtailadmin_pages_preview_on_edit' page.id %}" data-placeholder="{% url 'wagtailadmin_pages_preview_placeholder' %}" data-windowname="wagtail_preview_{{ page.id }}" value="{% trans 'Preview' %}" class="button" /></li>
</ul>
</div>
</li>
<li class="notices">

<li class="actions">
{% trans 'Preview' as preview_label %}
{% if display_modes|length > 1 %}
<div class="dropdown dropup match-width">
{% include "wagtailadmin/pages/_preview_button_on_edit.html" with label=preview_label %}
<div class="dropdown-toggle icon icon-arrow-up"></div>
<ul role="menu">
{% for mode_name, mode_display_name in display_modes %}
<li>
{% include "wagtailadmin/pages/_preview_button_on_edit.html" with mode=mode_name label=mode_display_name %}
</li>
{% endfor %}
</ul>
</div>
{% else %}
{% include "wagtailadmin/pages/_preview_button_on_edit.html" with label=preview_label %}
{% endif %}
</li>

<li class="meta">
<p class="modified">
{% if page.get_latest_revision %}
Expand Down
15 changes: 13 additions & 2 deletions wagtail/wagtailadmin/views/pages.py
Expand Up @@ -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(),
})


Expand Down Expand Up @@ -292,6 +293,7 @@ def clean_slug(slug):
'page': page,
'edit_handler': edit_handler,
'errors_debug': errors_debug,
'display_modes': page.get_page_modes(),
})


Expand Down Expand Up @@ -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'
Expand All @@ -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
Expand Down Expand Up @@ -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'
Expand All @@ -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
Expand Down

0 comments on commit 75b127a

Please sign in to comment.