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