Implement configuration of footer link list

This commit is contained in:
Wolfgang Huß 2021-07-29 16:54:52 +02:00
parent 0b1bdc495f
commit 59dd7ba104
3 changed files with 40 additions and 86 deletions

View File

@ -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 })

View File

@ -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>

View File

@ -0,0 +1,7 @@
export function isInternalPage(pageParams) {
return noStringDefined(pageParams.externalLink)
}
export function noStringDefined(string) {
return !string || string === 0
}