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.
57 lines • 9.96 kB
JavaScript
import { pdfDefaultOptions } from '../options/pdf-default-options';
export class PositioningService {
positionPopupBelowItsButton(buttonId, popupId) {
if (!pdfDefaultOptions.positionPopupDialogsWithJavaScript) {
return;
}
setTimeout(() => {
let visibleButton = Array.from(document.querySelectorAll(`#${buttonId}`)).find((el) => el.offsetParent !== null);
if (!visibleButton) {
visibleButton = Array.from(document.querySelectorAll(`#secondaryToolbarToggle`)).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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25pbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvZHluYW1pYy1jc3MvcG9zaXRpb25pbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVuRSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0NBQWtDLEVBQUU7WUFDekQsT0FBTztTQUNSO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM5SCxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNsQixhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQzthQUN0STtZQUNELElBQUksYUFBYSxFQUFFO2dCQUNqQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFO29CQUNoQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsWUFBMkIsQ0FBQztvQkFDekQsSUFBSSxjQUFjLEVBQUU7d0JBQ2xCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3dCQUN6RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFFN0QsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzt3QkFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7d0JBRTVCLHdCQUF3Qjt3QkFDeEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO3dCQUNyRSxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7d0JBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRTs0QkFDL0MsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDO3lCQUMxQjt3QkFFRCxlQUFlO3dCQUNmLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQzt3QkFDbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO3dCQUU5Qix1REFBdUQ7d0JBQ3ZELEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7d0JBRXpFLElBQUksQ0FBQyxlQUFlLEVBQUU7NEJBQ3BCLHlDQUF5Qzs0QkFDekMsZ0VBQWdFOzRCQUNoRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs0QkFFakYsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQzs0QkFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3lCQUN4Qjs2QkFBTTs0QkFDTCxnQ0FBZ0M7NEJBQ2hDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDOzRCQUNwRixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTTs0QkFDeEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO3lCQUN2Qjt3QkFFRCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDckUsSUFBSSxnQkFBZ0IsWUFBWSxXQUFXLEVBQUU7NEJBQzNDLE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs0QkFDdEUsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOzRCQUNoRSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSzt5QkFDcEM7cUJBQ0Y7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGRmRGVmYXVsdE9wdGlvbnMgfSBmcm9tICcuLi9vcHRpb25zL3BkZi1kZWZhdWx0LW9wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25pbmdTZXJ2aWNlIHtcbiAgcHVibGljIHBvc2l0aW9uUG9wdXBCZWxvd0l0c0J1dHRvbihidXR0b25JZDogc3RyaW5nLCBwb3B1cElkOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBkZkRlZmF1bHRPcHRpb25zLnBvc2l0aW9uUG9wdXBEaWFsb2dzV2l0aEphdmFTY3JpcHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsZXQgdmlzaWJsZUJ1dHRvbiA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgIyR7YnV0dG9uSWR9YCkpLmZpbmQoKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwub2Zmc2V0UGFyZW50ICE9PSBudWxsKTtcbiAgICAgIGlmICghdmlzaWJsZUJ1dHRvbikge1xuICAgICAgICB2aXNpYmxlQnV0dG9uID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjc2Vjb25kYXJ5VG9vbGJhclRvZ2dsZWApKS5maW5kKChlbDogSFRNTEVsZW1lbnQpID0+IGVsLm9mZnNldFBhcmVudCAhPT0gbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAodmlzaWJsZUJ1dHRvbikge1xuICAgICAgICBjb25zdCBwb3B1cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3BvcHVwSWR9YCk7XG4gICAgICAgIGlmIChwb3B1cCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgcG9wdXBDb250YWluZXIgPSBwb3B1cC5vZmZzZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKHBvcHVwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBidXR0b25SZWN0ID0gdmlzaWJsZUJ1dHRvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBwb3B1cENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBidXR0b25SZWN0LndpZHRoO1xuICAgICAgICAgICAgY29uc3QgZG9vcmhhbmdlck9mZnNldCA9IDE3O1xuXG4gICAgICAgICAgICAvLyBEZXRlY3QgdGV4dCBkaXJlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGlzUlRMID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnO1xuICAgICAgICAgICAgbGV0IGRvb3JIYW5nZXJSaWdodCA9IGlzUlRMO1xuICAgICAgICAgICAgaWYgKHBvcHVwLmNsYXNzTGlzdC5jb250YWlucygnZG9vckhhbmdlclJpZ2h0JykpIHtcbiAgICAgICAgICAgICAgZG9vckhhbmdlclJpZ2h0ID0gIWlzUlRMO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBcHBseSBzdHlsZXNcbiAgICAgICAgICAgIHBvcHVwLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgICAgICAvLyBzdXBwb3J0IHRoZSBhdHRyaWJ1dGUgJ21vYmlsZUZyaWVuZGx5Wm9vbScgY29ycmVjdGx5XG4gICAgICAgICAgICBwb3B1cC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBkb29ySGFuZ2VyUmlnaHQgPyAndG9wIHJpZ2h0JyA6ICd0b3AgbGVmdCc7XG5cbiAgICAgICAgICAgIGlmICghZG9vckhhbmdlclJpZ2h0KSB7XG4gICAgICAgICAgICAgIC8vIEZvciBSVEwgbGFuZ3VhZ2VzLCB1c2UgJ2xlZnQnIHByb3BlcnR5XG4gICAgICAgICAgICAgIC8vIGFsc28gdXNlIHRoZSAnbGVmdCcgcHJvcGVydHkgZm9yIHRoZSBmaW5kYmFyIGluIExUUiBsYW5ndWFnZXNcbiAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IGJ1dHRvblJlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCArIHdpZHRoIC8gMiAtIGRvb3JoYW5nZXJPZmZzZXQ7XG5cbiAgICAgICAgICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgICAgICAgICBwb3B1cC5zdHlsZS5yaWdodCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gRm9yIExUUiwgdXNlICdyaWdodCcgcHJvcGVydHlcbiAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBjb250YWluZXJSZWN0LnJpZ2h0IC0gYnV0dG9uUmVjdC5yaWdodCArIHdpZHRoIC8gMiAtIGRvb3JoYW5nZXJPZmZzZXQ7XG4gICAgICAgICAgICAgIHBvcHVwLnN0eWxlLnJpZ2h0ID0gYCR7cmlnaHR9cHhgOyAvLyAxMDlcbiAgICAgICAgICAgICAgcG9wdXAuc3R5bGUubGVmdCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Rvb2xiYXJDb250YWluZXInKTtcbiAgICAgICAgICAgIGlmICh0b29sYmFyQ29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9vbGJhckNvbnRhaW5lclJlY3QgPSB0b29sYmFyQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICBjb25zdCB0b3AgPSB0b29sYmFyQ29udGFpbmVyUmVjdC5ib3R0b20gLSBjb250YWluZXJSZWN0LnRvcCArIDQ7XG4gICAgICAgICAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7IC8vIDkyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==