mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-22 15:56:20 +00:00
196 lines
9.2 KiB
Text
196 lines
9.2 KiB
Text
- reorder_allowed = policy(@site).reorder?
|
|
- if reorder_allowed
|
|
- reorder_controller = { controller: 'reorder' }
|
|
- reorder_target = { target: 'reorder.row' }
|
|
- else
|
|
- reorder_target = reorder_controller = {}
|
|
|
|
%main.row
|
|
%aside.menu.col-lg-3
|
|
.mb-3
|
|
= render 'sites/header', site: @site, filter_params: @filter_params
|
|
= render 'sites/status', site: @site
|
|
= render 'sites/build', site: @site, class: 'btn-block'
|
|
= render 'sites/moderation_queue', site: @site, class: 'btn-block'
|
|
|
|
= render 'layouts/details', summary: t('posts.filters.title') do
|
|
%form{ method: :get }
|
|
.border.border-magenta.p-1
|
|
- @filter_params.each do |param, values|
|
|
- next if param == :layout
|
|
|
|
- [values].flatten.each do |value|
|
|
%input{ type: 'hidden',
|
|
name: values.is_a?(Array) ? "#{param}[]" : param,
|
|
value: value }
|
|
%legend.font-weight-bold.m-0.h6= 'Tipo de contenido'
|
|
- @site.schema_organization.each do |key, _|
|
|
.custom-control.custom-checkbox
|
|
- schema = @site.layouts[key]
|
|
= render 'schemas/filter', site: @site,
|
|
key: key,
|
|
schema: schema,
|
|
filter: @filter_params
|
|
%button.btn.btn-secondary.mt-3{ type: 'submit' }= t('posts.filters.submit')
|
|
= render 'layouts/details',
|
|
summary: t('posts.new'),
|
|
summary_class: 'h4 magenta font-weight-bold m-0 px-2',
|
|
details_class: 'details-agregar',
|
|
open: '+', closed: '+',
|
|
open_class: 'h1 magenta font-weight-bold m-0',
|
|
closed_class: 'h1 magenta font-weight-bold m-0' do
|
|
%table.table-sm.w-100
|
|
%tbody
|
|
- @site.schema_organization.each do |schema, _|
|
|
- schema = @site.layouts[schema]
|
|
- next if schema.hidden?
|
|
|
|
= render 'schemas/row', site: @site,
|
|
schema: schema,
|
|
filter: @filter_params
|
|
|
|
- if policy(@site_stat).index?
|
|
= link_to t('stats.index.title'),
|
|
site_stats_path(@site),
|
|
class: 'btn btn-secondary'
|
|
|
|
- if policy(@site).edit?
|
|
= link_to t('sites.edit.btn', site: @site.title),
|
|
edit_site_path(@site),
|
|
class: 'btn btn-secondary'
|
|
|
|
- if policy(@site).private?
|
|
= link_to t('sites.private'), "../private/#{@site.name}",
|
|
class: 'btn btn-secondary',
|
|
target: '_blank',
|
|
rel: 'noopener'
|
|
|
|
- if policy(SiteUsuarie.new(@site, current_usuarie)).index?
|
|
= render 'layouts/btn_with_tooltip',
|
|
tooltip: t('usuaries.index.help.self'),
|
|
text: t('usuaries.index.title'),
|
|
type: 'info',
|
|
link: site_usuaries_path(@site)
|
|
|
|
- if @site.design.credits
|
|
= render 'bootstrap/alert' do
|
|
= sanitize_markdown @site.design.credits
|
|
= link_to t('sites.donations.text'),
|
|
t('sites.donations.url'),
|
|
class: 'btn btn-secondary'
|
|
- if @site.design.designer_url
|
|
= link_to t('sites.designer_url'),
|
|
@site.design.designer_url,
|
|
class: 'btn btn-secondary'
|
|
|
|
%section.col
|
|
.d-flex.justify-content-between.align-items-center.pl-2-plus.pr-2-plus.mb-2
|
|
|
|
- if @site.locales.size > 1
|
|
%nav#locales
|
|
- @site.locales.each do |locale|
|
|
= link_to @site.data.dig(locale.to_s, 'locale') || locale,
|
|
site_posts_path(@site, **@filter_params.merge(locale: locale)),
|
|
class: "mr-2 mt-2 mb-2 #{locale == @locale ? 'active font-weight-bold' : ''}"
|
|
|
|
- if @posts.empty?
|
|
%h2= t('posts.empty')
|
|
- else
|
|
= form_tag site_posts_reorder_path, method: :post do
|
|
%table.table{ data: reorder_controller }
|
|
%caption.sr-only= t('posts.caption')
|
|
%thead
|
|
%tr.sticky-top
|
|
%th.border-0.p-0.p-md-2-plus{ colspan: '4' }
|
|
.d-flex.flex-row.justify-content-between
|
|
%div
|
|
- if reorder_allowed
|
|
= submit_tag t('posts.reorder.submit'),
|
|
class: 'btn btn-secondary'
|
|
%button.btn.btn-secondary{ data: { action: 'reorder#unselect' } }
|
|
= t('posts.reorder.unselect')
|
|
%span.badge{ data: { target: 'reorder.counter' } } 0
|
|
%button.btn.btn-secondary{ data: { action: 'reorder#up' } }= t('posts.reorder.up')
|
|
%button.btn.btn-secondary{ data: { action: 'reorder#down' } }= t('posts.reorder.down')
|
|
%button.btn.btn-secondary{ data: { action: 'reorder#top' } }= t('posts.reorder.top')
|
|
%button.btn.btn-secondary{ data: { action: 'reorder#bottom' } }= t('posts.reorder.bottom')
|
|
%input{ type: 'hidden',
|
|
name: 'post[lang]',
|
|
value: @locale }
|
|
|
|
- if @site.pagination
|
|
%div
|
|
= link_to_prev_page @posts,
|
|
t('posts.prev'),
|
|
class: 'btn btn-secondary'
|
|
= link_to_next_page @posts,
|
|
t('posts.next'),
|
|
class: 'btn btn-secondary'
|
|
%tbody
|
|
- dir = @site.data.dig(params[:locale], 'dir')
|
|
- size = @posts.size
|
|
- @posts.each_with_index do |post, i|
|
|
-#
|
|
TODO: Solo les usuaries cachean porque tenemos que separar
|
|
les botones por permisos.
|
|
|
|
- cache_if @usuarie, [post, I18n.locale] do
|
|
- checkbox_id = "checkbox-#{post.post_id}"
|
|
%tr{ id: post.post_id, data: reorder_target }
|
|
- if reorder_allowed
|
|
%td
|
|
.custom-control.custom-checkbox
|
|
%input.custom-control-input{ id: checkbox_id,
|
|
type: 'checkbox',
|
|
autocomplete: 'off',
|
|
data: { action: 'reorder#select' } }
|
|
%label.custom-control-label{ for: checkbox_id }
|
|
%span.sr-only= t('posts.reorder.select')
|
|
-# Orden más alto es mayor prioridad
|
|
= hidden_field 'post[reorder]', post.post_id,
|
|
value: size - i,
|
|
data: { reorder: true }
|
|
%td.w-100{ class: dir }
|
|
= link_to site_post_path(@site, post.path) do
|
|
%span{ lang: post.locale, dir: dir }= post.title
|
|
- if post.front_matter['draft'].present?
|
|
%span.badge.badge-primary= I18n.t('posts.attributes.draft.label')
|
|
%br
|
|
%small
|
|
= link_to @site.layouts[post.layout].humanized_name,
|
|
site_posts_path(@site, **@filter_params.merge(layout: [post.layout]))
|
|
- post.front_matter['categories']&.each do |category|
|
|
= link_to site_posts_path(@site, **@filter_params.merge(category: category)) do
|
|
%span{ lang: post.locale, dir: dir }= category
|
|
= '/' unless post.front_matter['categories'].last == category
|
|
|
|
%td.text-nowrap
|
|
= post.created_at.strftime('%F')
|
|
%br/
|
|
= post.order
|
|
%td.text-nowrap
|
|
.d-flex.flex-row.align-items-start
|
|
- if @usuarie || policy(post).edit?
|
|
= link_to t('posts.edit_post'),
|
|
edit_site_post_path(@site, post.path),
|
|
class: 'btn btn-secondary'
|
|
- if @usuarie || policy(post).destroy?
|
|
= link_to t('posts.destroy'),
|
|
site_post_path(@site, post.path),
|
|
class: 'btn btn-secondary',
|
|
method: :delete,
|
|
data: { confirm: t('posts.confirm_destroy') }
|
|
-#
|
|
Rescatar cualquier error en un post, notificarlo e
|
|
ignorar su renderización.
|
|
- rescue ActionView::Template::Error => e
|
|
- ExceptionNotifier.notify_exception(e.cause,
|
|
data: { site: @site.name,
|
|
post: @post.path.absolute,
|
|
usuarie: current_usuarie.id })
|
|
|
|
#footnotes{ hidden: true }
|
|
- @filter_params.each do |param, value|
|
|
- if param == 'layout'
|
|
- value = @site.layouts[value.to_sym].humanized_name
|
|
%label{ id: "help-filter-#{param}" }= t('posts.remove_filter_help', filter: value)
|