diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/nodes_controller.rb | 18 | ||||
| -rw-r--r-- | app/controllers/shared_previews_controller.rb | 13 | ||||
| -rw-r--r-- | app/views/nodes/show.html.erb | 17 |
3 files changed, 48 insertions, 0 deletions
diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb index 380a659..69aa268 100644 --- a/app/controllers/nodes_controller.rb +++ b/app/controllers/nodes_controller.rb | |||
| @@ -104,6 +104,24 @@ class NodesController < ApplicationController | |||
| 104 | redirect_to node_path(@node) | 104 | redirect_to node_path(@node) |
| 105 | end | 105 | end |
| 106 | 106 | ||
| 107 | def generate_shared_preview | ||
| 108 | @node = Node.find(params[:id]) | ||
| 109 | if @node.draft | ||
| 110 | @node.draft.ensure_preview_token! | ||
| 111 | flash[:notice] = "Shareable preview link created - see below." | ||
| 112 | else | ||
| 113 | flash[:notice] = "Create or edit a draft first - shared preview links are only available for pages with an active draft." | ||
| 114 | end | ||
| 115 | redirect_to node_path(@node) | ||
| 116 | end | ||
| 117 | |||
| 118 | def revoke_shared_preview | ||
| 119 | @node = Node.find(params[:id]) | ||
| 120 | @node.draft.revoke_preview_token! if @node.draft | ||
| 121 | flash[:notice] = "Shareable preview link revoked." | ||
| 122 | redirect_to node_path(@node) | ||
| 123 | end | ||
| 124 | |||
| 107 | def parameterize_preview | 125 | def parameterize_preview |
| 108 | render plain: slug_for(params[:title]) | 126 | render plain: slug_for(params[:title]) |
| 109 | end | 127 | end |
diff --git a/app/controllers/shared_previews_controller.rb b/app/controllers/shared_previews_controller.rb new file mode 100644 index 0000000..a8a540f --- /dev/null +++ b/app/controllers/shared_previews_controller.rb | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | class SharedPreviewsController < ApplicationController | ||
| 2 | def show | ||
| 3 | @page = Page.find_by!(preview_token: params[:token]) | ||
| 4 | |||
| 5 | if @page.node && @page.node.head_id == @page.id | ||
| 6 | redirect_to node_path(@page.node) | ||
| 7 | return | ||
| 8 | end | ||
| 9 | |||
| 10 | response.headers['X-Robots-Tag'] = 'noindex' | ||
| 11 | render template: @page.valid_template, layout: "application" | ||
| 12 | end | ||
| 13 | end | ||
diff --git a/app/views/nodes/show.html.erb b/app/views/nodes/show.html.erb index c533a55..d63df86 100644 --- a/app/views/nodes/show.html.erb +++ b/app/views/nodes/show.html.erb | |||
| @@ -12,6 +12,23 @@ | |||
| 12 | <td class="description">Public Link</td> | 12 | <td class="description">Public Link</td> |
| 13 | <td><%= link_to @page.public_link, content_url(@node.unique_path) %></td> | 13 | <td><%= link_to @page.public_link, content_url(@node.unique_path) %></td> |
| 14 | </tr> | 14 | </tr> |
| 15 | <% if @node.draft %> | ||
| 16 | <tr> | ||
| 17 | <td class="description">Admin Preview</td> | ||
| 18 | <td><%= link_to preview_page_path(@node.draft), preview_page_path(@node.draft) %></td> | ||
| 19 | </tr> | ||
| 20 | <tr> | ||
| 21 | <td class="description">Public Preview</td> | ||
| 22 | <td> | ||
| 23 | <% if @node.draft.preview_token.present? %> | ||
| 24 | <%= link_to shared_preview_path(token: @node.draft.preview_token), shared_preview_url(token: @node.draft.preview_token), target: "_blank", rel: "noopener" %> | ||
| 25 | <%= button_to 'Revoke', revoke_shared_preview_node_path(@node), method: :put, form: { data: { confirm: "Revoke this preview link? Anyone currently using it will immediately lose access." } } %> | ||
| 26 | <% else %> | ||
| 27 | <%= button_to 'Create public preview link', generate_shared_preview_node_path(@node), method: :put %> | ||
| 28 | <% end %> | ||
| 29 | </td> | ||
| 30 | </tr> | ||
| 31 | <% end %> | ||
| 15 | <tr> | 32 | <tr> |
| 16 | <td class="description">Author</td> | 33 | <td class="description">Author</td> |
| 17 | <td><%= @page.user.try(:login) %></td> | 34 | <td><%= @page.user.try(:login) %></td> |
