@explorer-1/vue 0.3.4 → 0.3.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/CHANGELOG.md +19 -0
- package/package.json +2 -2
- package/src/components/AboutTheAuthor/AboutTheAuthor.stories.js +1 -1
- package/src/components/AboutTheAuthor/AboutTheAuthor.vue +9 -9
- package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.stories.js +2 -7
- package/src/components/AsteroidWatchWidget/AsteroidWatchWidget.vue +5 -1
- package/src/components/BackToTop/BackToTop.stories.js +1 -1
- package/src/components/BackToTop/BackToTop.vue +10 -0
- package/src/components/BaseAccordionItem/BaseAccordionItem.stories.js +24 -4
- package/src/components/BaseAccordionItem/BaseAccordionItem.vue +56 -17
- package/src/components/BaseAudio/BaseAudio.stories.js +4 -6
- package/src/components/BaseAudio/BaseAudio.vue +6 -0
- package/src/components/BaseButton/BaseButton.stories.ts +12 -23
- package/src/components/BaseButton/BaseButton.vue +34 -10
- package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.stories.js +2 -1
- package/src/components/BaseCheckboxGroup/BaseCheckboxGroup.vue +5 -0
- package/src/components/BaseHeading/BaseHeading.stories.js +9 -17
- package/src/components/BaseHeading/BaseHeading.vue +18 -8
- package/src/components/BaseImage/BaseImage.stories.ts +7 -17
- package/src/components/BaseImage/BaseImage.vue +26 -14
- package/src/components/BaseImageCaption/BaseImageCaption.stories.js +11 -0
- package/src/components/BaseImageCaption/BaseImageCaption.vue +10 -6
- package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.stories.js +13 -15
- package/src/components/BaseImagePlaceholder/BaseImagePlaceholder.vue +13 -9
- package/src/components/BaseLink/BaseLink.stories.js +8 -7
- package/src/components/BaseLink/BaseLink.vue +32 -21
- package/src/components/BaseModal/BaseModal.stories.js +4 -7
- package/src/components/BaseModal/BaseModal.vue +1 -0
- package/src/components/BaseModal/BaseModalDialog.vue +1 -6
- package/src/components/BasePill/BasePill.stories.js +8 -22
- package/src/components/BasePill/BasePill.vue +36 -19
- package/src/components/BasePlaceholder/BasePlaceholder.stories.js +4 -7
- package/src/components/BasePlaceholder/BasePlaceholder.vue +1 -1
- package/src/components/BaseRadioGroup/BaseRadioGroup.stories.js +1 -0
- package/src/components/BaseRadioGroup/BaseRadioGroup.vue +9 -2
- package/src/components/BaseSwimlane/BaseSwimlane.stories.js +2 -1
- package/src/components/BaseSwimlane/BaseSwimlane.vue +2 -0
- package/src/components/BaseTimer/BaseTimer.stories.js +7 -2
- package/src/components/BaseTimer/BaseTimer.vue +4 -2
- package/src/components/BaseUnitToggle/BaseUnitToggle.stories.js +1 -16
- package/src/components/BaseUnitToggle/BaseUnitToggle.vue +4 -0
- package/src/components/BaseVideo/BaseVideo.vue +7 -3
- package/src/components/BlockAccordion/BlockAccordion.stories.js +4 -2
- package/src/components/BlockAccordion/BlockAccordion.vue +3 -3
- package/src/components/BlockAudio/BlockAudio.stories.js +1 -0
- package/src/components/BlockAudio/BlockAudio.vue +11 -3
- package/src/components/BlockCardGrid/BlockCardGrid.stories.js +1 -1
- package/src/components/BlockCardGrid/BlockCardGrid.vue +1 -1
- package/src/components/BlockCardGridItem/BlockCardGridItem.stories.js +3 -3
- package/src/components/BlockCardGridItem/BlockCardGridItemElement.vue +1 -1
- package/src/components/BlockCircleImageCard/BlockCircleImageCard.stories.js +3 -9
- package/src/components/BlockCsrTable/BlockCsrTable.stories.js +1 -0
- package/src/components/BlockCsrTable/BlockCsrTable.vue +1 -1
- package/src/components/BlockCta/BlockCta.stories.js +1 -0
- package/src/components/BlockCta/BlockCta.vue +9 -2
- package/src/components/BlockDialog/BlockDialog.stories.js +2 -1
- package/src/components/BlockGist/BlockGist.stories.js +3 -2
- package/src/components/BlockGist/BlockGist.vue +8 -6
- package/src/components/BlockHeading/BlockHeading.stories.js +1 -0
- package/src/components/BlockIframeEmbed/BlockIframeEmbed.stories.js +3 -2
- package/src/components/BlockIframeEmbed/BlockIframeEmbed.vue +9 -2
- package/src/components/BlockImage/BlockImage.stories.js +1 -5
- package/src/components/BlockImage/BlockImage.vue +5 -2
- package/src/components/BlockImageCarousel/BlockImageCarousel.stories.js +3 -15
- package/src/components/BlockImageCarousel/BlockImageCarousel.vue +2 -0
- package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.stories.js +2 -16
- package/src/components/BlockImageCarouselItem/BlockImageCarouselItem.vue +7 -7
- package/src/components/BlockImageComparison/BlockImageComparison.stories.js +5 -3
- package/src/components/BlockImageComparison/BlockImageComparison.vue +11 -2
- package/src/components/BlockImageGallery/BlockImageGallery.stories.js +4 -11
- package/src/components/BlockImageGallery/BlockImageGallery.vue +5 -0
- package/src/components/BlockInlineImage/BlockInlineImage.stories.js +5 -2
- package/src/components/BlockInlineImage/BlockInlineImage.vue +20 -7
- package/src/components/BlockKeyPoints/BlockKeyPoints.stories.js +1 -0
- package/src/components/BlockKeyPoints/BlockKeyPoints.vue +12 -3
- package/src/components/BlockLinkCard/BlockLinkCard.stories.js +24 -34
- package/src/components/BlockLinkCard/BlockLinkCard.vue +28 -9
- package/src/components/BlockLinkCard/BlockLinkCardCollectionLg.vue +2 -2
- package/src/components/BlockLinkCardList/BlockLinkCardList.stories.js +1 -3
- package/src/components/BlockLinkCarousel/BlockLinkCarousel.stories.js +2 -14
- package/src/components/BlockLinkCarousel/BlockLinkCarousel.vue +8 -8
- package/src/components/BlockLinkTile/BlockLinkTile.stories.js +3 -13
- package/src/components/BlockLinkTile/BlockLinkTile.vue +26 -13
- package/src/components/BlockListCards/BlockListCards.stories.js +1 -0
- package/src/components/BlockListCards/BlockListCards.vue +5 -4
- package/src/components/BlockNewsletterSignup/BlockNewsletterSignup.stories.js +1 -0
- package/src/components/BlockNewsletterSignup/BlockNewsletterSignup.vue +3 -2
- package/src/components/BlockQuote/BlockQuote.stories.js +1 -0
- package/src/components/BlockQuote/BlockQuote.vue +3 -2
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.stories.js +1 -0
- package/src/components/BlockRelatedLinks/BlockRelatedLinks.vue +6 -4
- package/src/components/BlockRichTable/BlockRichTable.stories.js +1 -1
- package/src/components/BlockRichTable/BlockRichTable.vue +23 -9
- package/src/components/BlockStreamfield/BlockStreamfield.stories.js +1 -11
- package/src/components/BlockStreamfield/BlockStreamfield.vue +34 -31
- package/src/components/BlockTeaser/BlockTeaser.stories.js +1 -0
- package/src/components/BlockTeaser/BlockTeaser.vue +20 -12
- package/src/components/BlockText/BlockText.stories.js +2 -9
- package/src/components/BlockText/BlockText.vue +21 -9
- package/src/components/BlockVideo/BlockVideo.stories.js +1 -0
- package/src/components/BlockVideo/BlockVideo.vue +14 -3
- package/src/components/BlockVideoEmbed/BlockVideoEmbed.stories.js +1 -0
- package/src/components/BlockVideoEmbed/BlockVideoEmbed.vue +6 -3
- package/src/components/CalendarButton/CalendarButton.vue +7 -0
- package/src/components/DetailHeadline/DetailHeadline.stories.js +2 -20
- package/src/components/DetailHeadline/DetailHeadline.vue +16 -4
- package/src/components/DsnWidget/DsnWidget.stories.js +2 -6
- package/src/components/DsnWidget/DsnWidget.vue +18 -4
- package/src/components/EventDetailHero/EventDetailHero.stories.js +10 -7
- package/src/components/EventDetailHero/EventDetailHero.vue +4 -7
- package/src/components/FormContact/FormContact.stories.js +2 -1
- package/src/components/FormNewsletterSignup/FormNewsletterSignup.stories.js +2 -1
- package/src/components/HeroInlineMedia/HeroInlineMedia.vue +12 -8
- package/src/components/HeroLarge/HeroLarge.stories.js +27 -2
- package/src/components/HeroLarge/HeroLarge.vue +12 -5
- package/src/components/HeroListingIndex/HeroListingIndex.stories.js +1 -0
- package/src/components/HeroListingIndex/HeroListingIndex.vue +18 -13
- package/src/components/HeroMedia/HeroMedia.stories.js +14 -9
- package/src/components/HeroMedia/HeroMedia.vue +9 -8
- package/src/components/HeroMedium/HeroMedium.stories.js +19 -4
- package/src/components/HeroMedium/HeroMedium.vue +32 -14
- package/src/components/HeroMedium/HeroSmall.stories.js +20 -6
- package/src/components/HomepageCarousel/HomepageCarousel.stories.js +1 -1
- package/src/components/HomepageCarouselItem/HomepageCarouselItem.stories.js +2 -2
- package/src/components/HomepageCarouselItem/HomepageCarouselItem.vue +2 -6
- package/src/components/HomepageEmbedBlock/HomepageEmbedBlock.vue +2 -2
- package/src/components/LogoCaltech/LogoCaltech.stories.js +14 -18
- package/src/components/LogoCaltech/LogoCaltech.vue +1 -0
- package/src/components/LogoTribrand/LogoTribrand.stories.js +66 -51
- package/src/components/LogoTribrand/LogoTribrand.vue +4 -2
- package/src/components/MetaPanel/MetaPanel.stories.js +5 -9
- package/src/components/MetaPanel/MetaPanel.vue +3 -0
- package/src/components/MetaPanelItems/MetaPanelItems.stories.js +9 -2
- package/src/components/MetaPanelItems/MetaPanelItems.vue +2 -0
- package/src/components/MetadataEduResource/MetadataEduResource.stories.js +12 -10
- package/src/components/MetadataEduResource/MetadataEduResource.vue +7 -3
- package/src/components/MetadataEvent/MetadataEvent.stories.js +1 -1
- package/src/components/MissionDetailAbout/MissionDetailAbout.vue +1 -1
- package/src/components/MissionDetailHero/MissionDetailHero.stories.js +2 -2
- package/src/components/MissionDetailHighlights/MissionDetailHighlights.stories.js +1 -0
- package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.stories.js +1 -6
- package/src/components/MissionDetailInlineImage/MissionDetailInlineImage.vue +10 -5
- package/src/components/MissionDetailStats/DistanceStats.vue +10 -5
- package/src/components/MissionDetailStats/MissionDetailStats.stories.js +4 -21
- package/src/components/MissionDetailStats/MissionDetailStats.vue +21 -5
- package/src/components/MissionDetailStreamfield/MissionDetailStreamfield.vue +4 -2
- package/src/components/MixinAnimationCaret/MixinAnimationCaret.stories.ts +7 -0
- package/src/components/MixinAnimationCaret/MixinAnimationCaret.vue +12 -6
- package/src/components/MixinCarousel/MixinCarousel.stories.js +2 -8
- package/src/components/MixinCarousel/MixinCarousel.vue +13 -16
- package/src/components/MixinVideoBg/MixinVideoBg.stories.js +1 -1
- package/src/components/MixinVideoBg/MixinVideoBg.vue +4 -7
- package/src/components/NavDesktop/NavDesktop.stories.js +1 -0
- package/src/components/NavDesktop/NavDesktop.vue +4 -4
- package/src/components/NavDesktop/NavDesktopTopHat.vue +4 -4
- package/src/components/NavDesktopEdu/NavDesktopEdu.stories.js +1 -5
- package/src/components/NavDesktopEdu/NavDesktopEdu.vue +4 -4
- package/src/components/NavHeading/NavHeading.stories.js +3 -2
- package/src/components/NavHighlight/NavHighlight.stories.js +3 -2
- package/src/components/NavJumpMenu/NavJumpMenu.stories.js +5 -2
- package/src/components/NavLinkList/NavLinkList.stories.js +3 -2
- package/src/components/NavLinkList/NavLinkList.vue +3 -3
- package/src/components/NavLogoLinks/NavLogoLinks.stories.js +1 -0
- package/src/components/NavMobile/NavMobile.stories.js +13 -2
- package/src/components/NavMobile/NavMobile.vue +18 -5
- package/src/components/NavMobile/NavMobileDropdown.vue +2 -2
- package/src/components/NavMobile/NavMobileEdu.stories.js +11 -4
- package/src/components/NavMobile/NavMobileLink.vue +4 -4
- package/src/components/NavSearchForm/NavSearchForm.stories.js +1 -0
- package/src/components/NavSecondary/NavSecondary.stories.js +1 -0
- package/src/components/NavSecondary/NavSecondary.vue +7 -4
- package/src/components/NavSecondary/NavSecondaryDropdownContent.vue +1 -1
- package/src/components/NavSocial/NavSocial.stories.js +1 -0
- package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.stories.js +2 -1
- package/src/components/NewsDetailMediaContact/NewsDetailMediaContact.vue +1 -1
- package/src/components/ParallaxContainer/ParallaxContainer.stories.js +2 -2
- package/src/components/ParallaxContainer/ParallaxContainer.vue +1 -0
- package/src/components/PodcastSeriesCarousel/PodcastSeriesCarousel.vue +6 -5
- package/src/components/RoboticsDetailStats/RoboticsDetailStats.stories.js +3 -8
- package/src/components/SearchFilterGroup/SearchFilterGroup.stories.js +1 -0
- package/src/components/SearchInput/SearchInput.stories.js +1 -0
- package/src/components/SearchPagination/SearchPagination.stories.js +1 -0
- package/src/components/SearchResultCard/SearchResultCard.stories.js +1 -10
- package/src/components/SearchResultCard/SearchResultCard.vue +1 -0
- package/src/components/SearchResultGridItem/SearchResultGridItem.stories.js +3 -12
- package/src/components/SearchResultGridItem/SearchResultGridItem.vue +5 -2
- package/src/components/SearchResultsList/SearchResultsList.stories.js +3 -3
- package/src/components/SearchSelectMenu/SearchSelectMenu.stories.js +2 -1
- package/src/components/SwimlaneCTA/SwimlaneCTA.vue +1 -0
- package/src/components/TextArea/TextArea.stories.js +2 -1
- package/src/components/TextInput/TextInput.stories.js +2 -1
- package/src/components/TheFooter/TheFooter.stories.js +1 -0
- package/src/components/TheFooter/TheFooter.vue +30 -4
- package/src/components/ThumbnailCarousel/ThumbnailCarousel.stories.js +1 -1
- package/src/components/ThumbnailCarousel/ThumbnailCarousel.vue +2 -1
- package/src/components/TimelineDialog/TimelineDialog.vue +2 -2
- package/src/components/TopicDetailMissionCarousel/TopicDetailMissionCarousel.stories.js +1 -0
- package/src/components/TopicDetailMissionCarouselItem/TopicDetailMissionCarouselItem.stories.js +2 -2
- package/src/components/TopicDetailMore/TopicDetailMore.stories.js +1 -0
- package/src/components/TopicDetailMoreItem/TopicDetailMoreItem.stories.js +3 -2
- package/src/components/TopicDetailStreamfield/TopicDetailStreamfield.vue +2 -2
- package/src/constants.ts +3 -5
- package/src/docs/foundation/grid_layouthelpers.stories.js +2 -2
- package/src/docs/introduction.docs.mdx +14 -2
- package/src/interfaces.ts +31 -6
- package/src/templates/PageAudioDetail/PageAudioDetail.vue +2 -2
- package/src/templates/PageContent/PageContent.stories.js +1 -1
- package/src/templates/PageEventDetail/PageEventDetail.stories.js +1 -1
- package/src/templates/PageNewsDetail/PageNewsDetail.stories.js +2 -2
- package/src/templates/edu/PageContentEdu.stories.js +2 -2
- package/src/templates/edu/PageEduCollectionsDetail/PageEduCollectionsDetail.stories.js +2 -2
- package/src/templates/edu/PageEduEventDetail/PageEduEventDetail.stories.js +1 -1
- package/src/templates/edu/PageEduExplainerArticle/PageEduExplainerArticle.stories.js +2 -2
- package/src/templates/edu/PageEduGalleryDetail/PageEduGalleryDetail.stories.js +1 -1
- package/src/templates/edu/PageEduGalleryDetail/PageEduGalleryDetail.vue +10 -6
- package/src/templates/edu/PageEduHome/PageEduHome.stories.js +1 -1
- package/src/templates/edu/PageEduLesson/PageEduLesson.stories.js +2 -2
- package/src/templates/edu/PageEduMultimediaDetail/PageEduMultimediaDetail.stories.js +1 -1
- package/src/templates/edu/PageEduNewsDetail/PageEduNewsDetail.stories.js +2 -2
- package/src/templates/edu/PageEduStudentProject/PageEduStudentProject.stories.js +2 -2
- package/src/templates/edu/PageEduStudentProject/PageEduStudentProjectSection.vue +10 -6
- package/src/templates/edu/PageEduTeachableMoment/PageEduTeachableMoment.stories.js +2 -2
- package/src/templates/www/PageAsteroidWatchContent/PageAsteroidWatchContent.stories.js +2 -2
- package/src/templates/www/PageAsteroidWatchIndex/PageAsteroidWatchIndex.stories.js +2 -2
- package/src/templates/www/PageGoDirectory/PageGoDirectory.stories.js +2 -2
- package/src/templates/www/PageHomepage/PageHomepage.stories.js +2 -2
- package/src/templates/www/PageMissionDetail/PageMissionDetail.stories.js +2 -2
- package/src/templates/www/PagePodcast/PagePodcast.stories.js +2 -2
- package/src/templates/www/PagePodcastSeason/PagePodcastSeason.stories.js +2 -2
- package/src/templates/www/PagePressKitIndex/PagePressKitIndex.stories.js +2 -2
- package/src/templates/www/PageProfileDetail/PageProfileDetail.stories.js +2 -2
- package/src/templates/www/PageRoboticsDetail/PageRoboticsDetail.stories.js +2 -2
- package/src/templates/www/PageTimeline/PageTimeline.stories.js +2 -2
- package/src/templates/www/PageTopicDetail/PageTopicDetail.stories.js +2 -2
- package/src/templates/www/PageTopicDetail/PageTopicDetail.vue +2 -1
- package/src/utils/mixins.ts +7 -7
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
|
|
47
47
|
<script lang="ts">
|
|
48
48
|
// @ts-nocheck
|
|
49
|
+
import type { StreamfieldBlockData } from './../../interfaces.ts'
|
|
49
50
|
import MissionDetailInlineImage from './../MissionDetailInlineImage/MissionDetailInlineImage.vue'
|
|
50
51
|
import BaseHeading from './../BaseHeading/BaseHeading.vue'
|
|
51
52
|
import BlockQuote from './../BlockQuote/BlockQuote.vue'
|
|
@@ -63,8 +64,9 @@ export default {
|
|
|
63
64
|
},
|
|
64
65
|
props: {
|
|
65
66
|
data: {
|
|
66
|
-
type: Array,
|
|
67
|
-
required: false
|
|
67
|
+
type: Array as () => StreamfieldBlockData[],
|
|
68
|
+
required: false,
|
|
69
|
+
default: undefined
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
}
|
|
@@ -3,6 +3,13 @@ import MixinAnimationCaret from './MixinAnimationCaret.vue'
|
|
|
3
3
|
export default {
|
|
4
4
|
title: 'Mixins/MixinAnimationCaret',
|
|
5
5
|
component: MixinAnimationCaret,
|
|
6
|
+
argTypes: {
|
|
7
|
+
color: {
|
|
8
|
+
control: {
|
|
9
|
+
type: 'text'
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
},
|
|
6
13
|
parameters: {
|
|
7
14
|
slots: {
|
|
8
15
|
default: 'BaseStory slot content'
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* This mixin appends an animated caret to a line of text or to more complex HTML markup.
|
|
4
|
+
* When implemented, it must be wrapped by a link element with CSS class `group` to ensure that the animation is triggered by hovering over the link.
|
|
5
|
+
* See the `BaseLink` primary variant for an implementation example. */
|
|
6
|
+
|
|
2
7
|
import { defineComponent } from 'vue'
|
|
3
8
|
import IconCaret from './../Icons/IconCaret.vue'
|
|
4
9
|
|
|
@@ -8,32 +13,33 @@ export default defineComponent({
|
|
|
8
13
|
IconCaret
|
|
9
14
|
},
|
|
10
15
|
props: {
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
/** Use when wrapped in a parent component. Appends to classes applied to .`MixinAnimationCaret`.
|
|
17
|
+
* Use-case example: BaseLink and grandparent component needs to pass a class
|
|
18
|
+
*/
|
|
13
19
|
passedWrapperClass: {
|
|
14
20
|
type: String || null,
|
|
15
21
|
required: false,
|
|
16
22
|
default: ''
|
|
17
23
|
},
|
|
18
|
-
|
|
24
|
+
/** Modify spacing around the caret itself with TailwindCSS classes */
|
|
19
25
|
arrowClass: {
|
|
20
26
|
type: String,
|
|
21
27
|
required: false,
|
|
22
28
|
default: ''
|
|
23
29
|
},
|
|
24
|
-
|
|
30
|
+
/** Default color class. Use TailwindCSS classes */
|
|
25
31
|
color: {
|
|
26
32
|
type: String,
|
|
27
33
|
required: false,
|
|
28
34
|
default: 'text-primary'
|
|
29
35
|
},
|
|
30
|
-
|
|
36
|
+
/** Default margin left class. Use TailwindCSS classes */
|
|
31
37
|
marginLeft: {
|
|
32
38
|
type: String,
|
|
33
39
|
default: 'ml-1',
|
|
34
40
|
required: false
|
|
35
41
|
},
|
|
36
|
-
|
|
42
|
+
/** Appends .caret-inline to .MixinAnimationCaret */
|
|
37
43
|
inline: {
|
|
38
44
|
type: Boolean,
|
|
39
45
|
default: false,
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import MixinCarousel
|
|
1
|
+
import MixinCarousel from './MixinCarousel.vue'
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
4
|
title: 'Mixins/MixinCarousel',
|
|
5
5
|
component: MixinCarousel,
|
|
6
|
-
tags: ['
|
|
7
|
-
argTypes: {
|
|
8
|
-
variant: {
|
|
9
|
-
control: { type: 'select' },
|
|
10
|
-
options: Object.keys(variants)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
6
|
+
tags: ['autodocs', 'carousels']
|
|
13
7
|
}
|
|
14
8
|
|
|
15
9
|
export const BaseStory = {
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
</template>
|
|
98
98
|
<script lang="ts">
|
|
99
99
|
// @ts-nocheck
|
|
100
|
-
import { defineComponent } from 'vue'
|
|
100
|
+
import { defineComponent, type PropType } from 'vue'
|
|
101
101
|
import Swiper from 'swiper'
|
|
102
102
|
import { A11y, Navigation } from 'swiper/modules'
|
|
103
103
|
import type { SwiperOptions } from 'swiper/types'
|
|
@@ -112,24 +112,18 @@ const MixinCarouselOptions = swiperOptions.MixinCarousel
|
|
|
112
112
|
|
|
113
113
|
Swiper.use([Navigation, A11y])
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
[key: string]: string
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export const variants: Variants = {
|
|
115
|
+
const variants = {
|
|
120
116
|
cards: '-cards',
|
|
121
117
|
tiles: '-tiles'
|
|
122
118
|
}
|
|
119
|
+
type VariantsKeys = keyof typeof variants
|
|
123
120
|
|
|
124
|
-
|
|
125
|
-
[key: string]: string
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export const indents: Indents = {
|
|
121
|
+
const indents = {
|
|
129
122
|
'col-1': '',
|
|
130
123
|
'col-2': 'lg:col-start-2',
|
|
131
124
|
'col-3': 'lg:col-start-3'
|
|
132
125
|
}
|
|
126
|
+
type IndentsKeys = keyof typeof indents
|
|
133
127
|
|
|
134
128
|
export default defineComponent({
|
|
135
129
|
name: 'MixinCarousel',
|
|
@@ -148,18 +142,21 @@ export default defineComponent({
|
|
|
148
142
|
},
|
|
149
143
|
heading: {
|
|
150
144
|
type: String,
|
|
151
|
-
required: false
|
|
145
|
+
required: false,
|
|
146
|
+
default: undefined
|
|
152
147
|
},
|
|
153
148
|
link: {
|
|
154
149
|
type: [String, Object],
|
|
155
|
-
required: false
|
|
150
|
+
required: false,
|
|
151
|
+
default: undefined
|
|
156
152
|
},
|
|
157
153
|
linkTitle: {
|
|
158
154
|
type: String,
|
|
159
|
-
required: false
|
|
155
|
+
required: false,
|
|
156
|
+
default: undefined
|
|
160
157
|
},
|
|
161
158
|
variant: {
|
|
162
|
-
type: String
|
|
159
|
+
type: String as PropType<VariantsKeys>,
|
|
163
160
|
required: false,
|
|
164
161
|
default: 'cards',
|
|
165
162
|
validator: (prop: string): boolean => Object.keys(variants).includes(prop)
|
|
@@ -170,7 +167,7 @@ export default defineComponent({
|
|
|
170
167
|
default: 2
|
|
171
168
|
},
|
|
172
169
|
indent: {
|
|
173
|
-
type: String
|
|
170
|
+
type: String as PropType<IndentsKeys>,
|
|
174
171
|
required: false,
|
|
175
172
|
default: 'col-2',
|
|
176
173
|
validator: (prop: string): boolean => Object.keys(indents).includes(prop)
|
|
@@ -27,18 +27,15 @@
|
|
|
27
27
|
</video>
|
|
28
28
|
</template>
|
|
29
29
|
<script lang="ts">
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
/** This mix-in loops a muted video. */
|
|
31
|
+
import { defineComponent, type PropType } from 'vue'
|
|
32
|
+
import type { VideoObject } from './../../interfaces.ts'
|
|
32
33
|
export default defineComponent({
|
|
33
34
|
name: 'MixinVideoBg',
|
|
34
35
|
props: {
|
|
35
36
|
video: {
|
|
36
|
-
type: Object
|
|
37
|
+
type: Object as PropType<VideoObject>,
|
|
37
38
|
default: undefined
|
|
38
|
-
},
|
|
39
|
-
autoplay: {
|
|
40
|
-
type: Boolean,
|
|
41
|
-
default: false
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
41
|
})
|
|
@@ -123,7 +123,7 @@ import NavLogoLinks from './../NavLogoLinks/NavLogoLinks.vue'
|
|
|
123
123
|
import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
|
|
124
124
|
import IconSearch from './../Icons/IconSearch.vue'
|
|
125
125
|
import IconClose from './../Icons/IconClose.vue'
|
|
126
|
-
import type {
|
|
126
|
+
import type { NavLinkObject, BreadcrumbObject } from './../../utils/mixins'
|
|
127
127
|
import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
|
|
128
128
|
import LogoWhite from '@explorer-1/common/src/images/svg/logo-tribrand-white.svg'
|
|
129
129
|
import type { BreadcrumbPathObject } from '../../interfaces'
|
|
@@ -237,14 +237,14 @@ export default defineComponent({
|
|
|
237
237
|
},
|
|
238
238
|
methods: {
|
|
239
239
|
// safe way to retrieve url key from nav items. used with breadcrumb to determine active class.
|
|
240
|
-
getUrlKey(item:
|
|
240
|
+
getUrlKey(item: NavLinkObject): string | null {
|
|
241
241
|
if (item.linkPage) {
|
|
242
242
|
return item.linkPage.url
|
|
243
243
|
}
|
|
244
244
|
return null
|
|
245
245
|
},
|
|
246
246
|
// to determine active class on menu links and 'more' menu links
|
|
247
|
-
checkActive(item:
|
|
247
|
+
checkActive(item: NavLinkObject) {
|
|
248
248
|
const urlKey = this.getUrlKey(item)
|
|
249
249
|
if (urlKey && this.breadcrumb?.menu_links) {
|
|
250
250
|
// key into the breadcrumbs for each section
|
|
@@ -292,7 +292,7 @@ export default defineComponent({
|
|
|
292
292
|
this.$emit('openSearch')
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
|
-
getLinkText(item:
|
|
295
|
+
getLinkText(item: NavLinkObject) {
|
|
296
296
|
return mixinGetLinkText(item)
|
|
297
297
|
}
|
|
298
298
|
}
|
|
@@ -37,7 +37,7 @@ import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
|
|
|
37
37
|
import { mapStores } from 'pinia'
|
|
38
38
|
import { useThemeStore } from './../../store/theme'
|
|
39
39
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
40
|
-
import type {
|
|
40
|
+
import type { NavLinkObject } from './../../utils/mixins'
|
|
41
41
|
import type { PropType } from 'vue'
|
|
42
42
|
|
|
43
43
|
export default defineComponent({
|
|
@@ -47,15 +47,15 @@ export default defineComponent({
|
|
|
47
47
|
},
|
|
48
48
|
props: {
|
|
49
49
|
data: {
|
|
50
|
-
type: Array as PropType<
|
|
50
|
+
type: Array as PropType<NavLinkObject[]>,
|
|
51
51
|
required: false
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
methods: {
|
|
55
|
-
getRouterLink(link:
|
|
55
|
+
getRouterLink(link: NavLinkObject): string | undefined {
|
|
56
56
|
return mixinGetRouterLink(link)
|
|
57
57
|
},
|
|
58
|
-
getLinkText(link:
|
|
58
|
+
getLinkText(link: NavLinkObject): string | undefined {
|
|
59
59
|
return mixinGetLinkText(link)
|
|
60
60
|
}
|
|
61
61
|
},
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { MenuHighlightColumnData } from './../NavHighlight/NavHighlight.stories'
|
|
2
2
|
import { MenuLinkColumnWithHeaderData } from './../NavLinkList/NavLinkList.stories'
|
|
3
3
|
import NavDesktop from './NavDesktopEdu.vue'
|
|
4
|
-
import NavDesktopTopHat from './../NavDesktop/NavDesktopTopHat.vue'
|
|
5
|
-
import NavDesktopDropdown from './../NavDesktop/NavDesktopDropdown.vue'
|
|
6
|
-
import NavDesktopDropdownContent from './../NavDesktop/NavDesktopDropdownContent.vue'
|
|
7
|
-
import NavDesktopDropdownMore from './../NavDesktop/NavDesktopDropdownMore.vue'
|
|
8
4
|
|
|
9
5
|
export default {
|
|
10
6
|
title: 'Navigation/Headers/EDU/NavDesktopEdu',
|
|
11
7
|
component: NavDesktop,
|
|
12
|
-
tags: ['
|
|
8
|
+
tags: ['navigation'],
|
|
13
9
|
excludeStories: /.*Data$/,
|
|
14
10
|
parameters: {
|
|
15
11
|
layout: 'fullscreen'
|
|
@@ -127,7 +127,7 @@ import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
|
|
|
127
127
|
import IconExternal from './../Icons/IconExternal.vue'
|
|
128
128
|
import IconSearch from './../Icons/IconSearch.vue'
|
|
129
129
|
import IconClose from './../Icons/IconClose.vue'
|
|
130
|
-
import type {
|
|
130
|
+
import type { NavLinkObject, BreadcrumbObject } from './../../utils/mixins'
|
|
131
131
|
import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
|
|
132
132
|
import LogoWhite from '@explorer-1/common/src/images/svg/logo-tribrand-white.svg'
|
|
133
133
|
import type { BreadcrumbPathObject } from '../../interfaces'
|
|
@@ -242,14 +242,14 @@ export default defineComponent({
|
|
|
242
242
|
},
|
|
243
243
|
methods: {
|
|
244
244
|
// safe way to retrieve url key from nav items. used with breadcrumb to determine active class.
|
|
245
|
-
getUrlKey(item:
|
|
245
|
+
getUrlKey(item: NavLinkObject): string | null {
|
|
246
246
|
if (item.linkPage) {
|
|
247
247
|
return item.linkPage.url
|
|
248
248
|
}
|
|
249
249
|
return null
|
|
250
250
|
},
|
|
251
251
|
// to determine active class on menu links and 'more' menu links
|
|
252
|
-
checkActive(item:
|
|
252
|
+
checkActive(item: NavLinkObject) {
|
|
253
253
|
const urlKey = this.getUrlKey(item)
|
|
254
254
|
if (urlKey && this.breadcrumb && this.breadcrumb.menu_links) {
|
|
255
255
|
// key into the breadcrumbs for each section
|
|
@@ -297,7 +297,7 @@ export default defineComponent({
|
|
|
297
297
|
this.$emit('openSearch')
|
|
298
298
|
}
|
|
299
299
|
},
|
|
300
|
-
getLinkText(item:
|
|
300
|
+
getLinkText(item: NavLinkObject) {
|
|
301
301
|
return mixinGetLinkText(item)
|
|
302
302
|
}
|
|
303
303
|
}
|
|
@@ -4,14 +4,15 @@ import NavHeading from './NavHeading.vue'
|
|
|
4
4
|
export default {
|
|
5
5
|
title: 'Navigation/Elements/NavHeading',
|
|
6
6
|
component: NavHeading,
|
|
7
|
+
tags: ['navigation'],
|
|
7
8
|
decorators: [
|
|
8
9
|
() => ({
|
|
9
|
-
template: `<div id="
|
|
10
|
+
template: `<div id="storyRoot" class="p-8 bg-jpl-blue-darker edu:bg-primary-dark"><story/></div>`
|
|
10
11
|
})
|
|
11
12
|
],
|
|
12
13
|
parameters: {
|
|
13
14
|
html: {
|
|
14
|
-
root: '#
|
|
15
|
+
root: '#storyRoot'
|
|
15
16
|
},
|
|
16
17
|
viewMode: 'docs'
|
|
17
18
|
},
|
|
@@ -3,14 +3,15 @@ import NavHighlight from './NavHighlight.vue'
|
|
|
3
3
|
export default {
|
|
4
4
|
title: 'Navigation/Elements/NavHighlight',
|
|
5
5
|
component: NavHighlight,
|
|
6
|
+
tags: ['navigation'],
|
|
6
7
|
decorators: [
|
|
7
8
|
() => ({
|
|
8
|
-
template: `<div id="
|
|
9
|
+
template: `<div id="storyRoot" class="lg:BaseGrid container"><div class="col-span-5"><story/></div></div>`
|
|
9
10
|
})
|
|
10
11
|
],
|
|
11
12
|
parameters: {
|
|
12
13
|
html: {
|
|
13
|
-
root: '#
|
|
14
|
+
root: '#storyRoot'
|
|
14
15
|
},
|
|
15
16
|
viewMode: 'docs'
|
|
16
17
|
},
|
|
@@ -3,8 +3,11 @@ import NavJumpMenu from './NavJumpMenu.vue'
|
|
|
3
3
|
export default {
|
|
4
4
|
title: 'Navigation/Jump Menu',
|
|
5
5
|
component: NavJumpMenu,
|
|
6
|
-
tags: ['
|
|
7
|
-
excludeStories: /.*Data
|
|
6
|
+
tags: ['navigation'],
|
|
7
|
+
excludeStories: /.*Data$/,
|
|
8
|
+
decorators: () => ({
|
|
9
|
+
template: `<story style="visibility: visible!important;" />`
|
|
10
|
+
})
|
|
8
11
|
}
|
|
9
12
|
|
|
10
13
|
const JumpLinksData = [
|
|
@@ -3,14 +3,15 @@ import NavLinkList from './NavLinkList.vue'
|
|
|
3
3
|
export default {
|
|
4
4
|
title: 'Navigation/Elements/NavLinkList',
|
|
5
5
|
component: NavLinkList,
|
|
6
|
+
tags: ['navigation'],
|
|
6
7
|
decorators: [
|
|
7
8
|
() => ({
|
|
8
|
-
template: `<div id="
|
|
9
|
+
template: `<div id="storyRoot" class="bg-jpl-blue-darker p-8"><story/></div>`
|
|
9
10
|
})
|
|
10
11
|
],
|
|
11
12
|
parameters: {
|
|
12
13
|
html: {
|
|
13
|
-
root: '#
|
|
14
|
+
root: '#storyRoot'
|
|
14
15
|
}
|
|
15
16
|
},
|
|
16
17
|
excludeStories: /.*Data$/
|
|
@@ -32,7 +32,7 @@ import { defineComponent } from 'vue'
|
|
|
32
32
|
import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
|
|
33
33
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
34
34
|
import NavHeading from './../NavHeading/NavHeading.vue'
|
|
35
|
-
import type {
|
|
35
|
+
import type { NavLinkObject } from './../../utils/mixins'
|
|
36
36
|
export default defineComponent({
|
|
37
37
|
name: 'NavLinkList',
|
|
38
38
|
components: {
|
|
@@ -51,10 +51,10 @@ export default defineComponent({
|
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
53
|
methods: {
|
|
54
|
-
getRouterLink(link:
|
|
54
|
+
getRouterLink(link: NavLinkObject): string | undefined {
|
|
55
55
|
return mixinGetRouterLink(link)
|
|
56
56
|
},
|
|
57
|
-
getLinkText(link:
|
|
57
|
+
getLinkText(link: NavLinkObject): string | undefined {
|
|
58
58
|
return mixinGetLinkText(link)
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -6,12 +6,23 @@ import NavMobileLink from './NavMobileLink.vue'
|
|
|
6
6
|
export default {
|
|
7
7
|
title: 'Navigation/Headers/WWW/NavMobile',
|
|
8
8
|
component: NavMobile,
|
|
9
|
+
tags: ['navigation'],
|
|
9
10
|
excludeStories: /.*Data$/,
|
|
11
|
+
|
|
10
12
|
parameters: {
|
|
11
13
|
viewMode: 'canvas',
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
docs: {
|
|
15
|
+
description: {
|
|
16
|
+
component: 'View story directly for correct rendering.'
|
|
17
|
+
}
|
|
14
18
|
}
|
|
19
|
+
},
|
|
20
|
+
globals: {
|
|
21
|
+
viewport: {
|
|
22
|
+
value: 'mobile2',
|
|
23
|
+
isRotated: false
|
|
24
|
+
},
|
|
25
|
+
theme: 'defaultTheme'
|
|
15
26
|
}
|
|
16
27
|
}
|
|
17
28
|
|
|
@@ -140,7 +140,8 @@
|
|
|
140
140
|
</transition>
|
|
141
141
|
</template>
|
|
142
142
|
<script lang="ts">
|
|
143
|
-
|
|
143
|
+
/** Designed to be controlled by a wrapper component that passes state via props */
|
|
144
|
+
import { defineComponent, type PropType } from 'vue'
|
|
144
145
|
import { mapStores } from 'pinia'
|
|
145
146
|
import { eventBus } from './../../utils/eventBus'
|
|
146
147
|
import LogoColor from '@explorer-1/common/src/images/svg/logo-tribrand-color.svg'
|
|
@@ -156,9 +157,16 @@ import NavMobileDropdown from './../NavMobile/NavMobileDropdown.vue'
|
|
|
156
157
|
import NavMobileLink from './../NavMobile/NavMobileLink.vue'
|
|
157
158
|
import NavSocial from './../NavSocial/NavSocial.vue'
|
|
158
159
|
import NavSearchForm from './../NavSearchForm/NavSearchForm.vue'
|
|
159
|
-
import type {
|
|
160
|
+
import type { NavLinkObject, BreadcrumbObject } from '../../utils/mixins'
|
|
160
161
|
import { mixinIsActivePath } from '../../utils/mixins'
|
|
161
162
|
import type { BreadcrumbPathObject } from '../../interfaces'
|
|
163
|
+
import type { FooterNavItem } from './../TheFooter/TheFooter.vue'
|
|
164
|
+
|
|
165
|
+
type NavMobileData = {
|
|
166
|
+
mobileBreadcrumb: string
|
|
167
|
+
footerMoreFromJpl: NavLinkObject[]
|
|
168
|
+
footerNavigation: FooterNavItem[]
|
|
169
|
+
}
|
|
162
170
|
|
|
163
171
|
export default defineComponent({
|
|
164
172
|
name: 'NavMobile',
|
|
@@ -174,26 +182,31 @@ export default defineComponent({
|
|
|
174
182
|
IconExternal
|
|
175
183
|
},
|
|
176
184
|
props: {
|
|
185
|
+
/** Data object containing navigation data */
|
|
177
186
|
data: {
|
|
178
|
-
type: Object
|
|
187
|
+
type: Object as PropType<NavMobileData>,
|
|
179
188
|
required: false,
|
|
180
189
|
default: null
|
|
181
190
|
},
|
|
191
|
+
/** State: if the top bar should be visible. */
|
|
182
192
|
headerVisible: {
|
|
183
193
|
type: Boolean,
|
|
184
194
|
required: false,
|
|
185
195
|
default: false
|
|
186
196
|
},
|
|
197
|
+
/** State: if the user has scrolled up */
|
|
187
198
|
scrolledUp: {
|
|
188
199
|
type: Boolean,
|
|
189
200
|
required: false,
|
|
190
201
|
default: false
|
|
191
202
|
},
|
|
203
|
+
/** State: scrollTop value */
|
|
192
204
|
scrollTop: {
|
|
193
205
|
type: Number,
|
|
194
206
|
required: false,
|
|
195
207
|
default: 0
|
|
196
208
|
},
|
|
209
|
+
/** Secondary nav data */
|
|
197
210
|
staticSecondaryData: {
|
|
198
211
|
type: Array,
|
|
199
212
|
required: false,
|
|
@@ -273,14 +286,14 @@ export default defineComponent({
|
|
|
273
286
|
}
|
|
274
287
|
},
|
|
275
288
|
// safe way to retrieve url key from nav items. used with breadcrumb to determine active class.
|
|
276
|
-
getUrlKey(item:
|
|
289
|
+
getUrlKey(item: NavLinkObject): string | null {
|
|
277
290
|
if (item?.linkPage) {
|
|
278
291
|
return item.linkPage.url
|
|
279
292
|
}
|
|
280
293
|
return null
|
|
281
294
|
},
|
|
282
295
|
// to determine active class on menu links and 'more' menu links
|
|
283
|
-
checkActive(item:
|
|
296
|
+
checkActive(item: NavLinkObject) {
|
|
284
297
|
const urlKey = this.getUrlKey(item)
|
|
285
298
|
if (urlKey && this.breadcrumb?.menu_links) {
|
|
286
299
|
// key into the breadcrumbs for each section
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
import { defineComponent } from 'vue'
|
|
63
63
|
import { mapStores } from 'pinia'
|
|
64
64
|
import { useHeaderStore } from '../../store/header'
|
|
65
|
-
import type {
|
|
65
|
+
import type { NavLinkObject } from '../../utils/mixins'
|
|
66
66
|
import { eventBus } from './../../utils/eventBus'
|
|
67
67
|
import NavDropdownToggle from './../NavDropdownToggle/NavDropdownToggle.vue'
|
|
68
68
|
import NavMobileLink from './../NavMobile/NavMobileLink.vue'
|
|
@@ -140,7 +140,7 @@ export default defineComponent({
|
|
|
140
140
|
this.closeDropdown()
|
|
141
141
|
}
|
|
142
142
|
},
|
|
143
|
-
getLinkText(link:
|
|
143
|
+
getLinkText(link: NavLinkObject) {
|
|
144
144
|
return mixinGetLinkText(link)
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -4,18 +4,25 @@ import NavMobile from './NavMobile.vue'
|
|
|
4
4
|
export default {
|
|
5
5
|
title: 'Navigation/Headers/EDU/NavMobile',
|
|
6
6
|
component: NavMobile,
|
|
7
|
-
tags: ['
|
|
7
|
+
tags: ['navigation'],
|
|
8
8
|
excludeStories: /.*Data$/,
|
|
9
|
+
|
|
9
10
|
parameters: {
|
|
10
11
|
layout: 'fullscreen',
|
|
11
|
-
|
|
12
|
-
defaultViewport: 'mobile2'
|
|
13
|
-
},
|
|
12
|
+
|
|
14
13
|
docs: {
|
|
15
14
|
description: {
|
|
16
15
|
component: 'Doesn\'t look like EDU? Be sure to select "EDU Theme" in the toolbar dropdown.'
|
|
17
16
|
}
|
|
18
17
|
}
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
globals: {
|
|
21
|
+
viewport: {
|
|
22
|
+
value: 'mobile2',
|
|
23
|
+
isRotated: false
|
|
24
|
+
},
|
|
25
|
+
theme: 'ThemeEdu'
|
|
19
26
|
}
|
|
20
27
|
}
|
|
21
28
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { defineComponent } from 'vue'
|
|
17
17
|
import { mixinGetRouterLink, mixinGetLinkText } from './../../utils/mixins'
|
|
18
18
|
import type { PropType } from 'vue'
|
|
19
|
-
import type {
|
|
19
|
+
import type { NavLinkObject } from './../../utils/mixins'
|
|
20
20
|
import BaseLink from './../BaseLink/BaseLink.vue'
|
|
21
21
|
|
|
22
22
|
export default defineComponent({
|
|
@@ -26,7 +26,7 @@ export default defineComponent({
|
|
|
26
26
|
},
|
|
27
27
|
props: {
|
|
28
28
|
data: {
|
|
29
|
-
type: Object as PropType<
|
|
29
|
+
type: Object as PropType<NavLinkObject>,
|
|
30
30
|
required: false
|
|
31
31
|
},
|
|
32
32
|
// pass a custom title
|
|
@@ -45,10 +45,10 @@ export default defineComponent({
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
methods: {
|
|
48
|
-
getRouterLink(link:
|
|
48
|
+
getRouterLink(link: NavLinkObject): string | undefined {
|
|
49
49
|
return mixinGetRouterLink(link)
|
|
50
50
|
},
|
|
51
|
-
getLinkText(link:
|
|
51
|
+
getLinkText(link: NavLinkObject): string | undefined {
|
|
52
52
|
return mixinGetLinkText(link)
|
|
53
53
|
}
|
|
54
54
|
}
|