Add content list block component

This commit is contained in:
Christian Cueni 2019-07-15 11:28:54 +02:00
parent 036c53dd9f
commit a41947e951
2 changed files with 85 additions and 3 deletions

View File

@ -3,11 +3,12 @@
<div class="content-block" :class="specialClass"> <div class="content-block" :class="specialClass">
<div class="content-block__actions"> <div class="content-block__actions">
<visibility-action <visibility-action
v-if="!contentBlock.indent"
:block="contentBlock"></visibility-action> :block="contentBlock"></visibility-action>
<a @click="editContentBlock()" v-if="contentBlock.mine" class="content-block__action-button"> <a @click="editContentBlock()" v-if="canEditContentBlock" class="content-block__action-button">
<pen-icon class="content-block__action-icon action-icon"></pen-icon> <pen-icon class="content-block__action-icon action-icon"></pen-icon>
</a> </a>
<a @click="deleteContentBlock(contentBlock.id)" v-if="contentBlock.mine" class="content-block__action-button"> <a @click="deleteContentBlock(contentBlock.id)" v-if="canEditContentBlock" class="content-block__action-button">
<trash-icon class="content-block__action-icon action-icon"></trash-icon> <trash-icon class="content-block__action-icon action-icon"></trash-icon>
</a> </a>
</div> </div>
@ -23,7 +24,7 @@
</div> </div>
<add-content-block-button :after="contentBlock.id"></add-content-block-button> <add-content-block-button :after="contentBlock.id" v-if="!contentBlock.indent"></add-content-block-button>
</div> </div>
@ -41,6 +42,7 @@
import InfogramBlock from '@/components/content-blocks/InfogramBlock'; import InfogramBlock from '@/components/content-blocks/InfogramBlock';
import GeniallyBlock from '@/components/content-blocks/GeniallyBlock'; import GeniallyBlock from '@/components/content-blocks/GeniallyBlock';
import SubtitleBlock from '@/components/content-blocks/SubtitleBlock'; import SubtitleBlock from '@/components/content-blocks/SubtitleBlock';
import ContentListBlock from '@/components/content-blocks/ContentListBlock';
import Assignment from '@/components/content-blocks/assignment/Assignment'; import Assignment from '@/components/content-blocks/assignment/Assignment';
import Solution from '@/components/content-blocks/Solution'; import Solution from '@/components/content-blocks/Solution';
import AddContentBlockButton from '@/components/AddContentBlockButton'; import AddContentBlockButton from '@/components/AddContentBlockButton';
@ -59,6 +61,7 @@
export default { export default {
props: ['contentBlock', 'parent'], props: ['contentBlock', 'parent'],
name: 'content-block',
components: { components: {
'text_block': TextBlock, 'text_block': TextBlock,
@ -72,6 +75,7 @@
'infogram_block': InfogramBlock, 'infogram_block': InfogramBlock,
'genially_block': GeniallyBlock, 'genially_block': GeniallyBlock,
'subtitle': SubtitleBlock, 'subtitle': SubtitleBlock,
'content_list': ContentListBlock,
Solution, Solution,
Assignment, Assignment,
Task, Task,
@ -93,6 +97,9 @@
} }
return `Instrument - ${instruments[contentType]}` return `Instrument - ${instruments[contentType]}`
},
canEditContentBlock() {
return this.contentBlock.mine && !this.contentBlock.indent;
} }
}, },

View File

@ -0,0 +1,75 @@
<template>
<div class="content-list-block__container">
<div class="content-list-wrapper">
<ol class="content-list">
<li class="content-list__item contentlist-item" :key="contentBlock.id" v-for="contentBlock in contentBlocks">
<content-block :contentBlock="contentBlock"></content-block>
</li>
</ol>
</div>
</div>
</template>
<script>
// import ContentBlock from '@/components/ContentBlock';
export default {
props: ['value', 'parent'],
name: 'content-block-list',
components: {
// https://vuejs.org/v2/guide/components-edge-cases.html#Circular-References-Between-Components
ContentBlock: () => import('@/components/ContentBlock')
},
computed: {
contentBlocks() {
let some = this.value.map(contentBlock => {
console.log(Object.assign({}, contentBlock, {
contentBlock: {
contents: {...contentBlock.value}
}
}))
return Object.assign({}, contentBlock, {
contents: {...contentBlock.value},
indent: true
})
})
console.warn(some);
return some;
}
},
mounted () {
console.log('list', this.value)
}
}
</script>
<style scoped lang="scss">
@import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
.content-list-wrapper {
.content-list {
/* https://stackoverflow.com/questions/1632005/ordered-list-html-lower-alpha-with-right-parentheses */
counter-reset: list;
&__item {
list-style: none;
position: relative;
padding: 0 2*15px;
&::before {
position: absolute;
font-weight: 600;
left: 0;
color: $color-brand;
content: counter(list, lower-alpha) ") ";
counter-increment: list;
}
}
}
}
</style>