fix bug & remove dynamic
This commit is contained in:
		@ -50,7 +50,9 @@ class BasePageAdmin(admin.ModelAdmin):
 | 
			
		||||
    change_form_template = "admin/aircox/page_change_form.html"
 | 
			
		||||
 | 
			
		||||
    def cover_thumb(self, obj):
 | 
			
		||||
        return mark_safe('<img src="{}"/>'.format(obj.cover.icons["64"])) if obj.cover else ""
 | 
			
		||||
        if obj.cover and obj.cover.thumbnails:
 | 
			
		||||
            return mark_safe('<img src="{}"/>'.format(obj.cover.icons["64"]))
 | 
			
		||||
        return ""
 | 
			
		||||
 | 
			
		||||
    def get_changeform_initial_data(self, request):
 | 
			
		||||
        data = super().get_changeform_initial_data(request)
 | 
			
		||||
@ -95,6 +97,7 @@ class PageAdmin(BasePageAdmin):
 | 
			
		||||
@admin.register(StaticPage)
 | 
			
		||||
class StaticPageAdmin(BasePageAdmin):
 | 
			
		||||
    list_display = BasePageAdmin.list_display + ("attach_to",)
 | 
			
		||||
    list_editable = BasePageAdmin.list_editable + ("attach_to",)
 | 
			
		||||
    fieldsets = deepcopy(BasePageAdmin.fieldsets)
 | 
			
		||||
 | 
			
		||||
    fieldsets[1][1]["fields"] += ("attach_to",)
 | 
			
		||||
 | 
			
		||||
@ -170,7 +170,7 @@ class Log(Renderable, models.Model):
 | 
			
		||||
        """
 | 
			
		||||
        if isinstance(logs, models.QuerySet):
 | 
			
		||||
            logs = list(logs.order_by("-date"))
 | 
			
		||||
        diffs = diffs.on_air().before().order_by("-start")
 | 
			
		||||
        diffs = diffs.on_air().order_by("-start")
 | 
			
		||||
        if diff_count:
 | 
			
		||||
            diffs = diffs[:diff_count]
 | 
			
		||||
        diffs = deque(diffs)
 | 
			
		||||
 | 
			
		||||
@ -257,7 +257,8 @@ class StaticPage(BasePage):
 | 
			
		||||
    detail_url_name = "static-page-detail"
 | 
			
		||||
 | 
			
		||||
    class Target(models.TextChoices):
 | 
			
		||||
        HOME = "", _("Home Page")
 | 
			
		||||
        NONE = "", _("None")
 | 
			
		||||
        HOME = "home", _("Home Page")
 | 
			
		||||
        TIMETABLE = "timetable-list", _("Timetable")
 | 
			
		||||
        PROGRAMS = "program-list", _("Programs list")
 | 
			
		||||
        EPISODES = "episode-list", _("Episodes list")
 | 
			
		||||
@ -346,13 +347,13 @@ class NavItem(models.Model):
 | 
			
		||||
 | 
			
		||||
    def render(self, request, css_class="", active_class=""):
 | 
			
		||||
        url = self.get_url()
 | 
			
		||||
        text = self.get_text()
 | 
			
		||||
        label = self.get_label()
 | 
			
		||||
        if active_class and request.path.startswith(url):
 | 
			
		||||
            css_class += " " + active_class
 | 
			
		||||
 | 
			
		||||
        if not url:
 | 
			
		||||
            return text
 | 
			
		||||
            return label
 | 
			
		||||
        elif not css_class:
 | 
			
		||||
            return format_html('<a href="{}">{}</a>', url, text)
 | 
			
		||||
            return format_html('<a href="{}">{}</a>', url, label)
 | 
			
		||||
        else:
 | 
			
		||||
            return format_html('<a href="{}" class="{}">{}</a>', url, css_class, text)
 | 
			
		||||
            return format_html('<a href="{}" class="{}">{}</a>', url, css_class, label)
 | 
			
		||||
 | 
			
		||||
@ -7495,6 +7495,7 @@ a.tag:hover {
 | 
			
		||||
}
 | 
			
		||||
.nav .burger {
 | 
			
		||||
  display: none;
 | 
			
		||||
  background-color: var(--highlight-color);
 | 
			
		||||
}
 | 
			
		||||
.nav .nav-item {
 | 
			
		||||
  padding: 0.6rem;
 | 
			
		||||
@ -7513,7 +7514,7 @@ a.tag:hover {
 | 
			
		||||
  vertical-align: top;
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
.nav .nav-item.active, .nav .nav-item:hover {
 | 
			
		||||
.nav .nav-item.active {
 | 
			
		||||
  background-color: var(--highlight-color-2);
 | 
			
		||||
  color: var(--highlight-color);
 | 
			
		||||
}
 | 
			
		||||
@ -7547,14 +7548,10 @@ a.tag:hover {
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
.nav.secondary {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  z-index: 100;
 | 
			
		||||
  box-shadow: 0em 0.5em 0.5em rgba(0, 0, 0, 0.05);
 | 
			
		||||
  background-color: var(--highlight-color-alpha);
 | 
			
		||||
  justify-content: right;
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
.nav-item:hover + .nav.secondary, .nav.secondary:hover {
 | 
			
		||||
.nav.primary:hover + .nav.secondary, .nav.secondary:hover {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  top: var(--nav-primary-height);
 | 
			
		||||
  left: 0rem;
 | 
			
		||||
@ -7565,9 +7562,12 @@ a.tag:hover {
 | 
			
		||||
 | 
			
		||||
.breadcrumbs {
 | 
			
		||||
  text-align: right;
 | 
			
		||||
  height: 2.2rem;
 | 
			
		||||
  padding: 0.6rem 0rem;
 | 
			
		||||
  margin-bottom: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.breadcrumbs:empty {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
.breadcrumbs a + a:before {
 | 
			
		||||
  content: "/";
 | 
			
		||||
  margin: 0 0.4rem;
 | 
			
		||||
 | 
			
		||||
@ -61,22 +61,6 @@ Usefull context:
 | 
			
		||||
                        aria-label="{% translate "Main menu" %}">
 | 
			
		||||
                    </a-switch>
 | 
			
		||||
                    <div class="nav-menu">
 | 
			
		||||
                        {% for nav_item, secondary in nav_menu %}
 | 
			
		||||
                        <a class="nav-item" href="{{ nav_item.get_url }}">
 | 
			
		||||
                            {{ nav_item.get_label }}
 | 
			
		||||
                        </a>
 | 
			
		||||
                        {% if secondary %}
 | 
			
		||||
                        <div class="nav secondary">
 | 
			
		||||
                            {% for label, url in secondary %}
 | 
			
		||||
                            <a href="{{ url }}" class="nav-item">
 | 
			
		||||
                                {{ label }}
 | 
			
		||||
                            </a>
 | 
			
		||||
                            {% endfor %}
 | 
			
		||||
                        </div>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                        {% endfor %}
 | 
			
		||||
 | 
			
		||||
                        {% comment %}
 | 
			
		||||
                        {% block nav-primary-menu %}
 | 
			
		||||
                        {% nav_items "top" css_class="nav-item" active_class="active" as items %}
 | 
			
		||||
                        {% for item, render in items %}
 | 
			
		||||
@ -88,7 +72,6 @@ Usefull context:
 | 
			
		||||
                        </a>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                        {% endblock %}
 | 
			
		||||
                        {% endcomment %}
 | 
			
		||||
                    </div>
 | 
			
		||||
                    {% endblock %}
 | 
			
		||||
                </nav>
 | 
			
		||||
@ -96,6 +79,9 @@ Usefull context:
 | 
			
		||||
                {% block secondary-nav %}{% endblock %}
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            {% block main-container %}
 | 
			
		||||
            <main class="page">
 | 
			
		||||
            {% block main %}
 | 
			
		||||
                {% spaceless %}
 | 
			
		||||
                {% block breadcrumbs-container %}
 | 
			
		||||
                <div class="breadcrumbs container">
 | 
			
		||||
@ -104,9 +90,6 @@ Usefull context:
 | 
			
		||||
                {% endblock %}
 | 
			
		||||
                {% endspaceless %}
 | 
			
		||||
 | 
			
		||||
            {% block main-container %}
 | 
			
		||||
            <main class="page">
 | 
			
		||||
            {% block main %}
 | 
			
		||||
                {% block header-container %}
 | 
			
		||||
                <header class="container header preview preview-header {% if cover %}has-cover{% endif %}">
 | 
			
		||||
                    {% block header %}
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
{% load i18n aircox %}
 | 
			
		||||
 | 
			
		||||
{% block secondary-nav %}
 | 
			
		||||
{% if categories %}
 | 
			
		||||
{% if not parent and categories %}
 | 
			
		||||
<nav class="nav secondary">
 | 
			
		||||
    <div class="nav-menu nav-categories">
 | 
			
		||||
        {% for cat in categories %}
 | 
			
		||||
@ -49,6 +49,11 @@
 | 
			
		||||
    <a href="{{ request.path }}">{{ model|verbose_name:True }}</a>
 | 
			
		||||
{% elif page %}
 | 
			
		||||
    <a href="{{ request.path }}">{{ page.title }}</a>
 | 
			
		||||
    {% if category %}
 | 
			
		||||
    <a href="{% url request.resolver_match.url_name category_slug=category.slug %}">
 | 
			
		||||
        {{ category.title }}
 | 
			
		||||
    </a>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
{% else %}
 | 
			
		||||
    <a href="{% url request.resolver_match.url_name %}">{{ model|verbose_name:True }}</a>
 | 
			
		||||
    {% if category %}
 | 
			
		||||
 | 
			
		||||
@ -2,8 +2,6 @@
 | 
			
		||||
{% comment %}Detail page of a show{% endcomment %}
 | 
			
		||||
{% load i18n aircox %}
 | 
			
		||||
 | 
			
		||||
{% include "aircox/program_sidebar.html" %}
 | 
			
		||||
 | 
			
		||||
{% block content-container %}
 | 
			
		||||
{% with schedules=program.schedule_set.all %}
 | 
			
		||||
{% if schedules %}
 | 
			
		||||
 | 
			
		||||
@ -97,6 +97,13 @@ def do_nav_items(context, menu, **kwargs):
 | 
			
		||||
    return [(item, item.render(request, **kwargs)) for item in station.navitem_set.filter(menu=menu)]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.filter(name="nav_active")
 | 
			
		||||
def do_nav_active(obj, request):
 | 
			
		||||
    if request.path.startswith(obj.get_url()):
 | 
			
		||||
        return True
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.simple_tag(name="update_query")
 | 
			
		||||
def do_update_query(obj, **kwargs):
 | 
			
		||||
    """Replace provided querydict's values with **kwargs.
 | 
			
		||||
 | 
			
		||||
@ -114,4 +114,9 @@ urls = [
 | 
			
		||||
        views.errors.NoStationErrorView.as_view(),
 | 
			
		||||
        name="errors-no-station",
 | 
			
		||||
    ),
 | 
			
		||||
    path(
 | 
			
		||||
        _("program/<slug:parent_slug>/publications"),
 | 
			
		||||
        views.PageListView.as_view(model=models.Page, attach_to_value=models.StaticPage.Target.PAGES),
 | 
			
		||||
        name="page-list",
 | 
			
		||||
    ),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,8 @@ class LogListMixin(GetDateMixin):
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def get_diffusions_queryset(self):
 | 
			
		||||
        qs = Diffusion.objects.station(self.station).on_air().filter(start__lte=tz.now())
 | 
			
		||||
        qs = Diffusion.objects.station(self.station).on_air().filter(start__lte=tz.now()).before()
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            qs.date(self.date)
 | 
			
		||||
            if self.date is not None
 | 
			
		||||
 | 
			
		||||
@ -122,7 +122,10 @@
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .burger { display: none; }
 | 
			
		||||
    .burger {
 | 
			
		||||
        display: none;
 | 
			
		||||
        background-color: var(--highlight-color);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .nav-item {
 | 
			
		||||
        padding: v.$mp-3;
 | 
			
		||||
@ -144,7 +147,7 @@
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &.active, &:hover {
 | 
			
		||||
        &.active {
 | 
			
		||||
            background-color: var(--highlight-color-2);
 | 
			
		||||
            color: var(--highlight-color);
 | 
			
		||||
        }
 | 
			
		||||
@ -188,15 +191,16 @@
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.secondary {
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        z-index: 100;
 | 
			
		||||
        box-shadow: 0em 0.5em 0.5em rgba(0, 0, 0, 0.05);
 | 
			
		||||
        background-color: var(--highlight-color-alpha);
 | 
			
		||||
        //position: absolute;
 | 
			
		||||
        //width: 100%;
 | 
			
		||||
        //box-shadow: 0em 0.5em 0.5em rgba(0, 0, 0, 0.05);
 | 
			
		||||
 | 
			
		||||
        justify-content: right;
 | 
			
		||||
        display: none;
 | 
			
		||||
        //display: none;
 | 
			
		||||
 | 
			
		||||
        .nav-item:hover + &, &:hover {
 | 
			
		||||
        .nav.primary:hover + &,
 | 
			
		||||
        &:hover {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            top: var(--nav-primary-height);
 | 
			
		||||
            left: 0rem;
 | 
			
		||||
@ -211,9 +215,11 @@
 | 
			
		||||
// ---- breadcrumbs
 | 
			
		||||
.breadcrumbs {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    height: calc( v.$mp-3 * 2 + v.$text-size);
 | 
			
		||||
    padding: v.$mp-3 0rem;
 | 
			
		||||
    margin-bottom: v.$mp-2;
 | 
			
		||||
 | 
			
		||||
    &:empty { display: none; }
 | 
			
		||||
 | 
			
		||||
    a + a:before {
 | 
			
		||||
        content: "/";
 | 
			
		||||
        margin: 0 v.$mp-2;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user