Compare commits
7 Commits
master
...
e9e09104ad
Author | SHA1 | Date | |
---|---|---|---|
e9e09104ad | |||
95a847cee0 | |||
8281c1a4c9 | |||
cbae38e893 | |||
efd940f34f | |||
893f441ddd | |||
cd76659ed9 |
@ -30,7 +30,7 @@ class AdminSite(admin.AdminSite):
|
||||
'programs': Program.objects.active().values('pk', 'title') \
|
||||
.order_by('title'),
|
||||
# today's diffusions
|
||||
'diffusions': Diffusion.objects.on_air().date().order_by('start') \
|
||||
'diffusions': Diffusion.objects.date().order_by('start') \
|
||||
.select_related('episode'),
|
||||
# TODO: only for dashboard
|
||||
# last comments
|
||||
|
@ -62,6 +62,13 @@ class Episode(Page):
|
||||
raise ValueError('missing parent program')
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def get_default_title(cls, page, date):
|
||||
return settings.AIRCOX_EPISODE_TITLE.format(
|
||||
program=page,
|
||||
date=date.strftime(settings.AIRCOX_EPISODE_TITLE_DATE_FORMAT)
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def get_init_kwargs_from(cls, page, date, title=None, **kwargs):
|
||||
""" Get default Episode's title """
|
||||
@ -252,7 +259,7 @@ class Diffusion(BaseRerun):
|
||||
return self.type == self.TYPE_ON_AIR and \
|
||||
self.start <= now and self.end >= now
|
||||
|
||||
# TODO: property?
|
||||
@property
|
||||
def is_live(self):
|
||||
""" True if Diffusion is live (False if there are sounds files). """
|
||||
return self.type == self.TYPE_ON_AIR and \
|
||||
|
@ -16,7 +16,31 @@
|
||||
<tr {% if diffusion.is_now %}class="is-selected"{% endif %}>
|
||||
<td>{{ diffusion.start|time }} - {{ diffusion.end|time }}</td>
|
||||
<td><img src="{% thumbnail episode.cover 64x64 crop %}"/></td>
|
||||
<td><a href="{% url "admin:aircox_episode_change" episode.pk %}">{{ episode.title }}</a></td>
|
||||
<td>
|
||||
<a href="{% url "admin:aircox_episode_change" episode.pk %}">{{ episode.title }}</a>
|
||||
|
||||
{% if diffusion.type == diffusion.TYPE_ON_AIR %}
|
||||
<span class="tag is-info">
|
||||
<span class="icon is-small">
|
||||
{% if diffusion.is_live %}
|
||||
<i class="fa fa-microphone"
|
||||
title="{% trans "Live diffusion" %}"></i>
|
||||
{% else %}
|
||||
<i class="fa fa-music"
|
||||
title="{% trans "Differed diffusion" %}"></i>
|
||||
{% endif %}
|
||||
</span>
|
||||
|
||||
{{ diffusion.get_type_display }}
|
||||
</span>
|
||||
{% elif diffusion.type == diffusion.TYPE_CANCEL %}
|
||||
<span class="tag is-danger">
|
||||
{{ diffusion.get_type_display }}</span>
|
||||
{% elif diffusion.type == diffusion.TYPE_UNCONFIRMED %}
|
||||
<span class="tag is-warning">
|
||||
{{ diffusion.get_type_display }}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
|
@ -56,6 +56,10 @@ Usefull context:
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
<div class="navbar-end">
|
||||
{% block top-nav-tools %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
@ -1,5 +1,5 @@
|
||||
{% extends "aircox/basepage_detail.html" %}
|
||||
{% load static i18n humanize honeypot %}
|
||||
{% load static i18n humanize honeypot aircox %}
|
||||
{% comment %}
|
||||
Base template used to display a Page
|
||||
|
||||
@ -14,6 +14,19 @@ Context:
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block top-nav-tools %}
|
||||
{% has_perm page "change" as can_edit %}
|
||||
{% if can_edit %}
|
||||
<a class="navbar-item" href="{{ page|admin_url:'change' }}"
|
||||
target="new">
|
||||
<span class="icon is-small">
|
||||
<i class="fa fa-pen"></i>
|
||||
</span>
|
||||
<span>{% trans "Edit" %}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
{{ block.super }}
|
||||
|
||||
|
65
aircox/templates/aircox/widgets/basepage_item.html
Normal file
65
aircox/templates/aircox/widgets/basepage_item.html
Normal file
@ -0,0 +1,65 @@
|
||||
{% load i18n easy_thumbnails_tags aircox %}
|
||||
{% comment %}
|
||||
List item for a page
|
||||
|
||||
Context variables:
|
||||
- object: the object to render
|
||||
- render_card: render as card
|
||||
- is-primary: render as primary
|
||||
- has_headline (=False): if True, display headline
|
||||
- has_cover (=True): hide page cover
|
||||
{% endcomment %}
|
||||
|
||||
{% if render_card %}
|
||||
<article class="card {% if is_primary %}is-primary{% endif %}">
|
||||
<header class="card-image">
|
||||
<figure class="image is-4by3">
|
||||
<img src="{% thumbnail object.cover|default:station.default_cover 480x480 %}">
|
||||
</figure>
|
||||
</header>
|
||||
<div class="card-header">
|
||||
<h4 class="title">
|
||||
<a href="{{ object.get_absolute_url }}">
|
||||
{% block card_title %}{{ object.title }}{% endblock %}
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
|
||||
{% else %}
|
||||
<article class="media item {% block css %}{% endblock%}">
|
||||
{% if has_cover|default_if_none:True %}
|
||||
<div class="media-left">
|
||||
<img src="{% thumbnail object.cover|default:station.default_cover 128x128 crop=scale %}"
|
||||
class="cover is-small">
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="media-content">
|
||||
<h5 class="title is-5 has-text-weight-normal">
|
||||
{% block title %}
|
||||
{% if object.is_published %}
|
||||
<a href="{{ object.get_absolute_url }}">{{ object.title }}</a>
|
||||
{% else %}
|
||||
{{ object.title }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</h5>
|
||||
<div class="subtitle is-6 has-text-weight-light">
|
||||
{% block subtitle %}
|
||||
{% if object.category %}{{ object.category.title }}{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% if has_headline|default_if_none:True %}
|
||||
<div class="headline">
|
||||
{% block headline %}{{ object.headline }}{% endblock %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% block actions %}{% endblock %}
|
||||
</article>
|
||||
{% endif %}
|
||||
|
||||
|
@ -13,7 +13,11 @@ Context variables:
|
||||
{% block title %}
|
||||
{% if not object.is_published and object.program.is_published %}
|
||||
<a href="{{ object.program.get_absolute_url }}">
|
||||
{{ object.title }}
|
||||
{{ object.program.title }}
|
||||
{% if diffusion %}
|
||||
—
|
||||
{{ diffusion.start|date:"d F" }}
|
||||
{% endif %}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ block.super }}
|
||||
|
@ -1,62 +1,6 @@
|
||||
{% load i18n easy_thumbnails_tags aircox %}
|
||||
{% comment %}
|
||||
List item for a page
|
||||
{% extends "aircox/widgets/basepage_item.html" %}
|
||||
|
||||
Context variables:
|
||||
- object: the object to render
|
||||
- render_card: render as card
|
||||
- is-primary: render as primary
|
||||
- has_headline (=False): if True, display headline
|
||||
- has_cover (=True): hide page cover
|
||||
{% endcomment %}
|
||||
|
||||
{% if render_card %}
|
||||
<article class="card {% if is_primary %}is-primary{% endif %}">
|
||||
<header class="card-image">
|
||||
<figure class="image is-4by3">
|
||||
<img src="{% thumbnail object.cover|default:station.default_cover 480x480 %}">
|
||||
</figure>
|
||||
</header>
|
||||
<div class="card-header">
|
||||
<h4 class="title">
|
||||
<a href="{{ object.get_absolute_url }}">{{ object.title }}</a>
|
||||
</h4>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
|
||||
{% else %}
|
||||
<article class="media item {% block css %}{% endblock%}">
|
||||
{% if has_cover|default_if_none:True %}
|
||||
<div class="media-left">
|
||||
<img src="{% thumbnail object.cover|default:station.default_cover 128x128 crop=scale %}"
|
||||
class="cover is-small">
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="media-content">
|
||||
<h5 class="title is-5 has-text-weight-normal">
|
||||
{% block title %}
|
||||
{% if object.is_published %}
|
||||
<a href="{{ object.get_absolute_url }}">{{ object.title }}</a>
|
||||
{% else %}
|
||||
{{ object.title }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</h5>
|
||||
<div class="subtitle is-6 has-text-weight-light">
|
||||
{% block subtitle %}
|
||||
{% if object.category %}{{ object.category.title }}{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% if has_headline|default_if_none:True %}
|
||||
<div class="headline">
|
||||
{% block headline %}{{ object.headline }}{% endblock %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% block actions %}{% endblock %}
|
||||
</article>
|
||||
{% endif %}
|
||||
{% block card_title %}
|
||||
{% block title %}{{ block.super }}{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
|
@ -2,6 +2,8 @@ import random
|
||||
import json
|
||||
|
||||
from django import template
|
||||
from django.contrib.admin.templatetags.admin_urls import admin_urlname
|
||||
from django.urls import reverse
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
from aircox.models import Page, Diffusion, Log
|
||||
@ -10,6 +12,12 @@ random.seed()
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter(name='admin_url')
|
||||
def do_admin_url(obj, arg, pass_id=True):
|
||||
""" Reverse admin url for object """
|
||||
name = admin_urlname(obj._meta, arg)
|
||||
return reverse(name, args=(obj.id,)) if pass_id else reverse(name)
|
||||
|
||||
@register.filter(name='get_tracks')
|
||||
def do_get_tracks(obj):
|
||||
""" Get a list of track for the provided log, diffusion, or episode """
|
||||
@ -20,6 +28,14 @@ def do_get_tracks(obj):
|
||||
obj = obj.episode
|
||||
return obj.track_set.all()
|
||||
|
||||
@register.simple_tag(name='has_perm', takes_context=True)
|
||||
def do_has_perm(context, obj, perm, user=None):
|
||||
""" Return True if ``user.has_perm('[APP].[perm]_[MODEL]')`` """
|
||||
if user is None:
|
||||
user = context['request'].user
|
||||
return user.has_perm('{}.{}_{}'.format(
|
||||
obj._meta.app_label, perm, obj._meta.model_name))
|
||||
|
||||
@register.filter(name='is_diffusion')
|
||||
def do_is_diffusion(obj):
|
||||
""" Return True if object is a Diffusion. """
|
||||
|
Reference in New Issue
Block a user