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 function getRawOffset(el, edge) {
18 var documentElement = document.documentElement;
20 var horizontal = edge === 'left' || edge === 'right';
22 var placement = $el.offset()[horizontal ? 'left' : 'top'];
24 placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0;
28 displacement = placement + $el.outerHeight();
32 displacement = placement + $el.outerWidth();
36 displacement = documentElement.clientHeight - placement;
40 displacement = documentElement.clientWidth - placement;
49 function calculateOffset(edge) {
51 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
52 var n = displacingElements.length;
53 for (var i = 0; i < n; i++) {
54 var el = displacingElements[i];
56 if (el.style.display === 'none') {
60 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
62 if (isNaN(displacement)) {
63 displacement = getRawOffset(el, edge);
66 edgeOffset = Math.max(edgeOffset, displacement);
72 function calculateOffsets() {
74 top: calculateOffset('top'),
75 right: calculateOffset('right'),
76 bottom: calculateOffset('bottom'),
77 left: calculateOffset('left')
81 function displace(broadcast) {
82 offsets = calculateOffsets();
83 Drupal.displace.offsets = offsets;
84 if (typeof broadcast === 'undefined' || broadcast) {
85 $(document).trigger('drupalViewportOffsetChange', offsets);
90 Drupal.behaviors.drupalDisplace = {
91 attach: function attach() {
92 if (this.displaceProcessed) {
95 this.displaceProcessed = true;
97 $(window).on('resize.drupalDisplace', debounce(displace, 200));
101 Drupal.displace = displace;
102 $.extend(Drupal.displace, {
105 calculateOffset: calculateOffset
107 })(jQuery, Drupal, Drupal.debounce);