content/frontend/default/components/docs_badges.vue (69 lines of code) (raw):
<script>
import { GlBadge, GlTooltipDirective, GlLink } from '@gitlab/ui';
import { badgeIndex } from '../../../_data/badges.yaml';
export default {
components: {
GlBadge,
GlLink,
},
directives: {
GlTooltip: GlTooltipDirective,
},
props: {
badgesData: {
type: Array,
required: true,
},
isHeading: {
type: Boolean,
required: true,
},
},
data() {
return {
badges: [],
};
},
created() {
// Pull in more badge info from the badges.yaml file
this.badgesData.forEach((badge) => {
this.badges.push(badgeIndex.find((obj) => obj.id.includes(badge.text)));
});
},
methods: {
getBadgeVariant(type) {
const variantMapping = {
tier: 'tier',
offering: 'info',
status: 'neutral',
content: 'warning',
};
return variantMapping[type] || '';
},
getBadgeSize(isHeading) {
return isHeading ? 'md' : 'sm';
},
},
};
</script>
<template>
<span :class="`docs-badges-wrapper badge-heading-${isHeading} gl-ml-2`">
<gl-badge
v-for="badge in badges"
:key="badge"
v-gl-tooltip.top
:variant="getBadgeVariant(badge.type)"
:title="badge.text"
class="gl-mr-2"
:size="getBadgeSize(isHeading)"
>
<component
:is="badge.link ? 'GlLink' : 'span'"
:href="badge.link"
class="docs-badge gl-font-sm"
>
{{ badge.label }}
</component>
</gl-badge>
</span>
</template>