diff --git a/package-lock.json b/package-lock.json index 7a8a1b197..c28900383 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "node-fetch": "^3.3.2", "proxy-agent": "^6.4.0", "r2-lcp-js": "^1.0.41", - "r2-navigator-js": "^1.16.3", + "r2-navigator-js": "^1.16.4", "r2-opds-js": "^1.0.44", "r2-shared-js": "^1.0.77", "r2-streamer-js": "^1.0.48", @@ -22002,30 +22002,30 @@ } }, "node_modules/r2-navigator-js": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/r2-navigator-js/-/r2-navigator-js-1.16.3.tgz", - "integrity": "sha512-LU+9qFHPN1+f9B0EPfeCIrCOQW4eQ/0hMRiud23Ec0KvabJj4U1DWTMqbD65wyur5Fk3cwG7Y8zNmS0ImnKpIw==", + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/r2-navigator-js/-/r2-navigator-js-1.16.4.tgz", + "integrity": "sha512-uExEbgSOW87QqUj72KmY+BdEADd5Wfcut9vG3XB5H5vj8lEGYkGo3jlfgds8Sj+jzJGv+ywhrPqQ1aslZgw9bw==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { "@flatten-js/core": "^1.6.2", "@flatten-js/polygon-offset": "^1.1.4", - "@xmldom/xmldom": "^0.9.3", + "@xmldom/xmldom": "^0.9.5", "css.escape": "^1.5.1", "cssesc": "^3.0.0", - "debounce": "^2.1.1", + "debounce": "^2.2.0", "debug": "^4.3.7", - "express": "^4.21.0", + "express": "^4.21.1", "moment": "^2.30.1", "r2-lcp-js": "^1.0.41", - "r2-shared-js": "^1.0.75", + "r2-shared-js": "^1.0.77", "r2-streamer-js": "^1.0.48", "r2-utils-js": "^1.0.39", "request": "^2.88.2", "sentence-splitter": "^5.0.0", "ta-json-x": "^2.5.3", "tabbable": "^6.2.0", - "tslib": "^2.7.0", + "tslib": "^2.8.0", "urijs": "^1.19.11" }, "engines": { diff --git a/package.json b/package.json index d5e3e84e9..a5f8a6098 100644 --- a/package.json +++ b/package.json @@ -295,7 +295,7 @@ "node-fetch": "^3.3.2", "proxy-agent": "^6.4.0", "r2-lcp-js": "^1.0.41", - "r2-navigator-js": "^1.16.3", + "r2-navigator-js": "^1.16.4", "r2-opds-js": "^1.0.44", "r2-shared-js": "^1.0.77", "r2-streamer-js": "^1.0.48", diff --git a/src/main/redux/sagas/annotation.ts b/src/main/redux/sagas/annotation.ts index d0eb8e407..83afac702 100644 --- a/src/main/redux/sagas/annotation.ts +++ b/src/main/redux/sagas/annotation.ts @@ -198,6 +198,8 @@ function* importAnnotationSet(action: annotationActions.importAnnotationSet.TAct audioPlaybackInfo: undefined, paginationInfo: undefined, selectionInfo: { + textFragment: undefined, + rawBefore: textQuoteSelector?.prefix, rawAfter: textQuoteSelector?.suffix, rawText: textQuoteSelector?.exact, diff --git a/src/renderer/reader/components/Reader.tsx b/src/renderer/reader/components/Reader.tsx index d65bdaf4d..56618f42f 100644 --- a/src/renderer/reader/components/Reader.tsx +++ b/src/renderer/reader/components/Reader.tsx @@ -1104,11 +1104,11 @@ class Reader extends React.Component { registerKeyboardListener( true, // listen for key up (not key down) this.props.keyboardShortcuts.AudioPrevious, - this.onKeyboardAudioPrevious); + this.onKeyboardAudioPrevious_); registerKeyboardListener( true, // listen for key up (not key down) this.props.keyboardShortcuts.AudioNext, - this.onKeyboardAudioNext); + this.onKeyboardAudioNext_); registerKeyboardListener( true, // listen for key up (not key down) this.props.keyboardShortcuts.AudioPreviousAlt, @@ -1156,8 +1156,8 @@ class Reader extends React.Component { unregisterKeyboardListener(this.onKeyboardShowTOC); unregisterKeyboardListener(this.onKeyboardCloseReader); unregisterKeyboardListener(this.onKeyboardAudioPlayPause); - unregisterKeyboardListener(this.onKeyboardAudioPrevious); - unregisterKeyboardListener(this.onKeyboardAudioNext); + unregisterKeyboardListener(this.onKeyboardAudioPrevious_); + unregisterKeyboardListener(this.onKeyboardAudioNext_); unregisterKeyboardListener(this.onKeyboardAudioPreviousAlt); unregisterKeyboardListener(this.onKeyboardAudioNextAlt); unregisterKeyboardListener(this.onKeyboardAudioStop); @@ -1303,9 +1303,12 @@ class Reader extends React.Component { }; private onKeyboardAudioPreviousAlt = () => { - this.onKeyboardAudioPrevious(true); + this.onKeyboardAudioPrevious(false, true); }; - private onKeyboardAudioPrevious = (skipSentences = false) => { + private onKeyboardAudioPrevious_ = () => { + this.onKeyboardAudioPrevious(false, false); + }; + private onKeyboardAudioPrevious = (skipSentences: boolean, escape: boolean) => { if (!this.state.shortcutEnable) { if (DEBUG_KEYBOARD) { console.log("!shortcutEnable (onKeyboardAudioPrevious)"); @@ -1324,14 +1327,17 @@ class Reader extends React.Component { } else { // const doc = document as TKeyboardDocument; // const skipSentences = doc._keyModifierShift && doc._keyModifierAlt; - this.handleTTSPrevious(skipSentences); + this.handleTTSPrevious(skipSentences, escape); } }; private onKeyboardAudioNextAlt = () => { - this.onKeyboardAudioNext(true); + this.onKeyboardAudioNext(false, true); + }; + private onKeyboardAudioNext_ = () => { + this.onKeyboardAudioNext(false, false); }; - private onKeyboardAudioNext = (skipSentences = false) => { + private onKeyboardAudioNext = (skipSentences: boolean, escape: boolean) => { if (!this.state.shortcutEnable) { if (DEBUG_KEYBOARD) { console.log("!shortcutEnable (onKeyboardAudioNext)"); @@ -1350,7 +1356,7 @@ class Reader extends React.Component { } else { // const doc = document as TKeyboardDocument; // const skipSentences = doc._keyModifierShift && doc._keyModifierAlt; - this.handleTTSNext(skipSentences); + this.handleTTSNext(skipSentences, escape); } }; @@ -2668,11 +2674,11 @@ class Reader extends React.Component { private handleTTSResume() { ttsResume(); } - private handleTTSNext(skipSentences = false) { - ttsNext(skipSentences); + private handleTTSNext(skipSentences: boolean, escape: boolean) { + ttsNext(skipSentences, escape); } - private handleTTSPrevious(skipSentences = false) { - ttsPrevious(skipSentences); + private handleTTSPrevious(skipSentences: boolean, escape: boolean) { + ttsPrevious(skipSentences, escape); } private handleTTSPlaybackRate(speed: string) { ttsPlaybackRate(parseFloat(speed)); diff --git a/src/renderer/reader/components/ReaderHeader.tsx b/src/renderer/reader/components/ReaderHeader.tsx index b1d045023..8cefdca25 100644 --- a/src/renderer/reader/components/ReaderHeader.tsx +++ b/src/renderer/reader/components/ReaderHeader.tsx @@ -111,8 +111,8 @@ interface IBaseProps extends TranslatorProps { handleTTSPause: () => void; handleTTSStop: () => void; handleTTSResume: () => void; - handleTTSPrevious: (skipSentences?: boolean) => void; - handleTTSNext: (skipSentences?: boolean) => void; + handleTTSPrevious: (skipSentences: boolean, escape: boolean) => void; + handleTTSNext: (skipSentences: boolean, escape: boolean) => void; handleTTSPlaybackRate: (speed: string) => void; handleTTSVoice: (voice: SpeechSynthesisVoice | null) => void; @@ -613,9 +613,9 @@ export class ReaderHeader extends React.Component { } } else { if (isRTL) { - this.props.handleTTSNext(e.shiftKey && e.altKey); + this.props.handleTTSNext(e.shiftKey && e.altKey && e.metaKey, e.shiftKey && e.altKey); } else { - this.props.handleTTSPrevious(e.shiftKey && e.altKey); + this.props.handleTTSPrevious(e.shiftKey && e.altKey && e.metaKey, e.shiftKey && e.altKey); } } }} @@ -685,13 +685,13 @@ export class ReaderHeader extends React.Component { if (useMO) { this.props.handleMediaOverlaysPrevious(); } else { - this.props.handleTTSPrevious(e.shiftKey && e.altKey); + this.props.handleTTSPrevious(e.shiftKey && e.altKey && e.metaKey, e.shiftKey && e.altKey); } } else { if (useMO) { this.props.handleMediaOverlaysNext(); } else { - this.props.handleTTSNext(e.shiftKey && e.altKey); + this.props.handleTTSNext(e.shiftKey && e.altKey && e.metaKey, e.shiftKey && e.altKey); } } }} diff --git a/src/renderer/reader/redux/sagas/search.ts b/src/renderer/reader/redux/sagas/search.ts index c2114fa44..7fa6ea3ff 100644 --- a/src/renderer/reader/redux/sagas/search.ts +++ b/src/renderer/reader/redux/sagas/search.ts @@ -90,6 +90,8 @@ function converterSearchResultToHighlightHandlerState(v: ISearchResult, color = group: "search", color, selectionInfo: { + textFragment: undefined, + cleanBefore: v.cleanBefore, cleanText: v.cleanText, cleanAfter: v.cleanAfter,