1jQuery(function ($) { 2 "use strict"; 3 4 var scrollLockState = { 5 active: false, 6 scrollTop: 0, 7 scrollLeft: 0, 8 styles: {} 9 }; 10 var pendingScrollPosition = null; 11 12 function eventer_is_modal_active() { 13 return $.emodal && typeof $.emodal.isActive === 'function' && $.emodal.isActive(); 14 } 15 16 function eventer_lock_page_scroll() { 17 if (scrollLockState.active) { 18 return; 19 } 20 21 var body = document.body; 22 var docEl = document.documentElement; 23 var scrollbarWidth = window.innerWidth - docEl.clientWidth; 24 var currentScrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop || 0; 25 var currentScrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft || 0; 26 var lockedScroll = pendingScrollPosition || { 27 top: currentScrollTop, 28 left: currentScrollLeft 29 }; 30 31 scrollLockState.scrollTop = lockedScroll.top; 32 scrollLockState.scrollLeft = lockedScroll.left; 33 scrollLockState.styles = { 34 overflow: body.style.overflow, 35 position: body.style.position, 36 top: body.style.top, 37 left: body.style.left, 38 right: body.style.right, 39 width: body.style.width, 40 paddingRight: body.style.paddingRight 41 }; 42 43 body.style.overflow = 'hidden'; 44 body.style.position = 'fixed'; 45 body.style.top = (-scrollLockState.scrollTop) + 'px'; 46 body.style.left = '0'; 47 body.style.right = '0'; 48 body.style.width = '100%'; 49 body.style.paddingRight = scrollbarWidth > 0 ? scrollbarWidth + 'px' : scrollLockState.styles.paddingRight; 50 51 pendingScrollPosition = null; 52 scrollLockState.active = true; 53 } 54 55 function eventer_unlock_page_scroll() { 56 if (!scrollLockState.active) { 57 return; 58 } 59 60 var body = document.body; 61 62 body.style.overflow = scrollLockState.styles.overflow || ''; 63 body.style.position = scrollLockState.styles.position || ''; 64 body.style.top = scrollLockState.styles.top || ''; 65 body.style.left = scrollLockState.styles.left || ''; 66 body.style.right = scrollLockState.styles.right || ''; 67 body.style.width = scrollLockState.styles.width || ''; 68 body.style.paddingRight = scrollLockState.styles.paddingRight || ''; 69 70 scrollLockState.active = false; 71 window.scrollTo(scrollLockState.scrollLeft, scrollLockState.scrollTop); 72 } 73 74 document.addEventListener('click', function (event) { 75 var $trigger = $(event.target).closest('a[rel~="emodal:open"]'); 76 if (!$trigger.length) { 77 return; 78 } 79 80 pendingScrollPosition = { 81 top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0, 82 left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0 83 }; 84 }, true); 85 86 $(document).on('emodal:before-block', function (event) { 87 if (event.target === document) { 88 return; 89 } 90 91 eventer_lock_page_scroll(); 92 }); 93 94 $(document).on('emodal:after-close', function () { 95 if (eventer_is_modal_active()) { 96 return; 97 } 98 99 eventer_unlock_page_scroll(); 100 }); 101});
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.