{"version":3,"file":"wheel-of-fortune/script.js","mappings":"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","sources":["webpack://rewind-gutenblocks/./src/wheel-of-fortune/script.js"],"sourcesContent":["class WheelOfFortune {\n\tconstructor( selector ) {\n\t\tthis.nodeWrapper = document.querySelector( selector );\n\n\t\tthis.messageEL = this.nodeWrapper.querySelector(\n\t\t\t'.wheel-of-fortune__msg'\n\t\t);\n\n\t\tthis.hoverBox = this.nodeWrapper.querySelector(\n\t\t\t'.wheel-of-fortune__hover-box'\n\t\t);\n\n\t\tthis.msgTitle = this.messageEL.querySelector( 'h4' );\n\t\tthis.msgText = this.messageEL.querySelector( 'p' );\n\t\tthis.msgButton = this.messageEL.querySelector( '#spinAgain' );\n\t\tthis.closeButton = this.messageEL.querySelector( '#closeModal' );\n\t\tthis.hoverTitle = this.hoverBox.querySelector( 'h4' );\n\t\tthis.hoverText = this.hoverBox.querySelector( 'p' );\n\n\t\tif ( ! this.nodeWrapper ) return;\n\n\t\tthis.spin = document.querySelector( '#spinButton' );\n\t\tthis.wheel = this.nodeWrapper.querySelector( '.the-wheel' );\n\t\tthis.segments = this.wheel.querySelectorAll( '#segments path' );\n\t\tthis.indicator = this.nodeWrapper.querySelector(\n\t\t\t'.wheel-of-fortune__indicator'\n\t\t);\n\t\tthis.animation;\n\t\tthis.previousEndDegree = 0;\n\n\t\tconst messageJSON = document.getElementById( 'wheelSegmentsMap' );\n\t\tthis.messageMap = JSON.parse( messageJSON.textContent );\n\n\t\tthis.init();\n\t}\n\n\tinit() {\n\t\t// slightly spin the wheel until the actual button is clicked\n\t\tthis.slightlyRotate();\n\n\t\t// Only run the logic for windows matching media query of 992px and above\n\t\tif ( window.matchMedia( '(min-width: 992px)' ).matches ) {\n\t\t\tthis.handleHoverEffects();\n\t\t}\n\n\t\t// Listen for changes in the media query\n\t\twindow\n\t\t\t.matchMedia( '(min-width: 992px)' )\n\t\t\t.addEventListener( 'change', ( e ) => {\n\t\t\t\tif ( e.matches ) {\n\t\t\t\t\tthis.handleHoverEffects();\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up hover effects when the media query no longer matches\n\t\t\t\t\tthis.hoverBox.style.left = '-9999px';\n\t\t\t\t\tthis.hoverBox.style.top = '-9999px';\n\t\t\t\t\tthis.hoverBox.classList.add( 'd-lg-none' );\n\t\t\t\t\tthis.hoverBox.classList.remove( 'd-lg-block' );\n\t\t\t\t\tthis.animation.play();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.handleButtonClicks();\n\t}\n\n\thandleHoverEffects = () => {\n\t\t/**\n\t\t * Attach hover box to the cursor\n\t\t */\n\t\tthis.wheel.addEventListener( 'mousemove', ( e ) => {\n\t\t\tif ( this.nodeWrapper.dataset.rwWheelStatus !== 'initial' ) return;\n\t\t\tthis.animation.pause();\n\n\t\t\t// attach this.hoverBox to the position of the cursor\n\t\t\tthis.hoverBox.classList.remove( 'd-lg-none' );\n\t\t\tthis.hoverBox.classList.add( 'd-lg-block' );\n\t\t\tthis.hoverBox.style.left = e.clientX + 16 + 'px'; // Offset by 16px to the right\n\t\t\tthis.hoverBox.style.top = e.clientY + 16 + 'px'; // Offset by 16px downward\n\t\t} );\n\n\t\t/**\n\t\t * Hide hover box when the cursor leaves the wheel\n\t\t * and resume the spinning animation\n\t\t * */\n\t\tthis.wheel.addEventListener( 'mouseleave', () => {\n\t\t\tif ( this.nodeWrapper.dataset.rwWheelStatus !== 'initial' ) return;\n\t\t\t// reset hover box position\n\t\t\tthis.hoverBox.style.left = '-9999px';\n\t\t\tthis.hoverBox.style.top = '-9999px';\n\t\t\tthis.hoverBox.classList.add( 'd-lg-none' );\n\t\t\tthis.hoverBox.classList.remove( 'd-lg-block' );\n\n\t\t\tthis.animation.play();\n\t\t} );\n\n\t\t/**\n\t\t * Attach hover text to each segment\n\t\t */\n\t\tthis.segments.forEach( ( segment ) => {\n\t\t\tsegment.addEventListener( 'mouseenter', ( e ) => {\n\t\t\t\tif ( this.nodeWrapper.dataset.rwWheelStatus !== 'initial' )\n\t\t\t\t\treturn;\n\n\t\t\t\tthis.handleHoverText( segment.id );\n\t\t\t} );\n\t\t} );\n\t};\n\n\thandleButtonClicks = () => {\n\t\tthis.spin.addEventListener( 'click', this.handleSpinClick );\n\t\tthis.msgButton.addEventListener( 'click', this.handleSpinClick );\n\t\tthis.closeButton.addEventListener( 'click', this.handleCloseModal );\n\t};\n\n\thandleMessageText = ( segment ) => {\n\t\tlet title = 'You got lucky this time';\n\t\tlet message =\n\t\t\t'Disaster dodged—for now. But threats are rising and luck won’t hold forever. Dare to spin again and test your fate!';\n\n\t\t// Safe segments have ids like: segment-safe, segment-safe_1, etc.\n\t\tconst isSafeSegment = /^segment-safe(_\\d+)?$/.test( segment.id );\n\n\t\tif ( ! isSafeSegment ) {\n\t\t\ttitle = 'You just lost your data!';\n\t\t\tmessage =\n\t\t\t\t'Oh no! Your critical SaaS data is gone. But don’t worry, Rewind’s got you covered with automatic backups, so you can restore your lost data in just a few clicks.';\n\t\t}\n\n\t\tthis.msgTitle.innerText = title;\n\t\tthis.msgText.innerText = message;\n\t};\n\n\thandleHoverText = ( segmentID ) => {\n\t\tlet title = '';\n\t\tlet message = '';\n\n\t\t// if (\n\t\t// \tsegmentID === 'segment-safe' ||\n\t\t// \tsegmentID === 'circle' ||\n\t\t// \tsegmentID === 'segment-safe_2'\n\t\t// ) {\n\t\t// \t// this.hoverBox.classList.add( 'opacity-0' );\n\t\t// \treturn;\n\t\t// }\n\n\t\t// this.hoverBox.classList.remove( 'opacity-0' );\n\n\t\tconst currentMessageEl = this.messageMap?.[ segmentID ];\n\n\t\tif ( ! currentMessageEl ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttitle = currentMessageEl?.title || '';\n\t\tmessage = currentMessageEl?.text || '';\n\n\t\tthis.hoverTitle.innerText = title;\n\t\tthis.hoverText.innerText = message;\n\t};\n\n\thandleSpinClick = () => {\n\t\tif ( this.animation ) {\n\t\t\tthis.animation.cancel(); // Reset the animation if it already exists\n\t\t}\n\n\t\tthis.nodeWrapper.dataset.rwWheelStatus = '';\n\t\tthis.nodeWrapper.dataset.rwSelectedSegment = '';\n\n\t\tconst randomAdditionalDegrees = Math.random() * 360 + 1800;\n\t\tconst newEndDegree = this.previousEndDegree + randomAdditionalDegrees;\n\n\t\tthis.animation = this.wheel.animate(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttransform: `rotate(${ this.previousEndDegree }deg)`,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttransform: `rotate(${ newEndDegree }deg)`,\n\t\t\t\t},\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: 4000,\n\t\t\t\tdirection: 'normal',\n\t\t\t\teasing: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\n\t\t\t\tfill: 'forwards',\n\t\t\t\titerations: 1,\n\t\t\t}\n\t\t);\n\n\t\tthis.animation.onfinish = () => {\n\t\t\tconst currentIndicator = this.getSegmentUnderIndicator();\n\t\t\tthis.handleMessageText( currentIndicator.segment );\n\t\t\tthis.nodeWrapper.dataset.rwWheelStatus = 'finished';\n\t\t\tthis.nodeWrapper.dataset.rwSelectedSegment =\n\t\t\t\tcurrentIndicator.segment.id;\n\n\t\t\tconst event = new CustomEvent( 'onFortuneWheelSpin', {\n\t\t\t\tdetail: currentIndicator,\n\t\t\t} );\n\n\t\t\tthis.wheel.dispatchEvent( event );\n\t\t};\n\n\t\tthis.previousEndDegree = newEndDegree;\n\t};\n\n\tgetSegmentUnderIndicator = () => {\n\t\tif ( ! this.indicator || ! this.wheel || this.segments.length === 0 )\n\t\t\treturn null;\n\t\t// Get wheel center\n\t\tconst wheelRect = this.wheel.getBoundingClientRect();\n\t\tconst wheelCenterX = wheelRect.left + wheelRect.width / 2;\n\t\tconst wheelCenterY = wheelRect.top + wheelRect.height / 2;\n\n\t\t// Get indicator position (assuming it's at the top center)\n\t\tconst indicatorRect = this.indicator.getBoundingClientRect();\n\t\tconst indicatorX = indicatorRect.left + indicatorRect.width / 2;\n\t\tconst indicatorY = indicatorRect.top + indicatorRect.height / 2;\n\n\t\t// Get indicator angle\n\t\tconst indicatorAngle = Math.atan2(\n\t\t\tindicatorY - wheelCenterY,\n\t\t\tindicatorX - wheelCenterX\n\t\t);\n\n\t\tlet closestSegment = null;\n\t\tlet minAngleDiff = Infinity;\n\n\t\tthis.segments.forEach( ( segment ) => {\n\t\t\tconst segmentRect = segment.getBoundingClientRect();\n\t\t\tconst segmentX = segmentRect.left + segmentRect.width / 2;\n\t\t\tconst segmentY = segmentRect.top + segmentRect.height / 2;\n\n\t\t\t// Calculate segment angle\n\t\t\tconst segmentAngle = Math.atan2(\n\t\t\t\tsegmentY - wheelCenterY,\n\t\t\t\tsegmentX - wheelCenterX\n\t\t\t);\n\n\t\t\t// Find absolute angle difference\n\t\t\tlet angleDiff = Math.abs( segmentAngle - indicatorAngle );\n\t\t\tangleDiff = Math.min(\n\t\t\t\tangleDiff,\n\t\t\t\tMath.abs( angleDiff - 2 * Math.PI )\n\t\t\t); // Normalize\n\n\t\t\tif ( angleDiff < minAngleDiff ) {\n\t\t\t\tminAngleDiff = angleDiff;\n\t\t\t\tclosestSegment = segment;\n\t\t\t}\n\t\t} );\n\n\t\tconst segmentDetails = {\n\t\t\tsegment: closestSegment,\n\t\t\tsegmentName: closestSegment.innerText,\n\t\t};\n\n\t\treturn segmentDetails;\n\t};\n\n\tslightlyRotate = () => {\n\t\tthis.animation = this.wheel.animate(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttransform: `rotate(${ this.previousEndDegree }deg)`,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttransform: `rotate(${ this.previousEndDegree + 360 }deg)`,\n\t\t\t\t},\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: 100000,\n\t\t\t\tdirection: 'normal',\n\t\t\t\teasing: 'linear',\n\t\t\t\tfill: 'forwards',\n\t\t\t\titerations: Infinity,\n\t\t\t}\n\t\t);\n\t};\n\n\thandleCloseModal = ( e ) => {\n\t\te.preventDefault();\n\t\t// reset state\n\t\tthis.animation.cancel();\n\t\tthis.nodeWrapper.dataset.rwWheelStatus = 'initial';\n\t\tthis.nodeWrapper.dataset.rwSelectedSegment = '';\n\t\tthis.slightlyRotate();\n\t};\n}\n\nwindow.addEventListener( 'load', () => {\n\tnew WheelOfFortune( '.wheel-of-fortune' );\n} );\n"],"names":["WheelOfFortune","constructor","selector","nodeWrapper","document","querySelector","messageEL","hoverBox","msgTitle","msgText","msgButton","closeButton","hoverTitle","hoverText","spin","wheel","segments","querySelectorAll","indicator","animation","previousEndDegree","messageJSON","getElementById","messageMap","JSON","parse","textContent","init","slightlyRotate","window","matchMedia","matches","handleHoverEffects","addEventListener","e","style","left","top","classList","add","remove","play","handleButtonClicks","dataset","rwWheelStatus","pause","clientX","clientY","forEach","segment","handleHoverText","id","handleSpinClick","handleCloseModal","handleMessageText","title","message","isSafeSegment","test","innerText","segmentID","currentMessageEl","text","cancel","rwSelectedSegment","randomAdditionalDegrees","Math","random","newEndDegree","animate","transform","duration","direction","easing","fill","iterations","onfinish","currentIndicator","getSegmentUnderIndicator","event","CustomEvent","detail","dispatchEvent","length","wheelRect","getBoundingClientRect","wheelCenterX","width","wheelCenterY","height","indicatorRect","indicatorX","indicatorY","indicatorAngle","atan2","closestSegment","minAngleDiff","Infinity","segmentRect","segmentX","segmentY","segmentAngle","angleDiff","abs","min","PI","segmentDetails","segmentName","preventDefault"],"sourceRoot":""}