From 4c4de2990b808a90c1f43d62ce2b1e47ab2c3d88 Mon Sep 17 00:00:00 2001 From: chrox Date: Thu, 14 Nov 2024 17:48:08 +0100 Subject: [PATCH] Various fixes on Webview2 --- apps/readest-app/package.json | 6 +- apps/readest-app/src-tauri/tauri.conf.json | 2 +- .../app/library/components/LibraryHeader.tsx | 2 +- apps/readest-app/src/app/library/page.tsx | 4 +- .../app/reader/components/sidebar/Content.tsx | 77 +++++++++++++------ .../reader/components/sidebar/SearchBar.tsx | 2 +- .../src/components/WindowButtons.tsx | 8 +- apps/readest-app/src/store/readerStore.ts | 4 +- apps/readest-app/src/styles/globals.css | 9 +++ apps/readest-app/src/utils/toc.ts | 4 +- 10 files changed, 78 insertions(+), 40 deletions(-) diff --git a/apps/readest-app/package.json b/apps/readest-app/package.json index a832ca25..e6831e85 100644 --- a/apps/readest-app/package.json +++ b/apps/readest-app/package.json @@ -13,7 +13,11 @@ "copy-pdfjs-fonts": "dotenv -- cross-var cpx \"%PDFJS_FONTS_PATH%/{cmaps,standard_fonts}/*\" ./public/vendor/pdfjs", "copy-pdfjs-css": "dotenv -- cross-var cpx \"%PDFJS_STYLE_PATH%/{annotation_layer_builder,text_layer_builder}.css\" ./public/vendor/pdfjs", "copy-pdfjs": "pnpm copy-pdfjs-js && pnpm copy-pdfjs-fonts && pnpm copy-pdfjs-css", - "setup-pdfjs": "pnpm prepare-public-vendor && pnpm copy-pdfjs" + "setup-pdfjs": "pnpm prepare-public-vendor && pnpm copy-pdfjs", + "build-win-x64": "tauri build --target i686-pc-windows-msvc --bundles nsis", + "build-win-arm64": "tauri build --target aarch64-pc-windows-msvc --bundles nsis", + "build-linux-x64": "tauri build --target x86_64-unknown-linux-gnu --bundles appimage", + "build-macos-universial": "tauri build -t universal-apple-darwin --bundles dmg" }, "dependencies": { "@tauri-apps/api": "2.1.1", diff --git a/apps/readest-app/src-tauri/tauri.conf.json b/apps/readest-app/src-tauri/tauri.conf.json index b338fd58..724e0bc0 100644 --- a/apps/readest-app/src-tauri/tauri.conf.json +++ b/apps/readest-app/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "Readest", - "version": "0.6.0", + "version": "0.6.2", "identifier": "com.bilingify.digest", "build": { "frontendDist": "../out", diff --git a/apps/readest-app/src/app/library/components/LibraryHeader.tsx b/apps/readest-app/src/app/library/components/LibraryHeader.tsx index af1017e2..fbc14d36 100644 --- a/apps/readest-app/src/app/library/components/LibraryHeader.tsx +++ b/apps/readest-app/src/app/library/components/LibraryHeader.tsx @@ -56,7 +56,7 @@ const LibraryHeader: React.FC = ({ isTrafficLightVisible ? 'pl-16' : 'pl-2', )} > -
+
diff --git a/apps/readest-app/src/app/library/page.tsx b/apps/readest-app/src/app/library/page.tsx index 41bc990b..cfd72cb4 100644 --- a/apps/readest-app/src/app/library/page.tsx +++ b/apps/readest-app/src/app/library/page.tsx @@ -77,13 +77,13 @@ const LibraryPage = () => { } return ( -
+
-
+
{loading || libraryBooks.length > 0 ? (
diff --git a/apps/readest-app/src/app/reader/components/sidebar/Content.tsx b/apps/readest-app/src/app/reader/components/sidebar/Content.tsx index bf017162..59ef290c 100644 --- a/apps/readest-app/src/app/reader/components/sidebar/Content.tsx +++ b/apps/readest-app/src/app/reader/components/sidebar/Content.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import React, { useEffect, useRef } from 'react'; import { BookDoc } from '@/libs/document'; import TOCView from './TOCView'; @@ -11,30 +11,59 @@ const SidebarContent: React.FC<{ bookDoc: BookDoc; sideBarBookKey: string; onTabChange: (tab: string) => void; -}> = ({ activeTab, bookDoc, sideBarBookKey, onTabChange }) => ( - <> -
-
- {activeTab === 'toc' && bookDoc.toc && ( - - )} - {activeTab === 'annotations' && ( - - )} - {activeTab === 'bookmarks' && ( - +}> = ({ activeTab, bookDoc, sideBarBookKey, onTabChange }) => { + const scrollContainerRef = useRef(null); + + useEffect(() => { + const container = scrollContainerRef.current; + if (!container) return; + + let scrollTimeout: ReturnType; + const showScrollbar = () => { + container.classList.remove('hidden-scrollbar'); + }; + const hideScrollbar = () => { + container.classList.add('hidden-scrollbar'); + }; + + hideScrollbar(); + const handleScroll = () => { + showScrollbar(); + clearTimeout(scrollTimeout); + scrollTimeout = setTimeout(hideScrollbar, 2000); + }; + container.addEventListener('scroll', handleScroll); + return () => { + container.removeEventListener('scroll', handleScroll); + clearTimeout(scrollTimeout); + }; + }, []); + + return ( + <> +
+
+ {activeTab === 'toc' && bookDoc.toc && ( + + )} + {activeTab === 'annotations' && ( + + )} + {activeTab === 'bookmarks' && ( + + )} +
-
-
- -
- -); +
+ +
+ + ); +}; export default SidebarContent; diff --git a/apps/readest-app/src/app/reader/components/sidebar/SearchBar.tsx b/apps/readest-app/src/app/reader/components/sidebar/SearchBar.tsx index 1da261e4..c4e4a254 100644 --- a/apps/readest-app/src/app/reader/components/sidebar/SearchBar.tsx +++ b/apps/readest-app/src/app/reader/components/sidebar/SearchBar.tsx @@ -31,7 +31,7 @@ const SearchBar: React.FC = ({ const queuedSearchTerm = useRef(''); const isSearchPending = useRef(false); - const searchTimeout = useRef(null); + const searchTimeout = useRef | null>(null); useEffect(() => { handleSearchTermChange(searchTerm); diff --git a/apps/readest-app/src/components/WindowButtons.tsx b/apps/readest-app/src/components/WindowButtons.tsx index aeffad31..1a7c2f54 100644 --- a/apps/readest-app/src/components/WindowButtons.tsx +++ b/apps/readest-app/src/components/WindowButtons.tsx @@ -27,11 +27,7 @@ const WindowButtons: React.FC = ({ const handleMouseDown = async (e: MouseEvent) => { const target = e.target as HTMLElement; - if ( - target.closest('#titlebar-minimize') || - target.closest('#titlebar-maximize') || - target.closest('#titlebar-close') - ) { + if (target !== e.currentTarget) { return; } @@ -80,7 +76,7 @@ const WindowButtons: React.FC = ({
((set, get) => ({ console.log('Loading book', key); const { book: loadedBookDoc } = await new DocumentLoader(file).open(); const bookDoc = loadedBookDoc as BookDoc; - updateTocID(bookDoc.toc); + if (bookDoc.toc) { + updateTocID(bookDoc.toc); + } set((state) => ({ booksData: { ...state.booksData, diff --git a/apps/readest-app/src/styles/globals.css b/apps/readest-app/src/styles/globals.css index abca7faf..82109af6 100644 --- a/apps/readest-app/src/styles/globals.css +++ b/apps/readest-app/src/styles/globals.css @@ -175,3 +175,12 @@ foliate-view { max-height: 48px; visibility: visible; } + +.scroll-container { + overflow-y: scroll; + scrollbar-width: thin; +} + +.scroll-container.hidden-scrollbar { + scrollbar-width: none; +} diff --git a/apps/readest-app/src/utils/toc.ts b/apps/readest-app/src/utils/toc.ts index 6864b94d..8979eadc 100644 --- a/apps/readest-app/src/utils/toc.ts +++ b/apps/readest-app/src/utils/toc.ts @@ -17,9 +17,7 @@ export const findParentPath = (toc: TOCItem[], href: string): TOCItem[] => { export const updateTocID = (items: TOCItem[], index = 0): number => { items.forEach((item) => { - if (item.id === undefined) { - item.id = index++; - } + item.id ??= index++; if (item.subitems) { index = updateTocID(item.subitems, index); }