Skip to content
This repository has been archived by the owner on Nov 7, 2019. It is now read-only.

Commit

Permalink
Merge pull request #776 from liqd/mn-2019-07-translatable-wagtail-pages
Browse files Browse the repository at this point in the history
Mn 2019 07 translatable wagtail pages
  • Loading branch information
rmader committed Jul 2, 2019
2 parents 5bf143f + 528534e commit 63bd84b
Show file tree
Hide file tree
Showing 8 changed files with 218 additions and 10 deletions.
20 changes: 20 additions & 0 deletions apps/cms/pages/migrations/0007_rename_body_to_body_de.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-07-02 11:43
from __future__ import unicode_literals

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('a4_candy_cms_pages', '0006_rename_tables_to_default'),
]

operations = [
migrations.RenameField(
model_name='homepage',
old_name='body',
new_name='body_de',
),
]
21 changes: 21 additions & 0 deletions apps/cms/pages/migrations/0008_homepage_body_en.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-07-02 11:44
from __future__ import unicode_literals

from django.db import migrations
import wagtail.core.fields


class Migration(migrations.Migration):

dependencies = [
('a4_candy_cms_pages', '0007_rename_body_to_body_de'),
]

operations = [
migrations.AddField(
model_name='homepage',
name='body_en',
field=wagtail.core.fields.RichTextField(blank=True),
),
]
20 changes: 20 additions & 0 deletions apps/cms/pages/migrations/0009_rename_subtitle_to_subtititle_de.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-07-02 12:00
from __future__ import unicode_literals

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('a4_candy_cms_pages', '0008_homepage_body_en'),
]

operations = [
migrations.RenameField(
model_name='homepage',
old_name='subtitle',
new_name='subtitle_de',
),
]
20 changes: 20 additions & 0 deletions apps/cms/pages/migrations/0010_homepage_subtitle_en.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-07-02 12:01
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('a4_candy_cms_pages', '0009_rename_subtitle_to_subtititle_de'),
]

operations = [
migrations.AddField(
model_name='homepage',
name='subtitle_en',
field=models.CharField(blank=True, max_length=500, verbose_name='Subtitle'),
),
]
20 changes: 20 additions & 0 deletions apps/cms/pages/migrations/0011_rename_body_to_body_de.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-07-02 14:46
from __future__ import unicode_literals

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('a4_candy_cms_pages', '0010_homepage_subtitle_en'),
]

operations = [
migrations.RenameField(
model_name='simplepage',
old_name='body',
new_name='body_de',
),
]
21 changes: 21 additions & 0 deletions apps/cms/pages/migrations/0012_simplepage_body_en.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-07-02 14:47
from __future__ import unicode_literals

from django.db import migrations
import wagtail.core.fields


class Migration(migrations.Migration):

dependencies = [
('a4_candy_cms_pages', '0011_rename_body_to_body_de'),
]

operations = [
migrations.AddField(
model_name='simplepage',
name='body_en',
field=wagtail.core.fields.RichTextField(blank=True),
),
]
73 changes: 63 additions & 10 deletions apps/cms/pages/models.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.admin.edit_handlers import ObjectList
from wagtail.admin.edit_handlers import TabbedInterface
from wagtail.core.fields import RichTextField
from wagtail.core.models import Page
from wagtail.images.edit_handlers import ImageChooserPanel

from apps.contrib.translations import TranslatedField


class HomePage(Page):
image = models.ForeignKey(
Expand All @@ -15,31 +19,80 @@ class HomePage(Page):
verbose_name="Header Image",
help_text="The Image that is shown on top of the page"
)
subtitle = models.CharField(

subtitle_de = models.CharField(
max_length=500, blank=True, verbose_name="Subtitle")
subtitle_en = models.CharField(
max_length=500, blank=True, verbose_name="Subtitle")
body = RichTextField(blank=True)

subpage_types = ['a4_candy_cms_pages.EmptyPage']
body_de = RichTextField(blank=True)
body_en = RichTextField(blank=True)

body = TranslatedField(
'body_de',
'body_en'
)

subtitle = TranslatedField(
'subtitle_de',
'subtitle_en'
)

en_content_panels = [
FieldPanel('subtitle_en'),
FieldPanel('body_en')
]

de_content_panels = [
FieldPanel('subtitle_de'),
FieldPanel('body_de')
]

content_panels = [
common_panels = [
FieldPanel('title'),
FieldPanel('slug'),
ImageChooserPanel('image'),
FieldPanel('subtitle'),
FieldPanel('body')
]

promote_panels = Page.promote_panels
edit_handler = TabbedInterface([
ObjectList(common_panels, heading='Common'),
ObjectList(en_content_panels, heading='English'),
ObjectList(de_content_panels, heading='German')
])

subpage_types = ['a4_candy_cms_pages.EmptyPage']


class EmptyPage(Page):
subpage_types = ['a4_candy_cms_pages.SimplePage']


class SimplePage(Page):
body = RichTextField()
body_de = RichTextField()
body_en = RichTextField(blank=True)

content_panels = Page.content_panels + [
FieldPanel('body', classname='full'),
body = TranslatedField(
'body_de',
'body_en'
)

en_content_panels = [
FieldPanel('body_en')
]

de_content_panels = [
FieldPanel('body_de')
]

common_panels = [
FieldPanel('title'),
FieldPanel('slug')
]

edit_handler = TabbedInterface([
ObjectList(common_panels, heading='Common'),
ObjectList(en_content_panels, heading='English'),
ObjectList(de_content_panels, heading='German')
])

subpage_types = ['a4_candy_cms_pages.SimplePage']
33 changes: 33 additions & 0 deletions apps/contrib/translations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from django.utils import translation
from wagtail.core.blocks.stream_block import StreamValue


class TranslatedField(object):

def __init__(self, de_field, en_field):
self.de_field = de_field
self.en_field = en_field

def hasContent(self, field):
if isinstance(field, StreamValue):
value = field.stream_data
if value:
return True
else:
return False
elif isinstance(field, str):
if field:
return True
else:
return False
else:
return False

def __get__(self, instance, owner):
de = getattr(instance, self.de_field)
en = getattr(instance, self.en_field)

if translation.get_language() == 'en' and self.hasContent(en):
return en
else:
return de

0 comments on commit 63bd84b

Please sign in to comment.