autonomous.contact/public/js/_utils.js
2025-10-15 17:50:48 -07:00

40 lines
1 KiB
JavaScript

function get_best_coords_for_popup(_options) {
const viewport_width = document.body.getBoundingClientRect().width;
const viewport_height = document.body.getBoundingClientRect().height;
const options = {
offset: {
x: 0,
y: 0,
},
popup: {
width: 200,
height: 200,
},
..._options,
};
const target = options.target ?? {
x:
options.target_element?.getBoundingClientRect().left ??
viewport_width / 2 - options.popup.width / 2,
y:
options.target_element?.getBoundingClientRect().top ??
viewport_height / 2 - options.popup.height / 2,
};
const best_coords = {
x: target.x + options.offset.x,
y: target.y + options.offset.y,
};
if (target.x + options.offset.x + options.popup.width + options.offset.x > viewport_width) {
best_coords.x = Math.max(0, target.x - options.popup.width + options.offset.x);
}
if (target.y + options.offset.y + options.popup.height + options.offset.y > viewport_height) {
best_coords.y = Math.max(0, target.y - options.popup.height + options.offset.y);
}
return best_coords;
}