V1.0.46 oss (#253)
* add a UI trigger for demo annotations * Implement internal link navigation * Simplify bottom padding logic in `EpubReaderScreen` for vertical scroll mode * Add support for Calibre metadata * Implement advanced library management with Room-backed collections, tags, and smart rules. * Display book series information in book details and remove tags from home screen * Implement zoom reset functionality in PDF viewer * Add a "Pages" thumbnail view to the PDF navigation drawer * Implement jump-back navigation in PDF viewer * MainViewModel: disable FolderSyncWorker, add log export, and enhance PDF position logging * Replace Gson with Kotlin Serialization in SmartCollectionEngine * Implement ONNX-based speech bubble detection * Implement speech bubble detection in PDF viewer * Implement "Smart Comic Zoom" feature for PDF manga/comic reading * Implement reader session persistence and restoration in `MainViewModel` * Add tap-to-turn page feature to PDF viewer * Improve book cache management and recovery * Refactor top overlay padding logic in `PdfViewerScreen` * Implement stylus eraser support in PDF reader * Refactor ReaderTextFormatPanel to use ModalBottomSheet and add new formatting controls * Introduce a customizable horizontal margin setting for the EPUB reader * Refine folder sync and metadata handling for better conflict resolution and stability. * Introduce user-adjustable image scaling for the EPUB reader * Use maxWidthPx as default width fallback for blocks * Improve cross-page text selection and header styling in the paginated reader * Refactor speech bubble detection and UI to support segmentation masks and interactive scaling * Improve speech bubble detection masking and rendering quality * Update ONNX speech bubble detector to use `.ort` model and optimize inference * Improve pagination accuracy * Implement hierarchical folder navigation for the library. * Refactor library item layout for improved space efficiency * Add support for browsing and downloading Google Fonts * Persist library landing state and add shelf search functionality * Fix base tts sample. * Move SpeechBubbleDetector to main source set and update ONNX dependency * Implement a "locate" feature and improve synchronization for TTS (Text-to-Speech) playback across EPUB and PDF readers. * Refine TTS synchronization and voice management in the EPUB reader * Adjust OCR checks for OSS flavor and optimize external dictionary intent flags * Add "Locate" button to PDF drawer's pages tab and move the page number to bottom right of thumbnail * fix various crashes * Refactor SpeechBubbleDetector into product flavors * Implement speech bubble detection caching and background prefetching * Implement on-demand download for Bubble Zoom ML model * Add smooth animation for PDF speech bubble expansion * fixes #252 * hide Google Fonts option, in FontsScreen, for offline variant * Bump version to 1.0.46(46)
This commit is contained in:
parent
579b6f25bf
commit
d16bdd70d4
67 changed files with 9724 additions and 1890 deletions
|
|
@ -79,7 +79,7 @@
|
|||
}
|
||||
|
||||
img, svg, video, canvas {
|
||||
max-width: 100%; width: 100%; height: auto; display: block; margin-left: auto; margin-right: auto; background-color: transparent; object-fit: contain;
|
||||
max-width: 100%; width: auto; height: auto; display: block; margin-left: auto; margin-right: auto; background-color: transparent; object-fit: contain;
|
||||
}
|
||||
|
||||
figure img {
|
||||
|
|
@ -481,10 +481,18 @@
|
|||
if (anchor) {
|
||||
var href = anchor.getAttribute('href');
|
||||
var epubType = anchor.getAttribute('epub:type');
|
||||
var linkText = (anchor.textContent || '').trim().substring(0, 80);
|
||||
|
||||
console.log("LINK_NAV: [JS-CLICK] href='" + href + "', epub:type='" + epubType + "', label='" + linkText + "'");
|
||||
|
||||
if (window.LinkNavBridge && window.LinkNavBridge.onLinkClicked) {
|
||||
window.LinkNavBridge.onLinkClicked(href || '', epubType || '', linkText);
|
||||
}
|
||||
|
||||
console.log("FootnoteDiag: Link clicked. href: '" + href + "', epub:type: '" + epubType + "'");
|
||||
|
||||
if ((href && href.startsWith('#')) || epubType === 'noteref') {
|
||||
if ((href && href.startsWith('#')) || epubType === 'noteref') {
|
||||
console.log("LINK_NAV: [JS-CLASSIFY] type=FRAGMENT_OR_FOOTNOTE, href='" + href + "'");
|
||||
var targetId = href ? href.substring(1) : null;
|
||||
console.log("FootnoteDiag: Extracted targetId: '" + targetId + "'");
|
||||
|
||||
|
|
@ -504,10 +512,12 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log("LINK_NAV: [JS-NO-ANCHOR] No <a> tag found in click target hierarchy");
|
||||
}
|
||||
}, true);
|
||||
|
||||
window.updateReaderStyles = function (fontSizeEm, lineHeight, fontFamily, textAlign, paragraphGap) {
|
||||
window.updateReaderStyles = function (fontSizeEm, lineHeight, fontFamily, textAlign, paragraphGap, imageSize, horizontalMargin) {
|
||||
var logTag = "ReaderFontDiagnosis";
|
||||
console.log(
|
||||
logTag +
|
||||
|
|
@ -517,11 +527,15 @@
|
|||
lineHeight +
|
||||
", Font: '" +
|
||||
fontFamily +
|
||||
"', Align: '" +
|
||||
textAlign +
|
||||
"', Gap: " +
|
||||
paragraphGap
|
||||
);
|
||||
"', Align: '" +
|
||||
textAlign +
|
||||
"', Gap: " +
|
||||
paragraphGap +
|
||||
", ImageSize: " +
|
||||
imageSize +
|
||||
", HorizontalMargin: " +
|
||||
horizontalMargin
|
||||
);
|
||||
|
||||
var dynamicStyleId = "dynamicReaderStyles";
|
||||
var dynamicStyleElement = document.getElementById(dynamicStyleId);
|
||||
|
|
@ -535,10 +549,14 @@
|
|||
var newFontSize = parseFloat(fontSizeEm);
|
||||
var newLineHeight = parseFloat(lineHeight);
|
||||
var newGap = parseFloat(paragraphGap);
|
||||
var newImageSize = parseFloat(imageSize);
|
||||
var newHorizontalMargin = parseFloat(horizontalMargin);
|
||||
|
||||
if (isNaN(newFontSize) || newFontSize < 0.5 || newFontSize > 5.0) newFontSize = 1.0;
|
||||
if (isNaN(newLineHeight) || newLineHeight < 1.0 || newLineHeight > 3.0) newLineHeight = 1.0;
|
||||
if (isNaN(newGap) || newGap < 0.0 || newGap > 3.0) newGap = 1.0;
|
||||
if (isNaN(newImageSize) || newImageSize < 0.5 || newImageSize > 2.0) newImageSize = 1.0;
|
||||
if (isNaN(newHorizontalMargin) || newHorizontalMargin < 0.0 || newHorizontalMargin > 3.0) newHorizontalMargin = 1.0;
|
||||
|
||||
var fontCss = "";
|
||||
if (fontFamily && fontFamily !== "Original" && fontFamily !== "") {
|
||||
|
|
@ -590,7 +608,31 @@
|
|||
`;
|
||||
}
|
||||
|
||||
dynamicStyleElement.innerHTML = [sizeCss, lineHeightCss, fontCss, alignCss, gapCss].join("\n");
|
||||
var horizontalPaddingPx = Math.max(0, 16 * newHorizontalMargin);
|
||||
var horizontalMarginCss = `
|
||||
body {
|
||||
box-sizing: border-box !important;
|
||||
padding-left: ${horizontalPaddingPx}px !important;
|
||||
padding-right: ${horizontalPaddingPx}px !important;
|
||||
}
|
||||
`;
|
||||
|
||||
var imageCss = `
|
||||
:root {
|
||||
--reader-image-size: ${newImageSize};
|
||||
}
|
||||
body img,
|
||||
body svg,
|
||||
body video,
|
||||
body canvas,
|
||||
body image {
|
||||
width: min(100%, calc(100% * var(--reader-image-size))) !important;
|
||||
max-width: 100% !important;
|
||||
height: auto !important;
|
||||
}
|
||||
`;
|
||||
|
||||
dynamicStyleElement.innerHTML = [sizeCss, lineHeightCss, fontCss, alignCss, gapCss, imageCss, horizontalMarginCss].join("\n");
|
||||
|
||||
setTimeout(
|
||||
function () {
|
||||
|
|
|
|||
2083
app/src/main/assets/google_fonts.json
Normal file
2083
app/src/main/assets/google_fonts.json
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue