diff --git a/admin_interface/admin.py b/admin_interface/admin.py index f474fd9..c70e3a9 100644 --- a/admin_interface/admin.py +++ b/admin_interface/admin.py @@ -170,6 +170,16 @@ class ThemeAdmin(admin.ModelAdmin): ), }, ), + ( + _("Change Form"), + { + "classes": ("wide",), + "fields": ( + "show_fieldsets_as_tabs", + "show_inlines_as_tabs", + ), + }, + ), ( _("Recent Actions"), {"classes": ("wide",), "fields": ("recent_actions_visible",)}, diff --git a/admin_interface/migrations/0028_theme_show_fieldsets_as_tabs_and_more.py b/admin_interface/migrations/0028_theme_show_fieldsets_as_tabs_and_more.py new file mode 100644 index 0000000..30c0bc3 --- /dev/null +++ b/admin_interface/migrations/0028_theme_show_fieldsets_as_tabs_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.3 on 2022-11-23 11:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin_interface", "0027_theme_list_filter_removal_links"), + ] + + operations = [ + migrations.AddField( + model_name="theme", + name="show_fieldsets_as_tabs", + field=models.BooleanField(default=False, verbose_name="fieldsets as tabs"), + ), + migrations.AddField( + model_name="theme", + name="show_inlines_as_tabs", + field=models.BooleanField(default=True, verbose_name="inlines as tabs"), + ), + ] diff --git a/admin_interface/models.py b/admin_interface/models.py index 980808b..25970ee 100644 --- a/admin_interface/models.py +++ b/admin_interface/models.py @@ -351,6 +351,14 @@ class Theme(models.Model): foldable_apps = models.BooleanField(default=True, verbose_name=_("foldable apps")) + show_fieldsets_as_tabs = models.BooleanField( + default=False, verbose_name=_("fieldsets as tabs") + ) + + show_inlines_as_tabs = models.BooleanField( + default=True, verbose_name=_("inlines as tabs") + ) + recent_actions_visible = models.BooleanField( default=True, verbose_name=_("visible") ) diff --git a/admin_interface/static/admin_interface/css/tabbed-changeform.css b/admin_interface/static/admin_interface/css/tabbed-changeform.css new file mode 100644 index 0000000..9a40d09 --- /dev/null +++ b/admin_interface/static/admin_interface/css/tabbed-changeform.css @@ -0,0 +1,35 @@ +.admin-interface .tabbed-changeform-tab { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow-x: auto; +} + +.admin-interface .tabbed-changeform-tab button { + border: none; + border-bottom: 1px solid var(--border-color) ; + flex-shrink: 0; + flex-grow: 0; + cursor: pointer; + padding: 8px 12px; + background-color: var(--admin-interface-module-header-text-color); + color: var(--admin-interface-module-background-color); +} + +.admin-interface .tabbed-changeform-tab button.active { + font-weight: bold; + border: 1px solid var(--border-color) ; + border-bottom: none; + border-radius: var(--admin-interface-module-border-radius); + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.admin-interface .tabbed-changeform-tabcontent { + display: none; + padding: 1em 0; +} + +.admin-interface .tabbed-changeform-tabcontent.active { + display: block; +} diff --git a/admin_interface/static/admin_interface/js/tabbed_changeform.js b/admin_interface/static/admin_interface/js/tabbed_changeform.js new file mode 100644 index 0000000..ef679f3 --- /dev/null +++ b/admin_interface/static/admin_interface/js/tabbed_changeform.js @@ -0,0 +1,14 @@ + +function openTab(evt, tabName) { + var tabcontents, tablinks; + tabcontents = document.getElementsByClassName("tabbed-changeform-tabcontent"); + for (let tabcontent of tabcontents) { + tabcontent.classList.remove("active"); + } + tablinks = document.getElementsByClassName("tabbed-changeform-tablinks"); + for (let tablink of tablinks) { + tablink.classList.remove("active"); + } + document.getElementById(tabName).classList.add("active"); + evt.currentTarget.classList.add("active"); +} diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html index 13a6925..9c8fb8c 100644 --- a/admin_interface/templates/admin/base_site.html +++ b/admin_interface/templates/admin/base_site.html @@ -114,7 +114,8 @@ href="{% static 'admin_interface/css/import-export.css' %}?v={{ version_md5_cache }}"/> - + {% if current_lang == 'fa' %} diff --git a/admin_interface/templates/admin/change_form.html b/admin_interface/templates/admin/change_form.html new file mode 100644 index 0000000..b281fda --- /dev/null +++ b/admin_interface/templates/admin/change_form.html @@ -0,0 +1,73 @@ +{% extends "admin/change_form.html" %} +{% load static admin_interface_tags %} + + +{% block field_sets %} + +{% get_admin_interface_setting "show_fieldsets_as_tabs" as show_fieldsets_as_tabs %} +{% get_admin_interface_setting "show_inlines_as_tabs" as show_inlines_as_tabs %} + +{% if not show_fieldsets_as_tabs and not show_inlines_as_tabs %} + +{{block.super}} + +{% else %} + +