Files
MatchLiveTv/backend/app/views/admin/announcements/_form.html.erb
eminuxandCursor f02782d0f0 Aggiunge traduzioni it/en/fr/de/es agli avvisi e toglie gli override Android/iOS.
Un avviso ha un testo per lingua; per differenziare le piattaforme si creano due avvisi. L'app riceve già il copy risolto da Accept-Language.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 16:26:30 +02:00

113 lines
4.8 KiB
ERB

<%= form_with model: announcement, url: (announcement.persisted? ? admin_announcement_path(announcement) : admin_announcements_path),
method: (announcement.persisted? ? :patch : :post), local: true, class: "admin-form" do |f| %>
<div class="admin-form-row">
<div>
<%= f.label :kind, t("admin.announcements.form.kind") %>
<%= f.select :kind, AppAnnouncement::KINDS.map { |k| [t("admin.announcements.kind.#{k}"), k] } %>
</div>
<div>
<%= f.label :severity, t("admin.announcements.form.severity") %>
<%= f.select :severity, AppAnnouncement::SEVERITIES.map { |k| [t("admin.announcements.severity.#{k}"), k] } %>
</div>
</div>
<div>
<%= f.label :status, t("admin.announcements.form.status") %>
<%= f.select :status, AppAnnouncement::STATUSES.map { |k| [t("admin.announcements.status.#{k}"), k] } %>
</div>
<fieldset class="admin-channels">
<legend><%= t("admin.announcements.form.channels") %></legend>
<label class="admin-checkbox">
<%= f.check_box :show_on_android %>
<span><%= t("admin.announcements.channels.android") %></span>
</label>
<label class="admin-checkbox">
<%= f.check_box :show_on_ios %>
<span><%= t("admin.announcements.channels.ios") %></span>
</label>
<label class="admin-checkbox">
<%= f.check_box :show_on_web_public %>
<span><%= t("admin.announcements.channels.web_public") %></span>
</label>
<label class="admin-checkbox">
<%= f.check_box :show_on_web_private %>
<span><%= t("admin.announcements.channels.web_private") %></span>
</label>
<p class="muted admin-form-hint"><%= t("admin.announcements.form.channels_hint") %></p>
</fieldset>
<fieldset class="admin-channels">
<legend><%= t("admin.announcements.form.locales_legend") %></legend>
<p class="muted admin-form-hint"><%= t("admin.announcements.form.locales_hint") %></p>
<div class="admin-locale-tabs" role="tablist">
<% language_options.each do |opt| %>
<button type="button"
class="admin-locale-tab<%= " is-active" if opt[:code].to_s == I18n.default_locale.to_s %>"
data-locale-tab="<%= opt[:code] %>"
role="tab"
aria-selected="<%= opt[:code].to_s == I18n.default_locale.to_s %>">
<span aria-hidden="true"><%= opt[:flag] %></span>
<%= opt[:native] %>
<% if opt[:code].to_s == I18n.default_locale.to_s %>
<span class="muted">(<%= t("admin.announcements.form.locale_required") %>)</span>
<% elsif announcement.filled_locale_codes.include?(opt[:code].to_s) %>
<span class="muted"></span>
<% end %>
</button>
<% end %>
</div>
<% language_options.each do |opt| %>
<div class="admin-locale-panel"
data-locale-panel="<%= opt[:code] %>"
role="tabpanel"
<%= "hidden" unless opt[:code].to_s == I18n.default_locale.to_s %>>
<%= render "locale_copy", f: f, announcement: announcement, locale: opt[:code] %>
</div>
<% end %>
</fieldset>
<div class="admin-form-row">
<div>
<%= f.label :starts_at, t("admin.announcements.form.starts_at") %>
<%= f.datetime_field :starts_at, value: announcement.starts_at&.in_time_zone&.strftime("%Y-%m-%dT%H:%M") %>
</div>
<div>
<%= f.label :ends_at, t("admin.announcements.form.ends_at") %>
<%= f.datetime_field :ends_at, value: announcement.ends_at&.in_time_zone&.strftime("%Y-%m-%dT%H:%M") %>
</div>
</div>
<p class="muted admin-form-hint"><%= t("admin.announcements.form.window_hint") %></p>
<label class="admin-checkbox">
<%= f.check_box :dismissible %>
<span><%= t("admin.announcements.form.dismissible") %></span>
</label>
<p class="muted admin-form-hint"><%= t("admin.announcements.form.dismissible_hint") %></p>
<div class="admin-form-actions">
<%= f.submit (announcement.persisted? ? t("admin.announcements.form.submit_update") : t("admin.announcements.form.submit_create")), class: "admin-btn admin-btn--primary" %>
<%= link_to t("admin.announcements.form.cancel"), admin_announcements_path, class: "admin-btn admin-btn--outline" %>
</div>
<% end %>
<script>
(function () {
var tabs = document.querySelectorAll("[data-locale-tab]");
if (!tabs.length) return;
tabs.forEach(function (btn) {
btn.addEventListener("click", function () {
var loc = btn.getAttribute("data-locale-tab");
tabs.forEach(function (other) {
var on = other === btn;
other.classList.toggle("is-active", on);
other.setAttribute("aria-selected", on ? "true" : "false");
});
document.querySelectorAll("[data-locale-panel]").forEach(function (panel) {
panel.hidden = panel.getAttribute("data-locale-panel") !== loc;
});
});
});
})();
</script>