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