-
Notifications
You must be signed in to change notification settings - Fork 27
/
placeRightBelow.js
43 lines (36 loc) · 1.13 KB
/
placeRightBelow.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
export default ({
// The gap between the text and the selection and the popover
// comes from `props.gap`
gap,
// by default frame === window but this might
// change in future. For example if we'd like to restrict
// placement to a container other than window
// if frame is window, frameLeft and frameTop are 0
frameHeight,
frameWidth,
frameLeft,
frameTop,
// the dimensions of the popover
boxHeight,
/* boxWidth, */
// the dimensions and position of the selected text
selectionTop,
selectionLeft,
/* selectionWidth, */
selectionHeight
}) => {
const style = { position: "fixed" };
style.left = selectionLeft;
style.top = selectionTop + selectionHeight + gap;
// if the popover is placed too far to the right, align with right edge
if (style.right > frameWidth) {
delete style.left;
style.right = frameLeft + frameWidth;
}
// if the popover is placed below the frame, position above
// selection instead if there's room
if (style.top + boxHeight > frameHeight && selectionTop - (gap + boxHeight) > frameTop) {
style.top = selectionTop - (gap + boxHeight);
}
return style;
};