This commit is contained in:
bkfox 2019-06-29 19:05:43 +02:00
parent 74dbc620ed
commit 4b57cd6643
7 changed files with 76 additions and 45 deletions

View File

@ -13,9 +13,12 @@ from aircox.admin.playlist import TracksInline
from aircox.admin.mixins import UnrelatedInlineMixin
@admin.register(models.SiteSettings)
class SettingsAdmin(admin.ModelAdmin):
pass
@admin.register(models.Site)
class SiteAdmin(ContentEditor):
inlines = [
plugins.richtext.RichTextInline.create(models.SiteRichText),
plugins.image.ImageInline.create(models.SiteImage),
]
class PageDiffusionPlaylist(UnrelatedInlineMixin, TracksInline):
@ -55,8 +58,8 @@ class PageAdmin(ContentEditor, TreeAdmin):
)
inlines = [
plugins.richtext.RichTextInline.create(models.RichText),
plugins.image.ImageInline.create(models.Image),
plugins.richtext.RichTextInline.create(models.PageRichText),
plugins.image.ImageInline.create(models.PageImage),
]
def get_inline_instances(self, request, obj=None):

View File

@ -1 +1,2 @@
import './js';

View File

@ -10,11 +10,10 @@ from model_utils.models import TimeStampedModel, StatusModel
from model_utils import Choices
from filer.fields.image import FilerImageField
from aircox import models as aircox
class SiteSettings(models.Model):
class Site(models.Model):
station = models.ForeignKey(
aircox.Station, on_delete=models.SET_NULL, null=True,
)
@ -45,16 +44,29 @@ class SiteSettings(models.Model):
blank=True, null=True,
)
regions = [
Region(key='topnav', title=_('Navigation'), inherited=True),
Region(key='sidenav', title=_('Side Navigation'), inherited=True),
]
SitePlugin = create_plugin_base(Site)
class SiteRichText(plugins.richtext.RichText, SitePlugin):
pass
class SiteImage(plugins.image.Image, SitePlugin):
caption = models.CharField(_("caption"), max_length=200, blank=True)
class Page(AbstractPage, TimeStampedModel, StatusModel):
STATUS = Choices('draft', 'published')
regions = [
Region(key="main", title=_("Content")),
Region(key="sidebar", title=_("Sidebar")),
]
# metadata
by = models.ForeignKey(
auth.User, models.SET_NULL, blank=True, null=True,
@ -96,22 +108,20 @@ class Page(AbstractPage, TimeStampedModel, StatusModel):
aircox.Diffusion, models.CASCADE,
blank=True, null=True,
)
program = models.OneToOneField(
aircox.Program, models.CASCADE,
blank=True, null=True,
)
PagePlugin = create_plugin_base(Page)
class RichText(plugins.richtext.RichText, PagePlugin):
class PageRichText(plugins.richtext.RichText, PagePlugin):
pass
class Image(plugins.image.Image, PagePlugin):
class PageImage(plugins.image.Image, PagePlugin):
caption = models.CharField(_("caption"), max_length=200, blank=True)
class ProgramPage(Page):
program = models.OneToOneField(
aircox.Program, models.CASCADE,
)

View File

@ -1,16 +1,31 @@
from django.utils.html import format_html, mark_safe
from feincms3.renderer import TemplatePluginRenderer
from .models import Page, RichText, Image
from .models import *
renderer = TemplatePluginRenderer()
renderer.register_string_renderer(
RichText,
site_renderer = TemplatePluginRenderer()
site_renderer.register_string_renderer(
SiteRichText,
lambda plugin: mark_safe(plugin.text),
)
renderer.register_string_renderer(
Image,
site_renderer.register_string_renderer(
SiteImage,
lambda plugin: format_html(
'<figure><img src="{}" alt=""/><figcaption>{}</figcaption></figure>',
plugin.image.url,
plugin.caption,
),
)
page_renderer = TemplatePluginRenderer()
page_renderer.register_string_renderer(
PageRichText,
lambda plugin: mark_safe(plugin.text),
)
page_renderer.register_string_renderer(
PageImage,
lambda plugin: format_html(
'<figure><img src="{}" alt=""/><figcaption>{}</figcaption></figure>',
plugin.image.url,

View File

@ -1,11 +1,11 @@
{% load static thumbnail %}
{% load static thumbnail feincms3 %}
<html>
<head>
<meta charset="utf-8">
<meta name="application-name" content="aircox">
<meta name="description" content="{{ site_settings.description }}">
<meta name="keywords" content="{{ site_settings.tags }}">
<link rel="icon" href="{% thumbnail site_settings.favicon 32x32 crop %}" />
<meta name="description" content="{{ site.description }}">
<meta name="keywords" content="{{ site.tags }}">
<link rel="icon" href="{% thumbnail site.favicon 32x32 crop %}" />
{% block assets %}
<link rel="stylesheet" type="text/css" href="{% static "aircox_web/assets/main.css" %}"/>
@ -15,19 +15,26 @@
<script src="{% static "aircox_web/assets/vendor.js" %}"></script>
{% endblock %}
<title>{% block title %}{{ site_settings.title }}{% endblock %}</title>
<title>{% block title %}{{ site.title }}{% endblock %}</title>
{% block extra_head %}{% endblock %}
</head>
<body id="app">
<nav class="navbar" role="navigation" aria-label="main navigation">
{% render_region regions "topnav" %}
</nav>
<main>
{% block main %}
{% endblock main %}
</main>
<div class="columns">
<aside class="column">
{% render_region regions "sidenav" %}
</aside>
<main class="column is-three-quarters">
{% block main %}
<h1>{{ page.title }}</h1>
{% render_region page_regions "main" %}
{% endblock main %}
</main>
</div>
</body>
</html>

View File

@ -2,8 +2,8 @@ from django.shortcuts import get_object_or_404, render
from feincms3.regions import Regions
from .models import SiteSettings, Page
from .renderer import renderer
from .models import Site, Page
from .renderer import site_renderer, page_renderer
def page_detail(request, path=None):
@ -12,11 +12,11 @@ def page_detail(request, path=None):
Page.objects.all(),
path="/{}/".format(path) if path else "/",
)
site = Site.objects.all().first()
return render(request, "aircox_web/page.html", {
'site_settings': SiteSettings.objects.all().first(),
'site': site,
"regions": Regions.from_item(site, renderer=site_renderer, timeout=60),
"page": page,
"regions": Regions.from_item(
page, renderer=renderer, timeout=60
),
"page_regions": Regions.from_item(page, renderer=page_renderer, timeout=60),
})

View File

@ -17,11 +17,6 @@ from django.conf import settings
from django.urls import include, path, re_path
from django.contrib import admin
#from wagtail.admin import urls as wagtailadmin_urls
#from wagtail.documents import urls as wagtaildocs_urls
#from wagtail.core import urls as wagtail_urls
#from wagtail.images.views.serve import ServeView
import aircox.urls
import aircox_web.urls