comand-component-library 3.3.48 → 3.3.50

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 {