22import { Directive , DirectiveBinding } from 'vue'
33import { Tooltip } from 'bootstrap'
44
5- const resolveTrigger = ( modifiers : DirectiveBinding [ 'modifiers' ] ) : Tooltip . Options [ 'trigger' ] => {
5+ const resolveTrigger = (
6+ modifiers : DirectiveBinding [ 'modifiers' ] ,
7+ value : DirectiveBinding [ 'value' ]
8+ ) : Tooltip . Options [ 'trigger' ] => {
9+ if ( value ?. trigger ) {
10+ return value . trigger
11+ }
12+
613 if ( modifiers . manual ) {
714 return 'manual'
815 }
@@ -29,8 +36,13 @@ const resolveTrigger = (modifiers: DirectiveBinding['modifiers']): Tooltip.Optio
2936}
3037
3138const resolvePlacement = (
32- modifiers : DirectiveBinding [ 'modifiers' ]
39+ modifiers : DirectiveBinding [ 'modifiers' ] ,
40+ value : DirectiveBinding [ 'value' ]
3341) : Tooltip . Options [ 'placement' ] => {
42+ if ( value ?. placement ) {
43+ return value . placement
44+ }
45+
3446 if ( modifiers . left ) {
3547 return 'left'
3648 }
@@ -54,16 +66,22 @@ const resolveDelay = (values: DirectiveBinding['value']): Tooltip.Options['delay
5466 return 0
5567}
5668
69+ const resolveTitle = ( values : DirectiveBinding [ 'value' ] ) : Tooltip . Options [ 'title' ] =>
70+ typeof values === 'object' ? values ?. title : values
71+
5772/**
5873 * @external
5974 */
6075const BTooltip : Directive < HTMLElement > = {
6176 beforeMount ( el , binding ) {
6277 el . setAttribute ( 'data-bs-toggle' , 'tooltip' )
78+ if ( ! el . getAttribute ( 'title' ) ) {
79+ el . setAttribute ( 'title' , resolveTitle ( binding . value ) . toString ( ) )
80+ }
6381
6482 const isHtml = / < ( " [ ^ " ] * " | ' [ ^ ' ] * ' | [ ^ ' " > ] ) * > / . test ( el . title )
65- const trigger = resolveTrigger ( binding . modifiers )
66- const placement = resolvePlacement ( binding . modifiers )
83+ const trigger = resolveTrigger ( binding . modifiers , binding . value )
84+ const placement = resolvePlacement ( binding . modifiers , binding . value )
6785 const delay = resolveDelay ( binding . value )
6886 const title = el . getAttribute ( 'title' )
6987
@@ -78,7 +96,11 @@ const BTooltip: Directive<HTMLElement> = {
7896 el . setAttribute ( 'data-bs-original-title' , title )
7997 }
8098 } ,
81- updated ( el ) {
99+ updated ( el , binding ) {
100+ if ( ! el . getAttribute ( 'title' ) ) {
101+ el . setAttribute ( 'title' , resolveTitle ( binding . value ) . toString ( ) )
102+ }
103+
82104 const title = el . getAttribute ( 'title' )
83105 const originalTitle = el . getAttribute ( 'data-bs-original-title' )
84106 const instance = Tooltip . getInstance ( el )
0 commit comments