|
1 |
| -<script> |
2 |
| -import { mergeData } from 'vue-functional-data-merge' |
| 1 | +<template> |
| 2 | + <div :class="mediaClasses"> |
| 3 | + <div :class="computedAsideClasses" > |
| 4 | + <slot name="aside"> |
| 5 | + <CImage |
| 6 | + v-if="asideImage" |
| 7 | + v-bind="asideImage" |
| 8 | + /> |
| 9 | + </slot> |
| 10 | + </div> |
| 11 | + <div :class="computedBodyClasses"> |
| 12 | + <slot></slot> |
| 13 | + </div> |
| 14 | + </div> |
| 15 | +</template> |
| 16 | + |
3 | 17 |
|
| 18 | +<script> |
| 19 | +import CImage from '../Image/CImage' |
4 | 20 | export default {
|
5 |
| - functional: true, |
6 | 21 | name: 'CMedia',
|
7 | 22 | props: {
|
8 |
| - asideClasses: String, |
| 23 | + asidePositionClasses: String, |
| 24 | + addAsideClasses: String, |
| 25 | + addBodyClasses: String, |
9 | 26 | asideRight: Boolean,
|
| 27 | + asideImage: Object |
10 | 28 | },
|
11 |
| - render (h, { props, data, slots }) { |
12 |
| - let childNodes = [] |
13 |
| - const $slots = slots() |
14 |
| - const asideClasses = props.asideClasses ? |
15 |
| - props.asideClasses : |
16 |
| - props.asideRight ? |
17 |
| - 'ml-3 align-self-start' : |
18 |
| - 'mr-3 align-self-start' |
19 |
| -
|
20 |
| - const aside = h( |
21 |
| - 'div', |
22 |
| - { class: asideClasses }, |
23 |
| - $slots.aside || |
24 |
| - [h('div', { class: 'bg-secondary', style: 'width:64px;height:64px;'})] |
25 |
| - ) |
26 |
| - const body = h( |
27 |
| - 'div', |
28 |
| - { staticClass: 'media-body' }, |
29 |
| - $slots.default |
30 |
| - ) |
31 |
| - props.asideRight ? childNodes.push(body, aside) : childNodes.push(aside, body) |
32 |
| - return h('div', mergeData(data, { staticClass: 'media' }), childNodes) |
| 29 | + computed: { |
| 30 | + computedAsidePositionClasses () { |
| 31 | + return this.asidePositionClasses || |
| 32 | + `m${this.asideRight? 'l' : 'r' }-3 align-self-start` |
| 33 | + }, |
| 34 | + computedAsideClasses () { |
| 35 | + return [this.computedAsidePositionClasses, this.addAsideClasses] |
| 36 | + }, |
| 37 | + computedBodyClasses () { |
| 38 | + return [ 'media-body', this.addBodyClasses ] |
| 39 | + }, |
| 40 | + mediaClasses () { |
| 41 | + return [ |
| 42 | + 'media', |
| 43 | + { 'd-flex flex-row-reverse': this.asideRight } |
| 44 | + ] |
| 45 | + } |
33 | 46 | }
|
34 | 47 | }
|
35 | 48 | </script>
|
|
0 commit comments