home page fixes; various issues fix

This commit is contained in:
bkfox 2024-01-05 16:23:23 +01:00
parent 294c848415
commit c52e87acd2
18 changed files with 106 additions and 101 deletions

View File

@ -89,6 +89,8 @@ class Diffusion(Rerun):
- stop: the diffusion has been manually stopped
"""
list_url_name = "timetable-list"
objects = DiffusionQuerySet.as_manager()
TYPE_ON_AIR = 0x00

View File

@ -14,7 +14,7 @@
--preview-cover-tiny-size: 4rem;
--preview-wide-content-sz: 1.6rem;
--header-height: var(--preview-cover-size);
--a-carousel-pb: 1.4rem;
--a-carousel-p: 1.4rem;
--a-carousel-gap: 1.2rem;
--a-carousel-nav-x: -0.6em;
--a-progress-bg: transparent;
@ -95,7 +95,6 @@
.preview {
position: relative;
background-size: cover;
margin-bottom: 2rem !important;
}
.preview.preview-item {
width: 100%;
@ -187,7 +186,7 @@
display: flex;
flex-direction: row;
padding-top: 0em;
margin-bottom: 1.2rem !important;
margin-bottom: 0.4rem !important;
}
.list-item .headings .title {
flex-grow: 1;
@ -276,8 +275,8 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
gap: 1.2rem;
}
.a-carousel {
padding-bottom: var(--a-carousel-pb);
.a-carousel .a-carousel-viewport {
padding: var(--a-carousel-p) 0;
}
.a-carousel-container {

View File

@ -7098,3 +7098,7 @@ section > .toolbar {
h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
font-family: var(--heading-font-family);
}
.container:empty {
display: none;
}

View File

@ -14,7 +14,7 @@
--preview-cover-tiny-size: 4rem;
--preview-wide-content-sz: 1.6rem;
--header-height: var(--preview-cover-size);
--a-carousel-pb: 1.4rem;
--a-carousel-p: 1.4rem;
--a-carousel-gap: 1.2rem;
--a-carousel-nav-x: -0.6em;
--a-progress-bg: transparent;
@ -95,7 +95,6 @@
.preview {
position: relative;
background-size: cover;
margin-bottom: 2rem !important;
}
.preview.preview-item {
width: 100%;
@ -187,7 +186,7 @@
display: flex;
flex-direction: row;
padding-top: 0em;
margin-bottom: 1.2rem !important;
margin-bottom: 0.4rem !important;
}
.list-item .headings .title {
flex-grow: 1;
@ -276,8 +275,8 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
gap: 1.2rem;
}
.a-carousel {
padding-bottom: var(--a-carousel-pb);
.a-carousel .a-carousel-viewport {
padding: var(--a-carousel-p) 0;
}
.a-carousel-container {
@ -7358,7 +7357,7 @@ a.tag:hover {
color: var(--text-color);
}
.page section.container {
padding-top: 2rem;
margin-top: 0.6rem;
}
.page section.container > .title {
margin-top: unset;
@ -7366,8 +7365,8 @@ a.tag:hover {
margin-bottom: 1.2rem;
border-bottom: 1px solid black;
}
.page section.container:not(:first-child) {
margin-top: 2rem;
.page section.container:not(:last-child) {
margin-bottom: 0.6rem;
}
.dropdown-item {

View File

@ -375,7 +375,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
\**********************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _fortawesome_fontawesome_free_css_all_min_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fortawesome/fontawesome-free/css/all.min.css */ \"./node_modules/@fortawesome/fontawesome-free/css/all.min.css\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app */ \"./src/app.js\");\n/* harmony import */ var _vueLoader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vueLoader */ \"./src/vueLoader.js\");\n/* harmony import */ var _sound__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sound */ \"./src/sound.js\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./model */ \"./src/model.js\");\n/* harmony import */ var _assets_common_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./assets/common.scss */ \"./src/assets/common.scss\");\n/**\n * This module includes code available for both the public website and\n * administration interface)\n */\n//-- vendor\n\n\n//-- aircox\n\n\n\n\n\nwindow.aircox = {\n // main application\n loader: null,\n get app() {\n return this.loader.app;\n },\n // player application\n playerLoader: null,\n get playerApp() {\n return this.playerLoader && this.playerLoader.app;\n },\n get player() {\n return this.playerLoader.vm && this.playerLoader.vm.$refs.player;\n },\n Set: _model__WEBPACK_IMPORTED_MODULE_4__.Set,\n Sound: _sound__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n /**\n * Initialize main application and player.\n */\n init(props = null, {\n hotReload = false,\n el = null,\n config = null,\n playerConfig = null,\n initApp = true,\n initPlayer = true,\n loader = null,\n playerLoader = null\n } = {}) {\n if (initPlayer) {\n playerConfig = playerConfig || _app__WEBPACK_IMPORTED_MODULE_1__.PlayerApp;\n playerLoader = playerLoader || new _vueLoader__WEBPACK_IMPORTED_MODULE_2__[\"default\"](playerConfig);\n playerLoader.enable(false);\n this.playerLoader = playerLoader;\n document.addEventListener(\"keypress\", e => this.onKeyPress(e), false);\n }\n if (initApp) {\n config = config || window.App || _app__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n config.el = el || config.el;\n loader = loader || new _vueLoader__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n el,\n props,\n ...config\n });\n loader.enable(hotReload);\n this.loader = loader;\n }\n },\n onKeyPress(event) {\n if (event.key == \" \") this.player.togglePlay();\n },\n /**\n * Filter navbar dropdown menu items\n */\n filter_menu(event) {\n var filter = new RegExp(event.target.value, 'gi');\n var container = event.target.closest('.navbar-dropdown');\n if (event.target.value) for (let item of container.querySelectorAll('a.navbar-item')) item.style.display = item.innerHTML.search(filter) == -1 ? 'none' : null;else for (let item of container.querySelectorAll('a.navbar-item')) item.style.display = null;\n },\n pickDate(url, date) {\n url = `${url}?date=${date.id}`;\n this.loader.pageLoad.load(url);\n }\n};\n\n//# sourceURL=webpack://aircox-assets/./src/index.js?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _fortawesome_fontawesome_free_css_all_min_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fortawesome/fontawesome-free/css/all.min.css */ \"./node_modules/@fortawesome/fontawesome-free/css/all.min.css\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app */ \"./src/app.js\");\n/* harmony import */ var _vueLoader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vueLoader */ \"./src/vueLoader.js\");\n/* harmony import */ var _sound__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sound */ \"./src/sound.js\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./model */ \"./src/model.js\");\n/* harmony import */ var _assets_common_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./assets/common.scss */ \"./src/assets/common.scss\");\n/**\n * This module includes code available for both the public website and\n * administration interface)\n */\n//-- vendor\n\n\n//-- aircox\n\n\n\n\n\nwindow.aircox = {\n // main application\n loader: null,\n get app() {\n return this.loader.app;\n },\n // player application\n playerLoader: null,\n get playerApp() {\n return this.playerLoader && this.playerLoader.app;\n },\n get player() {\n return this.playerLoader.vm && this.playerLoader.vm.$refs.player;\n },\n Set: _model__WEBPACK_IMPORTED_MODULE_4__.Set,\n Sound: _sound__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n /**\n * Initialize main application and player.\n */\n init(props = null, {\n hotReload = false,\n el = null,\n config = null,\n playerConfig = null,\n initApp = true,\n initPlayer = true,\n loader = null,\n playerLoader = null\n } = {}) {\n if (initPlayer) {\n playerConfig = playerConfig || _app__WEBPACK_IMPORTED_MODULE_1__.PlayerApp;\n playerLoader = playerLoader || new _vueLoader__WEBPACK_IMPORTED_MODULE_2__[\"default\"](playerConfig);\n playerLoader.enable(false);\n this.playerLoader = playerLoader;\n document.addEventListener(\"keyup\", e => this.onKeyPress(e), false);\n }\n if (initApp) {\n config = config || window.App || _app__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n config.el = el || config.el;\n loader = loader || new _vueLoader__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n el,\n props,\n ...config\n });\n loader.enable(hotReload);\n this.loader = loader;\n }\n },\n onKeyPress(event) {\n if (event.key == \" \") {\n this.player.togglePlay();\n event.stopPropagation();\n }\n },\n /**\n * Filter navbar dropdown menu items\n */\n filter_menu(event) {\n var filter = new RegExp(event.target.value, 'gi');\n var container = event.target.closest('.navbar-dropdown');\n if (event.target.value) for (let item of container.querySelectorAll('a.navbar-item')) item.style.display = item.innerHTML.search(filter) == -1 ? 'none' : null;else for (let item of container.querySelectorAll('a.navbar-item')) item.style.display = null;\n },\n pickDate(url, date) {\n url = `${url}?date=${date.id}`;\n this.loader.pageLoad.load(url);\n }\n};\n\n//# sourceURL=webpack://aircox-assets/./src/index.js?");
/***/ }),

View File

@ -91,6 +91,7 @@ Usefull context:
{% endspaceless %}
{% block header-container %}
{% if page or cover or title %}
<header class="container header preview preview-header {% if cover %}has-cover{% endif %}">
{% block header %}
{% if cover %}
@ -117,16 +118,17 @@ Usefull context:
</div>
{% endblock %}
</header>
{% endif %}
{% endblock %}
{% block content-container %}
<div class="container content">
{% block content %}
{% if page and page.content %}
<section class="page-content">{{ page.content|safe }}</section>
{% endif %}
{% endblock %}
{% if page and page.content %}
<div class="container content page-content">
{% block content %}
{{ page.content|safe }}
{% endblock %}
</div>
{% endif %}
{% endblock %}
{% endblock %}
</main>

View File

@ -6,3 +6,5 @@
&mdash;
{{ station.name }}
{% endblock %}
{% block header %}{% if page %}{{ block.super }}{% endif %}{% endblock %}

View File

@ -5,33 +5,18 @@
{% block head_title %}
{% block title %}
{% if not page or not page.title %}
{% if not parent %}{{ view.model|verbose_name:True|title }}
{% else %}
{% with parent.title as title %}
{% with model|default:"Publications"|verbose_name:True|capfirst as model %}
{% comment %}Translators: title when pages are filtered for a specific parent page, e.g.: Articles of My Incredible Show{% endcomment %}
{% blocktranslate %}All {{ model }}{% endblocktranslate %}
{% endwith %}
{% endwith %}
{% endif %}
{% else %}{{ block.super }}
{% endif %}
{{ block.super }}
{% endblock %}
&mdash;
{{ station.name }}
{% endblock %}
{% block content-container %}
{% block main %}
{{ block.super }}
<div class="container clear-both">
{% block before_list %}{% endblock %}
<section role="list">
{% block pages_list %}
{% block list-container %}
<section class="container clear-both" role="list">
{% block list %}
{% with has_headline=True %}
{% for object in object_list %}
{% block list_object %}
@ -44,37 +29,40 @@
{% endblock %}
</section>
{% block list-pagination %}
{% if is_paginated %}
<hr/>
{% update_query request.GET.copy page=None as GET %}
{% with GET.urlencode as GET %}
<nav class="nav-urls is-centered" role="pagination" aria-label="{% translate "pagination" %}">
{% block pagination %}
{% if page_obj.has_previous %}
<a href="?{{ GET }}&page={{ page_obj.previous_page_number }}" class="left button">
{% comment %}Translators: Bottom of the list, "previous page"{% endcomment %}
{% translate "Previous" %}</a>
{% endif %}
<ul class="urls">
{% for i in paginator.page_range %}
<li>
<a class="button {% if page_obj.number == i %}active{% endif %}"
href="?{{ GET }}&page={{ i }}">{{ i }}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
{% if page_obj.has_previous %}
{% comment %}Translators: Bottom of the list, "previous page"{% endcomment %}
<a href="?{{ GET }}&page={{ page_obj.previous_page_number }}" class="left button"
title="{% translate "Previous" %}"
aria-label="{% translate "Previous" %}">
<span class="icon"><i class="fa fa-chevron-left"></i></span>
</a>
{% endif %}
{% if page_obj.has_next %}
<a href="?{{ GET }}&page={{ page_obj.next_page_number }}" class="right button">
{% if page_obj.has_next %}
{% comment %}Translators: Bottom of the list, "Nextpage"{% endcomment %}
{% translate "Next" %}</a>
{% endif %}
<a href="?{{ GET }}&page={{ page_obj.next_page_number }}" class="right button"
title="{% translate "Next" %}"
aria-label="{% translate "Next" %}">
<span class="icon"><i class="fa fa-chevron-right"></i></span>
</a>
{% endif %}
</ul>
</nav>
{% endwith %}
{% endif %}
{% endblock %}
{% endblock %}
</div>
{% endblock %}

View File

@ -1,8 +1,11 @@
{% extends "aircox/page_list.html" %}
{% extends "aircox/base.html" %}
{% load i18n aircox %}
{% block head_title %}{{ station.name }}{% endblock %}
{% block title %}{% if page %}{{ block.super }}{% endif %}{% endblock %}
{% block breadcrumbs-container %}{% endblock %}
{% block content-container %}

View File

@ -27,12 +27,6 @@
{% endif %}
{% endblock %}
{% block content %}
{% if parent %}{{ parent.content|safe }}
{% else %}{{ block.super }}
{% endif %}
{% endblock %}
{% block header %}
{% if page and not object %}
{% with page as object %}
@ -44,11 +38,11 @@
{% endblock %}
{% block breadcrumbs %}
{% if parent %}
{% if parent and model.list_url_name %}
{% include "./widgets/breadcrumbs.html" with page=parent %}
<a href="{{ request.path }}">{{ model|verbose_name:True }}</a>
{% elif page %}
<a href="{{ request.path }}">{{ page.title }}</a>
<a href="{% url model.list_url_name %}">{{ model|verbose_name:True }}</a>
{% elif page and model.list_url_name %}
<a href="{% url model.list_url_name %}">{{ page.title }}</a>
{% if category %}
<a href="{% url request.resolver_match.url_name category_slug=category.slug %}">
{{ category.title }}
@ -63,3 +57,13 @@
{% endif %}
{% endif %}
{% endblock %}
{% block content-container %}
{% if page and page.content %}
{{ block.super }}
{% elif parent and parent.content %}
{% with parent as page %}
{{ block.super }}
{% endwith %}
{% endif %}
{% endblock %}

View File

@ -1,6 +0,0 @@
{% block sidebar_title %}
{% with program.title as program %}
{% blocktranslate %}Recently on {{ program }}{% endblocktranslate %}
{% endwith %}
{% endblock %}

View File

@ -16,16 +16,12 @@
<a href="{% url "timetable-list" date=date %}">{{ date|date:"l d F Y" }}</a>
{% endblock %}
{% block pages_list %}
{% with hide_schedule=True %}
<section role="list" class="list">
{% for object in object_list %}
{% if object.episode %}
{% page_widget "item" object.episode diffusion=object timetable=True %}
{% else %}
{% page_widget "item" object timetable=True %}
{% endif %}
{% endfor %}
</section>
{% endwith %}
{% block list %}
{% for object in object_list %}
{% if object.episode %}
{% page_widget "item" object.episode diffusion=object timetable=True %}
{% else %}
{% page_widget "item" object timetable=True %}
{% endif %}
{% endfor %}
{% endblock %}

View File

@ -30,7 +30,7 @@ The audio player
</h4>
<h4 v-else-if="current && current.data.type == 'track'"
class="title" aria-description="{% translate "Track currently on air" %}">
<span class="has-text-info is-size-3">&#9836;</span>
<span class="has-text-info is-size-3 mr-3">&#9836;</span>
<span>[[ current.data.title ]]</span>
<span class="has-text-grey-dark has-text-weight-light">
&mdash; [[ current.data.artist ]]

View File

@ -18,18 +18,21 @@ class HomeView(AttachedToMixin, BaseView, ListView):
podcasts_queryset = Episode.objects.published().with_podcasts().order_by("-pub_date")
def get_queryset(self):
return super().get_queryset().before(datetime.now() - timedelta(hours=12))
now = datetime.now()
return super().get_queryset().after(now - timedelta(hours=24)).before(now).order_by("-start")
def get_logs(self, diffusions):
today = date.today()
# diffs = Diffusion.objects.on_air().date(today)
object_list = self.object_list
diffs = list(object_list[: self.related_count])
logs = Log.objects.on_air().date(today).filter(track__isnull=False)
logs = Log.objects.on_air().filter(track__isnull=False)
if diffs:
min_date = diffs[-1].start - timedelta(hours=1)
logs = logs.after(min_date)
return Log.merge_diffusions(logs, object_list, diff_count=self.related_count, log_slice=10)
else:
logs = logs.date(today)
return Log.merge_diffusions(logs, object_list, diff_count=self.related_count)
def get_next_diffs(self):
now = tz.now()

View File

@ -65,3 +65,8 @@ section > .toolbar {
h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
font-family: var(--heading-font-family);
}
.container:empty {
display: none;
}

View File

@ -15,7 +15,7 @@
--preview-wide-content-sz: #{v.$text-size-bigger};
--header-height: var(--preview-cover-size);
--a-carousel-pb: #{v.$text-size-medium};
--a-carousel-p: #{v.$text-size-medium};
--a-carousel-gap: #{v.$mp-4};
--a-carousel-nav-x: -#{v.$mp-3e};
@ -179,7 +179,6 @@
.preview {
position: relative;
background-size: cover;
margin-bottom: v.$mp-6 !important;
&.preview-item {
width: 100%;
@ -293,7 +292,7 @@
display: flex;
flex-direction: row;
padding-top: 0em;
margin-bottom: v.$mp-4 !important;
margin-bottom: v.$mp-2 !important;
.title {
flex-grow: 1;
@ -414,7 +413,10 @@
// ---- ---- Carousel
.a-carousel {
padding-bottom: var(--a-carousel-pb);
.a-carousel-viewport {
padding: var(--a-carousel-p) 0;
}
}
.a-carousel-container {

View File

@ -21,7 +21,7 @@
section.container {
padding-top: v.$mp-6;
margin-top: v.$mp-3;
> .title {
margin-top: unset;
@ -30,8 +30,8 @@
border-bottom: 1px solid black;
}
&:not(:first-child) {
margin-top: v.$mp-6;
&:not(:last-child) {
margin-bottom: v.$mp-3;
}
}
}

View File

@ -42,7 +42,7 @@ window.aircox = {
playerLoader.enable(false)
this.playerLoader = playerLoader
document.addEventListener("keypress", e => this.onKeyPress(e), false)
document.addEventListener("keyup", e => this.onKeyPress(e), false)
}
if(initApp) {
@ -55,8 +55,10 @@ window.aircox = {
},
onKeyPress(event) {
if(event.key == " ")
if(event.key == " ") {
this.player.togglePlay()
event.stopPropagation()
}
},
/**