mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
Implement configuration of footer link list
This commit is contained in:
parent
0b1bdc495f
commit
59dd7ba104
@ -56,12 +56,12 @@ describe('PageFooter.vue', () => {
|
||||
beforeEach(async () => {
|
||||
const links = {
|
||||
...linksDefault,
|
||||
ORGANIZATION: null,
|
||||
IMPRINT: null,
|
||||
TERMS_AND_CONDITIONS: null,
|
||||
CODE_OF_CONDUCT: null,
|
||||
DATA_PRIVACY: null,
|
||||
FAQ: null,
|
||||
ORGANIZATION: { ...linksDefault.ORGANIZATION, externalLink: null },
|
||||
IMPRINT: { ...linksDefault.IMPRINT, externalLink: null },
|
||||
TERMS_AND_CONDITIONS: { ...linksDefault.TERMS_AND_CONDITIONS, externalLink: null },
|
||||
CODE_OF_CONDUCT: { ...linksDefault.CODE_OF_CONDUCT, externalLink: null },
|
||||
DATA_PRIVACY: { ...linksDefault.DATA_PRIVACY, externalLink: null },
|
||||
FAQ: { ...linksDefault.FAQ, externalLink: null },
|
||||
}
|
||||
wrapper = Wrapper()
|
||||
wrapper.setData({ links })
|
||||
@ -77,15 +77,15 @@ describe('PageFooter.vue', () => {
|
||||
})
|
||||
|
||||
it('renders TERMS_AND_CONDITIONS as nuxt-link', () => {
|
||||
expect(wrapper.find('span[data-test="terms-nuxt-link"]').exists()).toBeTruthy()
|
||||
expect(wrapper.find('span[data-test="terms-and-conditions-nuxt-link"]').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('renders CODE_OF_CONDUCT as nuxt-link', () => {
|
||||
expect(wrapper.find('span[data-test="code-nuxt-link"]').exists()).toBeTruthy()
|
||||
expect(wrapper.find('span[data-test="code-of-conduct-nuxt-link"]').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('renders DATA_PRIVACY as nuxt-link', () => {
|
||||
expect(wrapper.find('span[data-test="data-nuxt-link"]').exists()).toBeTruthy()
|
||||
expect(wrapper.find('span[data-test="data-privacy-nuxt-link"]').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('renders FAQ as nuxt-link', () => {
|
||||
@ -97,12 +97,12 @@ describe('PageFooter.vue', () => {
|
||||
beforeEach(async () => {
|
||||
const links = {
|
||||
...linksDefault,
|
||||
ORGANIZATION: 'https://ocelot.social',
|
||||
IMPRINT: 'https://ocelot.social/IMPRINT',
|
||||
TERMS_AND_CONDITIONS: 'https://ocelot.social/TERMS_AND_CONDITIONS',
|
||||
CODE_OF_CONDUCT: 'https://ocelot.social/CODE_OF_CONDUCT',
|
||||
DATA_PRIVACY: 'https://ocelot.social/DATA_PRIVACY',
|
||||
FAQ: 'https://ocelot.social/FAQ',
|
||||
ORGANIZATION: { ...linksDefault.ORGANIZATION, externalLink: 'https://ocelot.social' },
|
||||
IMPRINT: { ...linksDefault.IMPRINT, externalLink: 'https://ocelot.social/IMPRINT' },
|
||||
TERMS_AND_CONDITIONS: { ...linksDefault.TERMS_AND_CONDITIONS, externalLink: 'https://ocelot.social/TERMS_AND_CONDITIONS' },
|
||||
CODE_OF_CONDUCT: { ...linksDefault.CODE_OF_CONDUCT, externalLink: 'https://ocelot.social/CODE_OF_CONDUCT' },
|
||||
DATA_PRIVACY: { ...linksDefault.DATA_PRIVACY, externalLink: 'https://ocelot.social/DATA_PRIVACY' },
|
||||
FAQ: { ...linksDefault.FAQ, externalLink: 'https://ocelot.social/FAQ' },
|
||||
}
|
||||
wrapper = Wrapper()
|
||||
wrapper.setData({ links })
|
||||
|
||||
@ -1,69 +1,19 @@
|
||||
<template>
|
||||
<div id="footer" class="ds-footer">
|
||||
<!-- made with ❤️ -->
|
||||
<nuxt-link
|
||||
v-if="noLinkDefined(links.ORGANIZATION)"
|
||||
to="/organization"
|
||||
data-test="organization-nuxt-link"
|
||||
>
|
||||
{{ $t('site.made') }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="links.ORGANIZATION" target="_blank" data-test="organization-link">
|
||||
{{ $t('site.made') }}
|
||||
</a>
|
||||
<span>-</span>
|
||||
<!-- imprint -->
|
||||
<nuxt-link v-if="noLinkDefined(links.IMPRINT)" to="/imprint" data-test="imprint-nuxt-link">
|
||||
{{ $t('site.imprint') }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="links.IMPRINT" target="_blank">
|
||||
{{ $t('site.imprint') }}
|
||||
</a>
|
||||
<span>-</span>
|
||||
<!-- terms and conditions -->
|
||||
<nuxt-link
|
||||
v-if="noLinkDefined(links.TERMS_AND_CONDITIONS)"
|
||||
to="/terms-and-conditions"
|
||||
data-test="terms-nuxt-link"
|
||||
>
|
||||
{{ $t('site.termsAndConditions') }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="links.TERMS_AND_CONDITIONS" target="_blank">
|
||||
{{ $t('site.termsAndConditions') }}
|
||||
</a>
|
||||
<span>-</span>
|
||||
<!-- code of conduct -->
|
||||
<nuxt-link
|
||||
v-if="noLinkDefined(links.CODE_OF_CONDUCT)"
|
||||
to="/code-of-conduct"
|
||||
data-test="code-nuxt-link"
|
||||
>
|
||||
{{ $t('site.code-of-conduct') }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="links.CODE_OF_CONDUCT" target="_blank">
|
||||
{{ $t('site.code-of-conduct') }}
|
||||
</a>
|
||||
<span>-</span>
|
||||
<!-- data privacy -->
|
||||
<nuxt-link
|
||||
v-if="noLinkDefined(links.DATA_PRIVACY)"
|
||||
to="/data-privacy"
|
||||
data-test="data-nuxt-link"
|
||||
>
|
||||
{{ $t('site.data-privacy') }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="links.DATA_PRIVACY" target="_blank">
|
||||
{{ $t('site.data-privacy') }}
|
||||
</a>
|
||||
<span>-</span>
|
||||
<!-- faq -->
|
||||
<nuxt-link v-if="noLinkDefined(links.FAQ)" to="/faq" data-test="faq-nuxt-link">
|
||||
{{ $t('site.faq') }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="links.FAQ" target="_blank">
|
||||
{{ $t('site.faq') }}
|
||||
</a>
|
||||
<span>-</span>
|
||||
<!-- links to internal or external pages -->
|
||||
<span v-for="pageParams in links.FOOTER_LINK_LIST" :key="pageParams.name">
|
||||
<nuxt-link
|
||||
v-if="isInternalPage(pageParams)"
|
||||
:to="pageParams.internalLink"
|
||||
:data-test="pageParams.name + '-nuxt-link'"
|
||||
>
|
||||
{{ $t(pageParams.internalPage.footerIdent) }}
|
||||
</nuxt-link>
|
||||
<a v-else :href="pageParams.externalLink" target="_blank" :data-test="pageParams.name + '-link'">
|
||||
{{ $t(pageParams.internalPage.footerIdent) }}
|
||||
</a>
|
||||
<span class="division-line">-</span>
|
||||
</span>
|
||||
<!-- version -->
|
||||
<a
|
||||
href="https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/master/CHANGELOG.md"
|
||||
@ -76,16 +26,12 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { isInternalPage } from '~/components/utils/InternalPages.js'
|
||||
import links from '~/constants/links.js'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return { links, version: `v${this.$env.VERSION}` }
|
||||
},
|
||||
methods: {
|
||||
noLinkDefined(link) {
|
||||
return !link || link.length === 0
|
||||
},
|
||||
return { isInternalPage, links, version: `v${this.$env.VERSION}` }
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@ -101,7 +47,8 @@ export default {
|
||||
padding: 10px 10px;
|
||||
box-shadow: 0px -6px 12px -4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
span {
|
||||
.division-line {
|
||||
margin-left: 0.2rem;
|
||||
margin-right: 0.2rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
7
webapp/components/utils/InternalPages.js
Normal file
7
webapp/components/utils/InternalPages.js
Normal file
@ -0,0 +1,7 @@
|
||||
export function isInternalPage(pageParams) {
|
||||
return noStringDefined(pageParams.externalLink)
|
||||
}
|
||||
|
||||
export function noStringDefined(string) {
|
||||
return !string || string === 0
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user