2 * DO NOT EDIT THIS FILE.
3 * See the following change record for more information,
4 * https://www.drupal.org/node/2815083
8 (function ($, Drupal, debounce) {
16 Drupal.behaviors.drupalDisplace = {
17 attach: function attach() {
18 if (this.displaceProcessed) {
21 this.displaceProcessed = true;
23 $(window).on('resize.drupalDisplace', debounce(displace, 200));
27 function displace(broadcast) {
28 offsets = calculateOffsets();
29 Drupal.displace.offsets = offsets;
30 if (typeof broadcast === 'undefined' || broadcast) {
31 $(document).trigger('drupalViewportOffsetChange', offsets);
36 function calculateOffsets() {
38 top: calculateOffset('top'),
39 right: calculateOffset('right'),
40 bottom: calculateOffset('bottom'),
41 left: calculateOffset('left')
45 function calculateOffset(edge) {
47 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
48 var n = displacingElements.length;
49 for (var i = 0; i < n; i++) {
50 var el = displacingElements[i];
52 if (el.style.display === 'none') {
56 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
58 if (isNaN(displacement)) {
59 displacement = getRawOffset(el, edge);
62 edgeOffset = Math.max(edgeOffset, displacement);
68 function getRawOffset(el, edge) {
70 var documentElement = document.documentElement;
72 var horizontal = edge === 'left' || edge === 'right';
74 var placement = $el.offset()[horizontal ? 'left' : 'top'];
76 placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0;
80 displacement = placement + $el.outerHeight();
84 displacement = placement + $el.outerWidth();
88 displacement = documentElement.clientHeight - placement;
92 displacement = documentElement.clientWidth - placement;
101 Drupal.displace = displace;
102 $.extend(Drupal.displace, {
105 calculateOffset: calculateOffset
107 })(jQuery, Drupal, Drupal.debounce);