4 changed files with 5 additions and 103 deletions
@ -1,5 +1,5 @@ |
|||||||
from django.apps import AppConfig |
from django.apps import AppConfig |
||||||
|
|
||||||
|
|
||||||
class ContentConfig(AppConfig): |
class ContentPluginsConfig(AppConfig): |
||||||
name = 'content' |
name = 'content_plugins' |
||||||
|
@ -1,97 +0,0 @@ |
|||||||
from functools import reduce, partial |
|
||||||
from django.conf import settings |
|
||||||
from django.db import models |
|
||||||
from django.utils.html import strip_tags |
|
||||||
from django.utils.text import normalize_newlines |
|
||||||
from django.utils.translation import ugettext_lazy as _ |
|
||||||
|
|
||||||
from shared.utils.fields import AutoSlugField |
|
||||||
from shared.utils.functional import firstof |
|
||||||
from shared.utils.text import slimdown |
|
||||||
|
|
||||||
from . import USE_TRANSLATABLE_FIELDS |
|
||||||
|
|
||||||
|
|
||||||
if USE_TRANSLATABLE_FIELDS: |
|
||||||
from shared.multilingual.utils.fields import TranslatableCharField, TranslatableTextField |
|
||||||
|
|
||||||
|
|
||||||
class PageTitlesMixin(models.Model): |
|
||||||
""" |
|
||||||
A model mixin containg title and slug field for models serving as website |
|
||||||
pages with an URL. |
|
||||||
""" |
|
||||||
# FIXME signals are not sent from abstract models, therefore AutoSlugField doesn't work |
|
||||||
if USE_TRANSLATABLE_FIELDS: |
|
||||||
short_title = TranslatableCharField(_("Name"), max_length=50) |
|
||||||
title = TranslatableTextField(_("Titel (Langform)"), null=True, blank=True, max_length=300) |
|
||||||
window_title = TranslatableCharField(_("Fenster-/Suchmaschinentitel"), null=True, blank=True, max_length=300) |
|
||||||
# FIXME populate_from should use settings.LANGUAGE |
|
||||||
slug = AutoSlugField(_("URL-Name"), max_length=200, populate_from='short_title_de', unique_slug=True, blank=True) |
|
||||||
|
|
||||||
else: |
|
||||||
short_title = models.CharField(_("Name"), max_length=50) |
|
||||||
title = models.TextField(_("Titel (Langform)"), null=True, blank=True, max_length=300) |
|
||||||
window_title = models.CharField(_("Fenster-/Suchmaschinentitel"), null=True, blank=True, max_length=300) |
|
||||||
slug = AutoSlugField(_("URL-Name"), max_length=200, populate_from='short_title', unique_slug=True, blank=True) |
|
||||||
|
|
||||||
class Meta: |
|
||||||
abstract = True |
|
||||||
|
|
||||||
def __str__(self): |
|
||||||
return strip_tags(slimdown(self.short_title)) |
|
||||||
|
|
||||||
def get_title(self): |
|
||||||
return slimdown(firstof( |
|
||||||
self.title, |
|
||||||
self.short_title |
|
||||||
)) |
|
||||||
|
|
||||||
def get_window_title(self): |
|
||||||
return strip_tags(slimdown( |
|
||||||
firstof( |
|
||||||
self.window_title, |
|
||||||
self.short_title, |
|
||||||
self.get_first_title_line(), |
|
||||||
) |
|
||||||
)) |
|
||||||
|
|
||||||
def get_first_title_line(self): |
|
||||||
""" |
|
||||||
First line of title field. |
|
||||||
""" |
|
||||||
return slimdown( |
|
||||||
normalize_newlines(self.get_title()).partition("\n")[0] |
|
||||||
) |
|
||||||
|
|
||||||
def get_subtitle_lines(self): |
|
||||||
""" |
|
||||||
All but first line of the long title field. |
|
||||||
""" |
|
||||||
return slimdown( |
|
||||||
normalize_newlines(self.title).partition("\n")[2] |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
# TODO Move to shared.multilingual or shared.utils.translation |
|
||||||
def language_variations_for_field(language_codes, fields): |
|
||||||
# TODO Check if field is translatable |
|
||||||
return ["{}_{}".format(fields, s) for s in language_codes] |
|
||||||
|
|
||||||
|
|
||||||
# TODO Move to shared.multilingual or shared.utils.translation |
|
||||||
def language_variations_for_fields(fields, language_codes=None): |
|
||||||
if not language_codes: |
|
||||||
language_codes = [t[0] for t in settings.LANGUAGES] |
|
||||||
f = partial(language_variations_for_field, language_codes) |
|
||||||
return reduce(lambda x, y: x + y, map(f, fields)) |
|
||||||
|
|
||||||
|
|
||||||
class PageTitleAdminMixin(object): |
|
||||||
search_fields = ['short_title', 'title', 'window_title'] |
|
||||||
if USE_TRANSLATABLE_FIELDS: |
|
||||||
search_fields = language_variations_for_fields(search_fields) |
|
||||||
list_display = ['short_title', 'slug'] |
|
||||||
prepopulated_fields = { |
|
||||||
'slug': ('short_title_en',), |
|
||||||
} |
|
Loading…
Reference in new issue