"use strict"; (function() { var ERROR_MESSAGE_MAP = [ "Oops! Protocol version mismatch.", "Oops! Not authorized to join domain.", "Oops! Connection timed out.", "Oops! The domain is full.", "Oops! Something went wrong." ]; var PROTOCOL_VERSION_MISMATCH = 1; var NOT_AUTHORIZED = 3; var DOMAIN_FULL = 4; var TIMEOUT = 5; var hardRefusalErrors = [ PROTOCOL_VERSION_MISMATCH, NOT_AUTHORIZED, TIMEOUT, DOMAIN_FULL ]; var timer = null; var isErrorState = false; function getOopsText() { var error = Window.getLastDomainConnectionError(); var errorMessageMapIndex = hardRefusalErrors.indexOf(error); if (error === -1) { // not an error. return ""; } else if (errorMessageMapIndex >= 0) { return ERROR_MESSAGE_MAP[errorMessageMapIndex]; } else { // some other text. return ERROR_MESSAGE_MAP[ERROR_MESSAGE_MAP.length - 1]; } }; var oopsDimensions = {x: 4.2, y: 0.8}; var redirectOopsText = Overlays.addOverlay("text3d", { name: "oopsText", position: {x: 0, y: 1.6763916015625, z: 1.45927095413208}, rotation: {x: -4.57763671875e-05, y: 0.4957197904586792, z: -7.62939453125e-05, w: 0.8684672117233276}, text: getOopsText(), textAlpha: 1, backgroundColor: {x: 0, y: 0, z:0}, backgroundAlpha: 0, lineHeight: 0.10, leftMargin: 0.538373570564886, visible: false, emissive: true, ignoreRayIntersection: true, dimensions: oopsDimensions, grabbable: false, }); var tryAgainImageNeutral = Overlays.addOverlay("image3d", { name: "tryAgainImage", localPosition: {x: -0.6, y: -0.6, z: 0.0}, url: Script.resourcesPath() + "images/interstitialPage/button.png", alpha: 1, visible: false, emissive: true, ignoreRayIntersection: false, grabbable: false, orientation: Overlays.getProperty(redirectOopsText, "orientation"), parentID: redirectOopsText }); var tryAgainImageHover = Overlays.addOverlay("image3d", { name: "tryAgainImageHover", localPosition: {x: -0.6, y: -0.6, z: 0.0}, url: Script.resourcesPath() + "images/interstitialPage/button_hover.png", alpha: 1, visible: false, emissive: true, ignoreRayIntersection: false, grabbable: false, orientation: Overlays.getProperty(redirectOopsText, "orientation"), parentID: redirectOopsText }); var tryAgainText = Overlays.addOverlay("text3d", { name: "tryAgainText", localPosition: {x: -0.6, y: -0.962, z: 0.0}, text: "Try Again", textAlpha: 1, backgroundAlpha: 0.00393, lineHeight: 0.08, visible: false, emissive: true, ignoreRayIntersection: true, grabbable: false, orientation: Overlays.getProperty(redirectOopsText, "orientation"), parentID: redirectOopsText }); var backImageNeutral = Overlays.addOverlay("image3d", { name: "backImage", localPosition: {x: 0.6, y: -0.6, z: 0.0}, url: Script.resourcesPath() + "images/interstitialPage/button.png", alpha: 1, visible: false, emissive: true, ignoreRayIntersection: false, grabbable: false, orientation: Overlays.getProperty(redirectOopsText, "orientation"), parentID: redirectOopsText }); var backImageHover = Overlays.addOverlay("image3d", { name: "backImageHover", localPosition: {x: 0.6, y: -0.6, z: 0.0}, url: Script.resourcesPath() + "images/interstitialPage/button_hover.png", alpha: 1, visible: false, emissive: true, ignoreRayIntersection: false, grabbable: false, orientation: Overlays.getProperty(redirectOopsText, "orientation"), parentID: redirectOopsText }); var backText = Overlays.addOverlay("text3d", { name: "backText", localPosition: {x: 0.6, y: -0.962, z: 0.0}, text: "Back", textAlpha: 1, backgroundAlpha: 0.00393, lineHeight: 0.08, visible: false, emissive: true, ignoreRayIntersection: true, grabbable: false, orientation: Overlays.getProperty(redirectOopsText, "orientation"), parentID: redirectOopsText }); function toggleOverlays(isInErrorState) { isErrorState = isInErrorState; if (!isInErrorState) { var properties = { visible: false }; Overlays.editOverlay(redirectOopsText, properties); Overlays.editOverlay(tryAgainImageNeutral, properties); Overlays.editOverlay(tryAgainImageHover, properties); Overlays.editOverlay(backImageNeutral, properties); Overlays.editOverlay(backImageHover, properties); Overlays.editOverlay(tryAgainText, properties); Overlays.editOverlay(backText, properties); return; } var oopsText = getOopsText(); // if oopsText === "", it was a success. var overlaysVisible = (oopsText !== ""); // for catching init or if error state were to be different. isErrorState = overlaysVisible; var properties = { visible: overlaysVisible }; var textWidth = Overlays.textSize(redirectOopsText, oopsText).width; var textOverlayWidth = oopsDimensions.x; var oopsTextProperties = { visible: overlaysVisible, text: oopsText, textAlpha: overlaysVisible, // either visible or invisible. 0 doesn't work in Mac. backgroundAlpha: overlaysVisible * 0.00393, leftMargin: (textOverlayWidth - textWidth) / 2 }; var tryAgainTextWidth = Overlays.textSize(tryAgainText, "Try Again").width; var tryAgainImageWidth = Overlays.getProperty(tryAgainImageNeutral, "dimensions").x; var tryAgainTextProperties = { visible: overlaysVisible, leftMargin: (tryAgainImageWidth - tryAgainTextWidth) / 2 }; var backTextWidth = Overlays.textSize(backText, "Back").width; var backImageWidth = Overlays.getProperty(backImageNeutral, "dimensions").x; var backTextProperties = { visible: overlaysVisible, leftMargin: (backImageWidth - backTextWidth) / 2 }; Overlays.editOverlay(redirectOopsText, oopsTextProperties); Overlays.editOverlay(tryAgainImageNeutral, properties); Overlays.editOverlay(backImageNeutral, properties); Overlays.editOverlay(tryAgainImageHover, {visible: false}); Overlays.editOverlay(backImageHover, {visible: false}); Overlays.editOverlay(tryAgainText, tryAgainTextProperties); Overlays.editOverlay(backText, backTextProperties); } function clickedOnOverlay(overlayID, event) { if (event.isRightButton) { // don't allow right-clicks. return; } if (tryAgainImageHover === overlayID) { location.goToLastAddress(); } else if (backImageHover === overlayID && location.canGoBack()) { location.goBack(); } } function cleanup() { Script.clearInterval(timer); timer = null; Overlays.deleteOverlay(redirectOopsText); Overlays.deleteOverlay(tryAgainImageNeutral); Overlays.deleteOverlay(backImageNeutral); Overlays.deleteOverlay(tryAgainImageHover); Overlays.deleteOverlay(backImageHover); Overlays.deleteOverlay(tryAgainText); Overlays.deleteOverlay(backText); } toggleOverlays(true); Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay); Overlays.hoverEnterOverlay.connect(function(overlayID, event) { if (!isErrorState) { // don't allow hover overlay events to get caught if it's not in error state anymore. return; } if (overlayID === backImageNeutral && location.canGoBack()) { Overlays.editOverlay(backImageNeutral, {visible: false}); Overlays.editOverlay(backImageHover, {visible: true}); } if (overlayID === tryAgainImageNeutral) { Overlays.editOverlay(tryAgainImageNeutral, {visible: false}); Overlays.editOverlay(tryAgainImageHover, {visible: true}); } }); Overlays.hoverLeaveOverlay.connect(function(overlayID, event) { if (!isErrorState) { // don't allow hover overlay events to get caught if it's not in error state anymore. return; } if (overlayID === backImageHover) { Overlays.editOverlay(backImageHover, {visible: false}); Overlays.editOverlay(backImageNeutral, {visible: true}); } if (overlayID === tryAgainImageHover) { Overlays.editOverlay(tryAgainImageHover, {visible: false}); Overlays.editOverlay(tryAgainImageNeutral, {visible: true}); } }); Window.redirectErrorStateChanged.connect(toggleOverlays); Script.scriptEnding.connect(cleanup); }());