@explorer-1/vue 0.2.6 → 0.2.7
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.
- package/dist/explorer-1-vue.js +2612 -2556
- package/dist/explorer-1-vue.umd.cjs +14 -12
- package/dist/src/components/CalendarButton/CalendarButton.vue.d.ts +3 -2
- package/dist/src/components/EventCard/EventCard.vue.d.ts +9 -4
- package/dist/src/components/EventDetailHero/EventDetailHero.vue.d.ts +11 -0
- package/dist/src/components/NavDesktopEdu/NavDesktopEdu.stories.d.ts +58 -11
- package/dist/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.d.ts +57 -29
- package/dist/src/utils/mixins.d.ts +2 -0
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/components/BaseButton/BaseButton.vue +1 -1
- package/src/components/BaseImage/BaseImage.vue +1 -1
- package/src/components/BaseTag/BaseTag.vue +2 -2
- package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +3 -2
- package/src/components/BlockImage/BlockImageStandard.vue +1 -1
- package/src/components/BlockKeyPoints/BlockKeyPoints.vue +2 -2
- package/src/components/BlockLinkCard/BlockLinkCard.vue +1 -0
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +29 -27
- package/src/components/BlockRelatedLinks/RelatedLink.vue +3 -3
- package/src/components/BlockVideo/BlockVideo.vue +1 -1
- package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +1 -1
- package/src/components/CalendarButton/CalendarButton.vue +9 -10
- package/src/components/EventCard/EventCard.vue +22 -8
- package/src/components/EventDetailHero/EventDetailHero.vue +45 -21
- package/src/components/HeroMedia/HeroMedia.vue +2 -2
- package/src/components/MixinCarousel/MixinCarousel.vue +2 -2
- package/src/components/NavDesktopEdu/NavDesktopEdu.vue +11 -1
- package/src/components/NavMobile/NavMobile.vue +19 -10
- package/src/components/ShareButtons/ShareButtons.vue +1 -1
- package/src/components/ShareButtonsEdu/ShareButtonsEdu.vue +1 -1
- package/src/components/TheFooter/TheFooter.vue +3 -1
- package/src/templates/PageEventDetail/PageEventDetail.vue +2 -1
- package/src/templates/PageNewsDetail/PageNewsDetail.vue +3 -1
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.js +146 -104
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.vue +101 -50
- package/src/templates/edu/PageEduExplainerArticle/PageEduExplainerArticle.vue +1 -1
- package/src/utils/mixins.ts +18 -14
- package/tsconfig.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@explorer-1/vue",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"vue": "^3.4.21",
|
|
30
30
|
"vue-observe-visibility": "^1.0.0",
|
|
31
31
|
"vue3-compare-image": "^1.2.5",
|
|
32
|
-
"@explorer-1/common": "1.1.
|
|
32
|
+
"@explorer-1/common": "1.1.3"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@vitejs/plugin-vue": "^5.0.4",
|
|
@@ -94,7 +94,7 @@ export default defineComponent({
|
|
|
94
94
|
<template>
|
|
95
95
|
<component
|
|
96
96
|
:is="tag"
|
|
97
|
-
class="BaseButton text-contrast-none"
|
|
97
|
+
class="BaseButton text-contrast-none print:border print:!border-gray-dark print:text-center"
|
|
98
98
|
:class="variantClass"
|
|
99
99
|
:aria-label="ariaLabel"
|
|
100
100
|
:disabled="disabled"
|
|
@@ -11,7 +11,7 @@ const variantMap: Attributes = {
|
|
|
11
11
|
const sizeMap: Attributes = {
|
|
12
12
|
sm: 'text-xs border-t-2 py-1 px-2.5',
|
|
13
13
|
md: 'text-xs lg:text-base border-t py-1.5 px-3.5',
|
|
14
|
-
lg: 'text-base lg:text-lg border-t
|
|
14
|
+
lg: 'text-base lg:text-lg border-t pt-1.5 pb-1 px-5'
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
interface BaseTagProps {
|
|
@@ -28,7 +28,7 @@ const props = withDefaults(defineProps<BaseTagProps>(), {
|
|
|
28
28
|
<template>
|
|
29
29
|
<p
|
|
30
30
|
:class="`${variantMap[props.variant]} ${sizeMap[props.size]}`"
|
|
31
|
-
class="ThemeVariantLight text-contrast-none inline-block text-white font-bold edu:font-extrabold rounded-full leading-tight m-0 uppercase"
|
|
31
|
+
class="ThemeVariantLight text-contrast-none inline-block text-white font-bold edu:font-extrabold rounded-full leading-tight m-0 uppercase print:border-none print:px-0"
|
|
32
32
|
>
|
|
33
33
|
<slot />
|
|
34
34
|
<span class="sr-only">.</span>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
v-if="data.url"
|
|
6
6
|
ref="BlockIframeEmbed"
|
|
7
7
|
loading="lazy"
|
|
8
|
-
class="w-full border-none"
|
|
8
|
+
class="w-full border-none print:!border print:border-gray-dark"
|
|
9
9
|
:class="{ lazyload: !lazyNative }"
|
|
10
10
|
:title="data.title"
|
|
11
11
|
:data-src="data.url"
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<template v-else>
|
|
19
19
|
<BaseImagePlaceholder
|
|
20
20
|
v-if="data.url"
|
|
21
|
+
class="print:border print:border-gray-dark"
|
|
21
22
|
aspect-ratio="16:9"
|
|
22
23
|
dark-mode
|
|
23
24
|
>
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
</template>
|
|
40
41
|
<div
|
|
41
42
|
v-if="data.caption && data.caption.length > 2"
|
|
42
|
-
class="lg:px-0 p-4 pb-0"
|
|
43
|
+
class="lg:px-0 p-4 pb-0 print:pl-0"
|
|
43
44
|
>
|
|
44
45
|
<BaseImageCaption :data="data" />
|
|
45
46
|
</div>
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
class="mb-5"
|
|
8
8
|
:data="{ heading: data.heading }"
|
|
9
9
|
/>
|
|
10
|
-
<ul>
|
|
10
|
+
<ul class="print:!list-disc">
|
|
11
11
|
<li
|
|
12
12
|
v-for="(item, index) in data.listItem"
|
|
13
13
|
:key="index"
|
|
14
|
-
class="flex"
|
|
14
|
+
class="flex print:!list-item print:ml-4"
|
|
15
15
|
:class="index + 1 === data.listItem.length ? 'mb-0' : 'mb-4'"
|
|
16
16
|
>
|
|
17
17
|
<BlockText
|
|
@@ -8,36 +8,38 @@
|
|
|
8
8
|
>
|
|
9
9
|
{{ data.heading }}
|
|
10
10
|
</BaseHeading>
|
|
11
|
-
<
|
|
11
|
+
<ul
|
|
12
12
|
v-for="(link, index) in data.links"
|
|
13
13
|
:key="index"
|
|
14
|
-
class="sm:w-3/4 md:w-2/3 lg:w-3/4 xl:w-2/3 mb-2"
|
|
14
|
+
class="sm:w-3/4 md:w-2/3 lg:w-3/4 xl:w-2/3 mb-2 print:list-disc print:ml-4"
|
|
15
15
|
>
|
|
16
|
-
<
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
16
|
+
<li>
|
|
17
|
+
<template v-if="link.externalLink">
|
|
18
|
+
<RelatedLink
|
|
19
|
+
variant="external"
|
|
20
|
+
:href="link.externalLink"
|
|
21
|
+
>
|
|
22
|
+
{{ link.text }}
|
|
23
|
+
</RelatedLink>
|
|
24
|
+
</template>
|
|
25
|
+
<template v-else-if="link.document">
|
|
26
|
+
<RelatedLink
|
|
27
|
+
variant="document"
|
|
28
|
+
:href="link.document.url"
|
|
29
|
+
>
|
|
30
|
+
{{ link.text }}
|
|
31
|
+
</RelatedLink>
|
|
32
|
+
</template>
|
|
33
|
+
<template v-else-if="link.page">
|
|
34
|
+
<RelatedLink
|
|
35
|
+
variant="page"
|
|
36
|
+
:to="link.page.url"
|
|
37
|
+
>
|
|
38
|
+
{{ link.text }}
|
|
39
|
+
</RelatedLink>
|
|
40
|
+
</template>
|
|
41
|
+
</li>
|
|
42
|
+
</ul>
|
|
41
43
|
</div>
|
|
42
44
|
</template>
|
|
43
45
|
<script lang="ts">
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
:is="tag"
|
|
4
4
|
:to="to"
|
|
5
5
|
:href="href"
|
|
6
|
-
class="bg-gray-light group text-body-lg flex items-center justify-between px-4 py-4 cursor-pointer"
|
|
6
|
+
class="bg-gray-light group text-body-lg flex items-center justify-between px-4 py-4 cursor-pointer print:px-0 print:py-0 print:block"
|
|
7
7
|
:target="target"
|
|
8
8
|
rel="noopener"
|
|
9
9
|
>
|
|
10
|
-
<span class="can-hover:group-hover:underline min-w-12 block w-auto break-words">
|
|
10
|
+
<span class="can-hover:group-hover:underline min-w-12 block w-auto break-words print:inline">
|
|
11
11
|
<slot />
|
|
12
12
|
</span>
|
|
13
13
|
<component
|
|
14
14
|
:is="icon"
|
|
15
|
-
class="text-action xl:mx-4 flex-none ml-4 text-2xl leading-normal"
|
|
15
|
+
class="text-action xl:mx-4 flex-none ml-4 text-2xl leading-normal print:inline print:text-sm print:mx-2"
|
|
16
16
|
:class="variant === 'external' ? 'text-lg' : 'text-3xl'"
|
|
17
17
|
/>
|
|
18
18
|
</component>
|
|
@@ -64,13 +64,18 @@ export default defineComponent({
|
|
|
64
64
|
options: undefined
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
+
computed: {
|
|
68
|
+
icsDescription() {
|
|
69
|
+
return `${(this.description ? this.description + '\n\n' : '') + window?.location.href}`
|
|
70
|
+
}
|
|
71
|
+
},
|
|
67
72
|
|
|
68
73
|
mounted() {
|
|
69
74
|
this.init()
|
|
70
75
|
},
|
|
71
76
|
methods: {
|
|
72
77
|
init() {
|
|
73
|
-
let recurrence =
|
|
78
|
+
let recurrence = undefined
|
|
74
79
|
if (this.endDatetime && this.isAllDay) {
|
|
75
80
|
// Calculate how many full days
|
|
76
81
|
const startDateDayjs = dayjs(this.startDatetime)
|
|
@@ -81,21 +86,15 @@ export default defineComponent({
|
|
|
81
86
|
|
|
82
87
|
this.options = {
|
|
83
88
|
title: this.title ? this.title : undefined,
|
|
84
|
-
location: this.location ? this.
|
|
85
|
-
description: this.
|
|
89
|
+
location: this.location ? this.location : undefined,
|
|
90
|
+
description: this.icsDescription,
|
|
86
91
|
start: new Date(this.startDatetime),
|
|
87
92
|
end: !this.isAllDay && this.endDatetime ? new Date(this.endDatetime) : undefined,
|
|
88
93
|
recurrence
|
|
89
94
|
}
|
|
95
|
+
|
|
90
96
|
this.icalendar = new ICalendar(this.options)
|
|
91
97
|
},
|
|
92
|
-
addSlashes(string: string): string {
|
|
93
|
-
// Escape special characters COMMA, SEMI-COLON and BACKSLASH
|
|
94
|
-
// as temporary fix for this issue https://github.com/jshor/datebook/issues/179
|
|
95
|
-
// regex based of https://stackoverflow.com/a/770533
|
|
96
|
-
// eslint-disable-next-line
|
|
97
|
-
return string.replace(/[,;\\]/g, '\\$&').replace(/\u0000/g, '\\0')
|
|
98
|
-
},
|
|
99
98
|
handleDownload() {
|
|
100
99
|
const ics = this.icalendar.render()
|
|
101
100
|
const blob = new Blob([ics], {
|
|
@@ -65,12 +65,22 @@
|
|
|
65
65
|
v-if="splitDate"
|
|
66
66
|
class="hidden md:block absolute top-0 left-0 z-10 px-4 py-4 text-center text-white bg-primary"
|
|
67
67
|
>
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
<template v-if="themeStore.isEdu">
|
|
69
|
+
<div class="font-extrabold text-6xl leading-tight tracking-wider">
|
|
70
|
+
{{ splitDate.month }}
|
|
71
|
+
</div>
|
|
72
|
+
<div class="text-subtitle">
|
|
73
|
+
{{ splitDate.year }}
|
|
74
|
+
</div>
|
|
75
|
+
</template>
|
|
76
|
+
<template v-else>
|
|
77
|
+
<div class="font-extrabold text-6xl leading-tight tracking-wider">
|
|
78
|
+
{{ splitDate.day }}
|
|
79
|
+
</div>
|
|
80
|
+
<div class="text-subtitle">
|
|
81
|
+
{{ splitDate.monthAndYear }}
|
|
82
|
+
</div>
|
|
83
|
+
</template>
|
|
74
84
|
</div>
|
|
75
85
|
</BaseImagePlaceholder>
|
|
76
86
|
</div>
|
|
@@ -84,8 +94,11 @@ import { defineComponent } from 'vue'
|
|
|
84
94
|
import {
|
|
85
95
|
mixinFormatEventDates,
|
|
86
96
|
mixinFormatSplitEventDates,
|
|
87
|
-
mixinFormatEventTimeInHoursAndMinutes
|
|
97
|
+
mixinFormatEventTimeInHoursAndMinutes,
|
|
98
|
+
type EventDateObject
|
|
88
99
|
} from './../../utils/mixins'
|
|
100
|
+
import { mapStores } from 'pinia'
|
|
101
|
+
import { useThemeStore } from '../../store/theme'
|
|
89
102
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
90
103
|
import BaseHeading from './../BaseHeading/BaseHeading.vue'
|
|
91
104
|
import BaseImage from './../BaseImage/BaseImage.vue'
|
|
@@ -145,7 +158,8 @@ export default defineComponent({
|
|
|
145
158
|
}
|
|
146
159
|
},
|
|
147
160
|
computed: {
|
|
148
|
-
|
|
161
|
+
...mapStores(useThemeStore),
|
|
162
|
+
splitDate(): EventDateObject | null {
|
|
149
163
|
if (this.startDate) {
|
|
150
164
|
return mixinFormatSplitEventDates(this.startDate, this.endDate)
|
|
151
165
|
}
|
|
@@ -4,41 +4,55 @@
|
|
|
4
4
|
class="EventDetailHero mb-10 md:mb-10 lg:mb-14 -mx-4 lg:mx-0"
|
|
5
5
|
>
|
|
6
6
|
<div class="hero">
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
:srcset="getSrcSet"
|
|
11
|
-
:width="image.src.width"
|
|
12
|
-
:height="image.src.height"
|
|
13
|
-
:alt="image.alt"
|
|
14
|
-
image-class="w-full h-auto"
|
|
15
|
-
object-fit-class="cover"
|
|
16
|
-
loading="lazy"
|
|
17
|
-
/>
|
|
18
|
-
<div
|
|
19
|
-
v-if="startDateSplit"
|
|
20
|
-
class="ThemeVariantLight absolute top-0 left-0 z-10 px-4 py-4 text-center text-white bg-primary"
|
|
7
|
+
<BaseImagePlaceholder
|
|
8
|
+
:aspect-ratio="constrain ? '16:9' : 'none'"
|
|
9
|
+
dark-mode
|
|
21
10
|
>
|
|
22
|
-
<
|
|
23
|
-
|
|
11
|
+
<BaseImage
|
|
12
|
+
v-if="image.src"
|
|
13
|
+
:src="image.src.url"
|
|
14
|
+
:srcset="getSrcSet"
|
|
15
|
+
:width="image.src.width"
|
|
16
|
+
:height="image.src.height"
|
|
17
|
+
:alt="image.alt"
|
|
18
|
+
image-class="w-full h-auto"
|
|
19
|
+
object-fit-class="cover"
|
|
20
|
+
loading="lazy"
|
|
21
|
+
/>
|
|
22
|
+
<div
|
|
23
|
+
v-if="startDateSplit || ongoing"
|
|
24
|
+
class="ThemeVariantLight absolute top-0 left-0 z-10 px-4 py-4 text-center text-white bg-primary print:hidden"
|
|
25
|
+
>
|
|
26
|
+
<template v-if="ongoing">
|
|
27
|
+
<div class="text-subtitle">Ongoing</div>
|
|
28
|
+
</template>
|
|
29
|
+
<template v-else>
|
|
30
|
+
<div class="font-extrabold text-6xl leading-tight tracking-wider uppercase">
|
|
31
|
+
{{ themeStore.isEdu ? startDateSplit?.month : startDateSplit?.day }}
|
|
32
|
+
</div>
|
|
33
|
+
<div class="text-subtitle">
|
|
34
|
+
{{ themeStore.isEdu ? startDateSplit?.year : startDateSplit?.monthAndYear }}
|
|
35
|
+
</div>
|
|
36
|
+
</template>
|
|
24
37
|
</div>
|
|
25
|
-
|
|
26
|
-
{{ startDateSplit.monthAndYear }}
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
38
|
+
</BaseImagePlaceholder>
|
|
29
39
|
</div>
|
|
30
40
|
</div>
|
|
31
41
|
</template>
|
|
32
42
|
<script lang="ts">
|
|
33
43
|
import { defineComponent } from 'vue'
|
|
44
|
+
import { mapStores } from 'pinia'
|
|
45
|
+
import { useThemeStore } from '../../store/theme'
|
|
34
46
|
import BaseImage from '../BaseImage/BaseImage.vue'
|
|
47
|
+
import BaseImagePlaceholder from '../BaseImagePlaceholder/BaseImagePlaceholder.vue'
|
|
35
48
|
import { mixinGetSrcSet, type EventDateObject } from './../../utils/mixins'
|
|
36
49
|
import type { PropType } from 'vue'
|
|
37
50
|
|
|
38
51
|
export default defineComponent({
|
|
39
52
|
name: 'EventDetailHero',
|
|
40
53
|
components: {
|
|
41
|
-
BaseImage
|
|
54
|
+
BaseImage,
|
|
55
|
+
BaseImagePlaceholder
|
|
42
56
|
},
|
|
43
57
|
props: {
|
|
44
58
|
data: {
|
|
@@ -50,13 +64,23 @@ export default defineComponent({
|
|
|
50
64
|
type: Object as PropType<EventDateObject | undefined>,
|
|
51
65
|
required: true
|
|
52
66
|
},
|
|
67
|
+
ongoing: {
|
|
68
|
+
type: Boolean,
|
|
69
|
+
default: false
|
|
70
|
+
},
|
|
53
71
|
image: {
|
|
54
72
|
type: Object,
|
|
55
73
|
required: false,
|
|
56
74
|
default: undefined
|
|
75
|
+
},
|
|
76
|
+
constrain: {
|
|
77
|
+
type: Boolean,
|
|
78
|
+
required: false,
|
|
79
|
+
default: false
|
|
57
80
|
}
|
|
58
81
|
},
|
|
59
82
|
computed: {
|
|
83
|
+
...mapStores(useThemeStore),
|
|
60
84
|
getSrcSet() {
|
|
61
85
|
return this.image ? mixinGetSrcSet(this.image) : undefined
|
|
62
86
|
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
</div>
|
|
26
26
|
<div
|
|
27
27
|
v-if="hasCaptionArea"
|
|
28
|
-
class="lg:hidden absolute bottom-0 left-0 w-full h-auto mx-auto"
|
|
28
|
+
class="lg:hidden absolute bottom-0 left-0 w-full h-auto mx-auto print:hidden"
|
|
29
29
|
>
|
|
30
30
|
<button
|
|
31
31
|
class="bg-opacity-90 text-gray-dark flex items-center justify-center w-12 h-12 ml-auto bg-white cursor-pointer"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<div
|
|
45
45
|
v-if="hasCaptionArea"
|
|
46
46
|
:class="captionVisibilityClass"
|
|
47
|
-
class="max-w-screen-3xl ThemeVariantGray bg-gray-light bg-opacity-90 lg:bg-opacity-100 ThemeVariantGray lg:block lg:pb-4 lg:px-3 xl:px-8 lg:pt-4 items-start p-4 mx-auto"
|
|
47
|
+
class="max-w-screen-3xl ThemeVariantGray bg-gray-light bg-opacity-90 lg:bg-opacity-100 ThemeVariantGray lg:block lg:pb-4 lg:px-3 xl:px-8 lg:pt-4 items-start p-4 mx-auto print:block"
|
|
48
48
|
>
|
|
49
49
|
<BaseImageCaption :data="theImageData || customCaption" />
|
|
50
50
|
</div>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<div
|
|
13
13
|
v-if="heading || link"
|
|
14
14
|
:class="colStart"
|
|
15
|
-
class="lg:pl-0 col-start-1 col-end-13 px-4 mb-1"
|
|
15
|
+
class="lg:pl-0 col-start-1 col-end-13 px-4 mb-1 print:px-0"
|
|
16
16
|
>
|
|
17
17
|
<div class="sm:flex flex-wrap items-center justify-between">
|
|
18
18
|
<h2
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</div>
|
|
36
36
|
<div
|
|
37
37
|
:class="colStart"
|
|
38
|
-
class="lg:pl-0 sm:col-end-11 3xl:col-end-12 col-start-1 col-end-13 pl-4 overflow-x-visible"
|
|
38
|
+
class="lg:pl-0 sm:col-end-11 3xl:col-end-12 col-start-1 col-end-13 pl-4 print:pl-0 overflow-x-visible"
|
|
39
39
|
>
|
|
40
40
|
<!-- Slider main container -->
|
|
41
41
|
<div
|
|
@@ -19,6 +19,14 @@
|
|
|
19
19
|
<NavLogoLinks class="w-[17rem] z-20 flex flex-shrink-0 my-2 -ml-1">
|
|
20
20
|
<img
|
|
21
21
|
:src="LogoWhite"
|
|
22
|
+
class="print:hidden"
|
|
23
|
+
alt="JPL Logo"
|
|
24
|
+
width="324"
|
|
25
|
+
height="72"
|
|
26
|
+
/>
|
|
27
|
+
<img
|
|
28
|
+
:src="LogoColor"
|
|
29
|
+
class="hidden print:block"
|
|
22
30
|
alt="JPL Logo"
|
|
23
31
|
width="324"
|
|
24
32
|
height="72"
|
|
@@ -119,6 +127,7 @@ import IconExternal from './../Icons/IconExternal.vue'
|
|
|
119
127
|
import IconSearch from './../Icons/IconSearch.vue'
|
|
120
128
|
import IconClose from './../Icons/IconClose.vue'
|
|
121
129
|
import type { LinkObject, BreadcrumbObject } from './../../utils/mixins'
|
|
130
|
+
import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
|
|
122
131
|
import LogoWhite from '@explorer-1/common/src/images/svg/logo-tribrand-white.svg'
|
|
123
132
|
import type { BreadcrumbPathObject } from '../../interfaces'
|
|
124
133
|
import {
|
|
@@ -179,7 +188,8 @@ export default defineComponent({
|
|
|
179
188
|
// This is used in transition logic to avoid distracting animations on route changes
|
|
180
189
|
// without this check, the nav would swoop in/out on a route change if it was visible before the route change occured (e.g. partially scrolled up on a page)
|
|
181
190
|
scrolledCurrentPage: false,
|
|
182
|
-
LogoWhite: LogoWhite
|
|
191
|
+
LogoWhite: LogoWhite,
|
|
192
|
+
LogoColor: LogoColor
|
|
183
193
|
}
|
|
184
194
|
},
|
|
185
195
|
computed: {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<transition name="headerMobileReveal">
|
|
3
3
|
<div
|
|
4
4
|
v-show="headerVisible"
|
|
5
|
-
class="NavMobile border-gray-light-mid z-50 w-full transition-all duration-150 ease-in bg-white border-b edu:bg-gray-light edu:border-none"
|
|
5
|
+
class="NavMobile border-gray-light-mid z-50 w-full transition-all duration-150 ease-in bg-white border-b edu:bg-gray-light edu:border-none print:edu:!border-b print:border-black"
|
|
6
6
|
:class="headerClasses"
|
|
7
7
|
>
|
|
8
8
|
<!-- navbar -->
|
|
@@ -13,13 +13,22 @@
|
|
|
13
13
|
<!-- branding -->
|
|
14
14
|
<div class="flex items-center">
|
|
15
15
|
<NavLogoLinks class="lg:p-0 w-72 z-20 p-2 pl-0 -ml-3 edu:w-[12rem]">
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
<template v-if="themeStore.theme === 'ThemeEdu'">
|
|
17
|
+
<img
|
|
18
|
+
class="print:hidden"
|
|
19
|
+
:src="LogoWhite"
|
|
20
|
+
alt="JPL Logo"
|
|
21
|
+
width="324"
|
|
22
|
+
height="72"
|
|
23
|
+
/>
|
|
24
|
+
<img
|
|
25
|
+
class="hidden print:block"
|
|
26
|
+
:src="LogoColor"
|
|
27
|
+
alt="JPL Logo"
|
|
28
|
+
width="324"
|
|
29
|
+
height="72"
|
|
30
|
+
/>
|
|
31
|
+
</template>
|
|
23
32
|
<img
|
|
24
33
|
v-else
|
|
25
34
|
:src="LogoColor"
|
|
@@ -30,14 +39,14 @@
|
|
|
30
39
|
</NavLogoLinks>
|
|
31
40
|
<div
|
|
32
41
|
v-if="themeStore.theme === 'ThemeEdu'"
|
|
33
|
-
class="-ml-1 pl-2 border-l border-white border-opacity-30 z-20"
|
|
42
|
+
class="-ml-1 pl-2 border-l border-white border-opacity-30 z-20 print:border-black"
|
|
34
43
|
>
|
|
35
44
|
<span class="text-white font-bold text-xl pl-px">Education</span>
|
|
36
45
|
</div>
|
|
37
46
|
</div>
|
|
38
47
|
<button
|
|
39
48
|
v-if="data"
|
|
40
|
-
class="text-gray-dark p-4 -mr-4 cursor-pointer"
|
|
49
|
+
class="print:hidden text-gray-dark p-4 -mr-4 cursor-pointer"
|
|
41
50
|
:aria-label="menuVisible ? 'Close menu' : 'Open menu'"
|
|
42
51
|
@click="toggleMenu"
|
|
43
52
|
>
|
|
@@ -89,7 +89,7 @@ const buttonClass = computed(() => {
|
|
|
89
89
|
})
|
|
90
90
|
</script>
|
|
91
91
|
<template>
|
|
92
|
-
<div class="ShareButtonsEdu relative flex flex-row items-start border-collapse">
|
|
92
|
+
<div class="ShareButtonsEdu relative flex flex-row items-start border-collapse print:hidden">
|
|
93
93
|
<BaseButton
|
|
94
94
|
variant="social"
|
|
95
95
|
:class="buttonClass"
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<footer
|
|
2
|
+
<footer
|
|
3
|
+
class="TheFooter bg-jpl-blue-darker edu:bg-stars edu:bg-primary text-white relative z-20 print:px-4 print:border-t print:border-black"
|
|
4
|
+
>
|
|
3
5
|
<div class="footer-main lg:BaseGrid 3xl:px-0 lg:pt-20 container px-4 pt-10 mx-auto">
|
|
4
6
|
<div class="footer-navigation lg:block lg:col-span-9 hidden col-span-12">
|
|
5
7
|
<!-- footerNavigation -->
|
|
@@ -270,10 +270,11 @@
|
|
|
270
270
|
<LayoutHelper
|
|
271
271
|
v-if="data.moreEvents && data.moreEvents.length > 0"
|
|
272
272
|
indent="col-1"
|
|
273
|
-
class="my-12 lg:my-16"
|
|
273
|
+
class="my-12 lg:my-16 print:!px-4"
|
|
274
274
|
>
|
|
275
275
|
<BlockLinkCarousel
|
|
276
276
|
item-type="cards"
|
|
277
|
+
class="print:!px-4"
|
|
277
278
|
heading="MORE EVENTS"
|
|
278
279
|
:items="data.moreEvents"
|
|
279
280
|
/>
|
|
@@ -174,6 +174,7 @@ import BlockImageStandard from './../../components/BlockImage/BlockImageStandard
|
|
|
174
174
|
import BlockLinkCarousel from './../../components/BlockLinkCarousel/BlockLinkCarousel.vue'
|
|
175
175
|
import ShareButtons from './../../components/ShareButtons/ShareButtons.vue'
|
|
176
176
|
import BlockText from './../../components/BlockText/BlockText.vue'
|
|
177
|
+
import BlockVideo from './../../components/BlockText/BlockText.vue'
|
|
177
178
|
|
|
178
179
|
export default defineComponent({
|
|
179
180
|
name: 'PageNewsDetail',
|
|
@@ -190,7 +191,8 @@ export default defineComponent({
|
|
|
190
191
|
BlockImageStandard,
|
|
191
192
|
BlockLinkCarousel,
|
|
192
193
|
ShareButtons,
|
|
193
|
-
BlockText
|
|
194
|
+
BlockText,
|
|
195
|
+
BlockVideo
|
|
194
196
|
},
|
|
195
197
|
props: {
|
|
196
198
|
data: {
|