Skip to content

Commit 9801e65

Browse files
committed
Add loading feedback while the inspector library is fetched over the network
1 parent f01eedf commit 9801e65

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

‎src/components/scene/inspector.js‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,35 @@ module.exports.Component = registerComponent('inspector', {
1212
},
1313

1414
init: function () {
15+
this.loadingMessage = 'Loading Inspector';
1516
this.onKeydown = bind(this.onKeydown, this);
1617
this.onMessage = bind(this.onMessage, this);
18+
this.initOverlay();
1719
window.addEventListener('keydown', this.onKeydown);
1820
window.addEventListener('message', this.onMessage);
1921
},
2022

23+
initOverlay: function () {
24+
this.overlayEl = document.createElement('div');
25+
this.overlayEl.style.backgroundColor = '#222';
26+
this.overlayEl.style.opacity = '0.90';
27+
this.overlayEl.style.position = 'absolute';
28+
this.overlayEl.style.width = '800px';
29+
this.overlayEl.style.height = '600px';
30+
this.overlayEl.style.textAlign = 'left';
31+
32+
this.loadingMessageEl = document.createElement('div');
33+
this.loadingMessageEl.innerHTML = this.loadingMessage;
34+
this.loadingMessageEl.style.position = 'relative';
35+
this.loadingMessageEl.style.color = 'white';
36+
this.loadingMessageEl.style.width = '130px';
37+
this.loadingMessageEl.style.opacity = '1.0';
38+
this.loadingMessageEl.style.height = '20px';
39+
this.loadingMessageEl.style.left = 'calc(50% - 65px)';
40+
this.loadingMessageEl.style.top = 'calc(50% - 10px)';
41+
this.overlayEl.appendChild(this.loadingMessageEl);
42+
},
43+
2144
remove: function () {
2245
this.removeEventListeners();
2346
},
@@ -31,6 +54,50 @@ module.exports.Component = registerComponent('inspector', {
3154
this.injectInspector();
3255
},
3356

57+
showLoader: function () {
58+
var computedStyle = window.getComputedStyle(this.el);
59+
var overlayEl = this.overlayEl;
60+
overlayEl.style.width = computedStyle.width;
61+
overlayEl.style.height = computedStyle.height;
62+
this.el.appendChild(this.overlayEl);
63+
this.tick = this.animate;
64+
this.el.addBehavior(this);
65+
},
66+
67+
hideLoader: function () {
68+
this.el.removeChild(this.overlayEl);
69+
this.tick = undefined;
70+
this.el.removeBehavior(this);
71+
},
72+
73+
animate: (function () {
74+
var step = 0;
75+
return function () {
76+
var message = this.loadingMessage;
77+
var loadingMessageEl = this.loadingMessageEl;
78+
if (this.overlayEl.parentElement === null) { return; }
79+
step++;
80+
if (step === 100) {
81+
step = 0;
82+
loadingMessageEl.innerHTML = message + '';
83+
return;
84+
}
85+
if (step === 25) {
86+
this.loadingMessageEl.innerHTML = message + '.';
87+
return;
88+
}
89+
if (step === 50) {
90+
this.loadingMessageEl.innerHTML = message + '..';
91+
return;
92+
}
93+
if (step === 75) {
94+
this.loadingMessageEl.innerHTML = message + '...';
95+
return;
96+
}
97+
console.log(step);
98+
};
99+
})(),
100+
34101
/**
35102
* postMessage. aframe.io uses this to create a button on examples to open Inspector.
36103
*/
@@ -44,13 +111,16 @@ module.exports.Component = registerComponent('inspector', {
44111

45112
if (AFRAME.INSPECTOR || AFRAME.inspectorInjected) { return; }
46113

114+
this.showLoader();
115+
47116
// Inject.
48117
script = document.createElement('script');
49118
script.src = this.data.url;
50119
script.setAttribute('data-name', 'aframe-inspector');
51120
script.setAttribute(AFRAME_INJECTED, '');
52121
script.onload = function () {
53122
AFRAME.INSPECTOR.open();
123+
self.hideLoader();
54124
self.removeEventListeners();
55125
};
56126
document.head.appendChild(script);

0 commit comments

Comments
 (0)