Mercurial > hg > isophonics-drupal-site
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 |