comand-component-library 3.3.48 → 3.3.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,7 +32,7 @@
32
32
  v-telephone="entry.href">
33
33
  {{ entry.href }}
34
34
  </a>
35
- <span v-else v-html="entry.data"></span>
35
+ <template v-else>{{ entry.data }}</template>
36
36
  </dd>
37
37
  <!-- end data (except for address) -->
38
38
 
@@ -40,7 +40,7 @@
40
40
  <dd v-else>
41
41
  <!-- begin linked address -->
42
42
  <a v-if="linkGoogleMaps"
43
- :href="locateAddress(entry)"
43
+ :href="locateAddress"
44
44
  target="google-maps"
45
45
  :title="getMessage('cmdaddressdata.title.open_address_on_google_maps')">
46
46
  <!-- begin street/number -->
@@ -103,10 +103,11 @@
103
103
 
104
104
  <!-- begin list without labels -->
105
105
  <ul v-else :class="['flex-container', {'vertical': !showIconsOnly}]">
106
+
106
107
  <template v-for="(entry, index) in addressData" :key="index">
107
- <template v-if="entry.href || entry.name === 'address' || !showIconsOnly">
108
- <li :class="{'no-flex' : showIconsOnly}">
109
- <!-- begin all entries except address (which has no href) -->
108
+ <!-- begin all entries except address -->
109
+ <template v-if="entry.name !== 'address'">
110
+ <li v-if="entry.href || !showIconsOnly" :class="{'no-flex' : showIconsOnly}">
110
111
  <a v-if="entry.href" :href="getHref(entry)"
111
112
  :target="{'_blank' : entry.name === 'website'}"
112
113
  :title="entry.tooltip">
@@ -121,80 +122,68 @@
121
122
  </template>
122
123
  <template v-else>{{ entry.href }}</template>
123
124
  </a>
124
- <span v-else-if="!showIconsOnly" v-html="entry.data"></span>
125
- <!-- end all entries except address -->
126
-
127
- <!-- begin address -->
128
- <template v-if="entry.name === 'address'">
129
- <!-- begin linked address -->
130
- <a v-if="linkGoogleMaps" :href="locateAddress(entry)" target="google-maps" :title="entry.tooltip">
131
- <template v-if="showIconsOnly">
132
- <!-- begin CmdIcon -->
133
- <CmdIcon
134
- v-if="entry.iconClass"
135
- :iconClass="entry.iconClass"
136
- :type="entry.iconType"
137
- />
138
- <!-- end CmdIcon -->
139
- </template>
140
- <template v-else>
141
- <!-- begin street/number -->
142
- <template v-if="entry.streetNo">
143
- <span class="street-address">{{ entry.streetNo }}</span><br/>
144
- </template>
145
- <!-- end street/number -->
125
+ <template v-else-if="!showIconsOnly">{{ entry.data }}</template>
126
+ </li>
127
+ </template>
128
+ <!-- end all entries except address -->
146
129
 
147
- <!-- begin zip/city -->
148
- <template v-if="entry.zip || entry.city">
149
- <span class="postal-code">{{ entry.zip }}&nbsp;</span>
150
- <span class="locality">{{ entry.city }}</span><br/>
151
- </template>
152
- <!-- end zip/city -->
130
+ <!-- begin address -->
131
+ <li v-else-if="entry.name === 'address' && !showIconsOnly">
132
+ <!-- begin linked address -->
133
+ <a v-if="linkGoogleMaps" :href="locateAddress" target="google-maps" :title="getMessage('cmdaddressdata.title.open_address_on_google_maps')">
134
+ <!-- begin street/number -->
135
+ <template v-if="entry.streetNo">
136
+ <span class="street-address">{{ entry.streetNo }}</span><br/>
137
+ </template>
138
+ <!-- end street/number -->
153
139
 
154
- <!-- begin miscInfo -->
155
- <template v-if="entry.miscInfo">
156
- <span>{{ entry.miscInfo }}</span><br/>
157
- </template>
158
- <!-- end miscInfo -->
140
+ <!-- begin zip/city -->
141
+ <template v-if="entry.zip || entry.city">
142
+ <span class="postal-code">{{ entry.zip }}&nbsp;</span>
143
+ <span class="locality">{{ entry.city }}</span><br/>
144
+ </template>
145
+ <!-- end zip/city -->
159
146
 
160
- <!-- begin country -->
161
- <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
162
- <!-- end country -->
163
- </template>
164
- </a>
165
- <!-- end linked address -->
147
+ <!-- begin miscInfo -->
148
+ <template v-if="entry.miscInfo">
149
+ <span>{{ entry.miscInfo }}</span><br/>
150
+ </template>
151
+ <!-- end miscInfo -->
166
152
 
167
- <!-- begin unlinked address -->
168
- <template v-if="!linkGoogleMaps && !showIconsOnly">
169
- <!-- begin street/number -->
170
- <template v-if="entry.streetNo">
171
- <span class="street-address">{{ entry.streetNo }}</span><br/>
172
- </template>
173
- <!-- end street/number -->
153
+ <!-- begin country -->
154
+ <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
155
+ <!-- end country -->
156
+ </a>
157
+ <!-- end linked address -->
174
158
 
175
- <!-- begin zip/city -->
176
- <template v-if="entry.zip || entry.city">
177
- <span class="postal-code">{{ entry.zip }}&nbsp;</span>
178
- <span class="locality">{{ entry.city }}</span><br/>
179
- </template>
180
- <!-- end zip/city -->
159
+ <!-- begin unlinked address -->
160
+ <template v-else>
161
+ <!-- begin street/number -->
162
+ <template v-if="entry.streetNo">
163
+ <span class="street-address">{{ entry.streetNo }}</span><br/>
164
+ </template>
165
+ <!-- end street/number -->
181
166
 
182
- <!-- begin miscInfo -->
183
- <template v-if="entry.miscInfo">
184
- <span>{{ entry.miscInfo }}</span><br/>
185
- </template>
186
- <!-- end miscInfo -->
167
+ <!-- begin zip/city -->
168
+ <template v-if="entry.zip || entry.city">
169
+ <span class="postal-code">{{ entry.zip }}&nbsp;</span>
170
+ <span class="locality">{{ entry.city }}</span><br/>
171
+ </template>
172
+ <!-- end zip/city -->
187
173
 
188
- <!-- begin country -->
189
- <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
190
- <!-- end country -->
191
- </template>
192
- <!-- end unlinked address -->
174
+ <!-- begin miscInfo -->
175
+ <template v-if="entry.miscInfo">
176
+ <span>{{ entry.miscInfo }}</span><br/>
193
177
  </template>
194
- <!-- end address -->
195
- </li>
196
- </template>
197
- <!-- end all entries except address -->
178
+ <!-- end miscInfo -->
179
+
180
+ <!-- begin country -->
181
+ <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
182
+ <!-- end country -->
183
+ </template>
184
+ <!-- end unlinked address -->
185
+ </li>
186
+ <!-- end address -->
198
187
  </template>
199
188
  <!-- end v-for -->
200
189
  </ul>
@@ -264,14 +253,14 @@ export default {
264
253
  }
265
254
  },
266
255
  computed: {
256
+ locateAddress() {
257
+ return "https://www.google.com/maps/place/" + this.addressData.address.streetNo + ", " + this.addressData.address.zip + " " + this.addressData.address.city
258
+ },
267
259
  websiteUrlText() {
268
260
  return this.addressData.website?.text.replace("https://", "")
269
261
  }
270
262
  },
271
263
  methods: {
272
- locateAddress(entry) {
273
- return "https://www.google.com/maps/place/" + entry.streetNo + ", " + entry.zip + " " + entry.city
274
- },
275
264
  vCardClass(entry) {
276
265
  if (entry.name === 'company') {
277
266
  return "org"
@@ -17,18 +17,11 @@ export default {
17
17
  data() {
18
18
  return {
19
19
  windowInnerHeight: window.innerHeight,
20
- windowScrollY: this.getScrollY(),
21
- scrollHeight: document.querySelector(this.scrollContainer)?.scrollHeight || 0
20
+ windowScrollY: window.scrollY,
21
+ bodyScrollHeight: document.body.scrollHeight
22
22
  }
23
23
  },
24
24
  props: {
25
- /**
26
- * define which container's scroll-behavior should be observed (can be any selector)
27
- */
28
- scrollContainer: {
29
- type: String,
30
- default: "body"
31
- },
32
25
  /**
33
26
  * icon-class (and shown tooltip on hover) for back to top button
34
27
  *
@@ -45,46 +38,28 @@ export default {
45
38
  }
46
39
  }
47
40
  },
48
- mounted() {
49
- window.addEventListener('resize', this.onViewportChange)
50
- if (this.scrollContainer === "body") {
51
- window.addEventListener('scroll', this.onViewportChange);
52
- } else {
53
- document.querySelector(this.scrollContainer)?.addEventListener('scroll', this.onViewportChange);
54
- }
41
+ created() {
42
+ window.addEventListener('resize', this.onViewportChange);
43
+ window.addEventListener('scroll', this.onViewportChange);
55
44
  },
56
45
  unmounted() {
57
- window.removeEventListener('resize', this.onViewportChange)
58
- if (this.scrollContainer === "body") {
59
- window.addEventListener('scroll', this.onViewportChange);
60
- } else {
61
- document.querySelector(this.scrollContainer)?.removeEventListener('scroll', this.onViewportChange)
62
- }
46
+ window.removeEventListener('resize', this.onViewportChange);
47
+ window.removeEventListener('scroll', this.onViewportChange);
63
48
  },
64
49
  /* watch for changes */
65
50
  computed: {
66
51
  show() {
67
- return this.windowScrollY > 0 && this.windowInnerHeight < this.scrollHeight
52
+ return this.windowScrollY > 0 && this.windowInnerHeight < this.bodyScrollHeight;
68
53
  }
69
54
  },
70
55
  methods: {
71
- getScrollY() {
72
- if (this.scrollContainer === "body") {
73
- return window.scrollY
74
- }
75
- return document.querySelector(this.scrollContainer)?.scrollTop || 0
76
- },
77
56
  onViewportChange() {
78
57
  this.windowInnerHeight = window.innerHeight;
79
- this.windowScrollY = this.getScrollY()
80
- this.scrollHeight = document.querySelector(this.scrollContainer)?.scrollHeight || 0
58
+ this.windowScrollY = window.scrollY;
59
+ this.bodyScrollHeight = document.body.scrollHeight;
81
60
  },
82
61
  onBackToTop() {
83
- if (this.scrollContainer === "body") {
84
- window.scrollTo({top: 0, left: 0, behavior: 'smooth'})
85
- } else {
86
- document.querySelector(this.scrollContainer)?.scrollTo({top: 0, left: 0, behavior: 'smooth'})
87
- }
62
+ window.scrollTo({top: 0, left: 0, behavior: 'smooth'});
88
63
  }
89
64
  }
90
65
  }
@@ -79,16 +79,10 @@ export default {
79
79
  },
80
80
  methods: {
81
81
  copyToClipboard(entry) {
82
- //get data, remove spaces and copy to clipboard
83
- navigator.permissions.query({name: "clipboard-write"})
84
- .then(result => {
85
- if (result.state === "granted" || result.state === "prompt") {
86
- const output = entry.replace(/\s/g, "")
87
- navigator.clipboard.writeText(output)
88
- alert(output + " was copied to clipboard")
89
- }
90
- })
91
- .catch(error => console.error(error))
82
+ // get data, remove spaces and copy to clipboard
83
+ const output = entry.replace(/\s/g, "")
84
+ navigator.clipboard.writeText(output)
85
+ alert(output + " was copied to clipboard")
92
86
  }
93
87
  }
94
88
  }
@@ -57,38 +57,27 @@
57
57
 
58
58
  <!-- begin box-body -->
59
59
  <div v-if="open" :class="['box-body', {'default-padding': useDefaultPadding}]" aria-expanded="true" role="article">
60
- <transition-group :name="toggleTransition">
61
- <div v-if="cutoffTextLines > 0" :class="[
62
- 'cutoff-text',
63
- {
64
- 'fade-last-line': fadeLastLine && !showCutOffText,
65
- 'show-text' : showCutOffText
66
- }
67
- ]">
68
- <!-- begin slot 'body' -->
69
- <slot v-if="useSlots?.includes('body')" name="body">
70
- <p>{{ textBody }}</p>
71
- </slot>
72
- <!-- end slot 'body' -->
73
- </div>
74
- <!-- begin no cut-off-text-lines -->
75
- <template v-else>
76
- <!-- begin slot 'body' -->
77
- <slot v-if="useSlots?.includes('body')" name="body">
78
- <p>{{ textBody }}</p>
79
- </slot>
80
- <!-- end slot 'body' -->
81
- </template>
82
- <!-- end no cut-off-text-lines -->
83
- </transition-group>
84
- <a v-if="cutoffTextLines > 0" href="#" @click.prevent="toggleCutOffText">
85
- {{ showCutOffText ? getMessage("cmdbox.contentbox.collapse_text") : getMessage("cmdbox.contentbox.expand_text") }}
86
- </a>
60
+ <!-- begin slot 'body' -->
61
+ <slot v-if="useSlots?.includes('body')" name="body">
62
+ <transition-group :name="toggleTransition">
63
+ <p :class="{
64
+ 'cutoff-text': cutoffTextLines > 0,
65
+ 'fade-last-line': fadeLastLine && !showCutOffText,
66
+ 'show-text' : showCutOffText
67
+ }">
68
+ {{ textBody }}
69
+ </p>
70
+ <a v-if="cutoffTextLines > 0" href="#" @click.prevent="toggleCutOffText">
71
+ {{ showCutOffText ? getMessage("cmdbox.contentbox.collapse_text") : getMessage("cmdbox.contentbox.expand_text") }}
72
+ </a>
73
+ </transition-group>
74
+ </slot>
75
+ <!-- end slot 'body' -->
87
76
 
88
77
  <template v-else>
89
78
  <img v-if="image" :src="image.src" :alt="image.altText"/>
90
79
 
91
- <div v-if="textBody" class="text-wrapper">
80
+ <div class="text-wrapper">
92
81
  <!-- begin CmdHeadline -->
93
82
  <CmdHeadline
94
83
  v-if="cmdHeadline?.headlineText && repeatHeadlineInBoxBody"
@@ -265,7 +254,7 @@ export default {
265
254
  */
266
255
  fadeLastLine: {
267
256
  type: Boolean,
268
- default: false
257
+ default: true
269
258
  },
270
259
  /**
271
260
  * use transition to expand and collapse box-body
@@ -513,7 +502,7 @@ export default {
513
502
  padding: var(--default-padding);
514
503
  }
515
504
 
516
- .cutoff-text {
505
+ p.cutoff-text {
517
506
  padding: var(--default-padding);
518
507
  margin: 0;
519
508
  overflow: hidden;
@@ -124,24 +124,17 @@ export default {
124
124
  .cmd-company-logo {
125
125
  > a {
126
126
  display: block;
127
- }
128
-
129
- img {
130
- border: 0;
131
- max-height: 15rem;
132
- }
133
127
 
134
- @media only screen and (max-width: $medium-max-width) {
135
128
  img {
136
- max-width: 100%;
137
- max-height: none;
129
+ border: 0;
130
+ max-height: 15rem;
138
131
  }
139
- }
140
132
 
141
- @media only screen and (max-width: $small-max-width) {
142
- img {
143
- margin: 0 auto;
144
- display: block;
133
+ @media only screen and (max-width: $medium-max-width) {
134
+ img {
135
+ max-width: 100%;
136
+ max-height: none;
137
+ }
145
138
  }
146
139
  }
147
140
  }
@@ -484,8 +484,6 @@ export default FancyBox
484
484
  padding: var(--default-padding);
485
485
  min-width: 30vw;
486
486
  min-height: 30vh;
487
- max-width: calc(var(--max-width) - calc(var(--default-padding) * 2));
488
- max-height: 80vh;
489
487
  background: var(--pure-white);
490
488
  border-radius: var(--border-radius);
491
489
  overflow: hidden;
@@ -550,7 +548,7 @@ export default FancyBox
550
548
  > .button {
551
549
  display: block;
552
550
  border: var(--default-border);
553
- padding: .5rem;
551
+ padding: .2rem;
554
552
  min-width: 0;
555
553
  min-height: 0;
556
554
 
@@ -44,7 +44,7 @@
44
44
  />
45
45
  <!-- end CmdTooltipForInputElements -->
46
46
 
47
- <a v-if="showStatusIcon && ($attrs.required || inputRequirements.length)"
47
+ <a v-if="$attrs.required || inputRequirements.length"
48
48
  href="#"
49
49
  @click.prevent
50
50
  :title="validationTooltip"
@@ -407,13 +407,6 @@ export default {
407
407
  }
408
408
  }
409
409
  },
410
- /**
411
- * toggle statusIcon (showing the requirements on hover)
412
- */
413
- showStatusIcon: {
414
- type: Boolean,
415
- default: true
416
- },
417
410
  /**
418
411
  * set text for tooltip
419
412
  */
@@ -2,7 +2,7 @@
2
2
  <div class="cmd-imagezoom flex-container">
3
3
 
4
4
  <!-- begin small image -->
5
- <a href="#" class="no-flex" :title="imageSmall.tooltip">
5
+ <a href="#" class="no-flex thumbnails-imagezoom" :title="imageSmall.tooltip">
6
6
  <img :src="imageSmall.src"
7
7
  :alt="imageSmall.alt"
8
8
  @mouseover="onMouseOver"
@@ -66,9 +66,9 @@ export default {
66
66
  }
67
67
 
68
68
  function positionOverlay(vm, e) {
69
- const largeImageContainer = vm.$el.querySelector(".zoom-container")
70
- const largeImage = largeImageContainer.querySelector("img")
71
- const zoomOverlay = vm.$el.querySelector(".zoom-overlay")
69
+ const largeImageContainer = vm.$el.querySelector('.zoom-container')
70
+ const largeImage = largeImageContainer.querySelector('img')
71
+ const zoomOverlay = vm.$el.querySelector('.zoom-overlay')
72
72
 
73
73
  const smallImageWidth = e.target.getBoundingClientRect().width
74
74
  const smallImageHeight = e.target.getBoundingClientRect().height
@@ -114,10 +114,6 @@ function clamp(value, min, max) {
114
114
  .cmd-imagezoom {
115
115
  overflow: hidden;
116
116
 
117
- > a {
118
- align-self: flex-start; /* required to avoid a-tag to stretch on small devices */
119
- }
120
-
121
117
  .zoom-container {
122
118
  display: block !important;
123
119
  overflow: hidden;
@@ -8,7 +8,7 @@
8
8
  <!-- end CmdHeadline -->
9
9
 
10
10
  <!-- begin list of links -->
11
- <ul :class="['flex-container', {'no-gap': !useGap},'align-' + align, setStretchClass]">
11
+ <ul :class="['flex-container', {'no-gap': !useGap},'align-' + align]">
12
12
  <li v-for="(link, index) in links" :key="index" :class="{'active': sectionAnchors && activeSection === index}">
13
13
  <!-- begin use href -->
14
14
  <a v-if="link.type === 'href' || link.type === undefined"
@@ -46,7 +46,6 @@ import {openFancyBox} from "./CmdFancyBox.vue"
46
46
 
47
47
  export default {
48
48
  name: "CmdListOfLinks",
49
- emits: ["click"],
50
49
  props: {
51
50
  /**
52
51
  * activate if component should contain a list of anchors for the section within the page
@@ -124,14 +123,6 @@ export default {
124
123
  default: false
125
124
  }
126
125
  },
127
- computed: {
128
- setStretchClass() {
129
- if(this.largeIcons && this.orientation === "horizontal") {
130
- return "stretch"
131
- }
132
- return null
133
- }
134
- },
135
126
  methods: {
136
127
  getRoute(link) {
137
128
  return getRoute(link)
@@ -139,10 +130,8 @@ export default {
139
130
  executeLink(link, event) {
140
131
  if (link.fancybox) {
141
132
  event.preventDefault()
142
- openFancyBox({url: link.path, showSubmitButtons: link.showSubmitButtons})
143
- return
133
+ openFancyBox({url: link.path})
144
134
  }
145
- this.$emit("click", {link, originalEvent: event})
146
135
  }
147
136
  }
148
137
  }
@@ -182,10 +171,6 @@ export default {
182
171
  &.align-right {
183
172
  justify-content: flex-end;
184
173
  }
185
-
186
- &.stretch {
187
- justify-content: space-around;
188
- }
189
174
  }
190
175
 
191
176
  }
@@ -163,6 +163,7 @@ export default {
163
163
  openSubentry: -1
164
164
  }
165
165
  },
166
+ emits: ["offcanvas"],
166
167
  props: {
167
168
  /**
168
169
  * toggle if main-entries (on first-level) should be (horizontally) stretched equally
@@ -297,6 +298,11 @@ export default {
297
298
  this.$nextTick(() => document.getElementById("close-offcanvas").focus())
298
299
  }
299
300
  }
301
+ },
302
+ watch: {
303
+ showOffcanvas() {
304
+ this.$emit("offcanvas", { open: this.showOffcanvas})
305
+ }
300
306
  }
301
307
  }
302
308
  </script>
@@ -169,6 +169,10 @@ export default {
169
169
  button, .button {
170
170
  float: none;
171
171
  margin: 0;
172
+
173
+ span {
174
+ align-self: center;
175
+ }
172
176
  }
173
177
 
174
178
  a {