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); |