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

Mn 2019 07 translatable wagtail pages #776

Merged
merged 4 commits into from
Jul 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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(

rmader marked this conversation as resolved.
Show resolved Hide resolved
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)
rmader marked this conversation as resolved.
Show resolved Hide resolved
body_en = RichTextField(blank=True)

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

subtitle = TranslatedField(
rmader marked this conversation as resolved.
Show resolved Hide resolved
'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
rmader marked this conversation as resolved.
Show resolved Hide resolved
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