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);