Update tooltip (#187)
* Show article tooltip onClick * remove unused imports * Resolve conversations
This commit is contained in:
parent
a6cae1abb7
commit
f0bb04b33d
|
@ -554,9 +554,26 @@ a[data-toggle='tooltip'] {
|
||||||
}
|
}
|
||||||
|
|
||||||
.tooltip {
|
.tooltip {
|
||||||
|
@include font-size(1.4rem);
|
||||||
|
|
||||||
|
position: relative;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
background: #141414;
|
border-radius: 4px;
|
||||||
font-size: 12px;
|
|
||||||
color: white;
|
|
||||||
max-width: 400px;
|
max-width: 400px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: var(--black-500);
|
||||||
|
color: var(--default-color-invert);
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
bottom: -4px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 4px 4px 0 4px;
|
||||||
|
border-color: var(--black-500) transparent transparent transparent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { createEffect, For, createMemo, onMount, Show, createSignal } from 'solid-js'
|
import { createEffect, For, createMemo, onMount, Show, createSignal, onCleanup } from 'solid-js'
|
||||||
import { Title } from '@solidjs/meta'
|
import { Title } from '@solidjs/meta'
|
||||||
import { clsx } from 'clsx'
|
import { clsx } from 'clsx'
|
||||||
import { getPagePath } from '@nanostores/router'
|
import { getPagePath } from '@nanostores/router'
|
||||||
|
@ -128,23 +128,66 @@ export const FullArticle = (props: Props) => {
|
||||||
setIsReactionsLoaded(true)
|
setIsReactionsLoaded(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const clickHandlers = []
|
||||||
|
const documentClickHandlers = []
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
const tooltipElements: NodeListOf<HTMLLinkElement> =
|
const tooltipElements: NodeListOf<HTMLLinkElement> =
|
||||||
document.querySelectorAll('[data-toggle="tooltip"]')
|
document.querySelectorAll('[data-toggle="tooltip"]')
|
||||||
if (!tooltipElements) return
|
if (!tooltipElements) return
|
||||||
|
|
||||||
tooltipElements.forEach((element) => {
|
tooltipElements.forEach((element) => {
|
||||||
const tooltip = document.createElement('div')
|
const tooltip = document.createElement('div')
|
||||||
tooltip.classList.add(styles.tooltip)
|
tooltip.classList.add(styles.tooltip)
|
||||||
tooltip.textContent = element.dataset.originalTitle
|
tooltip.textContent = element.dataset.originalTitle
|
||||||
document.body.appendChild(tooltip)
|
document.body.appendChild(tooltip)
|
||||||
createPopper(element, tooltip, { placement: 'top' })
|
element.setAttribute('href', 'javascript: void(0);')
|
||||||
|
createPopper(element, tooltip, {
|
||||||
|
placement: 'top',
|
||||||
|
modifiers: [
|
||||||
|
{
|
||||||
|
name: 'offset',
|
||||||
|
options: {
|
||||||
|
offset: [0, 8]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
tooltip.style.visibility = 'hidden'
|
tooltip.style.visibility = 'hidden'
|
||||||
element.addEventListener('mouseenter', () => {
|
let isTooltipVisible = false
|
||||||
tooltip.style.visibility = 'visible'
|
|
||||||
})
|
const handleClick = () => {
|
||||||
element.addEventListener('mouseleave', () => {
|
if (isTooltipVisible) {
|
||||||
tooltip.style.visibility = 'hidden'
|
tooltip.style.visibility = 'hidden'
|
||||||
})
|
isTooltipVisible = false
|
||||||
|
} else {
|
||||||
|
tooltip.style.visibility = 'visible'
|
||||||
|
isTooltipVisible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDocumentClick = (e) => {
|
||||||
|
if (isTooltipVisible && e.target !== element && e.target !== tooltip) {
|
||||||
|
tooltip.style.visibility = 'hidden'
|
||||||
|
isTooltipVisible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
element.addEventListener('click', handleClick)
|
||||||
|
document.addEventListener('click', handleDocumentClick)
|
||||||
|
|
||||||
|
clickHandlers.push({ element, handler: handleClick })
|
||||||
|
documentClickHandlers.push(handleDocumentClick)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
onCleanup(() => {
|
||||||
|
clickHandlers.forEach(({ element, handler }) => {
|
||||||
|
element.removeEventListener('click', handler)
|
||||||
|
})
|
||||||
|
documentClickHandlers.forEach((handler) => {
|
||||||
|
document.removeEventListener('click', handler)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user