Mercurial > hg > cmmr2012-drupal-site
comparison core/misc/displace.js @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
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 = 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 | |
68 function getRawOffset(el, edge) { | |
69 var $el = $(el); | |
70 var documentElement = document.documentElement; | |
71 var displacement = 0; | |
72 var horizontal = edge === 'left' || edge === 'right'; | |
73 | |
74 var placement = $el.offset()[horizontal ? 'left' : 'top']; | |
75 | |
76 placement -= window['scroll' + (horizontal ? 'X' : 'Y')] || document.documentElement['scroll' + (horizontal ? 'Left' : 'Top')] || 0; | |
77 | |
78 switch (edge) { | |
79 case 'top': | |
80 displacement = placement + $el.outerHeight(); | |
81 break; | |
82 | |
83 case 'left': | |
84 displacement = placement + $el.outerWidth(); | |
85 break; | |
86 | |
87 case 'bottom': | |
88 displacement = documentElement.clientHeight - placement; | |
89 break; | |
90 | |
91 case 'right': | |
92 displacement = documentElement.clientWidth - placement; | |
93 break; | |
94 | |
95 default: | |
96 displacement = 0; | |
97 } | |
98 return displacement; | |
99 } | |
100 | |
101 Drupal.displace = displace; | |
102 $.extend(Drupal.displace, { | |
103 offsets: offsets, | |
104 | |
105 calculateOffset: calculateOffset | |
106 }); | |
107 })(jQuery, Drupal, Drupal.debounce); |