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 = Drupal.displace.offsets = calculateOffsets();
29 if (typeof broadcast === 'undefined' || broadcast) {
30 $(document).trigger('drupalViewportOffsetChange', offsets);
35 function calculateOffsets() {
37 top: calculateOffset('top'),
38 right: calculateOffset('right'),
39 bottom: calculateOffset('bottom'),
40 left: calculateOffset('left')
44 function calculateOffset(edge) {
46 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
47 var n = displacingElements.length;
48 for (var i = 0; i < n; i++) {
49 var el = displacingElements[i];
51 if (el.style.display === 'none') {
55 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
57 if (isNaN(displacement)) {
58 displacement = getRawOffset(el, edge);
61 edgeOffset = Math.max(edgeOffset, displacement);
67 function getRawOffset(el, edge) {
69 var documentElement = document.documentElement;
71 var horizontal = edge === 'left' || edge === 'right';
73 var placement = $el.offset()[horizontal ? 'left' : 'top'];
75 placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0;
79 displacement = placement + $el.outerHeight();
83 displacement = placement + $el.outerWidth();
87 displacement = documentElement.clientHeight - placement;
91 displacement = documentElement.clientWidth - placement;
100 Drupal.displace = displace;
101 $.extend(Drupal.displace, {
104 calculateOffset: calculateOffset
106 })(jQuery, Drupal, Drupal.debounce);