2022-07-19 01:33:34 +03:00
import tippy from 'tippy.js' ;
2022-08-09 15:37:34 +03:00
export function createTippy ( target , opts = { } ) {
const instance = tippy ( target , {
2022-07-19 01:33:34 +03:00
appendTo : document . body ,
2022-09-03 01:06:54 +03:00
placement : target . getAttribute ( 'data-placement' ) || 'top-start' ,
2022-07-19 01:33:34 +03:00
animation : false ,
2022-08-23 23:17:42 +03:00
allowHTML : false ,
2022-08-09 15:37:34 +03:00
maxWidth : 500 , // increase over default 350px
2022-07-19 01:33:34 +03:00
arrow : ` <svg width="16" height="7"><path d="m0 7 8-7 8 7Z" class="tippy-svg-arrow-outer"/><path d="m0 8 8-7 8 7Z" class="tippy-svg-arrow-inner"/></svg> ` ,
2022-08-09 15:37:34 +03:00
... ( opts ? . role && { theme : opts . role } ) ,
2022-07-19 01:33:34 +03:00
... opts ,
} ) ;
2022-08-09 15:37:34 +03:00
2022-08-10 17:47:28 +03:00
// for popups where content refers to a DOM element, we use the 'tippy-target' class
// to initially hide the content, now we can remove it as the content has been removed
// from the DOM by tippy
2022-08-09 15:37:34 +03:00
if ( opts . content instanceof Element ) {
2022-08-10 17:47:28 +03:00
opts . content . classList . remove ( 'tippy-target' ) ;
2022-08-09 15:37:34 +03:00
}
return instance ;
}
export function initTooltip ( el , props = { } ) {
const content = el . getAttribute ( 'data-content' ) || props . content ;
if ( ! content ) return null ;
return createTippy ( el , {
content ,
delay : 100 ,
role : 'tooltip' ,
... props ,
} ) ;
}
export function showTemporaryTooltip ( target , content ) {
let tippy , oldContent ;
if ( target . _tippy ) {
tippy = target . _tippy ;
oldContent = tippy . props . content ;
} else {
tippy = initTooltip ( target , { content } ) ;
}
tippy . setContent ( content ) ;
tippy . show ( ) ;
tippy . setProps ( {
onHidden : ( tippy ) => {
if ( oldContent ) {
tippy . setContent ( oldContent ) ;
} else {
tippy . destroy ( ) ;
}
tippy . setProps ( { onHidden : undefined } ) ;
} ,
} ) ;
2022-07-19 01:33:34 +03:00
}