diff --git a/package.json b/package.json index 5c85d209240d059393329cb772c933150f6eb150..95b04a6073d46ef12bfce28af145e42bd741ad9d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "scripts": { "postinstall": "node ./scripts/postinstall.js", - "start": "cross-env NODE_ENV=development webpack-dev-server --mode=production", + "start": "cross-env NODE_ENV=development webpack-dev-server", "build": "rimraf ./public && cross-env NODE_ENV=production webpack --mode=production", "doc": "node ./scripts/doc/build.js", "prettier": "prettier --write '*.js' 'src/**/*.js'", diff --git a/src/hub.js b/src/hub.js index 51419d8d636cf18e1c4e292dade6146e156d0ff3..39cb6d97e42b26809be549c2d7262a9ebd489514 100644 --- a/src/hub.js +++ b/src/hub.js @@ -446,6 +446,8 @@ const onReady = async () => { getAvailableVREntryTypes().then(availableVREntryTypes => { if (availableVREntryTypes.gearvr === VR_DEVICE_AVAILABILITY.yes) { remountUI({ availableVREntryTypes, forcedVREntryType: "gearvr" }); + } else if (availableVREntryTypes.isInHMD) { + remountUI({ availableVREntryTypes, forcedVREntryType: "vr" }); } else { remountUI({ availableVREntryTypes }); } diff --git a/src/index.js b/src/index.js index 32558cd4ec93844c558ce5d45fed8d54824ac01a..d0b5c4557cda8a0e408ef01c6e5fa2ae680a01ed 100644 --- a/src/index.js +++ b/src/index.js @@ -10,6 +10,9 @@ const qs = queryString.parse(location.search); registerTelemetry(); ReactDOM.render( - <HomeRoot dialogType={qs.list_signup ? InfoDialog.dialogTypes.updates : null} />, + <HomeRoot + initialEnvironment={qs.initial_environment} + dialogType={qs.list_signup ? InfoDialog.dialogTypes.updates : null} + />, document.getElementById("home-root") ); diff --git a/src/link.html b/src/link.html index 954061491faa3b257adedf87df06a26cfc58f79b..8543e83b88b0495bd8e34bb2110bbba6bd3a7ecd 100644 --- a/src/link.html +++ b/src/link.html @@ -8,6 +8,12 @@ <title>Enter Code | Hubs by Mozilla</title> <link href="https://fonts.googleapis.com/css?family=Zilla+Slab:300,300i,400,400i,700" rel="stylesheet"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <% if(NODE_ENV === "production") { %> + <script src="https://cdn.rawgit.com/aframevr/aframe/1be48d9/dist/aframe-master.min.js" integrity="sha384-SXrfoMHbXpA5RZhIyhgaR6tQ764dDZsbFk3PiokC/tc0+NnW1yaYQMUzWtL06hnq" crossorigin="anonymous"></script> + <% } else { %> + <script src="https://cdn.rawgit.com/aframevr/aframe/1be48d9/dist/aframe-master.js" integrity="sha384-AmjDGOMbvTrrUFdeVWcBIlXRINIWnO8iwj/4VS21OWbYDsa/7nheOIyPAPJSkR6J" crossorigin="anonymous"></script> + <% } %> </head> <body> diff --git a/src/react-components/home-root.js b/src/react-components/home-root.js index 318fc88d95acd9d95d67adbb507ecd08cce843ee..d27bc310dac25f0a480aa634afb2ae61ae7fa243 100644 --- a/src/react-components/home-root.js +++ b/src/react-components/home-root.js @@ -17,7 +17,8 @@ addLocaleData([...en]); class HomeRoot extends Component { static propTypes = { intl: PropTypes.object, - dialogType: PropTypes.symbol + dialogType: PropTypes.symbol, + initialEnvironment: PropTypes.string }; state = { @@ -155,7 +156,12 @@ class HomeRoot extends Component { </div> </div> <div className="hero-content__create"> - {this.state.environments.length > 0 && <HubCreatePanel environments={this.state.environments} />} + {this.state.environments.length > 0 && ( + <HubCreatePanel + initialEnvironment={this.props.initialEnvironment} + environments={this.state.environments} + /> + )} </div> </div> <div className="footer-content"> diff --git a/src/react-components/hub-create-panel.js b/src/react-components/hub-create-panel.js index dc10b99ac217609b07bda59422c805c5ea4f1581..959a4a9331a1975a83a0ab315b7fa092c8f05418 100644 --- a/src/react-components/hub-create-panel.js +++ b/src/react-components/hub-create-panel.js @@ -15,16 +15,25 @@ const HUB_NAME_PATTERN = "^[A-Za-z0-9-'\":!@#$%^&*(),.?~ ]{4,64}$"; class HubCreatePanel extends Component { static propTypes = { intl: PropTypes.object, - environments: PropTypes.array + environments: PropTypes.array, + initialEnvironment: PropTypes.string }; constructor(props) { super(props); + let environmentIndex = Math.floor(Math.random() * props.environments.length); + + if (props.initialEnvironment) { + environmentIndex = props.environments.findIndex( + e => e.name.toLowerCase() === props.initialEnvironment.toLowerCase() + ); + } + this.state = { ready: false, name: generateHubName(), - environmentIndex: Math.floor(Math.random() * props.environments.length), + environmentIndex, // HACK: expand on small screens by default to ensure scene selection possible. // Eventually this could/should be done via media queries. expanded: window.innerWidth < 420 diff --git a/src/utils/vr-caps-detect.js b/src/utils/vr-caps-detect.js index 685fb3ba326cebd1febc8f6d6005c7c846a6d99b..58023becc83d428d1d89f8c80878897d37da66b5 100644 --- a/src/utils/vr-caps-detect.js +++ b/src/utils/vr-caps-detect.js @@ -46,7 +46,8 @@ export async function getAvailableVREntryTypes() { const ua = navigator.userAgent; const isSamsungBrowser = browser.name === "chrome" && /SamsungBrowser/.test(ua); const isOculusBrowser = /Oculus/.test(ua); - const isInHMD = isOculusBrowser; + const isFirefoxReality = /Firefox Reality/.test(ua); + const isInHMD = isOculusBrowser || isFirefoxReality; // This needs to be kept up-to-date with the latest browsers that can support VR and Hubs. // Checking for navigator.getVRDisplays always passes b/c of polyfill.