skillbox/server/books/blocks.py

158 lines
3.4 KiB
Python

from wagtail import blocks
from wagtail.documents.blocks import DocumentChooserBlock
from wagtail.snippets.blocks import SnippetChooserBlock
from assignments.models import Assignment
from core.constants import DEFAULT_RICH_TEXT_FEATURES, INSTRUMENTS_RICH_TEXT_FEATURES
from surveys.models import Survey
"""
Using a StructBlock inside a StreamField (e.g. inside a ContentBlock):
as an illustration
data = {'text': 'This is me'}
self.contents.append(('solution', data))
by itself:
block = SolutionBlock()
data = {'text': 'This is me'}
value = block.to_python(data)
cleaned_value = block.clean(value)
"""
class CMSDocumentBlock(DocumentChooserBlock):
class Meta:
label = "CMS Document"
# link_block
class LinkBlock(blocks.StructBlock):
class Meta:
icon = "link"
text = blocks.TextBlock()
url = blocks.URLBlock()
# 'text_block' 'solution'
class TextBlock(blocks.StructBlock):
class Meta:
icon = "doc-full"
text = blocks.RichTextBlock(features=DEFAULT_RICH_TEXT_FEATURES)
class SolutionBlock(blocks.StructBlock):
class Meta:
icon = "tick"
text = blocks.RichTextBlock(features=DEFAULT_RICH_TEXT_FEATURES)
document = CMSDocumentBlock(required=False)
# 'basic_knowledge'
class BasicKnowledgeBlock(blocks.StructBlock):
class Meta:
icon = "placeholder"
label = "Instrument"
description = blocks.RichTextBlock(required=False)
basic_knowledge = blocks.PageChooserBlock(
required=True, page_type="basicknowledge.BasicKnowledge"
)
# 'image_url'
class ImageUrlBlock(blocks.StructBlock):
class Meta:
icon = "image"
title = blocks.TextBlock()
url = blocks.URLBlock()
# 'assignment'
class AssignmentBlock(blocks.StructBlock):
class Meta:
icon = "download"
assignment_id = SnippetChooserBlock(
Assignment
) # probably wrong name, should be `assignment` only. todo: Can we change it?
# 'survey'
class SurveyBlock(blocks.StructBlock):
class Meta:
icon = "form"
survey_id = SnippetChooserBlock(
Survey
) # probably wrong name, should be `survey` only. todo: Can we change it?
# 'video_block'
class VideoBlock(blocks.StructBlock):
class Meta:
icon = "media"
url = blocks.URLBlock()
# 'document_block'
class DocumentBlock(blocks.StructBlock):
class Meta:
icon = "doc-full"
url = blocks.URLBlock()
class InfogramBlock(blocks.StructBlock):
id = blocks.TextBlock()
title = blocks.TextBlock()
class GeniallyBlock(blocks.StructBlock):
id = blocks.TextBlock()
class ThinglinkBlock(blocks.StructBlock):
id = blocks.TextBlock()
class SectionTitleBlock(blocks.StructBlock):
text = blocks.TextBlock()
class SubtitleBlock(blocks.StructBlock):
text = blocks.TextBlock()
class InstrumentTextBlock(blocks.StructBlock):
class Meta:
icon = "doc-full"
text = blocks.RichTextBlock(features=INSTRUMENTS_RICH_TEXT_FEATURES)
class ModuleRoomSlugBlock(blocks.StructBlock):
class Meta:
icon = "link"
title = blocks.TextBlock()
class InstructionBlock(blocks.StructBlock):
class Meta:
icon = "help"
url = blocks.URLBlock(required=False)
text = blocks.TextBlock(required=False)
document = DocumentChooserBlock(required=False)
# 'text_block' 'task' 'basic_knowledge' 'student_entry' 'image_block'
#
# url = blocks.URLBlock()
# document = DocumentChooserBlock()