@gitlab/ui
Version:
GitLab UI Components
53 lines (48 loc) • 1.66 kB
JavaScript
import { extend } from '../../../vue';
import { NAME_POPOVER_TEMPLATE } from '../../../constants/components';
import { isFunction, isUndefinedOrNull } from '../../../utils/inspect';
import { BVTooltipTemplate } from '../../tooltip/helpers/bv-tooltip-template';
// @vue/component
const BVPopoverTemplate = /*#__PURE__*/extend({
name: NAME_POPOVER_TEMPLATE,
extends: BVTooltipTemplate,
computed: {
templateType() {
return 'popover';
}
},
methods: {
renderTemplate(h) {
const {
title,
content
} = this;
// Title and content could be a scoped slot function
const $title = isFunction(title) ? title({}) : title;
const $content = isFunction(content) ? content({}) : content;
// Directive usage only
const titleDomProps = this.html && !isFunction(title) ? {
innerHTML: title
} : {};
const contentDomProps = this.html && !isFunction(content) ? {
innerHTML: content
} : {};
return h('div', {
staticClass: 'popover b-popover',
class: this.templateClasses,
attrs: this.templateAttributes,
on: this.templateListeners
}, [h('div', {
staticClass: 'arrow',
ref: 'arrow'
}), isUndefinedOrNull($title) || $title === '' ? /* istanbul ignore next */h() : h('h3', {
staticClass: 'popover-header',
domProps: titleDomProps
}, [$title]), isUndefinedOrNull($content) || $content === '' ? /* istanbul ignore next */h() : h('div', {
staticClass: 'popover-body',
domProps: contentDomProps
}, [$content])]);
}
}
});
export { BVPopoverTemplate };