1import { registerDisconnectCleanup, unregisterDisconnectCleanup } from "./utilities.js?v=2.2.2.0"; 2 3const modalDisconnectCleanupProperty = "blazoriseModalDisconnectCleanupId"; 4const modalCountAttribute = "data-modals"; 5 6export function registerModalDisconnectCleanup(element, closeCore) { 7 if (!element || typeof closeCore !== "function") 8 return; 9 10 unregisterModalDisconnectCleanup(element); 11 12 element[modalDisconnectCleanupProperty] = registerDisconnectCleanup(element, () => { 13 clearModalDisconnectCleanupHandle(element); 14 closeCore(); 15 }); 16} 17 18export function unregisterModalDisconnectCleanup(element) { 19 if (!element) 20 return; 21 22 unregisterDisconnectCleanup(element[modalDisconnectCleanupProperty]); 23 clearModalDisconnectCleanupHandle(element); 24} 25 26export function scrollModalBodyToTop(element, scrollToTop, selector) { 27 if (!element || !scrollToTop) 28 return; 29 30 const modalBody = element.querySelector(selector); 31 32 if (modalBody) { 33 modalBody.scrollTop = 0; 34 } 35} 36 37export function openStackedModal(element, options) { 38 const modalOptions = options || {}; 39 40 if (typeof modalOptions.beforeOpen === "function") { 41 modalOptions.beforeOpen(element); 42 } 43 44 let modals = Number(document.body.getAttribute(modalCountAttribute) || "0"); 45 46 if (modals === 0 && typeof modalOptions.onFirstModalOpen === "function") { 47 modalOptions.onFirstModalOpen(element); 48 } 49 50 modals += 1; 51 52 document.body.setAttribute(modalCountAttribute, modals.toString()); 53 54 scrollModalBodyToTop(element, modalOptions.scrollToTop, modalOptions.bodySelector || ".modal-body"); 55} 56 57export function closeStackedModal(element, options) { 58 const modalOptions = options || {}; 59 60 let modals = Number(document.body.getAttribute(modalCountAttribute) || "0"); 61 62 modals -= 1; 63 64 if (modals < 0) { 65 modals = 0; 66 } 67 68 if (modals === 0 && typeof modalOptions.onLastModalClose === "function") { 69 modalOptions.onLastModalClose(element); 70 } 71 72 document.body.setAttribute(modalCountAttribute, modals.toString()); 73 74 if (typeof modalOptions.afterClose === "function") { 75 modalOptions.afterClose(element); 76 } 77} 78 79export function adjustDialogDimensionsBeforeShow(element, adjustmentSelectors) { 80 if (element) { 81 const rect = document.body.getBoundingClientRect(); 82 const isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; 83 const scrollbarWidth = getScrollBarWidth(); 84 const selectors = adjustmentSelectors || {}; 85 const fixedContent = queryElements(selectors.fixedContentSelector); 86 const stickyContent = queryElements(selectors.stickyContentSelector); 87 88 if (isBodyOverflowing) { 89 if (fixedContent) { 90 fixedContent.forEach((fixedContentElement) => { 91 const calculatedPadding = fixedContentElement.style.paddingRight; 92 93 fixedContentElement.style.paddingRight = `${parseFloat(calculatedPadding) + scrollbarWidth}px`; 94 }); 95 } 96 97 if (stickyContent) { 98 stickyContent.forEach((stickyContentElement) => { 99 const calculatedMargin = stickyContentElement.style.marginRight; 100 101 stickyContentElement.style.marginRight = `${parseFloat(calculatedMargin) - scrollbarWidth}px`; 102 }); 103 } 104 105 const calculatedPadding = document.body.style.paddingRight; 106 107 document.body.style.paddingRight = `${calculatedPadding + scrollbarWidth}px`; 108 } 109 110 const isModalOverflowing = element.scrollHeight > document.documentElement.clientHeight; 111 112 if (!isBodyOverflowing && isModalOverflowing) { 113 element.style.paddingLeft = `${scrollbarWidth}px`; 114 } 115 116 if (isBodyOverflowing && !isModalOverflowing) { 117 element.style.paddingRight = `${scrollbarWidth}px`; 118 } 119 } 120} 121 122export function resetAdjustments(element, adjustmentSelectors) { 123 if (element && element.style) { 124 element.style.paddingLeft = ''; 125 element.style.paddingRight = ''; 126 } 127 128 const selectors = adjustmentSelectors || {}; 129 const fixedContent = queryElements(selectors.fixedContentSelector); 130 const stickyContent = queryElements(selectors.stickyContentSelector); 131 132 if (fixedContent) { 133 fixedContent.forEach((fixedContentElement) => { 134 fixedContentElement.style.paddingRight = ''; 135 }); 136 } 137 138 if (stickyContent) { 139 stickyContent.forEach((stickyContentElement) => { 140 stickyContentElement.style.marginRight = ''; 141 }); 142 } 143 144 document.body.style.paddingRight = ''; 145} 146 147export function getScrollBarWidth() { 148 const documentWidth = document.documentElement.clientWidth; 149 return Math.abs(window.innerWidth - documentWidth);
150} 151 152function clearModalDisconnectCleanupHandle(element) { 153 if (element && Object.prototype.hasOwnProperty.call(element, modalDisconnectCleanupProperty)) { 154 delete element[modalDisconnectCleanupProperty]; 155 } 156} 157 158function queryElements(selector) { 159 if (!selector) 160 return []; 161 162 return [].slice.call(document.querySelectorAll(selector)); 163}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.