fix: arrows sometimes disappears

This commit is contained in:
Seth 2023-08-21 13:29:23 +08:00
parent dcd4fa8051
commit c2fd2d8e3d
5 changed files with 53 additions and 53 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "logseq-plugin-favorite-tree", "name": "logseq-plugin-favorite-tree",
"version": "1.0.0", "version": "1.0.1",
"main": "dist/index.html", "main": "dist/index.html",
"logseq": { "logseq": {
"id": "_sethyuan-logseq-favorite-tree", "id": "_sethyuan-logseq-favorite-tree",
@ -15,7 +15,7 @@
"@logseq/libs": "^0.0.15", "@logseq/libs": "^0.0.15",
"immer": "^9.0.19", "immer": "^9.0.19",
"logseq-l10n": "^0.2.0", "logseq-l10n": "^0.2.0",
"preact": "^10.14.1", "preact": "10.12.1",
"rambdax": "^10.0.0", "rambdax": "^10.0.0",
"reactutils": "^5.13.0" "reactutils": "^5.13.0"
}, },

24
pnpm-lock.yaml generated
View File

@ -15,8 +15,8 @@ dependencies:
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.0(@logseq/libs@0.0.15) version: 0.2.0(@logseq/libs@0.0.15)
preact: preact:
specifier: ^10.14.1 specifier: 10.12.1
version: 10.17.0 version: 10.12.1
rambdax: rambdax:
specifier: ^10.0.0 specifier: ^10.0.0
version: 10.0.0 version: 10.0.0
@ -27,7 +27,7 @@ dependencies:
devDependencies: devDependencies:
'@preact/preset-vite': '@preact/preset-vite':
specifier: ^2.5.0 specifier: ^2.5.0
version: 2.5.0(@babel/core@7.22.10)(preact@10.17.0)(vite@4.4.8) version: 2.5.0(@babel/core@7.22.10)(preact@10.12.1)(vite@4.4.8)
'@types/node': '@types/node':
specifier: ^18.15.11 specifier: ^18.15.11
version: 18.15.11 version: 18.15.11
@ -531,7 +531,7 @@ packages:
- supports-color - supports-color
dev: false dev: false
/@preact/preset-vite@2.5.0(@babel/core@7.22.10)(preact@10.17.0)(vite@4.4.8): /@preact/preset-vite@2.5.0(@babel/core@7.22.10)(preact@10.12.1)(vite@4.4.8):
resolution: {integrity: sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==} resolution: {integrity: sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==}
peerDependencies: peerDependencies:
'@babel/core': 7.x '@babel/core': 7.x
@ -540,7 +540,7 @@ packages:
'@babel/core': 7.22.10 '@babel/core': 7.22.10
'@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.10) '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.10)
'@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.10) '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.10)
'@prefresh/vite': 2.4.1(preact@10.17.0)(vite@4.4.8) '@prefresh/vite': 2.4.1(preact@10.12.1)(vite@4.4.8)
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.22.10) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.22.10)
debug: 4.3.4 debug: 4.3.4
@ -556,19 +556,19 @@ packages:
resolution: {integrity: sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==} resolution: {integrity: sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==}
dev: true dev: true
/@prefresh/core@1.5.1(preact@10.17.0): /@prefresh/core@1.5.1(preact@10.12.1):
resolution: {integrity: sha512-e0mB0Oxtog6ZpKPDBYbzFniFJDIktuKMzOHp7sguntU+ot0yi6dbhJRE9Css1qf0u16wdSZjpL2W2ODWuU05Cw==} resolution: {integrity: sha512-e0mB0Oxtog6ZpKPDBYbzFniFJDIktuKMzOHp7sguntU+ot0yi6dbhJRE9Css1qf0u16wdSZjpL2W2ODWuU05Cw==}
peerDependencies: peerDependencies:
preact: ^10.0.0 preact: ^10.0.0
dependencies: dependencies:
preact: 10.17.0 preact: 10.12.1
dev: true dev: true
/@prefresh/utils@1.2.0: /@prefresh/utils@1.2.0:
resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==}
dev: true dev: true
/@prefresh/vite@2.4.1(preact@10.17.0)(vite@4.4.8): /@prefresh/vite@2.4.1(preact@10.12.1)(vite@4.4.8):
resolution: {integrity: sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==} resolution: {integrity: sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==}
peerDependencies: peerDependencies:
preact: ^10.4.0 preact: ^10.4.0
@ -576,10 +576,10 @@ packages:
dependencies: dependencies:
'@babel/core': 7.22.10 '@babel/core': 7.22.10
'@prefresh/babel-plugin': 0.5.0 '@prefresh/babel-plugin': 0.5.0
'@prefresh/core': 1.5.1(preact@10.17.0) '@prefresh/core': 1.5.1(preact@10.12.1)
'@prefresh/utils': 1.2.0 '@prefresh/utils': 1.2.0
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
preact: 10.17.0 preact: 10.12.1
vite: 4.4.8(@types/node@18.15.11) vite: 4.4.8(@types/node@18.15.11)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -886,8 +886,8 @@ packages:
source-map-js: 1.0.2 source-map-js: 1.0.2
dev: true dev: true
/preact@10.17.0: /preact@10.12.1:
resolution: {integrity: sha512-SNsI8cbaCcUS5tbv9nlXuCfIXnJ9ysBMWk0WnB6UWwcVA3qZ2O6FxqDFECMAMttvLQcW/HaNZUe2BLidyvrVYw==} resolution: {integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==}
/process@0.11.10: /process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}

View File

@ -9,7 +9,7 @@ export default function FavArrow({
}) { }) {
return ( return (
<span <span
class={cls("kef-ae-fav-arrow", expanded && "kef-ae-fav-arrow-expanded")} class={cls("kef-ft-fav-arrow", expanded && "kef-ft-fav-arrow-expanded")}
onClick={onToggle} onClick={onToggle}
> >
<svg <svg

View File

@ -115,7 +115,7 @@ function SubList({ items, shown }: { items: any[]; shown: boolean }) {
return ( return (
<div <div
class={cls("kef-ae-fav-list", shown && "kef-ae-fav-expanded")} class={cls("kef-ft-fav-list", shown && "kef-ft-fav-expanded")}
onMouseDown={preventSideEffect} onMouseDown={preventSideEffect}
> >
{items.map((item) => { {items.map((item) => {
@ -126,17 +126,17 @@ function SubList({ items, shown }: { items: any[]; shown: boolean }) {
return ( return (
<div key={item.name}> <div key={item.name}>
<div class="kef-ae-fav-item" onClick={(e) => openPage(e, item)}> <div class="kef-ft-fav-item" onClick={(e) => openPage(e, item)}>
{item.filters ? ( {item.filters ? (
<div class="kef-ae-fav-item-icon"> <div class="kef-ft-fav-item-icon">
{logseq.settings?.filterIcon ?? "🔎"} {logseq.settings?.filterIcon ?? "🔎"}
</div> </div>
) : item.properties?.icon ? ( ) : item.properties?.icon ? (
<div class="kef-ae-fav-item-icon">{item.properties?.icon}</div> <div class="kef-ft-fav-item-icon">{item.properties?.icon}</div>
) : ( ) : (
<span class="ui__icon tie tie-page kef-ae-fav-item-icon"></span> <span class="ui__icon tie tie-page kef-ft-fav-item-icon"></span>
)} )}
<div class="kef-ae-fav-item-name" title={displayName}> <div class="kef-ft-fav-item-name" title={displayName}>
{item.filters && {item.filters &&
displayName.toLowerCase().startsWith(`${item.name}/`) displayName.toLowerCase().startsWith(`${item.name}/`)
? displayName.substring(item.name.length + 1) ? displayName.substring(item.name.length + 1)

View File

@ -62,9 +62,12 @@ async function main() {
const favoritesObserver = new MutationObserver(async (mutationList) => { const favoritesObserver = new MutationObserver(async (mutationList) => {
const mutation = mutationList[0] const mutation = mutationList[0]
if (mutation?.target == null) return
const target = mutation.target as HTMLElement
if ( if (
(mutation?.target as any).classList?.contains("bd") || target.classList?.contains("bd") ||
(mutation?.target as any).classList?.contains("favorites") target.classList?.contains("favorites")
) { ) {
await processFavorites() await processFavorites()
} }
@ -79,7 +82,7 @@ async function main() {
await processFavorites() await processFavorites()
const graph = (await logseq.App.getCurrentGraph())! const graph = (await logseq.App.getCurrentGraph())!
const storedWidth = parent.localStorage.getItem(`kef-ae-lsw-${graph.name}`) const storedWidth = parent.localStorage.getItem(`kef-ft-lsw-${graph.name}`)
if (storedWidth) { if (storedWidth) {
parent.document.documentElement.style.setProperty( parent.document.documentElement.style.setProperty(
"--ls-left-sidebar-width", "--ls-left-sidebar-width",
@ -88,13 +91,13 @@ async function main() {
} }
logseq.provideUI({ logseq.provideUI({
key: "kef-ae-drag-handle", key: "kef-ft-drag-handle",
path: "#left-sidebar", path: "#left-sidebar",
template: `<div class="kef-ae-drag-handle"></div>`, template: `<div class="kef-ft-drag-handle"></div>`,
}) })
setTimeout(() => { setTimeout(() => {
dragHandle = parent.document.querySelector( dragHandle = parent.document.querySelector(
"#left-sidebar .kef-ae-drag-handle", "#left-sidebar .kef-ft-drag-handle",
)! )!
dragHandle.addEventListener("pointerdown", onPointerDown) dragHandle.addEventListener("pointerdown", onPointerDown)
}, 0) }, 0)
@ -110,34 +113,34 @@ async function main() {
function provideStyles() { function provideStyles() {
logseq.provideStyle({ logseq.provideStyle({
key: "kef-ae-fav", key: "kef-ft-fav",
style: ` style: `
.kef-ae-fav-list { .kef-ft-fav-list {
padding-left: 24px; padding-left: 24px;
display: none; display: none;
} }
.kef-ae-fav-expanded { .kef-ft-fav-expanded {
display: block; display: block;
} }
.kef-ae-fav-arrow { .kef-ft-fav-arrow {
flex: 0 0 auto; flex: 0 0 auto;
padding: 4px 20px 4px 10px; padding: 4px 20px 4px 10px;
margin-right: -20px; margin-right: -20px;
opacity: ${logseq.settings?.hoverArrow ? 0 : 1}; opacity: ${logseq.settings?.hoverArrow ? 0 : 1};
transition: opacity 0.3s; transition: opacity 0.3s;
} }
:is(.favorite-item, .recent-item):hover > a > .kef-ae-fav-arrow, :is(.favorite-item, .recent-item):hover > a > .kef-ft-fav-arrow,
.kef-ae-fav-item:hover > .kef-ae-fav-arrow { .kef-ft-fav-item:hover > .kef-ft-fav-arrow {
opacity: 1; opacity: 1;
} }
.kef-ae-fav-arrow svg { .kef-ft-fav-arrow svg {
transform: rotate(90deg) scale(0.8); transform: rotate(90deg) scale(0.8);
transition: transform 0.04s linear; transition: transform 0.04s linear;
} }
.kef-ae-fav-arrow-expanded svg { .kef-ft-fav-arrow-expanded svg {
transform: rotate(0deg) scale(0.8); transform: rotate(0deg) scale(0.8);
} }
.kef-ae-fav-item { .kef-ft-fav-item {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0 24px; padding: 0 24px;
@ -145,23 +148,23 @@ function provideStyles() {
color: var(--ls-header-button-background); color: var(--ls-header-button-background);
cursor: pointer; cursor: pointer;
} }
.kef-ae-fav-item:hover { .kef-ft-fav-item:hover {
background-color: var(--ls-quaternary-background-color); background-color: var(--ls-quaternary-background-color);
} }
.kef-ae-fav-item-icon { .kef-ft-fav-item-icon {
flex: 0 0 auto; flex: 0 0 auto;
margin-right: 5px; margin-right: 5px;
width: 16px; width: 16px;
text-align: center; text-align: center;
} }
.kef-ae-fav-item-name { .kef-ft-fav-item-name {
flex: 1 1 auto; flex: 1 1 auto;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.kef-ae-drag-handle { .kef-ft-drag-handle {
content: ""; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
@ -170,15 +173,15 @@ function provideStyles() {
width: 4px; width: 4px;
z-index: 10; z-index: 10;
} }
.kef-ae-drag-handle:hover, .kef-ft-drag-handle:hover,
.kef-ae-dragging .kef-ae-drag-handle { .kef-ft-dragging .kef-ft-drag-handle {
cursor: col-resize; cursor: col-resize;
background: var(--ls-active-primary-color); background: var(--ls-active-primary-color);
} }
.kef-ae-dragging { .kef-ft-dragging {
cursor: col-resize; cursor: col-resize;
} }
.kef-ae-dragging :is(#left-sidebar, #main-content-container) { .kef-ft-dragging :is(#left-sidebar, #main-content-container) {
pointer-events: none; pointer-events: none;
} }
`, `,
@ -198,11 +201,10 @@ async function processFavorites() {
} }
async function injectList(el: HTMLElement, items: any[]) { async function injectList(el: HTMLElement, items: any[]) {
const isFav = el.classList.contains("favorite-item") const key = `kef-ft-f-${await hash(el.dataset.ref!)}`
const key = `kef-ae-${isFav ? "f" : "r"}-${await hash(el.dataset.ref!)}`
const arrowContainer = el.querySelector("a")! const arrowContainer = el.querySelector("a")!
const arrow = arrowContainer.querySelector(".kef-ae-fav-arrow") const arrow = arrowContainer.querySelector(".kef-ft-fav-arrow")
if (arrow != null) { if (arrow != null) {
arrow.remove() arrow.remove()
} }
@ -210,9 +212,7 @@ async function injectList(el: HTMLElement, items: any[]) {
if (parent.document.getElementById(key) == null) { if (parent.document.getElementById(key) == null) {
logseq.provideUI({ logseq.provideUI({
key, key,
path: `.${isFav ? "favorite" : "recent"}-item[data-ref="${ path: `.favorite-item[data-ref="${el.dataset.ref}"]`,
el.dataset.ref
}"]`,
template: `<div id="${key}"></div>`, template: `<div id="${key}"></div>`,
}) })
} }
@ -268,7 +268,7 @@ function needsProcessing(txData: any[]) {
function onPointerDown(e: Event) { function onPointerDown(e: Event) {
e.preventDefault() e.preventDefault()
parent.document.documentElement.classList.add("kef-ae-dragging") parent.document.documentElement.classList.add("kef-ft-dragging")
parent.document.addEventListener("pointermove", onPointerMove) parent.document.addEventListener("pointermove", onPointerMove)
parent.document.addEventListener("pointerup", onPointerUp) parent.document.addEventListener("pointerup", onPointerUp)
parent.document.addEventListener("pointercancel", onPointerUp) parent.document.addEventListener("pointercancel", onPointerUp)
@ -279,7 +279,7 @@ function onPointerUp(e: MouseEvent) {
parent.document.removeEventListener("pointermove", onPointerMove) parent.document.removeEventListener("pointermove", onPointerMove)
parent.document.removeEventListener("pointerup", onPointerUp) parent.document.removeEventListener("pointerup", onPointerUp)
parent.document.removeEventListener("pointercancel", onPointerUp) parent.document.removeEventListener("pointercancel", onPointerUp)
parent.document.documentElement.classList.remove("kef-ae-dragging") parent.document.documentElement.classList.remove("kef-ft-dragging")
const pos = e.clientX const pos = e.clientX
parent.document.documentElement.style.setProperty( parent.document.documentElement.style.setProperty(
@ -288,7 +288,7 @@ function onPointerUp(e: MouseEvent) {
) )
;(async () => { ;(async () => {
const graph = (await logseq.App.getCurrentGraph())! const graph = (await logseq.App.getCurrentGraph())!
parent.localStorage.setItem(`kef-ae-lsw-${graph.name}`, `${pos}`) parent.localStorage.setItem(`kef-ft-lsw-${graph.name}`, `${pos}`)
})() })()
} }