PageSourceSearch

https://www.perennia.ca/wp-content/plugins/eventer/js/modal-scroll-fix.js?ver=4.4.6

js perennia.ca collected 2026-10-02 05:47:14 UTC 3,036 bytes, 101 lines download raw bytes

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.