UNPKG

ngx-extended-pdf-viewer

Version:

Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.

54 lines 9.3 kB
import { pdfDefaultOptions } from '../options/pdf-default-options'; export class PositioningService { positionPopupBelowItsButton(buttonId, popupId) { if (!pdfDefaultOptions.positionPopupDialogsWithJavaScript) { return; } setTimeout(() => { const visibleButton = Array.from(document.querySelectorAll(`#${buttonId}`)).find((el) => el.offsetParent !== null); if (visibleButton) { const popup = document.querySelector(`#${popupId}`); if (popup instanceof HTMLElement) { const popupContainer = popup.offsetParent; if (popupContainer) { const buttonRect = visibleButton.getBoundingClientRect(); const containerRect = popupContainer.getBoundingClientRect(); const width = buttonRect.width; const doorhangerOffset = 17; // Detect text direction const isRTL = document.documentElement.getAttribute('dir') === 'rtl'; let doorHangerRight = isRTL; if (popup.classList.contains('doorHangerRight')) { doorHangerRight = !isRTL; } // Apply styles popup.style.position = 'absolute'; popup.style.display = 'block'; // support the attribute 'mobileFriendlyZoom' correctly popup.style.transformOrigin = doorHangerRight ? 'top right' : 'top left'; if (!doorHangerRight) { // For RTL languages, use 'left' property // also use the 'left' property for the findbar in LTR languages const left = buttonRect.left - containerRect.left + width / 2 - doorhangerOffset; popup.style.left = `${left}px`; popup.style.right = ''; } else { // For LTR, use 'right' property const right = containerRect.right - buttonRect.right + width / 2 - doorhangerOffset; popup.style.right = `${right}px`; // 109 popup.style.left = ''; } const toolbarContainer = document.querySelector('#toolbarContainer'); if (toolbarContainer instanceof HTMLElement) { const toolbarContainerRect = toolbarContainer.getBoundingClientRect(); const top = toolbarContainerRect.bottom - containerRect.top + 4; popup.style.top = `${top}px`; // 92 } } } } }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25pbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvZHluYW1pYy1jc3MvcG9zaXRpb25pbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVuRSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0NBQWtDLEVBQUU7WUFDekQsT0FBTztTQUNSO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNoSSxJQUFJLGFBQWEsRUFBRTtnQkFDakIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3BELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRTtvQkFDaEMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFlBQTJCLENBQUM7b0JBQ3pELElBQUksY0FBYyxFQUFFO3dCQUNsQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDekQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7d0JBRTdELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7d0JBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO3dCQUU1Qix3QkFBd0I7d0JBQ3hCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQzt3QkFDckUsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7NEJBQy9DLGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQzt5QkFDMUI7d0JBRUQsZUFBZTt3QkFDZixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7d0JBQ2xDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzt3QkFFOUIsdURBQXVEO3dCQUN2RCxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO3dCQUV6RSxJQUFJLENBQUMsZUFBZSxFQUFFOzRCQUNwQix5Q0FBeUM7NEJBQ3pDLGdFQUFnRTs0QkFDaEUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7NEJBRWpGLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7NEJBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt5QkFDeEI7NkJBQU07NEJBQ0wsZ0NBQWdDOzRCQUNoQyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs0QkFDcEYsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU07NEJBQ3hDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzt5QkFDdkI7d0JBRUQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7d0JBQ3JFLElBQUksZ0JBQWdCLFlBQVksV0FBVyxFQUFFOzRCQUMzQyxNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUM7NEJBQ3RFLE1BQU0sR0FBRyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzs0QkFDaEUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUs7eUJBQ3BDO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBkZkRlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi4vb3B0aW9ucy9wZGYtZGVmYXVsdC1vcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uaW5nU2VydmljZSB7XG4gIHB1YmxpYyBwb3NpdGlvblBvcHVwQmVsb3dJdHNCdXR0b24oYnV0dG9uSWQ6IHN0cmluZywgcG9wdXBJZDogc3RyaW5nKSB7XG4gICAgaWYgKCFwZGZEZWZhdWx0T3B0aW9ucy5wb3NpdGlvblBvcHVwRGlhbG9nc1dpdGhKYXZhU2NyaXB0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZUJ1dHRvbiA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgIyR7YnV0dG9uSWR9YCkpLmZpbmQoKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwub2Zmc2V0UGFyZW50ICE9PSBudWxsKTtcbiAgICAgIGlmICh2aXNpYmxlQnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IHBvcHVwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cG9wdXBJZH1gKTtcbiAgICAgICAgaWYgKHBvcHVwIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBwb3B1cENvbnRhaW5lciA9IHBvcHVwLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBpZiAocG9wdXBDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvblJlY3QgPSB2aXNpYmxlQnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHBvcHVwQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvblJlY3Qud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBkb29yaGFuZ2VyT2Zmc2V0ID0gMTc7XG5cbiAgICAgICAgICAgIC8vIERldGVjdCB0ZXh0IGRpcmVjdGlvblxuICAgICAgICAgICAgY29uc3QgaXNSVEwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXInKSA9PT0gJ3J0bCc7XG4gICAgICAgICAgICBsZXQgZG9vckhhbmdlclJpZ2h0ID0gaXNSVEw7XG4gICAgICAgICAgICBpZiAocG9wdXAuY2xhc3NMaXN0LmNvbnRhaW5zKCdkb29ySGFuZ2VyUmlnaHQnKSkge1xuICAgICAgICAgICAgICBkb29ySGFuZ2VyUmlnaHQgPSAhaXNSVEw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IHN0eWxlc1xuICAgICAgICAgICAgcG9wdXAuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgICAgIC8vIHN1cHBvcnQgdGhlIGF0dHJpYnV0ZSAnbW9iaWxlRnJpZW5kbHlab29tJyBjb3JyZWN0bHlcbiAgICAgICAgICAgIHBvcHVwLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGRvb3JIYW5nZXJSaWdodCA/ICd0b3AgcmlnaHQnIDogJ3RvcCBsZWZ0JztcblxuICAgICAgICAgICAgaWYgKCFkb29ySGFuZ2VyUmlnaHQpIHtcbiAgICAgICAgICAgICAgLy8gRm9yIFJUTCBsYW5ndWFnZXMsIHVzZSAnbGVmdCcgcHJvcGVydHlcbiAgICAgICAgICAgICAgLy8gYWxzbyB1c2UgdGhlICdsZWZ0JyBwcm9wZXJ0eSBmb3IgdGhlIGZpbmRiYXIgaW4gTFRSIGxhbmd1YWdlc1xuICAgICAgICAgICAgICBjb25zdCBsZWZ0ID0gYnV0dG9uUmVjdC5sZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0ICsgd2lkdGggLyAyIC0gZG9vcmhhbmdlck9mZnNldDtcblxuICAgICAgICAgICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgICAgICAgIHBvcHVwLnN0eWxlLnJpZ2h0ID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBGb3IgTFRSLCB1c2UgJ3JpZ2h0JyBwcm9wZXJ0eVxuICAgICAgICAgICAgICBjb25zdCByaWdodCA9IGNvbnRhaW5lclJlY3QucmlnaHQgLSBidXR0b25SZWN0LnJpZ2h0ICsgd2lkdGggLyAyIC0gZG9vcmhhbmdlck9mZnNldDtcbiAgICAgICAgICAgICAgcG9wdXAuc3R5bGUucmlnaHQgPSBgJHtyaWdodH1weGA7IC8vIDEwOVxuICAgICAgICAgICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdG9vbGJhckNvbnRhaW5lcicpO1xuICAgICAgICAgICAgaWYgKHRvb2xiYXJDb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICBjb25zdCB0b29sYmFyQ29udGFpbmVyUmVjdCA9IHRvb2xiYXJDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IHRvcCA9IHRvb2xiYXJDb250YWluZXJSZWN0LmJvdHRvbSAtIGNvbnRhaW5lclJlY3QudG9wICsgNDtcbiAgICAgICAgICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YDsgLy8gOTJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19