<%= form_with(model: [:admin, node], class: 'form-plain has--key-ctrls', id: 'node_form', data: { locale: form_locale, controller: "i18n-form" }) do |form| %>
<%= form.label :title, class: "title-box", data: { icon: t("nodes.icons.#{@node.category}") } do %> <%= render partial: 'material/text_field_i18n_simple', locals: { f: form, attr: :title } %> <% end %>
<%- I18n.available_locales.each do |locale| %> <%= label_tag do %> <%= radio_button_tag 'form_locale', locale, form_locale == locale, data: {action: 'change->i18n-form#setFormLocale' } %> <%= tag.span locale %> <% end %> <% end %>
<%= link_to t('ui.append_text'), url_for(controller: 'attachments', action: 'new', node_id: node.id), class: 'btn', data: { turbo_stream: true } %> <%= link_to t('ui.append_asset'), url_for(controller: 'assets', action: 'index', node_id: node.id), class: 'btn', data: { controller: 'utils', action: 'click->utils#disableScroll', turbo_stream: true } %>
<%= form.fields_for :attachments do |builder| %> <%= render partial: 'admin/attachments/attachment', locals: {f: builder} %> <% end%>
<%= render partial: 'material/select_field', locals: { f: form, attr: :parent_id, choices: (@node.root? ? [] : node_structure_for_select(@node.root, @node)), selected: @node.parent_id, include_blank: false } unless form.object.root? %> <%= render partial: 'material/select_field', locals: { f: form, attr: :template, include_blank: form.object.root?, choices: Node.templates.slice(*(Node::NODE_TEMPLATES)).map { |k,v| [t(k, scope: :'nodes.templates'), k] }.sort } %> <%= render partial: 'material/tom_select_field', locals: { f: form, attr: :settings, choices: Node::SETTINGS.map{ |tag| [ t(tag, scope: :'nodes.settings') , tag.to_s] }.sort, multiple: true } %> <%= render partial: 'material/text_field_i18n', locals: { f: form, attr: :href } unless form.object.root? %> <%# render partial: 'material/tom_select_field_i18n', locals: { f: form, attr: :tags, choices: Node.tags, multiple: true, tags: true } unless form.object.root? %>
<%= render partial: 'material/text_field_i18n', locals: { f: form, attr: :page_title } %> <%= render partial: 'material/text_field_i18n', locals: { f: form, attr: :page_description } %> <%= tag.div class: 'field' do %>
<%= form.label :slug, for: nil, class: 'i18n__label' %>
<%- I18n.available_locales.each do |locale| %> <%- i18n_attr = "slug_#{locale}" -%> <%= form.label i18n_attr, class: "input-box input-box-url i18n__input i18n__input-#{locale}" do %> <%= tag.span File.join(form.object.parent&.url(locale: locale) || '', ''), class: 'base__url' %> <%= form.text_field i18n_attr, class: 'material__input', disabled: form.object.root? %> <% end %> <%- form.object.errors.full_messages_for(i18n_attr).uniq.each do |msg| -%> <%= content_tag :p, msg, role: 'alert' %> <% end %> <% end %>
<%- end -%>
<%= form.label :status, for: nil %>
    <%- Node.statuses.each do |status| -%>
  • <%= form.radio_button :status, status[0], id: status[1] %> <%= label_tag status[1], t(status[0], scope: :'nodes.statuses'), class: 'plain' %>
  • <% end %>
<%= form.label :published_at %>
<%= form.datetime_select :published_at, {datetime_separator: '@', time_separator: ':', use_short_month: true}, {class: 'material__input material__input-select'} %>
<%- form.object.errors.full_messages_for(:published_at).uniq.each do |msg| -%> <%= content_tag :p, msg, role: 'alert' %> <% end %>
<%= form.label :expires_at %>
<%= form.datetime_select :expires_at, {datetime_separator: '@', time_separator: ':', use_short_month: true, default: (1.month.from_now.at_midnight-1.minute), disabled: (@node.expires_at.blank?)}, { class: 'material__input material__input-select' } %> <%= button_tag 'add_alarm', type: 'button', data: { action: 'click->utils#toggleDisabled' } %> <%= button_tag 'remove_circle_outline', type: 'button', data: { action: 'click->utils#toggleDisabled' } %>
<%- form.object.errors.full_messages_for(:expires_at).uniq.each do |msg| -%> <%= content_tag :p, msg, role: 'alert' %> <% end %>
<%= render partial: 'material/tom_select_field', locals: { f: form, attr: :excluded_locales, choices: options_for_select(I18n.available_locales.map{ |v| [t(v, scope: :'nodes.langs'), v.to_s] }, form.object.excluded_locales), multiple: true } %> <%= render partial: 'material/check_box_icon', locals: { f: form, attr: :is_allowlist} %>
<%= link_to t(:'ui.cancel'), url_for(action: 'tree', id: @node.parent&.id), data: { turbo_stream: true, turbo_action: 'advance' } %> <%= form.submit t(:'ui.save') %>
<% end %>