diff --git a/package.json b/package.json index d1354c2..50f8b75 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dev": "npm run build:ts:dev && npm run build:css" }, "dependencies": { - "@bookhoard/foliate-js": "git+https://github.com/john-okeefe/foliate-js.git#86e234d", + "@bookhoard/foliate-js": "git+https://github.com/john-okeefe/foliate-js.git#1c812e8", "alpinejs": "^3.15.8", "chart.js": "^4.5.1", "highlight.js": "^11.11.1", diff --git a/templates/reader.templ b/templates/reader.templ index 1e22701..a53725c 100644 --- a/templates/reader.templ +++ b/templates/reader.templ @@ -243,17 +243,6 @@ templ ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) { โ† Back -

{ metadata.Title }

@@ -266,52 +255,70 @@ templ ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) {
-
- - - - -
-
- - if progress.FormatGroup == "reflowable" { - if metadata.EstimatedPages > 0 { - { fmt.Sprintf("%.0f%% ยท Page %d/%d", progress.Percentage, progress.CurrentPage, metadata.EstimatedPages) } +
+
+ + + + + +
+
+
+
+ + if progress.FormatGroup == "reflowable" { + if metadata.EstimatedPages > 0 { + { fmt.Sprintf("%.0f%% ยท Page %d/%d", progress.Percentage, progress.CurrentPage, metadata.EstimatedPages) } + } else { + { fmt.Sprintf("%.0f%%", progress.Percentage) } + } } else { - { fmt.Sprintf("%.0f%%", progress.Percentage) } + { fmt.Sprintf("%d/%d", progress.CurrentPage, progress.TotalPages) } } - } else { - { fmt.Sprintf("%d/%d", progress.CurrentPage, progress.TotalPages) } - } - + +
+
+
-
-
-
- +
+
+ + +
- -
- - - - - - - - +
+ +
+ + + + + + + + +
-
- -
-
- - if progress.FormatGroup == "reflowable" { - { fmt.Sprintf("%.0f%%", progress.Percentage) } - } else { - { fmt.Sprintf("%d/%d", progress.CurrentPage, progress.TotalPages) } - } - + +
+
+ + if progress.FormatGroup == "reflowable" { + { fmt.Sprintf("%.0f%%", progress.Percentage) } + } else { + { fmt.Sprintf("%d/%d", progress.CurrentPage, progress.TotalPages) } + } + +
+
-
-
diff --git a/templates/reader_templ.go b/templates/reader_templ.go index 9c9dcee..120c4da 100644 --- a/templates/reader_templ.go +++ b/templates/reader_templ.go @@ -207,20 +207,20 @@ func ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) templ.Compo if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" class=\"text-base sm:text-lg hover:underline\">โ† Back

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" class=\"text-base sm:text-lg hover:underline\">โ† Back

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var8 string templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(metadata.Title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 257, Col: 95} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 246, Col: 95} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -229,7 +229,7 @@ func ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) templ.Compo var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.0f%% ยท Page %d/%d", progress.Percentage, progress.CurrentPage, metadata.EstimatedPages)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 296, Col: 113} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 294, Col: 114} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -239,7 +239,7 @@ func ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) templ.Compo var templ_7745c5c3_Var10 string templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.0f%%", progress.Percentage)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 298, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 296, Col: 53} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -250,14 +250,14 @@ func ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) templ.Compo var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d/%d", progress.CurrentPage, progress.TotalPages)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 301, Col: 72} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 299, Col: 73} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -265,7 +265,7 @@ func ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) templ.Compo var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.0f%%", progress.Percentage)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 378, Col: 51} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 393, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -275,14 +275,14 @@ func ReaderChrome(metadata ReaderMetadata, progress ReadingProgress) templ.Compo var templ_7745c5c3_Var13 string templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d/%d", progress.CurrentPage, progress.TotalPages)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 380, Col: 72} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 395, Col: 73} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -318,7 +318,7 @@ func drawerHeader(title string) templ.Component { var templ_7745c5c3_Var15 string templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 393, Col: 35} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reader.templ`, Line: 408, Col: 35} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { diff --git a/web/src/reader/reader.ts b/web/src/reader/reader.ts index ad6fde8..d9d5dc1 100644 --- a/web/src/reader/reader.ts +++ b/web/src/reader/reader.ts @@ -1417,6 +1417,12 @@ document.addEventListener("alpine:init", () => { this.interactionMode = mode; saveSettings({ pdf_interaction_mode: mode }); }, + // Reset pan offsets while keeping the current zoom level. + recenterView() { + if (!this.isFixedLayout || !this.renderer) return; + this.renderer.recenter?.(); + this.renderer.dragOffset = { x: 0, y: 0 }; + }, applyFitMode(mode: string) { if (!this.isFixedLayout || !this.renderer) return; if (mode === "fit-width" || mode === "fit-page") {