diff --git a/client/src/components/ContentBlock.vue b/client/src/components/ContentBlock.vue
index 5cda07e8..800435c2 100644
--- a/client/src/components/ContentBlock.vue
+++ b/client/src/components/ContentBlock.vue
@@ -16,7 +16,7 @@
{{instrumentLabel}}
{{contentBlock.title}}
-
@@ -100,6 +100,44 @@
},
canEditContentBlock() {
return this.contentBlock.mine && !this.contentBlock.indent;
+ },
+ contentBlocksWithContentLists() {
+ /* collects all conent_list_items in content_lists
+ {
+ text_block,
+ content_list_item,
+ contentlist_item,
+ text_block
+ } becomes
+ {
+ text_block,
+ content_list: [content_list_item, content_list_item],
+ text_block
+ }
+ */
+ let contentList = [];
+ let newContent = this.contentBlock.contents.reduce((newContents, content, index) => {
+ // collect content_list_items
+ if (content.type === 'content_list_item') {
+ contentList = [...contentList, content]
+ if (index === this.contentBlock.contents.length - 1) {
+ return [...newContents, this.createContentList(contentList)];
+ }
+ return newContents
+ } else {
+ // handle all other items and reset current content_list if necessary
+ if (contentList.length !== 0) {
+ newContents = [...newContents, this.createContentList(contentList), content];
+ contentList = [];
+ return newContents;
+ } else {
+ return [...newContents, content]
+ }
+ }
+ }, [])
+ return Object.assign({}, this.contentBlock, {
+ contents: newContent
+ });
}
},
@@ -132,9 +170,15 @@
}
}
});
- }
+ },
+ createContentList(contentList) {
+ return {
+ type: 'content_list',
+ contents: contentList,
+ id: contentList[0].id
+ };
+ },
},
-
data() {
return {
showVisibility: false
diff --git a/client/src/components/content-blocks/ContentListBlock.vue b/client/src/components/content-blocks/ContentListBlock.vue
index e40f84d0..b33867e4 100644
--- a/client/src/components/content-blocks/ContentListBlock.vue
+++ b/client/src/components/content-blocks/ContentListBlock.vue
@@ -15,7 +15,7 @@
// import ContentBlock from '@/components/ContentBlock';
export default {
- props: ['value', 'parent'],
+ props: ['contents', 'parent'],
name: 'content-block-list',
components: {
@@ -25,10 +25,11 @@
computed: {
contentBlocks() {
- return this.value.map(contentBlock => {
+ const indent = this.contents.length > 1;
+ return this.contents.map(contentBlock => {
return Object.assign({}, contentBlock, {
- contents: {...contentBlock.value},
- indent: true
+ contents: [...contentBlock.value],
+ indent
})
});
}
diff --git a/server/books/models/contentblock.py b/server/books/models/contentblock.py
index 1c4e57a0..e59427e3 100644
--- a/server/books/models/contentblock.py
+++ b/server/books/models/contentblock.py
@@ -51,10 +51,7 @@ class ContentBlock(StrictHierarchyPage):
]
content_list_item = StreamBlock(content_blocks)
- content_list = StreamBlock(
- [('content_list_item', StreamBlock(content_blocks))]
- )
- contents = StreamField(content_blocks + [('content_list', content_list)], null=True, blank=True)
+ contents = StreamField(content_blocks + [('content_list_item', content_list_item)], null=True, blank=True)
type = models.CharField(
max_length=100,