Mercurial > hg > cmmr2012-drupal-site
diff core/misc/displace.js @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/misc/displace.js Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,107 @@ +/** +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ + +(function ($, Drupal, debounce) { + var offsets = { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; + + Drupal.behaviors.drupalDisplace = { + attach: function attach() { + if (this.displaceProcessed) { + return; + } + this.displaceProcessed = true; + + $(window).on('resize.drupalDisplace', debounce(displace, 200)); + } + }; + + function displace(broadcast) { + offsets = calculateOffsets(); + Drupal.displace.offsets = offsets; + if (typeof broadcast === 'undefined' || broadcast) { + $(document).trigger('drupalViewportOffsetChange', offsets); + } + return offsets; + } + + function calculateOffsets() { + return { + top: calculateOffset('top'), + right: calculateOffset('right'), + bottom: calculateOffset('bottom'), + left: calculateOffset('left') + }; + } + + function calculateOffset(edge) { + var edgeOffset = 0; + var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']'); + var n = displacingElements.length; + for (var i = 0; i < n; i++) { + var el = displacingElements[i]; + + if (el.style.display === 'none') { + continue; + } + + var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10); + + if (isNaN(displacement)) { + displacement = getRawOffset(el, edge); + } + + edgeOffset = Math.max(edgeOffset, displacement); + } + + return edgeOffset; + } + + function getRawOffset(el, edge) { + var $el = $(el); + var documentElement = document.documentElement; + var displacement = 0; + var horizontal = edge === 'left' || edge === 'right'; + + var placement = $el.offset()[horizontal ? 'left' : 'top']; + + placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0; + + switch (edge) { + case 'top': + displacement = placement + $el.outerHeight(); + break; + + case 'left': + displacement = placement + $el.outerWidth(); + break; + + case 'bottom': + displacement = documentElement.clientHeight - placement; + break; + + case 'right': + displacement = documentElement.clientWidth - placement; + break; + + default: + displacement = 0; + } + return displacement; + } + + Drupal.displace = displace; + $.extend(Drupal.displace, { + offsets: offsets, + + calculateOffset: calculateOffset + }); +})(jQuery, Drupal, Drupal.debounce); \ No newline at end of file