forked from rc/aircox
site nav
This commit is contained in:
parent
74dbc620ed
commit
4b57cd6643
|
@ -13,9 +13,12 @@ from aircox.admin.playlist import TracksInline
|
||||||
from aircox.admin.mixins import UnrelatedInlineMixin
|
from aircox.admin.mixins import UnrelatedInlineMixin
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.SiteSettings)
|
@admin.register(models.Site)
|
||||||
class SettingsAdmin(admin.ModelAdmin):
|
class SiteAdmin(ContentEditor):
|
||||||
pass
|
inlines = [
|
||||||
|
plugins.richtext.RichTextInline.create(models.SiteRichText),
|
||||||
|
plugins.image.ImageInline.create(models.SiteImage),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class PageDiffusionPlaylist(UnrelatedInlineMixin, TracksInline):
|
class PageDiffusionPlaylist(UnrelatedInlineMixin, TracksInline):
|
||||||
|
@ -55,8 +58,8 @@ class PageAdmin(ContentEditor, TreeAdmin):
|
||||||
)
|
)
|
||||||
|
|
||||||
inlines = [
|
inlines = [
|
||||||
plugins.richtext.RichTextInline.create(models.RichText),
|
plugins.richtext.RichTextInline.create(models.PageRichText),
|
||||||
plugins.image.ImageInline.create(models.Image),
|
plugins.image.ImageInline.create(models.PageImage),
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_inline_instances(self, request, obj=None):
|
def get_inline_instances(self, request, obj=None):
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
import './js';
|
import './js';
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,10 @@ from model_utils.models import TimeStampedModel, StatusModel
|
||||||
from model_utils import Choices
|
from model_utils import Choices
|
||||||
from filer.fields.image import FilerImageField
|
from filer.fields.image import FilerImageField
|
||||||
|
|
||||||
|
|
||||||
from aircox import models as aircox
|
from aircox import models as aircox
|
||||||
|
|
||||||
|
|
||||||
class SiteSettings(models.Model):
|
class Site(models.Model):
|
||||||
station = models.ForeignKey(
|
station = models.ForeignKey(
|
||||||
aircox.Station, on_delete=models.SET_NULL, null=True,
|
aircox.Station, on_delete=models.SET_NULL, null=True,
|
||||||
)
|
)
|
||||||
|
@ -45,16 +44,29 @@ class SiteSettings(models.Model):
|
||||||
blank=True, null=True,
|
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):
|
class Page(AbstractPage, TimeStampedModel, StatusModel):
|
||||||
STATUS = Choices('draft', 'published')
|
STATUS = Choices('draft', 'published')
|
||||||
regions = [
|
regions = [
|
||||||
Region(key="main", title=_("Content")),
|
Region(key="main", title=_("Content")),
|
||||||
Region(key="sidebar", title=_("Sidebar")),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
# metadata
|
# metadata
|
||||||
by = models.ForeignKey(
|
by = models.ForeignKey(
|
||||||
auth.User, models.SET_NULL, blank=True, null=True,
|
auth.User, models.SET_NULL, blank=True, null=True,
|
||||||
|
@ -96,22 +108,20 @@ class Page(AbstractPage, TimeStampedModel, StatusModel):
|
||||||
aircox.Diffusion, models.CASCADE,
|
aircox.Diffusion, models.CASCADE,
|
||||||
blank=True, null=True,
|
blank=True, null=True,
|
||||||
)
|
)
|
||||||
|
program = models.OneToOneField(
|
||||||
|
aircox.Program, models.CASCADE,
|
||||||
|
blank=True, null=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
PagePlugin = create_plugin_base(Page)
|
PagePlugin = create_plugin_base(Page)
|
||||||
|
|
||||||
|
class PageRichText(plugins.richtext.RichText, PagePlugin):
|
||||||
class RichText(plugins.richtext.RichText, PagePlugin):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Image(plugins.image.Image, PagePlugin):
|
class PageImage(plugins.image.Image, PagePlugin):
|
||||||
caption = models.CharField(_("caption"), max_length=200, blank=True)
|
caption = models.CharField(_("caption"), max_length=200, blank=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProgramPage(Page):
|
|
||||||
program = models.OneToOneField(
|
|
||||||
aircox.Program, models.CASCADE,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,31 @@
|
||||||
from django.utils.html import format_html, mark_safe
|
from django.utils.html import format_html, mark_safe
|
||||||
from feincms3.renderer import TemplatePluginRenderer
|
from feincms3.renderer import TemplatePluginRenderer
|
||||||
|
|
||||||
from .models import Page, RichText, Image
|
from .models import *
|
||||||
|
|
||||||
|
|
||||||
renderer = TemplatePluginRenderer()
|
site_renderer = TemplatePluginRenderer()
|
||||||
renderer.register_string_renderer(
|
site_renderer.register_string_renderer(
|
||||||
RichText,
|
SiteRichText,
|
||||||
lambda plugin: mark_safe(plugin.text),
|
lambda plugin: mark_safe(plugin.text),
|
||||||
)
|
)
|
||||||
renderer.register_string_renderer(
|
site_renderer.register_string_renderer(
|
||||||
Image,
|
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(
|
lambda plugin: format_html(
|
||||||
'<figure><img src="{}" alt=""/><figcaption>{}</figcaption></figure>',
|
'<figure><img src="{}" alt=""/><figcaption>{}</figcaption></figure>',
|
||||||
plugin.image.url,
|
plugin.image.url,
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% load static thumbnail %}
|
{% load static thumbnail feincms3 %}
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="application-name" content="aircox">
|
<meta name="application-name" content="aircox">
|
||||||
<meta name="description" content="{{ site_settings.description }}">
|
<meta name="description" content="{{ site.description }}">
|
||||||
<meta name="keywords" content="{{ site_settings.tags }}">
|
<meta name="keywords" content="{{ site.tags }}">
|
||||||
<link rel="icon" href="{% thumbnail site_settings.favicon 32x32 crop %}" />
|
<link rel="icon" href="{% thumbnail site.favicon 32x32 crop %}" />
|
||||||
|
|
||||||
{% block assets %}
|
{% block assets %}
|
||||||
<link rel="stylesheet" type="text/css" href="{% static "aircox_web/assets/main.css" %}"/>
|
<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>
|
<script src="{% static "aircox_web/assets/vendor.js" %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
<title>{% block title %}{{ site_settings.title }}{% endblock %}</title>
|
<title>{% block title %}{{ site.title }}{% endblock %}</title>
|
||||||
|
|
||||||
{% block extra_head %}{% endblock %}
|
{% block extra_head %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body id="app">
|
<body id="app">
|
||||||
<nav class="navbar" role="navigation" aria-label="main navigation">
|
<nav class="navbar" role="navigation" aria-label="main navigation">
|
||||||
|
{% render_region regions "topnav" %}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<main>
|
<div class="columns">
|
||||||
|
<aside class="column">
|
||||||
|
{% render_region regions "sidenav" %}
|
||||||
|
</aside>
|
||||||
|
<main class="column is-three-quarters">
|
||||||
{% block main %}
|
{% block main %}
|
||||||
|
<h1>{{ page.title }}</h1>
|
||||||
|
{% render_region page_regions "main" %}
|
||||||
{% endblock main %}
|
{% endblock main %}
|
||||||
</main>
|
</main>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@ from django.shortcuts import get_object_or_404, render
|
||||||
|
|
||||||
from feincms3.regions import Regions
|
from feincms3.regions import Regions
|
||||||
|
|
||||||
from .models import SiteSettings, Page
|
from .models import Site, Page
|
||||||
from .renderer import renderer
|
from .renderer import site_renderer, page_renderer
|
||||||
|
|
||||||
|
|
||||||
def page_detail(request, path=None):
|
def page_detail(request, path=None):
|
||||||
|
@ -12,11 +12,11 @@ def page_detail(request, path=None):
|
||||||
Page.objects.all(),
|
Page.objects.all(),
|
||||||
path="/{}/".format(path) if path else "/",
|
path="/{}/".format(path) if path else "/",
|
||||||
)
|
)
|
||||||
|
site = Site.objects.all().first()
|
||||||
return render(request, "aircox_web/page.html", {
|
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,
|
"page": page,
|
||||||
"regions": Regions.from_item(
|
"page_regions": Regions.from_item(page, renderer=page_renderer, timeout=60),
|
||||||
page, renderer=renderer, timeout=60
|
|
||||||
),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,6 @@ from django.conf import settings
|
||||||
from django.urls import include, path, re_path
|
from django.urls import include, path, re_path
|
||||||
from django.contrib import admin
|
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.urls
|
||||||
import aircox_web.urls
|
import aircox_web.urls
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user