comand-component-library 3.3.75 → 3.3.76
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/comand-component-library.js +4234 -3816
- package/dist/comand-component-library.umd.cjs +4 -4
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/App.vue +269 -211
- package/src/assets/data/image.json +1 -5
- package/src/assets/styles/global-styles.scss +198 -188
- package/src/components/CmdBackToTopButton.vue +1 -1
- package/src/components/CmdBox.vue +0 -2
- package/src/components/CmdFormElement.vue +3 -4
- package/src/components/CmdHeadline.vue +68 -35
- package/src/components/CmdImage.vue +355 -21
- package/src/components/CmdImageGallery.vue +132 -32
- package/src/components/CmdMainNavigation.vue +1 -2
- package/src/components/CmdPager.vue +8 -1
- package/src/components/CmdSlideButton.vue +1 -7
- package/src/components/CmdSocialNetworks.vue +1 -0
- package/src/components/CmdSystemMessage.vue +1 -10
- package/src/components/CmdTable.vue +3 -3
- package/src/components/CmdTextBlock.vue +36 -24
- package/src/editmode/editModeContext.js +50 -0
- package/src/main.js +8 -19
@@ -1,27 +1,83 @@
|
|
1
1
|
<template>
|
2
2
|
<div class="grid-container-create-columns cmd-image-gallery">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
<!-- begin cmd-headline -->
|
4
|
+
<CmdHeadline
|
5
|
+
v-if="cmdHeadline"
|
6
|
+
:headlineText="cmdHeadline.headlineText"
|
7
|
+
:headlineLevel="cmdHeadline.headlineLevel"
|
8
|
+
/>
|
9
|
+
<!-- end cmd-headline -->
|
10
|
+
|
11
|
+
<!-- begin default view -->
|
12
|
+
<template v-if="!editModeContext">
|
13
|
+
<!-- begin images linked to fancybox -->
|
14
|
+
<a v-if="useFancyboxForLargeImages" class="image-wrapper" v-for="(image, index) in images"
|
15
|
+
:key="index"
|
16
|
+
href="#"
|
17
|
+
@click.prevent="showFancyBox(index)"
|
18
|
+
:title="getMessage('cmdimagegallery.tooltip.open_large_image')">
|
19
|
+
<CmdImage :image="image.image" :figcaption="image.figcaption"/>
|
20
|
+
</a>
|
21
|
+
<!-- end images linked to fancybox -->
|
22
|
+
|
23
|
+
<!-- begin images not linked to fancybox -->
|
24
|
+
<CmdImage v-else :image="image.image" :figcaption="image.figcaption"/>
|
25
|
+
<!-- end images not linked to fancybox -->
|
26
|
+
</template>
|
27
|
+
<!-- end default view -->
|
28
|
+
|
29
|
+
<!-- begin edit-mode view -->
|
30
|
+
<EditComponentWrapper class="image-wrapper" v-else v-for="(image, index) in images" :key="'x' + index" :componentIdentifier="componentIdentifier(index)">
|
31
|
+
<CmdImage
|
32
|
+
:image="image.image"
|
33
|
+
:figcaption="image.figcaption"
|
34
|
+
:editModeContextData="{imageIndex: index}"
|
35
|
+
/>
|
36
|
+
</EditComponentWrapper>
|
37
|
+
<!-- end edit-mode view -->
|
10
38
|
</div>
|
11
39
|
</template>
|
12
40
|
|
13
41
|
<script>
|
14
42
|
// import functions
|
15
43
|
import {openFancyBox} from "./CmdFancyBox.vue"
|
44
|
+
import {useEditModeContext} from "../editmode/editModeContext.js"
|
16
45
|
|
17
46
|
// import mixins
|
18
|
-
import I18n from "../mixins/I18n"
|
19
|
-
import DefaultMessageProperties from "../mixins/CmdImageGallery/DefaultMessageProperties"
|
47
|
+
//import I18n from "../mixins/I18n"
|
48
|
+
//import DefaultMessageProperties from "../mixins/CmdImageGallery/DefaultMessageProperties"
|
20
49
|
|
21
50
|
export default {
|
22
51
|
name: "CmdImageGallery",
|
23
|
-
mixins: [
|
52
|
+
mixins: [],
|
53
|
+
provide() {
|
54
|
+
return {
|
55
|
+
editModeContext: this.context
|
56
|
+
}
|
57
|
+
},
|
58
|
+
inject: {
|
59
|
+
editModeContext: {
|
60
|
+
default: null
|
61
|
+
}
|
62
|
+
},
|
24
63
|
props: {
|
64
|
+
editModeContextData: {
|
65
|
+
type: Object
|
66
|
+
},
|
67
|
+
/**
|
68
|
+
* properties for CmdHeadline-component
|
69
|
+
*/
|
70
|
+
cmdHeadline: {
|
71
|
+
type: Object,
|
72
|
+
required: false
|
73
|
+
},
|
74
|
+
/**
|
75
|
+
* set if large version of images can be opened in a fancybox
|
76
|
+
*/
|
77
|
+
useFancyboxForLargeImages: {
|
78
|
+
type: Boolean,
|
79
|
+
default: true
|
80
|
+
},
|
25
81
|
/**
|
26
82
|
* list of images (incl. captions)
|
27
83
|
*
|
@@ -41,9 +97,48 @@ export default {
|
|
41
97
|
default: "bottom"
|
42
98
|
}
|
43
99
|
},
|
100
|
+
data() {
|
101
|
+
return {
|
102
|
+
context: useEditModeContext(this.editModeContext, {}, this.onSave)
|
103
|
+
}
|
104
|
+
},
|
44
105
|
methods: {
|
106
|
+
componentIdentifier(index) {
|
107
|
+
const identifier = []
|
108
|
+
identifier.push(this.editModeContext.props.sectionId)
|
109
|
+
identifier.push(this.editModeContextData.componentIndex)
|
110
|
+
|
111
|
+
if(this.editModeContextData.childComponentIndex != null) {
|
112
|
+
identifier.push(this.editModeContextData.childComponentIndex)
|
113
|
+
}
|
114
|
+
|
115
|
+
identifier.push(index)
|
116
|
+
|
117
|
+
return identifier.join(".")
|
118
|
+
},
|
45
119
|
showFancyBox(index) {
|
46
120
|
openFancyBox({fancyBoxGallery: this.images, defaultGalleryIndex: index})
|
121
|
+
},
|
122
|
+
getMessage() {
|
123
|
+
return ""
|
124
|
+
},
|
125
|
+
onSave(data) {
|
126
|
+
const imageIndex = data[0].editModeContextData.imageIndex
|
127
|
+
return {
|
128
|
+
editModeContextData: {
|
129
|
+
...(this.editModeContextData || {})
|
130
|
+
},
|
131
|
+
update(props) {
|
132
|
+
props.images[imageIndex].image = {
|
133
|
+
...props.images[imageIndex].image,
|
134
|
+
...data[0].image
|
135
|
+
}
|
136
|
+
props.images[imageIndex].figcaption = {
|
137
|
+
...props.images[imageIndex].figcaption,
|
138
|
+
...data[0].figcaption
|
139
|
+
}
|
140
|
+
}
|
141
|
+
}
|
47
142
|
}
|
48
143
|
}
|
49
144
|
}
|
@@ -52,33 +147,38 @@ export default {
|
|
52
147
|
<style lang="scss">
|
53
148
|
/* begin cmd-image-gallery ---------------------------------------------------------------------------------------- */
|
54
149
|
.cmd-image-gallery {
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
img {
|
61
|
-
border: var(--default-border);
|
62
|
-
border-radius: var(--border-radius);
|
63
|
-
max-height: 30rem;
|
64
|
-
}
|
150
|
+
> .cmd-headline, > input.edit-mode {
|
151
|
+
grid-column: span var(--grid-columns);
|
152
|
+
margin-bottom: 0;
|
153
|
+
}
|
65
154
|
|
66
|
-
|
67
|
-
|
68
|
-
|
155
|
+
> .image-wrapper {
|
156
|
+
align-self: center;
|
157
|
+
justify-self: center;
|
158
|
+
grid-column: span var(--grid-small-span);
|
69
159
|
|
70
|
-
|
71
|
-
|
160
|
+
img {
|
161
|
+
border: var(--default-border);
|
162
|
+
border-radius: var(--border-radius);
|
163
|
+
max-height: 30rem;
|
164
|
+
}
|
72
165
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
}
|
166
|
+
figcaption {
|
167
|
+
padding: calc(var(--default-padding) / 2);
|
168
|
+
}
|
77
169
|
|
78
|
-
|
79
|
-
|
80
|
-
|
170
|
+
&:hover, &:active, &:focus {
|
171
|
+
text-decoration: none;
|
172
|
+
|
173
|
+
img {
|
174
|
+
border: var(--primary-border);
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
& + .pager {
|
179
|
+
margin-top: calc(var(--default-margin) * 2);
|
81
180
|
}
|
181
|
+
}
|
82
182
|
}
|
83
183
|
|
84
184
|
/* end cmd-image-gallery ------------------------------------------------------------------------------------------ */
|
@@ -409,7 +409,6 @@ export default {
|
|
409
409
|
ul {
|
410
410
|
z-index: 1000; /* keep ul above overlay */
|
411
411
|
height: 100%;
|
412
|
-
background: var(--color-scheme-background-color);
|
413
412
|
}
|
414
413
|
}
|
415
414
|
}
|
@@ -444,7 +443,7 @@ export default {
|
|
444
443
|
align-items: center;
|
445
444
|
|
446
445
|
span {
|
447
|
-
font-weight: bold;
|
446
|
+
font-weight: var(--font-weight-bold);
|
448
447
|
|
449
448
|
&[class*="icon-"] {
|
450
449
|
font-size: var(--font-size-small);
|
@@ -23,7 +23,7 @@
|
|
23
23
|
v-for="(page, index) in pages"
|
24
24
|
:key="index"
|
25
25
|
@click.stop.prevent="showPage(page)" aria-live="polite">
|
26
|
-
|
26
|
+
<span :class="{hidden: !showPageNumbers}">{{ index + 1 }}</span>
|
27
27
|
</a>
|
28
28
|
</div>
|
29
29
|
</div>
|
@@ -75,6 +75,13 @@ export default {
|
|
75
75
|
type: Number,
|
76
76
|
required: true
|
77
77
|
},
|
78
|
+
/**
|
79
|
+
* toggle page-numbers on buttons
|
80
|
+
*/
|
81
|
+
showPageNumbers: {
|
82
|
+
type: Boolean,
|
83
|
+
default: true
|
84
|
+
},
|
78
85
|
/**
|
79
86
|
* set type of links
|
80
87
|
*
|
@@ -77,21 +77,15 @@ export default {
|
|
77
77
|
display: flex;
|
78
78
|
justify-content: center;
|
79
79
|
text-decoration: none;
|
80
|
-
background: var(--default-background-color-reduced-opacity);
|
81
80
|
border: 0;
|
81
|
+
outline: 0;
|
82
82
|
|
83
83
|
span {
|
84
84
|
align-self: center;
|
85
|
-
color: var(--primary-color-reduced-opacity);
|
86
85
|
}
|
87
86
|
|
88
87
|
&:hover, &:active, &:focus {
|
89
|
-
background: var(--pure-white);
|
90
88
|
transition: var(--default-transition);
|
91
|
-
|
92
|
-
span {
|
93
|
-
color: var(--hyperlink-color-highlighted);
|
94
|
-
}
|
95
89
|
}
|
96
90
|
|
97
91
|
&.prev {
|
@@ -105,7 +105,7 @@ export default {
|
|
105
105
|
default() {
|
106
106
|
return {
|
107
107
|
show: true,
|
108
|
-
iconClass: "icon-cancel",
|
108
|
+
iconClass: "icon-cancel-circle",
|
109
109
|
tooltip: "Close this message"
|
110
110
|
}
|
111
111
|
}
|
@@ -156,24 +156,15 @@ export default {
|
|
156
156
|
top: .5rem;
|
157
157
|
right: .5rem;
|
158
158
|
text-decoration: none;
|
159
|
-
border: var(--default-border);
|
160
|
-
border-color: var(--pure-white);
|
161
|
-
border-radius: var(--full-circle);
|
162
|
-
padding: calc(var(--default-padding) / 2);
|
163
159
|
z-index: 100;
|
164
160
|
line-height: 1;
|
165
161
|
|
166
162
|
[class*="icon-"] {
|
167
|
-
font-size: 0.8rem;
|
168
163
|
color: var(--pure-white);
|
169
164
|
}
|
170
165
|
|
171
166
|
&:hover, &:active, &:focus {
|
172
|
-
border-color: var(--hyperlink-color);
|
173
|
-
background: var(--pure-white);
|
174
|
-
|
175
167
|
[class*="icon-"] {
|
176
|
-
font-size: 0.8rem;
|
177
168
|
color: var(--hyperlink-color);
|
178
169
|
}
|
179
170
|
}
|
@@ -32,8 +32,8 @@
|
|
32
32
|
</thead>
|
33
33
|
<transition name="fade">
|
34
34
|
<tbody v-show="showTableData" aria-expanded="true">
|
35
|
-
<tr :class="{'
|
36
|
-
<td :class="{'
|
35
|
+
<tr :class="{'active' : tableData.rowIndexHighlighted === indexRows}" v-for="(tablerows, indexRows) in tableData.tbody" :key="indexRows">
|
36
|
+
<td :class="{'active' : tableData.columnIndexHighlighted === indexData}" v-for="(tabledata, indexData) in tablerows" :key="indexData">
|
37
37
|
{{ tabledata }}
|
38
38
|
</td>
|
39
39
|
</tr>
|
@@ -42,7 +42,7 @@
|
|
42
42
|
<transition name="fade">
|
43
43
|
<tfoot v-if="tableData.tfoot && tableData.tfoot.length && showTableData" aria-expanded="true">
|
44
44
|
<tr>
|
45
|
-
<td :class="{'
|
45
|
+
<td :class="{'active' : tableData.columnIndexHighlighted === indexFoot}" v-for="(tablefoot, indexFoot) in tableData.tfoot" :key="indexFoot">
|
46
46
|
{{ tablefoot }}
|
47
47
|
</td>
|
48
48
|
</tr>
|
@@ -1,39 +1,41 @@
|
|
1
1
|
<template>
|
2
2
|
<div class="cmd-text-block flex-container vertical">
|
3
3
|
<!-- begin cmd-headline -->
|
4
|
-
<
|
5
|
-
<CmdHeadline v-else-if="cmdHeadline" :headlineText="cmdHeadline.headlineText" :headlineLevel="cmdHeadline.headlineLevel"/>
|
4
|
+
<CmdHeadline v-if="cmdHeadline" :headlineText="cmdHeadline.headlineText" :headlineLevel="cmdHeadline.headlineLevel" />
|
6
5
|
<!-- end cmd-headline -->
|
7
6
|
|
8
|
-
<!-- begin text for single-paragraph -->
|
9
|
-
<input v-if="editContent" class="edit-mode" type="text" v-model="editableText" />
|
10
|
-
<p v-if="textContent">{{textContent}}</p>
|
11
|
-
<!-- end text for single-paragraph -->
|
12
|
-
|
13
7
|
<!-- begin continuous text -->
|
14
|
-
<textarea v-if="
|
8
|
+
<textarea v-if="editModeContext?.editing" class="edit-mode" v-model="editableHtmlContent"></textarea>
|
15
9
|
<div v-else-if="htmlContent" v-html="htmlContent"></div>
|
16
10
|
<!-- end continuous text -->
|
17
11
|
</div>
|
18
12
|
</template>
|
19
13
|
|
20
14
|
<script>
|
15
|
+
import {useEditModeContext} from "../editmode/editModeContext.js"
|
16
|
+
|
21
17
|
export default {
|
22
18
|
name: "CmdTextBlock",
|
19
|
+
provide() {
|
20
|
+
return {
|
21
|
+
editModeContext: this.context
|
22
|
+
}
|
23
|
+
},
|
24
|
+
inject: {
|
25
|
+
editModeContext: {
|
26
|
+
default: null
|
27
|
+
}
|
28
|
+
},
|
23
29
|
data() {
|
24
30
|
return {
|
25
|
-
|
26
|
-
|
27
|
-
editableHtmlContent:
|
31
|
+
context: useEditModeContext(this.editModeContext, {tb: true}, this.onPersist),
|
32
|
+
editableHtmlHeadline: this.cmdHeadline?.headlineText || "",
|
33
|
+
editableHtmlContent: this.htmlContent
|
28
34
|
}
|
29
35
|
},
|
30
36
|
props: {
|
31
|
-
|
32
|
-
|
33
|
-
*/
|
34
|
-
editContent: {
|
35
|
-
type: Boolean,
|
36
|
-
default: false
|
37
|
+
editModeContextData: {
|
38
|
+
type: Object
|
37
39
|
},
|
38
40
|
/**
|
39
41
|
* properties for CmdHeadline-component
|
@@ -42,13 +44,6 @@ export default {
|
|
42
44
|
type: Object,
|
43
45
|
required: false
|
44
46
|
},
|
45
|
-
/**
|
46
|
-
* text placed in a single paragraph
|
47
|
-
*/
|
48
|
-
textContent: {
|
49
|
-
type: String,
|
50
|
-
required: false
|
51
|
-
},
|
52
47
|
/**
|
53
48
|
* content for continuous text (can contain html-tags)
|
54
49
|
*/
|
@@ -56,6 +51,23 @@ export default {
|
|
56
51
|
type: String,
|
57
52
|
required: true
|
58
53
|
}
|
54
|
+
},
|
55
|
+
methods: {
|
56
|
+
onPersist(data) {
|
57
|
+
const htmlContent = this.editableHtmlContent
|
58
|
+
return {
|
59
|
+
editModeContextData: {
|
60
|
+
...(this.editModeContextData || {})
|
61
|
+
},
|
62
|
+
update(props) {
|
63
|
+
props.cmdHeadline = {
|
64
|
+
...(props.cmdHeadline || {}),
|
65
|
+
}
|
66
|
+
props.cmdHeadline.headlineText = data[0].headlineText
|
67
|
+
props.htmlContent = htmlContent
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
59
71
|
}
|
60
72
|
}
|
61
73
|
</script>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import {ref, watchEffect} from "vue"
|
2
|
+
|
3
|
+
export function useEditModeContext(parentContext, props, persistHandler) {
|
4
|
+
const editing = ref(!!parentContext?.editing)
|
5
|
+
const saveHandlers = []
|
6
|
+
|
7
|
+
function save() {
|
8
|
+
const data = []
|
9
|
+
saveHandlers.forEach(saveHandler => {
|
10
|
+
const result = saveHandler();
|
11
|
+
if (result) {
|
12
|
+
data.push(result)
|
13
|
+
}
|
14
|
+
})
|
15
|
+
callPersistHandler(data)
|
16
|
+
}
|
17
|
+
|
18
|
+
function callPersistHandler(data) {
|
19
|
+
let processedData = data
|
20
|
+
if (persistHandler) {
|
21
|
+
processedData = persistHandler(data)
|
22
|
+
}
|
23
|
+
if (parentContext && processedData != null) {
|
24
|
+
parentContext.callPersistHandler(processedData)
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
function addSaveHandler(saveHandler) {
|
29
|
+
if (!saveHandlers.includes(saveHandler)) {
|
30
|
+
saveHandlers.push(saveHandler)
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
if (parentContext) {
|
35
|
+
parentContext.addSaveHandler(save)
|
36
|
+
}
|
37
|
+
|
38
|
+
watchEffect(() => editing.value = !!parentContext?.editing);
|
39
|
+
|
40
|
+
return {
|
41
|
+
editing,
|
42
|
+
props: {
|
43
|
+
...(parentContext?.props || {}),
|
44
|
+
...(props || {})
|
45
|
+
},
|
46
|
+
addSaveHandler,
|
47
|
+
save,
|
48
|
+
callPersistHandler
|
49
|
+
}
|
50
|
+
}
|
package/src/main.js
CHANGED
@@ -1,23 +1,12 @@
|
|
1
|
-
/*
|
2
|
-
|
3
|
-
import 'comand-frontend-framework/src/assets/css/normalize.css'
|
4
|
-
|
5
|
-
/* import framework-styles */
|
6
|
-
import 'comand-frontend-framework/src/assets/css/framework.css'
|
7
|
-
|
8
|
-
/* import breakpoints */
|
9
|
-
import 'comand-frontend-framework/src/assets/css/breakpoints.css'
|
10
|
-
|
11
|
-
/* import framework-iconfont */
|
12
|
-
import 'comand-frontend-framework/src/assets/css/framework-iconfont.css'
|
13
|
-
import 'comand-frontend-framework/src/assets/css/template.css'
|
1
|
+
/* import generated css from components */
|
2
|
+
import "comand-frontend-framework/styles"
|
14
3
|
/* end imports css from comand-frontend-framework ---------------------------------------------------------------------------------------- */
|
15
4
|
|
16
|
-
import { createApp } from
|
5
|
+
import { createApp } from "vue"
|
17
6
|
|
18
|
-
// import App from
|
19
|
-
import App from
|
20
|
-
//import { createRouter, createWebHistory } from
|
7
|
+
// import App from "./App.vue"
|
8
|
+
import App from "./App.vue"
|
9
|
+
//import { createRouter, createWebHistory } from "vue-router"
|
21
10
|
import "clickout-event"
|
22
11
|
|
23
12
|
/* import directives */
|
@@ -37,14 +26,14 @@ import '@/assets/styles/global-styles.scss'
|
|
37
26
|
/* import css for global transitions */
|
38
27
|
import '@/assets/styles/transitions.scss'
|
39
28
|
|
40
|
-
/* import css-example for your custom styles
|
29
|
+
/* import css-example for your custom styles */
|
41
30
|
import '@/assets/styles/template.css'
|
42
31
|
|
43
32
|
/* import css for prism-library (for styling syntax) */
|
44
33
|
import "prismjs/themes/prism.css"
|
45
34
|
|
46
35
|
/* import css for demopage only */
|
47
|
-
import 'comand-frontend-framework/public/demopage-only.css'
|
36
|
+
//import 'comand-frontend-framework/public/demopage-only.css'
|
48
37
|
/* end imports css from comand-component-library ---------------------------------------------------------------------------------------- */
|
49
38
|
|
50
39
|
import router from "./router"
|