@@ -151,8 +151,54 @@ function libraryFromGraph(fbpGraph) {
151
151
return library ;
152
152
}
153
153
154
+ /**
155
+ * Returns offsets for mouse position.
156
+ *
157
+ * This function need to calculate correct offset in case the-graph
158
+ * used as positioned in not (0, 0) coordinates.
159
+ *
160
+ * @param initialElement - event target.
161
+ * @param upperElement - upper the-graph element (see usages for example).
162
+ * @returns {{top: number, left: number} }
163
+ */
164
+ function getOffsetUpToElement ( initialElement , upperElement ) {
165
+ var offset = { top : 0 , left : 0 } ;
166
+ var offsetParent = initialElement ;
167
+
168
+ while ( offsetParent != null && offsetParent != upperElement ) {
169
+ offset . left += offsetParent . offsetLeft || 0 ;
170
+ offset . top += offsetParent . offsetTop || 0 ;
171
+ offsetParent = offsetParent . parentElement ;
172
+ }
173
+
174
+ return offset ;
175
+ }
176
+
177
+
178
+ /**
179
+ * Returns the position {y: Y, x: X} where the provided event was triggered.
180
+ *
181
+ * @param event - event triggered from the UI.
182
+ * @returns {{y: number, x: number} }
183
+ */
184
+ function getEventPosition ( event ) {
185
+ var offset = getOffsetUpToElement ( event . currentTarget , event . target ) ;
186
+
187
+ // The offset should be applied only to clientX/Y if layerX/Y don't exist.
188
+ // TODO: Check if there is another way of doing this without using layerX/Y.
189
+ // The use of clientX/Y works in most cases except when there is margin/padding in parent elements
190
+ // That affects the value of `offset`.
191
+ return {
192
+ y : event . layerY || ( event . clientY - offset . top ) || 0 ,
193
+ x : event . layerX || ( event . clientX - offset . left ) || 0
194
+ } ;
195
+ }
196
+
197
+
154
198
module . exports = {
155
199
mergeComponentDefinition : mergeComponentDefinition ,
156
200
componentsFromGraph : componentsFromGraph ,
157
201
libraryFromGraph : libraryFromGraph ,
202
+ getOffsetUpToElement : getOffsetUpToElement ,
203
+ getEventPosition : getEventPosition ,
158
204
} ;
0 commit comments