fix(reader): keep word translation popup as compact block on desktop without full-width stretch
This commit is contained in:
@@ -1309,31 +1309,40 @@ export function positionWordPopup(targetElement) {
|
||||
if (window.innerWidth <= 768) {
|
||||
readerWordPopup.style.top = '';
|
||||
readerWordPopup.style.left = '';
|
||||
readerWordPopup.style.right = '';
|
||||
readerWordPopup.style.bottom = '';
|
||||
readerWordPopup.style.width = '';
|
||||
return;
|
||||
}
|
||||
const rect = targetElement.getBoundingClientRect();
|
||||
const popupWidth = 320;
|
||||
const popupWidth = (readerWordPopup.offsetWidth && readerWordPopup.offsetWidth >= 280 && readerWordPopup.offsetWidth <= 380)
|
||||
? readerWordPopup.offsetWidth
|
||||
: 340;
|
||||
const popupHeight = readerWordPopup.offsetHeight || 220;
|
||||
const viewportWidth = window.innerWidth;
|
||||
const viewportHeight = window.innerHeight;
|
||||
|
||||
let left = rect.left + (rect.width / 2) - (popupWidth / 2);
|
||||
if (left + popupWidth > viewportWidth - 12) {
|
||||
left = viewportWidth - popupWidth - 12;
|
||||
if (left + popupWidth > viewportWidth - 16) {
|
||||
left = viewportWidth - popupWidth - 16;
|
||||
}
|
||||
if (left < 12) {
|
||||
left = 12;
|
||||
if (left < 16) {
|
||||
left = 16;
|
||||
}
|
||||
|
||||
const minTop = isZenMode ? 16 : 65;
|
||||
let top = rect.bottom + 8;
|
||||
if (top + popupHeight > viewportHeight - 12) {
|
||||
if (rect.top - popupHeight - 8 >= 65 || rect.top > viewportHeight / 2) {
|
||||
top = Math.max(65, rect.top - popupHeight - 8);
|
||||
if (top + popupHeight > viewportHeight - 16) {
|
||||
if (rect.top - popupHeight - 8 >= minTop || rect.top > viewportHeight / 2) {
|
||||
top = Math.max(minTop, rect.top - popupHeight - 8);
|
||||
}
|
||||
}
|
||||
|
||||
readerWordPopup.style.top = `${Math.round(top)}px`;
|
||||
readerWordPopup.style.left = `${Math.round(left)}px`;
|
||||
readerWordPopup.style.right = 'auto';
|
||||
readerWordPopup.style.bottom = 'auto';
|
||||
readerWordPopup.style.width = `${popupWidth}px`;
|
||||
}
|
||||
|
||||
export async function openWordPopup(term, contextSentence, targetElement, paragraphContext = '') {
|
||||
|
||||
Reference in New Issue
Block a user