annotate 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
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 Drupal.behaviors.drupalDisplace = {
Chris@0 17 attach: function attach() {
Chris@0 18 if (this.displaceProcessed) {
Chris@0 19 return;
Chris@0 20 }
Chris@0 21 this.displaceProcessed = true;
Chris@0 22
Chris@0 23 $(window).on('resize.drupalDisplace', debounce(displace, 200));
Chris@0 24 }
Chris@0 25 };
Chris@0 26
Chris@0 27 function displace(broadcast) {
Chris@0 28 offsets = calculateOffsets();
Chris@0 29 Drupal.displace.offsets = offsets;
Chris@0 30 if (typeof broadcast === 'undefined' || broadcast) {
Chris@0 31 $(document).trigger('drupalViewportOffsetChange', offsets);
Chris@0 32 }
Chris@0 33 return offsets;
Chris@0 34 }
Chris@0 35
Chris@0 36 function calculateOffsets() {
Chris@0 37 return {
Chris@0 38 top: calculateOffset('top'),
Chris@0 39 right: calculateOffset('right'),
Chris@0 40 bottom: calculateOffset('bottom'),
Chris@0 41 left: calculateOffset('left')
Chris@0 42 };
Chris@0 43 }
Chris@0 44
Chris@0 45 function calculateOffset(edge) {
Chris@0 46 var edgeOffset = 0;
Chris@0 47 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
Chris@0 48 var n = displacingElements.length;
Chris@0 49 for (var i = 0; i < n; i++) {
Chris@0 50 var el = displacingElements[i];
Chris@0 51
Chris@0 52 if (el.style.display === 'none') {
Chris@0 53 continue;
Chris@0 54 }
Chris@0 55
Chris@0 56 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
Chris@0 57
Chris@0 58 if (isNaN(displacement)) {
Chris@0 59 displacement = getRawOffset(el, edge);
Chris@0 60 }
Chris@0 61
Chris@0 62 edgeOffset = Math.max(edgeOffset, displacement);
Chris@0 63 }
Chris@0 64
Chris@0 65 return edgeOffset;
Chris@0 66 }
Chris@0 67
Chris@0 68 function getRawOffset(el, edge) {
Chris@0 69 var $el = $(el);
Chris@0 70 var documentElement = document.documentElement;
Chris@0 71 var displacement = 0;
Chris@0 72 var horizontal = edge === 'left' || edge === 'right';
Chris@0 73
Chris@0 74 var placement = $el.offset()[horizontal ? 'left' : 'top'];
Chris@0 75
Chris@0 76 placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0;
Chris@0 77
Chris@0 78 switch (edge) {
Chris@0 79 case 'top':
Chris@0 80 displacement = placement + $el.outerHeight();
Chris@0 81 break;
Chris@0 82
Chris@0 83 case 'left':
Chris@0 84 displacement = placement + $el.outerWidth();
Chris@0 85 break;
Chris@0 86
Chris@0 87 case 'bottom':
Chris@0 88 displacement = documentElement.clientHeight - placement;
Chris@0 89 break;
Chris@0 90
Chris@0 91 case 'right':
Chris@0 92 displacement = documentElement.clientWidth - placement;
Chris@0 93 break;
Chris@0 94
Chris@0 95 default:
Chris@0 96 displacement = 0;
Chris@0 97 }
Chris@0 98 return displacement;
Chris@0 99 }
Chris@0 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);