Improve page load/unload experience (remove FOUCs)

This commit is contained in:
NBTX
2020-02-25 00:09:56 +00:00
parent fdedaa073a
commit 4758acc413
5 changed files with 69 additions and 12 deletions

View File

@@ -6,7 +6,9 @@
font-family: "Material Icons"; font-family: "Material Icons";
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: swap; // Do not use font-display: swap for the icon font - it looks really bad when the page
// loads.
font-display: block;
src: url("~static/fonts/material-icons-v48.woff2") format("woff2"); src: url("~static/fonts/material-icons-v48.woff2") format("woff2");
} }

View File

@@ -190,6 +190,7 @@ nav.primary-nav {
color: var(--fg-light-color); color: var(--fg-light-color);
fill: var(--fg-light-color); fill: var(--fg-light-color);
margin: 8px 0; margin: 8px 0;
height: 52px;
&:hover { &:hover {
color: var(--fg-color); color: var(--fg-color);

View File

@@ -1,7 +1,23 @@
<template> <template>
<pre ref="editor"></pre> <div class="show-if-initialized" :class="{ initialized }">
<pre ref="editor"></pre>
</div>
</template> </template>
<style lang="scss">
.show-if-initialized {
opacity: 0;
&.initialized {
opacity: 1;
}
& > * {
transition: none;
}
}
</style>
<script> <script>
const DEFAULT_THEME = "twilight"; const DEFAULT_THEME = "twilight";
@@ -30,6 +46,7 @@ export default {
data() { data() {
return { return {
initialized: false,
editor: null, editor: null,
cacheValue: "" cacheValue: ""
}; };
@@ -43,7 +60,12 @@ export default {
} }
}, },
theme() { theme() {
this.editor.setTheme("ace/theme/" + this.defineTheme()); this.initialized = false;
this.editor.setTheme(`ace/theme/${this.defineTheme()}`, () => {
this.$nextTick().then(() => {
this.initialized = true;
});
});
}, },
lang(value) { lang(value) {
this.editor.getSession().setMode("ace/mode/" + value); this.editor.getSession().setMode("ace/mode/" + value);
@@ -55,11 +77,17 @@ export default {
mounted() { mounted() {
const editor = ace.edit(this.$refs.editor, { const editor = ace.edit(this.$refs.editor, {
theme: `ace/theme/${this.defineTheme()}`,
mode: `ace/mode/${this.lang}`, mode: `ace/mode/${this.lang}`,
...this.options ...this.options
}); });
// Set the theme and show the editor only after it's been set to prevent FOUC.
editor.setTheme(`ace/theme/${this.defineTheme()}`, () => {
this.$nextTick().then(() => {
this.initialized = true;
});
});
if (this.value) editor.setValue(this.value, 1); if (this.value) editor.setValue(this.value, 1);
this.editor = editor; this.editor = editor;
@@ -83,9 +111,8 @@ export default {
} }
}, },
beforeDestroy() { destroyed() {
this.editor.destroy(); this.editor.destroy();
this.editor.container.remove();
} }
}; };
</script> </script>

View File

@@ -1,7 +1,23 @@
<template> <template>
<pre ref="editor"></pre> <div class="show-if-initialized" :class="{ initialized }">
<pre ref="editor"></pre>
</div>
</template> </template>
<style lang="scss">
.show-if-initialized {
opacity: 0;
&.initialized {
opacity: 1;
}
& > * {
transition: none;
}
}
</style>
<script> <script>
const DEFAULT_THEME = "twilight"; const DEFAULT_THEME = "twilight";
@@ -34,6 +50,7 @@ export default {
data() { data() {
return { return {
initialized: false,
editor: null, editor: null,
cacheValue: "", cacheValue: "",
validationSchema: null validationSchema: null
@@ -48,7 +65,12 @@ export default {
} }
}, },
theme() { theme() {
this.editor.setTheme(`ace/theme/${this.defineTheme()}`); this.initialized = false;
this.editor.setTheme(`ace/theme/${this.defineTheme()}`, () => {
this.$nextTick().then(() => {
this.initialized = true;
});
});
}, },
lang(value) { lang(value) {
this.editor.getSession().setMode(`ace/mode/${value}`); this.editor.getSession().setMode(`ace/mode/${value}`);
@@ -62,13 +84,19 @@ export default {
let langTools = ace.require("ace/ext/language_tools"); let langTools = ace.require("ace/ext/language_tools");
const editor = ace.edit(this.$refs.editor, { const editor = ace.edit(this.$refs.editor, {
theme: `ace/theme/${this.defineTheme()}`,
mode: `ace/mode/${this.lang}`, mode: `ace/mode/${this.lang}`,
enableBasicAutocompletion: true, enableBasicAutocompletion: true,
enableLiveAutocompletion: true, enableLiveAutocompletion: true,
...this.options ...this.options
}); });
// Set the theme and show the editor only after it's been set to prevent FOUC.
editor.setTheme(`ace/theme/${this.defineTheme()}`, () => {
this.$nextTick().then(() => {
this.initialized = true;
});
});
const completer = { const completer = {
getCompletions: ( getCompletions: (
editor, editor,
@@ -167,7 +195,6 @@ export default {
beforeDestroy() { beforeDestroy() {
this.editor.destroy(); this.editor.destroy();
this.editor.container.remove();
} }
}; };
</script> </script>

View File

@@ -298,8 +298,8 @@
> >
<i class="material-icons">offline_bolt</i> <i class="material-icons">offline_bolt</i>
</button> </button>
<login v-if="!fb.currentUser" /> <login v-if="fb.currentUser === null" />
<span v-if="fb.currentUser"> <span v-else>
<v-popover> <v-popover>
<button <button
class="icon" class="icon"