bv-popover-template.js 1.65 KB
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

export var BVPopoverTemplate = /*#__PURE__*/extend({
  name: NAME_POPOVER_TEMPLATE,
  extends: BVTooltipTemplate,
  computed: {
    templateType: function templateType() {
      return 'popover';
    }
  },
  methods: {
    renderTemplate: function renderTemplate(h) {
      var title = this.title,
          content = this.content; // Title and content could be a scoped slot function

      var $title = isFunction(title) ? title({}) : title;
      var $content = isFunction(content) ? content({}) : content; // Directive usage only

      var titleDomProps = this.html && !isFunction(title) ? {
        innerHTML: title
      } : {};
      var 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])]);
    }
  }
});