Merge pull request #599 from liyasthomas/fix/fouc-page-load-unload

Improve page load/unload experience (remove FOUCs)
This commit is contained in:
Liyas Thomas
2020-02-25 09:07:13 +05:30
committed by GitHub
6 changed files with 78 additions and 20 deletions

View File

@@ -6,7 +6,9 @@
font-family: "Material Icons";
font-style: normal;
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");
}

View File

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

View File

@@ -1,7 +1,23 @@
<template>
<pre ref="editor"></pre>
<div class="show-if-initialized" :class="{ initialized }">
<pre ref="editor"></pre>
</div>
</template>
<style lang="scss">
.show-if-initialized {
opacity: 0;
&.initialized {
opacity: 1;
}
& > * {
transition: none;
}
}
</style>
<script>
const DEFAULT_THEME = "twilight";
@@ -30,6 +46,7 @@ export default {
data() {
return {
initialized: false,
editor: null,
cacheValue: ""
};
@@ -43,7 +60,12 @@ export default {
}
},
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) {
this.editor.getSession().setMode("ace/mode/" + value);
@@ -55,11 +77,17 @@ export default {
mounted() {
const editor = ace.edit(this.$refs.editor, {
theme: `ace/theme/${this.defineTheme()}`,
mode: `ace/mode/${this.lang}`,
...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);
this.editor = editor;
@@ -83,9 +111,8 @@ export default {
}
},
beforeDestroy() {
destroyed() {
this.editor.destroy();
this.editor.container.remove();
}
};
</script>

View File

@@ -1,7 +1,23 @@
<template>
<pre ref="editor"></pre>
<div class="show-if-initialized" :class="{ initialized }">
<pre ref="editor"></pre>
</div>
</template>
<style lang="scss">
.show-if-initialized {
opacity: 0;
&.initialized {
opacity: 1;
}
& > * {
transition: none;
}
}
</style>
<script>
const DEFAULT_THEME = "twilight";
@@ -34,6 +50,7 @@ export default {
data() {
return {
initialized: false,
editor: null,
cacheValue: "",
validationSchema: null
@@ -48,7 +65,12 @@ export default {
}
},
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) {
this.editor.getSession().setMode(`ace/mode/${value}`);
@@ -62,13 +84,19 @@ export default {
let langTools = ace.require("ace/ext/language_tools");
const editor = ace.edit(this.$refs.editor, {
theme: `ace/theme/${this.defineTheme()}`,
mode: `ace/mode/${this.lang}`,
enableBasicAutocompletion: true,
enableLiveAutocompletion: true,
...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 = {
getCompletions: (
editor,
@@ -167,7 +195,6 @@ export default {
beforeDestroy() {
this.editor.destroy();
this.editor.container.remove();
}
};
</script>

View File

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

View File

@@ -12,14 +12,14 @@
/>
<i v-else class="material-icons">account_circle</i>
<span>
{{ fb.currentUser.displayName || "Name not found" }}
{{ fb.currentUser.displayName || $t("nothing_found") }}
</span>
</button>
<br />
<button class="icon">
<i class="material-icons">email</i>
<span>
{{ fb.currentUser.email || "Email not found" }}
{{ fb.currentUser.email || $t("nothing_found") }}
</span>
</button>
<br />
@@ -99,7 +99,7 @@
:color="theme.color"
:name="theme.name"
class="bg"
></swatch>
/>
</span>
</div>
</li>
@@ -110,7 +110,7 @@
<div class="colors">
<span
:key="entry.color"
@click.prevent="setActiveColor(entry.color, entry.vibrant)"
@click="setActiveColor(entry.color, entry.vibrant)"
v-for="entry in colors"
>
<swatch
@@ -138,8 +138,8 @@
</pw-toggle>
</span>
</li>
</ul>
<ul>
</ul>
<ul>
<li>
<span>
<pw-toggle
@@ -346,12 +346,13 @@ export default {
],
settings: {
SCROLL_INTO_ENABLED:
SCROLL_INTO_ENABLED:
typeof this.$store.state.postwoman.settings.SCROLL_INTO_ENABLED !==
"undefined"
? this.$store.state.postwoman.settings.SCROLL_INTO_ENABLED
: true,
THEME_CLASS: "",
THEME_COLOR: "",
THEME_TAB_COLOR: "",
THEME_COLOR_VIBRANT: true,
@@ -364,7 +365,7 @@ export default {
this.$store.state.postwoman.settings.PROXY_URL ||
"https://postwoman.apollotv.xyz/",
PROXY_KEY: this.$store.state.postwoman.settings.PROXY_KEY || "",
EXTENSIONS_ENABLED:
typeof this.$store.state.postwoman.settings.EXTENSIONS_ENABLED !==
"undefined"