summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-30 23:22:47 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-30 23:22:47 +0200
commitfd1ef782f7fc85db740fcb2ac1f859725e7280c5 (patch)
tree06f1fae092876616de569f87f6d0f461e4b47833 /app
parentbc116a2acfe2450d85229379d54c3344e485db6a (diff)
Provide the full i18n matrix for public/admin-preview/shared-preview urls
Diffstat (limited to 'app')
-rw-r--r--app/views/nodes/show.html.erb100
1 files changed, 86 insertions, 14 deletions
diff --git a/app/views/nodes/show.html.erb b/app/views/nodes/show.html.erb
index a337b555..8b12e2eb 100644
--- a/app/views/nodes/show.html.erb
+++ b/app/views/nodes/show.html.erb
@@ -194,25 +194,97 @@
194 194
195 <div class="layout_row_label"><%= t(".links") %></div> 195 <div class="layout_row_label"><%= t(".links") %></div>
196 <div class="layout_row_content info_group"> 196 <div class="layout_row_content info_group">
197 <div class="info_group_items"> 197 <%
198 <div class="info_item"> 198 # Public addresses come from the head, previews from the draft, and
199 <span class="info_label"><%= t(".public") %></span> 199 # those sets differ routinely -- a German head with a freshly
200 <%= link_to @page.public_link, content_url(@node.unique_path) %> 200 # translated English draft has one public address and two preview
201 # ones. Columns are the union; a kind with no address in a locale
202 # leaves that cell empty.
203 available = I18n.available_locales - [:root]
204 head_locales = (@node.head&.translated_locales || []).map(&:to_sym) & available
205 draft_locales = (@node.draft&.translated_locales || []).map(&:to_sym) & available
206 link_locales = (head_locales | draft_locales)
207 link_locales = [I18n.default_locale] if link_locales.empty?
208 link_locales = [I18n.default_locale] + (link_locales - [I18n.default_locale]).sort
209 locale_param = ->(locale) { locale unless locale == I18n.default_locale }
210 %>
211
212 <div class="link_matrix link_matrix_<%= link_locales.size %>">
213 <div class="link_matrix_head">
214 <span></span>
215 <% link_locales.each do |locale| %>
216 <span class="link_matrix_locale"><%= locale.to_s.upcase %></span>
217 <% end %>
201 </div> 218 </div>
219
220 <% if @node.head %>
221 <div class="link_matrix_row">
222 <span class="link_matrix_label">
223 <span class="info_label"><%= t(".public") %></span>
224 <%= link_to "/#{@node.unique_name}", content_url(@node.unique_path) %>
225 </span>
226 <span class="link_matrix_cells">
227 <% link_locales.each do |locale| %>
228 <span class="link_matrix_cell">
229 <% if head_locales.include?(locale) %>
230 <span class="link_locale_tag"><%= locale.to_s.upcase %></span>
231 <%= render "nodes/link_cell",
232 :url => content_url(@node.unique_path, :locale => locale_param.(locale)) %>
233 <% end %>
234 </span>
235 <% end %>
236 </span>
237 </div>
238 <% end %>
239
202 <% if @node.draft %> 240 <% if @node.draft %>
203 <div class="info_item"> 241 <div class="link_matrix_row">
204 <span class="info_label"><%= t(".admin_preview") %></span> 242 <span class="link_matrix_label">
205 <%= link_to preview_page_path(@node.draft), preview_page_path(@node.draft) %> 243 <span class="info_label"><%= t(".admin_preview") %></span>
244 <%= link_to preview_page_path(@node.draft), preview_page_url(@node.draft) %>
245 </span>
246 <span class="link_matrix_cells">
247 <% link_locales.each do |locale| %>
248 <span class="link_matrix_cell">
249 <% if draft_locales.include?(locale) %>
250 <span class="link_locale_tag"><%= locale.to_s.upcase %></span>
251 <%= render "nodes/link_cell",
252 :url => preview_page_url(@node.draft, :locale => locale_param.(locale)) %>
253 <% end %>
254 </span>
255 <% end %>
256 </span>
206 </div> 257 </div>
207 <div class="info_item"> 258
208 <span class="info_label"><%= t(".public_preview") %></span> 259 <div class="link_matrix_row">
260 <span class="link_matrix_label">
261 <span class="info_label"><%= t(".public_preview") %></span>
262 <% if @node.draft.preview_token.present? %>
263 <%= link_to shared_preview_path(:token => @node.draft.preview_token),
264 shared_preview_url(:token => @node.draft.preview_token),
265 target: "_blank", rel: "noopener" %>
266 <% end %>
267 </span>
209 <% if @node.draft.preview_token.present? %> 268 <% if @node.draft.preview_token.present? %>
210 <div class="aligned_action_row"> 269 <span class="link_matrix_cells">
211 <%= link_to shared_preview_path(token: @node.draft.preview_token), shared_preview_url(token: @node.draft.preview_token), target: "_blank", rel: "noopener" %> 270 <% link_locales.each do |locale| %>
212 <%= button_to t(".revoke"), revoke_shared_preview_node_path(@node), method: :put, form: { data: { confirm: t(".confirm_revoke") }, class: 'button_to state_changing' } %> 271 <span class="link_matrix_cell">
213 </div> 272 <% if draft_locales.include?(locale) %>
273 <span class="link_locale_tag"><%= locale.to_s.upcase %></span>
274 <%= render "nodes/link_cell",
275 :url => shared_preview_url(:token => @node.draft.preview_token,
276 :locale => locale_param.(locale)) %>
277 <% end %>
278 </span>
279 <% end %>
280 </span>
281 <%= button_to t(".revoke"), revoke_shared_preview_node_path(@node), method: :put,
282 form: { data: { confirm: t(".confirm_revoke") },
283 class: 'button_to state_changing link_matrix_actions' } %>
214 <% else %> 284 <% else %>
215 <%= button_to t(".create_preview_link"), generate_shared_preview_node_path(@node), method: :put, form: { class: 'button_to state_changing' } %> 285 <span class="link_matrix_cells"></span>
286 <%= button_to t(".create_preview_link"), generate_shared_preview_node_path(@node), method: :put,
287 form: { class: 'button_to state_changing link_matrix_actions' } %>
216 <% end %> 288 <% end %>
217 </div> 289 </div>
218 <% end %> 290 <% end %>