comparison core/misc/displace.js @ 0:4c8ae668cc8c

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