handle gateway connecting before page load
This commit is contained in:
parent
67f1b481ac
commit
fa6f65ce8a
1 changed files with 53 additions and 31 deletions
|
@ -12,41 +12,63 @@ import { timeline } from './timeline';
|
|||
|
||||
timeline.start();
|
||||
|
||||
let loaded = false;
|
||||
let loadedListener = null;
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
loaded = true;
|
||||
if (loadedListener) {
|
||||
loadedListener();
|
||||
loadedListener = null;
|
||||
}
|
||||
});
|
||||
|
||||
function handleGatewaySettlement() {
|
||||
timeline.addCheckpoint("Got gateway settlement");
|
||||
|
||||
const loadingElement = document.getElementById("pre--loading-screen");
|
||||
if (loadingElement) {
|
||||
loadingElement.parentElement.removeChild(loadingElement);
|
||||
const loadApplication = () => {
|
||||
timeline.addCheckpoint("Application load started");
|
||||
|
||||
const loadingElement = document.getElementById("pre--loading-screen");
|
||||
if (loadingElement) {
|
||||
loadingElement.parentElement.removeChild(loadingElement);
|
||||
}
|
||||
|
||||
const app = new Main({
|
||||
target: document.body
|
||||
});
|
||||
window.__waffle.app = app;
|
||||
|
||||
timeline.addCheckpoint("Created application");
|
||||
|
||||
pluginStore.consumePluginLoaders();
|
||||
const scripts = getItem("app:javascript");
|
||||
scripts.forEach((script) => {
|
||||
const func = new Function(script);
|
||||
func();
|
||||
});
|
||||
const styles = getItem("app:stylesheets");
|
||||
styles.forEach((styleText) => {
|
||||
const style = document.createElement("style");
|
||||
style.textContent = styleText;
|
||||
document.head.appendChild(style);
|
||||
});
|
||||
|
||||
timeline.addCheckpoint("Loaded custom user content");
|
||||
|
||||
gateway.unsubscribe(GatewayEventType.Ready, handleGatewaySettlement);
|
||||
gateway.unsubscribe(GatewayEventType.Close, handleGatewaySettlement);
|
||||
|
||||
timeline.addCheckpoint("All initialization finished");
|
||||
timeline.dump();
|
||||
};
|
||||
|
||||
if (!loaded) {
|
||||
timeline.addCheckpoint("Waiting for DOM content before loading application");
|
||||
|
||||
loadedListener = loadApplication;
|
||||
} else {
|
||||
loadApplication();
|
||||
}
|
||||
|
||||
const app = new Main({
|
||||
target: document.body
|
||||
});
|
||||
window.__waffle.app = app;
|
||||
|
||||
timeline.addCheckpoint("Created application");
|
||||
|
||||
pluginStore.consumePluginLoaders();
|
||||
const scripts = getItem("app:javascript");
|
||||
scripts.forEach((script) => {
|
||||
const func = new Function(script);
|
||||
func();
|
||||
});
|
||||
const styles = getItem("app:stylesheets");
|
||||
styles.forEach((styleText) => {
|
||||
const style = document.createElement("style");
|
||||
style.textContent = styleText;
|
||||
document.head.appendChild(style);
|
||||
});
|
||||
|
||||
timeline.addCheckpoint("Loaded custom user content");
|
||||
|
||||
gateway.unsubscribe(GatewayEventType.Ready, handleGatewaySettlement);
|
||||
gateway.unsubscribe(GatewayEventType.Close, handleGatewaySettlement);
|
||||
|
||||
timeline.addCheckpoint("All initialization finished");
|
||||
timeline.dump();
|
||||
}
|
||||
|
||||
function main() {
|
||||
|
|
Loading…
Reference in a new issue