예제 #1
0
class DataSnapshot(blocks.StructBlock):
    """ A basic Data Snapshot object. """
    # Market key corresponds to market short name for lookup
    market_key = blocks.CharBlock(max_length=20,
                                  required=True,
                                  help_text='Market identifier, e.g. AUT')
    num_originations = blocks.CharBlock(
        max_length=20, help_text='Number of originations, e.g. 1.2 million')
    value_originations = blocks.CharBlock(
        max_length=20,
        help_text='Total dollar value of originations, e.g. $3.4 billion')
    year_over_year_change = blocks.CharBlock(
        max_length=20, help_text='Percentage change, e.g. 5.6% increase')

    last_updated_projected_data = blocks.DateBlock(
        help_text='Month of latest entry in dataset')
    # Market-specific descriptor text
    num_originations_text = blocks.CharBlock(
        max_length=100,
        help_text='Descriptive sentence, e.g. Auto loans originated')
    value_originations_text = blocks.CharBlock(
        max_length=100,
        help_text='Descriptive sentence, e.g. Dollar volume of new loans')
    year_over_year_change_text = blocks.CharBlock(
        max_length=100,
        help_text='Descriptive sentence, e.g. In year-over-year originations')

    # Select an image
    image = images_blocks.ImageChooserBlock(required=False, icon='image')

    class Meta:
        icon = 'image'
        label = 'CCT Data Snapshot'
        template = '_includes/organisms/data_snapshot.html'
예제 #2
0
class InfoBlock(core_blocks.StructBlock):

    title = core_blocks.CharBlock(classname="full title", required=False)
    image = image_blocks.ImageChooserBlock(required=False)
    text = core_blocks.RichTextBlock(required=False)
    button = CallToActionBlock(required=False)
    highlight = core_blocks.ChoiceBlock(
        choices=[('', 'None'), ('highlight', 'Highlight (blue)'),
                 ('boxed', 'Boxed'), ('boxed2', 'Boxed Variation'),
                 ('highlight-purple', 'Highlight (purple)')],
        icon='cup',
        required=False,
        help_text='How should this block be displayed?')
    alignment = core_blocks.ChoiceBlock(
        choices=[
            ('vertical', 'vertical'),
            ('horizontal', 'horizontal'),
        ],
        icon='cup',
        default='vertical',
        help_text='How should the text and image be aligned?')

    class Meta:
        template = 'home/blocks/info_block.html'
        icon = 'placeholder'
        label = 'Info Block'
예제 #3
0
class BasicContentBlock(blocks.StructBlock):
    class Meta:
        template = "cms_pages/home_page_blocks/basic_content.html"

    PANEL_BLUE_LEFT = "blue_left"
    PANEL_WHITE_RIGHT = "white_right"
    PANEL_TYPES = (
        (PANEL_BLUE_LEFT, "Left-aligned image, blue-filtered image BG"),
        (PANEL_WHITE_RIGHT, "Right-aligned image, white background"),
    )

    panel_type = blocks.ChoiceBlock(
        choices=PANEL_TYPES,
        required=True,
    )
    heading = blocks.CharBlock(required=True)
    inset_illustration = blocks.ChoiceBlock(
        choices=ILLUSTRATION_TYPES,
        required=True,
    )
    background_image = imageblocks.ImageChooserBlock(
        required=False,
        help_text="This is used as the background image of a "
        "blue-left block. It's not used for white-right.")
    body = blocks.RichTextBlock(required=True)
    link = BasicContentLink()
    external_links = blocks.ListBlock(ExternalLinksBlock)
    compact = blocks.BooleanBlock(
        required=False,
        help_text="True if this block is to be displayed in 'compact' mode",
    )
예제 #4
0
class WideImageBlock(core_blocks.StructBlock):

    image = image_blocks.ImageChooserBlock()

    class Meta:
        template = 'home/blocks/wide_image_block.html'
        icon = 'placeholder'
        label = 'Wide Image Block'
예제 #5
0
class ColumnBlock(core_blocks.StructBlock):
    title_col1 = core_blocks.CharBlock(classname="full title", required=False)
    image_col1 = image_blocks.ImageChooserBlock(required=False)
    text_col1 = core_blocks.RichTextBlock(required=False)

    title_col2 = core_blocks.CharBlock(classname="full title", required=False)
    image_col2 = image_blocks.ImageChooserBlock(required=False)
    text_col2 = core_blocks.RichTextBlock(required=False)

    title_col3 = core_blocks.CharBlock(classname="full title", required=False)
    image_col3 = image_blocks.ImageChooserBlock(required=False)
    text_col3 = core_blocks.RichTextBlock(required=False)

    class Meta:
        template = 'home/blocks/column_block.html'
        icon = 'placeholder'
        label = 'Column Block'
예제 #6
0
class FullWidthText(blocks.StreamBlock):
    content = blocks.RichTextBlock(icon='edit')
    media = images_blocks.ImageChooserBlock(icon='image')
    quote = molecules.Quote()
    cta = molecules.CallToAction()
    related_links = molecules.RelatedLinks()
    table = Table()

    class Meta:
        icon = 'edit'
        template = '_includes/organisms/full-width-text.html'
예제 #7
0
class WidthBlock(blocks.StructBlock):
    width = blocks.IntegerBlock(
        min_value=1,
        max_value=5,
        help_text="How many grid columns to occupy in rendered template")
    content = blocks.StreamBlock([
        ('rich_text', blocks.RichTextBlock()),
        ('raw_html', blocks.RawHTMLBlock()),
        ('image', image_blocks.ImageChooserBlock()),
    ],
                                 min_num=1,
                                 max_num=1)
예제 #8
0
class KeynoteSpeakerBlock(blocks.StructBlock):
    class Meta:
        template = "cms_pages/home_page_blocks/keynote_speaker.html"

    name = blocks.CharBlock(required=True)
    body = blocks.RichTextBlock(required=True)
    links = blocks.ListBlock(ExternalLinksBlock)
    profile_image = imageblocks.ImageChooserBlock(
        required=False,
        help_text="Profile image for the speaker",
    )
    presentation = PresentationChooserBlock(
        help_text="This speaker's presentation", )
예제 #9
0
class FullWidthText(blocks.StreamBlock):
    content_with_anchor = molecules.ContentWithAnchor()
    content = blocks.RichTextBlock(icon='edit')
    media = images_blocks.ImageChooserBlock(icon='image')
    quote = molecules.Quote()
    cta = molecules.CallToAction()
    related_links = molecules.RelatedLinks()
    table = Table(editable=False)
    table_block = AtomicTableBlock(table_options={'renderer': 'html'})

    class Meta:
        icon = 'edit'
        template = '_includes/organisms/full-width-text.html'
예제 #10
0
class FullWidthText(blocks.StreamBlock):
    content = blocks.RichTextBlock(icon='edit')
    content_with_anchor = molecules.ContentWithAnchor()
    heading = v1_blocks.HeadingBlock(required=False)
    image_inset = molecules.ContentImage()
    table_block = AtomicTableBlock(table_options={'renderer': 'html'})
    quote = molecules.Quote()
    cta = molecules.CallToAction()
    related_links = molecules.RelatedLinks()
    reusable_text = v1_blocks.ReusableTextChooserBlock('v1.ReusableText')
    email_signup = EmailSignUp()
    media = images_blocks.ImageChooserBlock(icon=None, label=' ')

    class Meta:
        icon = 'edit'
        template = '_includes/organisms/full-width-text.html'
예제 #11
0
class BlogPost(MetadataPageMixin, Page):
    date = models.DateField(default=now)
    body = StreamField([
        ('heading', blocks.CharBlock(template="blog/block/heading.html")),
        ('paragraph', blocks.RichTextBlock(template="blog/block/paragraph.html")),
        ('image', imageblocks.ImageChooserBlock(template="blog/block/image.html")),
        ('embed', EmbedBlock(template="blog/block/embed.html")),
        ('code', CodeBlock()),
    ])

    content_panels = Page.content_panels + [
        FieldPanel('date'),
        StreamFieldPanel('body'),
    ]

    def get_context(self, request, *args, **kwargs):
        context = super(BlogPost, self).get_context(request, *args, **kwargs)
        parent = self.get_parent()
        context['parent'] = parent
        return context
예제 #12
0
class HomePage(Page):

    # Title
    title_en = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_de = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_it = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_fr = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_sv = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_sl = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_da = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_uk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_el = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_ru = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_ka = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_mk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")
    title_mt = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Header Title")

    default_subtitle = (
        "Ever wondered how to get young people involved in politics online?"
        "OPIN, a European toolbox for youth eParticipation projects, shows "
        "you how.")

    intro_en = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_de = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_it = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_fr = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_sv = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_sl = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_da = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_uk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_el = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_ru = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_ka = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_mk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)
    intro_mt = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle",
                                default=default_subtitle)

    image = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
        verbose_name="Header Image",
        help_text="The Image that is shown on top of the page")

    videoplayer_url = models.URLField()

    # Body
    block_types = [
        ('image', image_blocks.ImageChooserBlock(icon="image")),
        ('info_block', InfoBlock()),
        ('video_block', VideoBlock()),
        ('news_block', NewsBlock()),
        ('rss_feed', RSSImportBlock()),
        ('column_block', ColumnBlock()),
    ]
    body_en = StreamField(block_types, null=True)
    body_de = StreamField(block_types, null=True, blank=True)
    body_it = StreamField(block_types, null=True, blank=True)
    body_fr = StreamField(block_types, null=True, blank=True)
    body_sv = StreamField(block_types, null=True, blank=True)
    body_sl = StreamField(block_types, null=True, blank=True)
    body_da = StreamField(block_types, null=True, blank=True)
    body_uk = StreamField(block_types, null=True, blank=True)
    body_el = StreamField(block_types, null=True, blank=True)
    body_ru = StreamField(block_types, null=True, blank=True)
    body_ka = StreamField(block_types, null=True, blank=True)
    body_mk = StreamField(block_types, null=True, blank=True)
    body_mt = StreamField(block_types, null=True, blank=True)

    body = TranslatedField('body')

    translated_title = TranslatedField('title')
    translated_intro = TranslatedField('intro')

    class Meta:
        verbose_name = "Homepage"

    general_panels = [
        edit_handlers.FieldPanel('title', classname='title'),
        edit_handlers.FieldPanel('slug'),
        ImageChooserPanel('image'),
        edit_handlers.FieldPanel('videoplayer_url'),
    ]

    content_panels = [
        edit_handlers.MultiFieldPanel([
            edit_handlers.FieldPanel('title_' + lang_code),
            edit_handlers.FieldPanel('intro_' + lang_code),
            edit_handlers.StreamFieldPanel('body_' + lang_code)
        ],
                                      heading=lang,
                                      classname="collapsible collapsed")
        for lang_code, lang in LANGUAGES
    ]

    edit_handler = edit_handlers.TabbedInterface([
        edit_handlers.ObjectList(content_panels, heading='Content'),
        edit_handlers.ObjectList(general_panels, heading='General')
    ])

    parent_page_types = []
    subpage_types = ['home.SimplePage', 'home.ManualsIndex']

    @property
    def featured_projects(self):
        return prj_models.Project.objects.featured()
예제 #13
0
class ImageTextItemBlock(core_blocks.StructBlock):
    image = image_blocks.ImageChooserBlock()
    text = core_blocks.TextBlock()
예제 #14
0
class InlineImageBlock(core_blocks.StructBlock):
    image = image_blocks.ImageChooserBlock()
    internal_link = core_blocks.PageChooserBlock(required=False)
    external_link = core_blocks.URLBlock(required=False)
    link_text = core_blocks.TextBlock(required=False)
예제 #15
0
class SimplePage(Page):

    # Title
    title_en = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_de = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_it = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_fr = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_sv = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_sl = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_da = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_uk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_el = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_ru = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_ka = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_mk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")
    title_mt = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Title")

    intro_en = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_de = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_it = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_fr = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_sv = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_sl = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_da = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_uk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_el = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_ru = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_ka = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_mk = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")
    intro_mt = models.CharField(max_length=255,
                                blank=True,
                                verbose_name="Subtitle")

    intro_image = models.ForeignKey('wagtailimages.Image',
                                    null=True,
                                    blank=True,
                                    on_delete=models.SET_NULL,
                                    related_name='+')

    # Body
    block_types = [
        ('heading', core_blocks.CharBlock(classname="full title",
                                          icon="title")),
        ('paragraph', core_blocks.TextBlock(icon="pilcrow")),
        ('rich_text', core_blocks.RichTextBlock(icon="pilcrow")),
        ('info_block', InfoBlock()),
        ('image', image_blocks.ImageChooserBlock(icon="image")),
        ('wide_image', WideImageBlock(icon="image")),
        ('images', InlineImagesBlock(icon="image")),
        ('contact_block', ContactBlock(icon="form")),
        ('accordion_block', AccordionBlock(icon="collapse-down")),
        ('image_text_block_list', ImageTextBlockList()),
        ('rss_feed', RSSImportBlock()),
    ]

    body_en = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_de = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_it = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_fr = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_sv = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_sl = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_da = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_uk = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_el = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_ru = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_ka = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_mk = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_mt = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")

    translated_title = TranslatedField('title')

    translated_intro = TranslatedField('intro')

    body = TranslatedField('body')

    general_panels = [
        edit_handlers.FieldPanel('title', classname='title'),
        edit_handlers.FieldPanel('slug'),
        ImageChooserPanel('intro_image')
    ]

    content_panels = [
        edit_handlers.MultiFieldPanel([
            edit_handlers.FieldPanel('title_' + lang_code),
            edit_handlers.FieldPanel('intro_' + lang_code),
            edit_handlers.StreamFieldPanel('body_' + lang_code)
        ],
                                      heading=lang,
                                      classname="collapsible collapsed")
        for lang_code, lang in LANGUAGES
    ]

    edit_handler = edit_handlers.TabbedInterface([
        edit_handlers.ObjectList(content_panels, heading='Content'),
        edit_handlers.ObjectList(general_panels, heading='General')
    ])
예제 #16
0
class ManualsIndex(Page):
    translated_title = TranslatedField('title')
    title_en = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_de = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_it = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_fr = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_sv = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_sl = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_da = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_uk = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_el = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_ru = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_ka = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_mk = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_mt = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")

    block_types = [
        ('heading', core_blocks.CharBlock(classname="full title",
                                          icon="title")),
        ('paragraph', core_blocks.TextBlock(icon="pilcrow")),
        ('rich_text', core_blocks.RichTextBlock(icon="pilcrow")),
        ('info_block', InfoBlock()),
        ('image', image_blocks.ImageChooserBlock(icon="image")),
        ('wide_image', WideImageBlock(icon="image")),
        ('images', InlineImagesBlock(icon="image")),
        ('image_text_block_list', ImageTextBlockList()),
    ]

    body = TranslatedField('body')
    body_en = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_de = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_it = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_fr = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_sv = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_sl = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_da = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_uk = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_el = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_ru = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_ka = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_mk = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_mt = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")

    subpage_types = ['home.ManualsSectionPage', 'home.ManualsDetailPage']

    content_panels = [
        edit_handlers.MultiFieldPanel([
            edit_handlers.FieldPanel('title_' + lang_code),
        ],
                                      heading=lang,
                                      classname="collapsible collapsed")
        for lang_code, lang in LANGUAGES
    ]

    general_panels = [
        edit_handlers.FieldPanel('title', classname='title'),
        edit_handlers.FieldPanel('slug'),
    ]

    edit_handler = edit_handlers.TabbedInterface([
        edit_handlers.ObjectList(content_panels, heading='Content'),
        edit_handlers.ObjectList(general_panels, heading='General')
    ])

    @property
    def subpages(self):
        return self.get_children().live().specific()
예제 #17
0
class ManualsDetailPage(Page):
    subpage_types = []
    parent_page_types = ['home.ManualsSectionPage', 'home.ManualsIndex']

    # Title
    translated_title = TranslatedField('title')
    title_en = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_de = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_it = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_fr = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_sv = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_sl = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_da = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_uk = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_el = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_ru = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_ka = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_mk = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")
    title_mt = models.CharField(max_length=150,
                                blank=True,
                                verbose_name="Title")

    # Subtitle (Field named description as in ManualsSectionPage)
    description = TranslatedField('description')
    description_en = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_de = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_it = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_fr = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_sv = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_sl = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_da = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_uk = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_el = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_ru = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_ka = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_mk = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")
    description_mt = models.CharField(max_length=260,
                                      blank=True,
                                      verbose_name="Subtitle")

    # Body
    body = TranslatedField('body')
    block_types = [
        ('heading', core_blocks.CharBlock(classname="full title",
                                          icon="title")),
        ('paragraph', core_blocks.TextBlock(icon="pilcrow")),
        ('rich_text', core_blocks.RichTextBlock(icon="pilcrow")),
        ('video_block', VideoBlock()),
        ('image', image_blocks.ImageChooserBlock(icon="image")),
        ('accordion_block', AccordionBlock(icon="collapse-down")),
    ]

    body_en = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_de = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_it = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_fr = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_sv = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_sl = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_da = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_uk = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_el = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_ru = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_ka = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_mk = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")
    body_mt = StreamField(block_types,
                          null=True,
                          blank=True,
                          verbose_name="body")

    content_panels = [
        edit_handlers.MultiFieldPanel([
            edit_handlers.FieldPanel('title_' + lang_code),
            edit_handlers.FieldPanel('description_' + lang_code),
            edit_handlers.StreamFieldPanel('body_' + lang_code),
        ],
                                      heading=lang,
                                      classname="collapsible collapsed")
        for lang_code, lang in LANGUAGES
    ]

    image = models.ForeignKey('wagtailimages.Image',
                              null=True,
                              blank=True,
                              on_delete=models.SET_NULL,
                              related_name='+')

    colors = (
        ('blue', 'Blue'),
        ('orange', 'Orange'),
        ('turquoise', 'Turquoise'),
        ('pink', 'Pink'),
        ('purple', 'Purple'),
    )

    color = models.CharField(choices=colors,
                             max_length=9,
                             blank=True,
                             default='blue')

    general_panels = [
        edit_handlers.FieldPanel('title', classname='title'),
        edit_handlers.FieldPanel('slug'),
        edit_handlers.FieldPanel('color'),
        ImageChooserPanel('image'),
    ]

    edit_handler = edit_handlers.TabbedInterface([
        edit_handlers.ObjectList(content_panels, heading='Content'),
        edit_handlers.ObjectList(general_panels, heading='General')
    ])

    def get_template(self, request, **kwargs):
        # only render detail page with sidebar if there's a section
        if self.parent_page.__class__.__name__ == 'ManualsSectionPage':
            return 'home/manuals_detail_page_sections.html'
        else:
            return 'home/manuals_detail_page.html'

    @property
    def parent_page(self):
        return self.get_ancestors().live().specific().last()