From 639fa7665c5c17aee54260fef6e113da852be510 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Wed, 12 Sep 2018 15:05:36 +0200 Subject: [PATCH] Add document block --- client/src/components/ContentBlock.vue | 2 ++ .../src/components/NewContentBlockWizard.vue | 12 ++++++- .../content-blocks/DocumentBlock.vue | 36 +++++++++++++++++++ .../components/content-blocks/LinkBlock.vue | 2 +- .../ContentBlockElementChooserWidget.vue | 2 +- .../components/content-forms/DocumentForm.vue | 3 ++ server/book/blocks.py | 4 +++ server/book/models/contentblock.py | 3 +- server/book/schema/mutations.py | 8 ++++- 9 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 client/src/components/content-blocks/DocumentBlock.vue diff --git a/client/src/components/ContentBlock.vue b/client/src/components/ContentBlock.vue index 58295433..7f4a51fe 100644 --- a/client/src/components/ContentBlock.vue +++ b/client/src/components/ContentBlock.vue @@ -28,6 +28,7 @@ import ImageBlock from '@/components/content-blocks/ImageBlock'; import VideoBlock from '@/components/content-blocks/VideoBlock'; import LinkBlock from '@/components/content-blocks/LinkBlock'; + import DocumentBlock from '@/components/content-blocks/DocumentBlock'; import StudentEntry from '@/components/content-blocks/StudentEntry'; import AddContentBlockButton from '@/components/AddContentBlockButton'; import EyeIcon from '@/components/icons/EyeIcon'; @@ -42,6 +43,7 @@ 'image_block': ImageBlock, 'video_block': VideoBlock, 'link_block': LinkBlock, + 'document_block': DocumentBlock, Task, AddContentBlockButton, EyeIcon diff --git a/client/src/components/NewContentBlockWizard.vue b/client/src/components/NewContentBlockWizard.vue index 28ff366f..48c2769f 100644 --- a/client/src/components/NewContentBlockWizard.vue +++ b/client/src/components/NewContentBlockWizard.vue @@ -15,6 +15,7 @@ v-on:link-change-url="changeLinkUrl" v-on:link-change-text="changeLinkText" v-on:text-change-value="changeTextValue" + v-on:document-change-url="changeDocumentUrl" v-on:video-change-url="changeVideoUrl"> @@ -78,7 +79,7 @@ return 'text-form'; case 'exercise': return 'exercise-form'; - case 'document': + case 'document_block': return 'document-form'; } return 'content-block-element-chooser-widget' @@ -98,6 +99,9 @@ changeVideoUrl(value, index) { this._updateProperty(value, index, 'url') }, + changeDocumentUrl(value, index) { + this._updateProperty(value, index, 'url') + }, changeTextValue(value, index) { this._updateProperty(value, index, 'text') }, @@ -134,6 +138,12 @@ url: '' }; break; + case 'document_block': + el = { + ...el, + url: '' + }; + break; } this.elements.splice(index, 1, el); diff --git a/client/src/components/content-blocks/DocumentBlock.vue b/client/src/components/content-blocks/DocumentBlock.vue new file mode 100644 index 00000000..0122b080 --- /dev/null +++ b/client/src/components/content-blocks/DocumentBlock.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/client/src/components/content-blocks/LinkBlock.vue b/client/src/components/content-blocks/LinkBlock.vue index be5afd25..01b03012 100644 --- a/client/src/components/content-blocks/LinkBlock.vue +++ b/client/src/components/content-blocks/LinkBlock.vue @@ -1,7 +1,7 @@ diff --git a/client/src/components/content-forms/ContentBlockElementChooserWidget.vue b/client/src/components/content-forms/ContentBlockElementChooserWidget.vue index e498aad1..276c0146 100644 --- a/client/src/components/content-forms/ContentBlockElementChooserWidget.vue +++ b/client/src/components/content-forms/ContentBlockElementChooserWidget.vue @@ -20,7 +20,7 @@ - @@ -17,6 +18,8 @@ import InfoIcon from '@/components/icons/InfoIcon'; export default { + props: ['url', 'index'], + components: { InfoIcon } diff --git a/server/book/blocks.py b/server/book/blocks.py index 99c515f5..593fa3cc 100644 --- a/server/book/blocks.py +++ b/server/book/blocks.py @@ -36,6 +36,10 @@ class VideoBlock(blocks.StructBlock): url = blocks.URLBlock() +# 'document_block' +class DocumentBlock(blocks.StructBlock): + url = blocks.URLBlock() + # 'text_block' 'task' 'basic_knowledge' 'student_entry' 'image_block' # # url = blocks.URLBlock() diff --git a/server/book/models/contentblock.py b/server/book/models/contentblock.py index 0ef9da15..51538212 100644 --- a/server/book/models/contentblock.py +++ b/server/book/models/contentblock.py @@ -5,7 +5,7 @@ from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList, from wagtail.core.fields import StreamField from wagtail.images.blocks import ImageChooserBlock -from book.blocks import TextBlock, BasicKnowledgeBlock, StudentEntryBlock, LinkBlock, VideoBlock +from book.blocks import TextBlock, BasicKnowledgeBlock, StudentEntryBlock, LinkBlock, VideoBlock, DocumentBlock from core.wagtail_utils import StrictHierarchyPage from user.models import UserGroup @@ -37,6 +37,7 @@ class ContentBlock(StrictHierarchyPage): ('link_block', LinkBlock(icon='link')), ('task', TextBlock(icon='tick')), ('video_block', VideoBlock(icon='media')), + ('document_block', DocumentBlock(icon='doc-full')), ], null=True, blank=True) type = models.CharField( diff --git a/server/book/schema/mutations.py b/server/book/schema/mutations.py index 12a224a9..f8335b26 100644 --- a/server/book/schema/mutations.py +++ b/server/book/schema/mutations.py @@ -13,6 +13,7 @@ from book.schema.queries import ContentBlockNode def handle_content_blocks(content_data): new_contents = [] + for content in content_data: # todo: add all the content blocks # todo: sanitize user inputs! @@ -43,7 +44,12 @@ def handle_content_blocks(content_data): 'url': bleach.clean(content['url']) }}) elif content['type'] == 'document_block': - pass + new_contents.append({ + 'type': 'document_block', + 'value': { + 'url': bleach.clean(content['url']) + }}) + return new_contents