Chris@0: /** Chris@0: * DO NOT EDIT THIS FILE. Chris@0: * See the following change record for more information, Chris@0: * https://www.drupal.org/node/2815083 Chris@0: * @preserve Chris@0: **/ Chris@0: Chris@0: (function ($, Drupal, debounce) { Chris@0: var offsets = { Chris@0: top: 0, Chris@0: right: 0, Chris@0: bottom: 0, Chris@0: left: 0 Chris@0: }; Chris@0: Chris@0: function getRawOffset(el, edge) { Chris@0: var $el = $(el); Chris@0: var documentElement = document.documentElement; Chris@0: var displacement = 0; Chris@0: var horizontal = edge === 'left' || edge === 'right'; Chris@0: Chris@0: var placement = $el.offset()[horizontal ? 'left' : 'top']; Chris@0: Chris@0: placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0; Chris@0: Chris@0: switch (edge) { Chris@0: case 'top': Chris@0: displacement = placement + $el.outerHeight(); Chris@0: break; Chris@0: Chris@0: case 'left': Chris@0: displacement = placement + $el.outerWidth(); Chris@0: break; Chris@0: Chris@0: case 'bottom': Chris@0: displacement = documentElement.clientHeight - placement; Chris@0: break; Chris@0: Chris@0: case 'right': Chris@0: displacement = documentElement.clientWidth - placement; Chris@0: break; Chris@0: Chris@0: default: Chris@0: displacement = 0; Chris@0: } Chris@0: return displacement; Chris@0: } Chris@0: Chris@17: function calculateOffset(edge) { Chris@17: var edgeOffset = 0; Chris@17: var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']'); Chris@17: var n = displacingElements.length; Chris@17: for (var i = 0; i < n; i++) { Chris@17: var el = displacingElements[i]; Chris@17: Chris@17: if (el.style.display === 'none') { Chris@17: continue; Chris@17: } Chris@17: Chris@17: var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10); Chris@17: Chris@17: if (isNaN(displacement)) { Chris@17: displacement = getRawOffset(el, edge); Chris@17: } Chris@17: Chris@17: edgeOffset = Math.max(edgeOffset, displacement); Chris@17: } Chris@17: Chris@17: return edgeOffset; Chris@17: } Chris@17: Chris@17: function calculateOffsets() { Chris@17: return { Chris@17: top: calculateOffset('top'), Chris@17: right: calculateOffset('right'), Chris@17: bottom: calculateOffset('bottom'), Chris@17: left: calculateOffset('left') Chris@17: }; Chris@17: } Chris@17: Chris@17: function displace(broadcast) { Chris@17: offsets = calculateOffsets(); Chris@17: Drupal.displace.offsets = offsets; Chris@17: if (typeof broadcast === 'undefined' || broadcast) { Chris@17: $(document).trigger('drupalViewportOffsetChange', offsets); Chris@17: } Chris@17: return offsets; Chris@17: } Chris@17: Chris@17: Drupal.behaviors.drupalDisplace = { Chris@17: attach: function attach() { Chris@17: if (this.displaceProcessed) { Chris@17: return; Chris@17: } Chris@17: this.displaceProcessed = true; Chris@17: Chris@17: $(window).on('resize.drupalDisplace', debounce(displace, 200)); Chris@17: } Chris@17: }; Chris@17: Chris@0: Drupal.displace = displace; Chris@0: $.extend(Drupal.displace, { Chris@0: offsets: offsets, Chris@0: Chris@0: calculateOffset: calculateOffset Chris@0: }); Chris@0: })(jQuery, Drupal, Drupal.debounce);