kamrify commited on
Commit
8e19ba1
·
1 Parent(s): 68ab4bd

Popover positioning

Browse files
Files changed (1) hide show
  1. src/popover.ts +32 -6
src/popover.ts CHANGED
@@ -64,20 +64,46 @@ function calculatePopoverPosition(element: Element) {
64
  const popoverArrowDimensions = popover.arrow.getBoundingClientRect();
65
  const elementDimensions = element.getBoundingClientRect();
66
 
67
- const popoverWidth = popoverDimensions.width + popoverPadding;
68
- const popoverHeight = popoverDimensions.height + popoverPadding;
69
 
70
- const topValue = elementDimensions.top - popoverHeight;
71
  const isTopOptimal = topValue >= 0;
72
 
73
- const bottomValue = window.innerHeight - (elementDimensions.bottom + popoverHeight);
74
  const isBottomOptimal = bottomValue >= 0;
75
 
76
- const leftValue = elementDimensions.left - popoverWidth;
77
  const isLeftOptimal = leftValue >= 0;
78
 
79
- const rightValue = window.innerWidth - (elementDimensions.right + popoverWidth);
80
  const isRightOptimal = rightValue >= 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
82
 
83
  function createPopover(): PopoverDOM {
 
64
  const popoverArrowDimensions = popover.arrow.getBoundingClientRect();
65
  const elementDimensions = element.getBoundingClientRect();
66
 
67
+ const popoverPaddedWidth = popoverDimensions.width + popoverPadding;
68
+ const popoverPaddedHeight = popoverDimensions.height + popoverPadding;
69
 
70
+ const topValue = elementDimensions.top - popoverPaddedHeight;
71
  const isTopOptimal = topValue >= 0;
72
 
73
+ const bottomValue = window.innerHeight - (elementDimensions.bottom + popoverPaddedHeight);
74
  const isBottomOptimal = bottomValue >= 0;
75
 
76
+ const leftValue = elementDimensions.left - popoverPaddedWidth;
77
  const isLeftOptimal = leftValue >= 0;
78
 
79
+ const rightValue = window.innerWidth - (elementDimensions.right + popoverPaddedWidth);
80
  const isRightOptimal = rightValue >= 0;
81
+
82
+ const noneOptimal = !isTopOptimal && !isBottomOptimal && !isLeftOptimal && !isRightOptimal;
83
+ if (noneOptimal) {
84
+ return {
85
+ left: window.innerWidth / 2 - popoverDimensions.width / 2,
86
+ bottom: 10,
87
+ };
88
+ }
89
+
90
+ // @todo placement based on the side and alignment
91
+ }
92
+
93
+ function getLeftValueAfterAlignment(element: Element) {
94
+ if (!popover) {
95
+ return;
96
+ }
97
+
98
+ const popoverRect = popover.wrapper.getBoundingClientRect();
99
+ const elementRect = element.getBoundingClientRect();
100
+
101
+ const requiredAlignment = 'left';
102
+ const popoverWidth = popoverRect.width;
103
+ const pos = element.getBoundingClientRect().left;
104
+ const end = window.innerWidth;
105
+ const elementLength = elementRect.width;
106
+ const extraPadding = popover.arrow.getBoundingClientRect().width;
107
  }
108
 
109
  function createPopover(): PopoverDOM {