comparison core/misc/displace.js @ 17:129ea1e6d783

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:21:36 +0000
parents 1fec387a4317
children
comparison
equal deleted inserted replaced
16:c2387f117808 17:129ea1e6d783
10 top: 0, 10 top: 0,
11 right: 0, 11 right: 0,
12 bottom: 0, 12 bottom: 0,
13 left: 0 13 left: 0
14 }; 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 = calculateOffsets();
29 Drupal.displace.offsets = offsets;
30 if (typeof broadcast === 'undefined' || broadcast) {
31 $(document).trigger('drupalViewportOffsetChange', offsets);
32 }
33 return offsets;
34 }
35
36 function calculateOffsets() {
37 return {
38 top: calculateOffset('top'),
39 right: calculateOffset('right'),
40 bottom: calculateOffset('bottom'),
41 left: calculateOffset('left')
42 };
43 }
44
45 function calculateOffset(edge) {
46 var edgeOffset = 0;
47 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
48 var n = displacingElements.length;
49 for (var i = 0; i < n; i++) {
50 var el = displacingElements[i];
51
52 if (el.style.display === 'none') {
53 continue;
54 }
55
56 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
57
58 if (isNaN(displacement)) {
59 displacement = getRawOffset(el, edge);
60 }
61
62 edgeOffset = Math.max(edgeOffset, displacement);
63 }
64
65 return edgeOffset;
66 }
67 15
68 function getRawOffset(el, edge) { 16 function getRawOffset(el, edge) {
69 var $el = $(el); 17 var $el = $(el);
70 var documentElement = document.documentElement; 18 var documentElement = document.documentElement;
71 var displacement = 0; 19 var displacement = 0;
96 displacement = 0; 44 displacement = 0;
97 } 45 }
98 return displacement; 46 return displacement;
99 } 47 }
100 48
49 function calculateOffset(edge) {
50 var edgeOffset = 0;
51 var displacingElements = document.querySelectorAll('[data-offset-' + edge + ']');
52 var n = displacingElements.length;
53 for (var i = 0; i < n; i++) {
54 var el = displacingElements[i];
55
56 if (el.style.display === 'none') {
57 continue;
58 }
59
60 var displacement = parseInt(el.getAttribute('data-offset-' + edge), 10);
61
62 if (isNaN(displacement)) {
63 displacement = getRawOffset(el, edge);
64 }
65
66 edgeOffset = Math.max(edgeOffset, displacement);
67 }
68
69 return edgeOffset;
70 }
71
72 function calculateOffsets() {
73 return {
74 top: calculateOffset('top'),
75 right: calculateOffset('right'),
76 bottom: calculateOffset('bottom'),
77 left: calculateOffset('left')
78 };
79 }
80
81 function displace(broadcast) {
82 offsets = calculateOffsets();
83 Drupal.displace.offsets = offsets;
84 if (typeof broadcast === 'undefined' || broadcast) {
85 $(document).trigger('drupalViewportOffsetChange', offsets);
86 }
87 return offsets;
88 }
89
90 Drupal.behaviors.drupalDisplace = {
91 attach: function attach() {
92 if (this.displaceProcessed) {
93 return;
94 }
95 this.displaceProcessed = true;
96
97 $(window).on('resize.drupalDisplace', debounce(displace, 200));
98 }
99 };
100
101 Drupal.displace = displace; 101 Drupal.displace = displace;
102 $.extend(Drupal.displace, { 102 $.extend(Drupal.displace, {
103 offsets: offsets, 103 offsets: offsets,
104 104
105 calculateOffset: calculateOffset 105 calculateOffset: calculateOffset