Skip to content

Commit 7d1ab4c

Browse files
committed
move scene components back to modules
1 parent 285d4c6 commit 7d1ab4c

File tree

15 files changed

+160
-185
lines changed

15 files changed

+160
-185
lines changed

‎src/components/index.js‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ require('./wasd-controls');
1616

1717
require('./scene/canvas');
1818
require('./scene/fog');
19-
require('./scene/fullscreen');
20-
require('./scene/meta-tags');
19+
require('./scene/keyboard-shortcuts');
2120
require('./scene/stats');
22-
require('./scene/vr-mode');
2321
require('./scene/vr-mode-ui');
24-
require('./scene/wakelock');

‎src/components/scene/fullscreen.js‎

Lines changed: 0 additions & 67 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
var registerComponent = require('../../core/component').registerComponent;
2+
var THREE = require('../../lib/three');
3+
4+
var controls = new THREE.VRControls(new THREE.Object3D());
5+
6+
module.exports.Component = registerComponent('keyboard-shortcuts', {
7+
schema: {
8+
enterVR: { default: true },
9+
resetSensor: { default: true }
10+
},
11+
12+
init: function () {
13+
var self = this;
14+
var scene = this.el;
15+
16+
this.listener = window.addEventListener('keyup', function (event) {
17+
if (self.enterVREnabled && event.keyCode === 70) { // f.
18+
scene.enterVR();
19+
}
20+
if (self.resetSensorEnabled && event.keyCode === 90) { // z.
21+
controls.resetSensor();
22+
}
23+
}, false);
24+
},
25+
26+
update: function (oldData) {
27+
var data = this.data;
28+
this.enterVREnabled = data.enterVR;
29+
this.resetSensorEnabled = data.resetSensor;
30+
},
31+
32+
remove: function () {
33+
window.removeEventListener('keyup', this.listener);
34+
}
35+
});

‎src/components/scene/vr-mode.js‎

Lines changed: 0 additions & 51 deletions
This file was deleted.

‎src/components/scene/wakelock.js‎

Lines changed: 0 additions & 15 deletions
This file was deleted.

‎src/core/propertyTypes.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ function numberParse (value) {
5959

6060
function selectorParse (value) {
6161
if (!value) { return null; }
62+
if (typeof value !== 'string') { return value; }
6263
return document.querySelector(value);
6364
}
6465

‎src/core/a-scene.js‎ renamed to ‎src/core/scene/a-scene.js‎

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
/* global Promise */
2-
var re = require('./a-register-element');
3-
var THREE = require('../lib/three');
2+
var initFullscreen = require('./fullscreen');
3+
var initIframe = require('./iframe');
4+
var initMetaTags = require('./metaTags');
5+
var initWakelock = require('./wakelock');
6+
var re = require('../a-register-element');
7+
var THREE = require('../../lib/three');
48
var TWEEN = require('tween.js');
5-
var utils = require('../utils/');
6-
var AEntity = require('./a-entity');
7-
var ANode = require('./a-node');
8-
9-
var dummyDolly = new THREE.Object3D();
10-
var controls = new THREE.VRControls(dummyDolly);
9+
var utils = require('../../utils/');
10+
// Require after.
11+
var AEntity = require('../a-entity');
12+
var ANode = require('../a-node');
1113

1214
var DEFAULT_CAMERA_ATTR = 'data-aframe-default-camera';
1315
var DEFAULT_LIGHT_ATTR = 'data-aframe-default-light';
@@ -37,11 +39,8 @@ var AScene = module.exports = registerElement('a-scene', {
3739
defaultComponents: {
3840
value: {
3941
'canvas': '',
40-
'fullscreen': '',
41-
'meta-tags': '',
42-
'vr-mode': '',
43-
'vr-mode-ui': '',
44-
'wakelock': ''
42+
'keyboard-shortcuts': '',
43+
'vr-mode-ui': ''
4544
}
4645
},
4746

@@ -77,7 +76,10 @@ var AScene = module.exports = registerElement('a-scene', {
7776

7877
attachedCallback: {
7978
value: function () {
80-
this.setupKeyboardShortcuts();
79+
initFullscreen(this);
80+
initIframe(this);
81+
initMetaTags(this);
82+
initWakelock(this);
8183

8284
// For Chrome (https://github.com/aframevr/aframe-core/issues/321).
8385
window.addEventListener('load', this.resize.bind(this));
@@ -334,19 +336,6 @@ var AScene = module.exports = registerElement('a-scene', {
334336
}
335337
},
336338

337-
/**
338-
* Set up keyboard shortcuts to:
339-
* - Enter VR when `f` is pressed.
340-
* - Reset sensor when `z` is pressed.
341-
*/
342-
setupKeyboardShortcuts: {
343-
value: function () {
344-
window.addEventListener('keyup', function (event) {
345-
if (event.keyCode === 90) { controls.resetSensor(); } // z.
346-
}, false);
347-
}
348-
},
349-
350339
setupRenderer: {
351340
value: function () {
352341
var canvas = this.canvas;

‎src/core/scene/fullscreen.js‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
var isIframed = require('../../utils/').isIframed;
2+
3+
/**
4+
* Register fullscreen listener to scene.
5+
*/
6+
module.exports = function initFullscreenListener (scene) {
7+
var handler = fullscreenChangeHandler.bind(scene);
8+
document.addEventListener('mozfullscreenchange', handler);
9+
document.addEventListener('webkitfullscreenchange', handler);
10+
11+
// Handles fullscreen behavior when inside an iframe.
12+
if (!isIframed()) { return; }
13+
window.addEventListener('message', iframedFullscreenChangeHandler.bind(scene));
14+
};
15+
16+
function fullscreenChangeHandler (event) {
17+
var fullscreenElement = document.fullscreenElement ||
18+
document.mozFullScreenElement ||
19+
document.webkitFullscreenElement;
20+
var scene = this;
21+
22+
// Lock to landscape orientation on mobile.
23+
if (scene.isMobile && window.screen.orientation) {
24+
if (fullscreenElement) {
25+
window.screen.orientation.lock('landscape');
26+
} else {
27+
window.screen.orientation.unlock();
28+
}
29+
}
30+
31+
if (fullscreenElement) {
32+
enterFullscreenHandler(scene);
33+
} else {
34+
exitFullscreenHandler(scene);
35+
}
36+
}
37+
38+
function iframedFullscreenChangeHandler (event) {
39+
var scene = this;
40+
if (!event.data) { return; }
41+
42+
switch (event.data.type) {
43+
case 'fullscreen': {
44+
switch (event.data.data) {
45+
case 'enter':
46+
enterFullscreenHandler(scene);
47+
break;
48+
case 'exit':
49+
exitFullscreenHandler(scene);
50+
break;
51+
}
52+
}
53+
}
54+
}
55+
56+
function enterFullscreenHandler (scene) {
57+
scene.addState('fullscreen');
58+
scene.emit('fullscreen-enter');
59+
}
60+
61+
function exitFullscreenHandler (scene) {
62+
scene.removeState('fullscreen');
63+
scene.emit('fullscreen-exit');
64+
}

��src/core/scene/iframe.js‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* global MessageChannel */
2+
module.exports = function initIframe (scene) {
3+
if (window.top !== window.self) { return; }
4+
5+
vrLoaderMode().then(function (isVr) {
6+
if (isVr) {
7+
scene.enterVR();
8+
} else {
9+
scene.exitVR();
10+
}
11+
window.top.postMessage({type: 'ready'}, '*');
12+
});
13+
};
14+
15+
/**
16+
* @returns {object} Promise that resolves a boolean whether loader is in VR mode.
17+
*/
18+
function vrLoaderMode () {
19+
return new Promise(function (resolve) {
20+
var channel = new MessageChannel();
21+
window.top.postMessage({type: 'checkVr'}, '*', [channel.port2]);
22+
channel.port1.onmessage = function (message) {
23+
resolve(!!message.data.data.isVr);
24+
};
25+
});
26+
}

‎src/components/scene/meta-tags.js‎ renamed to ‎src/core/scene/metaTags.js‎

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,7 @@
1-
var register = require('../../core/component').registerComponent;
2-
3-
module.exports.Component = register('meta-tags', {
4-
init: function () {
5-
if (!this.el.isMobile) { return; }
6-
this.metaTags = injectMetaTags();
7-
},
8-
9-
remove: function () {
10-
var metaTags = this.metaTags;
11-
if (!metaTags) { return; }
12-
metaTags.forEach(function (metaTag) {
13-
metaTag.parentNode.removeChild(metaTag);
14-
});
15-
}
16-
});
1+
module.exports = function initMetaTags (scene) {
2+
if (!scene.isMobile) { return; }
3+
injectMetaTags();
4+
};
175

186
/**
197
* Injects the necessary metatags in the document for mobile support to:

0 commit comments

Comments
 (0)