azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 3.86 kB
JavaScript
var Location,LAYOUT_CALCULATION_MAX_TIMES=5,TOOLTIP_OFFSET=10;function distance(t,o){return Math.sqrt(Math.pow(t.x-o.x,2)+Math.pow(t.y-o.y,2))}function position(t,o,a,i,n,e,r){if(void 0===r&&(r=5e3),!e){if(!i||!n)return;e=pointFromOrigin(n,i.getBoundingClientRect())}var c=e.x,l=e.y,L=0,h=0;if(a&&(c+=a.horizontal,l+=a.vertical),o.horizontal!==Location.start||o.vertical!==Location.start){var s=document.documentElement.clientHeight,d=document.documentElement.clientWidth;switch(o.horizontal){case Location.end:c=d-c;break;case Location.center:L=-50}switch(o.vertical){case Location.end:l=s-l;break;case Location.center:h=-50}}o.horizontal!==Location.end?(t.style.left=c+r+"px",t.style.right=""):(t.style.left="",t.style.right=c+r+"px"),o.vertical!==Location.end?(t.style.top=l+r+"px",t.style.bottom=""):(t.style.top="",t.style.bottom=l+r+"px"),t.style.transform=0!==L||0!==h?"translate(".concat(L,"%, ").concat(h,"%)"):""}function updateLayout(t,o,a,i,n,e,r,c){void 0===r&&(r=5e3),void 0===c&&(c=0);var l,L=document.documentElement.clientHeight,h=document.documentElement.clientWidth,s=t.getBoundingClientRect(),d=Math.floor(s.bottom)>L,v=Math.floor(s.right)>h,f=Math.floor(s.left)<0,O=Math.floor(s.top)<0;(d||v||f||O)&&(e?(O!=d&&(O?s.bottom<L/2-TOOLTIP_OFFSET&&o.vertical===Location.end&&(o.vertical=Location.start):s.top>L/2+TOOLTIP_OFFSET&&o.vertical===Location.start&&(o.vertical=Location.end),a)&&(a.vertical=-a.vertical),f!=v&&(f?s.right<h/2-TOOLTIP_OFFSET&&o.horizontal===Location.end&&(o.horizontal=Location.start):s.left>h/2+TOOLTIP_OFFSET&&o.horizontal===Location.start&&(o.horizontal=Location.end),a)&&(a.horizontal=-a.horizontal)):n&&i&&(O!=d&&(O?s.bottom<L/2-TOOLTIP_OFFSET&&(o.vertical===Location.end&&n.vertical===Location.start?(o.vertical=Location.start,n.vertical=Location.end):(o.vertical===Location.center||o.vertical===Location.end&&n.vertical===Location.end)&&(o.vertical=Location.start,n.vertical=Location.start)):s.top>L/2+TOOLTIP_OFFSET&&(o.vertical===Location.start&&n.vertical===Location.end?(o.vertical=Location.end,n.vertical=Location.start):(o.vertical===Location.center||o.vertical===Location.start&&n.vertical===Location.start)&&(o.vertical=Location.end,n.vertical=Location.end)),a)&&(a.vertical=-a.vertical),f!=v)&&(f?s.right<h/2-TOOLTIP_OFFSET&&(o.horizontal===Location.end&&n.horizontal===Location.start?(o.horizontal=Location.start,n.horizontal=Location.end):(o.horizontal===Location.center||o.horizontal===Location.end&&n.horizontal===Location.end)&&(o.horizontal=Location.start,n.horizontal=Location.start)):s.left>h/2+TOOLTIP_OFFSET&&(o.horizontal===Location.start&&n.horizontal===Location.end?(o.horizontal=Location.end,n.horizontal=Location.start):(o.horizontal===Location.center||o.horizontal===Location.start&&n.horizontal===Location.start)&&(o.horizontal=Location.end,n.horizontal=Location.end)),a)&&(a.horizontal=-a.horizontal),position(t,o,a,i,n,e,r),s=t.getBoundingClientRect(),d=Math.floor(s.bottom)>L,v=Math.floor(s.right)>h,f=Math.floor(s.left)<0,(O=Math.floor(s.top)<0)||d||f||v)&&((O||d)&&(l=s.height-(O?-s.top:0)-(d?s.bottom-L:0)-5,t.style.maxHeight=l+"px"),(f||v)&&(l=s.width-(f?-s.left:0)-(v?s.right-h:0)-5,t.style.maxWidth=l+"px"),t.classList.add("overflow"),position(t,o,a,i,n,e,r),c<LAYOUT_CALCULATION_MAX_TIMES)&&(s=t.getBoundingClientRect(),d=Math.floor(s.bottom)>L,v=Math.floor(s.right)>h,f=Math.floor(s.left)<0,O=Math.floor(s.top)<0,d||v||f||O)&&updateLayout(t,o,a,i,n,e,r,++c)}function pointFromOrigin(t,o){var a,i;switch(t.horizontal){case Location.start:a=o.left;break;case Location.end:a=o.right;break;default:a=o.left+o.width/2}switch(t.vertical){case Location.start:i=o.top;break;case Location.end:i=o.bottom;break;default:i=o.top+o.height/2}return{x:a,y:i}}!function(t){t.start="start",t.center="center",t.end="end"}(Location=Location||{});export{Location,distance,position,updateLayout};