import eventBinder from"./eventbinder.js";function isClose(num1,num2){return Math.abs(num1-num2)<.1}function isEqualRect(rect1,rect2){return!(!rect1||!rect2)&&isClose(rect1.left,rect2.left)&&isClose(rect1.top,rect2.top)&&isClose(rect1.width,rect2.width)&&isClose(rect1.height,rect2.height)}class VideoGlue{constructor(player,target){if(!player.supports("geometrycontrol"))throw new Error("VideoGlue: player does not support geometry control");this.player=player,this.target=target,this.lastRect=null,this.updatePositionBound=this.updatePosition.bind(this),this.requestPending=!1,this.changesInProgress=!1,this.transitionCounter=0,this.registerEvents(),this.runLoop()}registerEvents(){let eventTarget=this.target;for(;eventTarget.parentElement!==document.body;)eventTarget=eventTarget.parentElement;eventBinder.registerBound(this,eventTarget,"transitionstart",this.ontransitionStart,!0,!0),eventBinder.registerBound(this,eventTarget,"transitionend",this.ontransitionEnd,!0,!0),eventBinder.registerBound(this,eventTarget,"transitioncancel",this.ontransitionEnd,!0,!0),eventBinder.registerBound(this,window,"resize",this.onresize,!0,!0)}onresize(e){this.windowSize=null,this.runLoop()}ontransitionStart(e){this.transitionCounter++,this.changesInProgress=!0,this.runLoop()}ontransitionEnd(e){this.transitionCounter--,this.transitionCounter<=0&&(this.transitionCounter=0,this.changesInProgress=!1)}runLoop(){this.requestPending||(this.requestPending=!0,requestAnimationFrame(this.updatePositionBound))}updatePosition(){if(this.requestPending=!1,this.player&&this.target){var currentRect=this.target.getBoundingClientRect();if(!isEqualRect(this.lastRect,currentRect)||!this.windowSize){if(this.lastRect=currentRect,this.windowSize||(win=window,this.windowSize={innerHeight:win.innerHeight,innerWidth:win.innerWidth}),currentRect.left<6&¤tRect.top<6&&this.windowSize.innerWidth-currentRect.width<12&&this.windowSize.innerHeight-currentRect.height<12)return void this.player.resetBounds();var win=currentRect.left/this.windowSize.innerWidth,y=currentRect.top/this.windowSize.innerHeight,width=currentRect.width/this.windowSize.innerWidth,currentRect=currentRect.height/this.windowSize.innerHeight;this.player.setBoundsPercent(win,y,width,currentRect)}this.changesInProgress&&this.runLoop()}}destroy(){eventBinder.unregisterAll(this),this.player.resetBounds(),this.player=null,this.target=null,this.requestPending=!0,this.changesInProgress=!1}}export default VideoGlue;