annotate core/misc/displace.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 /**
Chris@0 2 * DO NOT EDIT THIS FILE.
Chris@0 3 * See the following change record for more information,
Chris@0 4 * https://www.drupal.org/node/2815083
Chris@0 5 * @preserve
Chris@0 6 **/
Chris@0 7
Chris@0 8 (function ($, Drupal, debounce) {
Chris@0 9 var offsets = {
Chris@0 10 top: 0,
Chris@0 11 right: 0,
Chris@0 12 bottom: 0,
Chris@0 13 left: 0
Chris@0 14 };
Chris@0 15
Chris@0 16 function getRawOffset(el, edge) {
Chris@0 17 var $el = $(el);
Chris@0 18 var documentElement = document.documentElement;
Chris@0 19 var displacement = 0;
Chris@0 20 var horizontal = edge === 'left' || edge === 'right';
Chris@0 21
Chris@0 22 var placement = $el.offset()[horizontal ? 'left' : 'top'];
Chris@0 23
Chris@0 24 placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0;
Chris@0 25
Chris@0 26 switch (edge) {
Chris@0 27 case 'top':
Chris@0 28 displacement = placement + $el.outerHeight();
Chris@0 29 break;
Chris@0 30
Chris@0 31 case 'left':
Chris@0 32 displacement = placement + $el.outerWidth();
Chris@0 33 break;
Chris@0 34
Chris@0 35 case 'bottom':
Chris@0 36 displacement = documentElement.clientHeight - placement;
Chris@0 37 break;
Chris@0 38
Chris@0 39 case 'right':
Chris@0 40 displacement = documentElement.clientWidth - placement;
Chris@0 41 break;
Chris@0 42
Chris@0 43 default:
Chris@0 44 displacement = 0;
Chris@0 45 }
Chris@0 46 return displacement;
Chris@0 47 }
Chris@0 48
Chris@17 49 function calculateOffset(edge) {
Chris@17 50 var edgeOffset = 0;
Chris@17 51 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
Chris@17 52 var n = displacingElements.length;
Chris@17 53 for (var i = 0; i < n; i++) {
Chris@17 54 var el = displacingElements[i];
Chris@17 55
Chris@17 56 if (el.style.display === 'none') {
Chris@17 57 continue;
Chris@17 58 }
Chris@17 59
Chris@17 60 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
Chris@17 61
Chris@17 62 if (isNaN(displacement)) {
Chris@17 63 displacement = getRawOffset(el, edge);
Chris@17 64 }
Chris@17 65
Chris@17 66 edgeOffset = Math.max(edgeOffset, displacement);
Chris@17 67 }
Chris@17 68
Chris@17 69 return edgeOffset;
Chris@17 70 }
Chris@17 71
Chris@17 72 function calculateOffsets() {
Chris@17 73 return {
Chris@17 74 top: calculateOffset('top'),
Chris@17 75 right: calculateOffset('right'),
Chris@17 76 bottom: calculateOffset('bottom'),
Chris@17 77 left: calculateOffset('left')
Chris@17 78 };
Chris@17 79 }
Chris@17 80
Chris@17 81 function displace(broadcast) {
Chris@17 82 offsets = calculateOffsets();
Chris@17 83 Drupal.displace.offsets = offsets;
Chris@17 84 if (typeof broadcast === 'undefined' || broadcast) {
Chris@17 85 $(document).trigger('drupalViewportOffsetChange', offsets);
Chris@17 86 }
Chris@17 87 return offsets;
Chris@17 88 }
Chris@17 89
Chris@17 90 Drupal.behaviors.drupalDisplace = {
Chris@17 91 attach: function attach() {
Chris@17 92 if (this.displaceProcessed) {
Chris@17 93 return;
Chris@17 94 }
Chris@17 95 this.displaceProcessed = true;
Chris@17 96
Chris@17 97 $(window).on('resize.drupalDisplace', debounce(displace, 200));
Chris@17 98 }
Chris@17 99 };
Chris@17 100
Chris@0 101 Drupal.displace = displace;
Chris@0 102 $.extend(Drupal.displace, {
Chris@0 103 offsets: offsets,
Chris@0 104
Chris@0 105 calculateOffset: calculateOffset
Chris@0 106 });
Chris@0 107 })(jQuery, Drupal, Drupal.debounce);