forked from matrix/element-web
Dedup theming code
Following on from https://github.com/matrix-org/matrix-react-sdk/pull/3637 this removes the code dealing with themes in vector/index.js and uses the code from react-sdk. The two did almost exactly the same thing but in subtley different ways. This code can be incredibly subtle though, so doing this a separate PR.
This commit is contained in:
parent
7294bec1c8
commit
e34c46c893
|
@ -57,7 +57,7 @@ import WebPlatform from './platform/WebPlatform';
|
|||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
import SdkConfig from "matrix-react-sdk/lib/SdkConfig";
|
||||
import {getBaseTheme, setTheme, ThemeWatcher} from "matrix-react-sdk/lib/theme";
|
||||
import {setTheme} from "matrix-react-sdk/lib/theme";
|
||||
|
||||
import Olm from 'olm';
|
||||
|
||||
|
@ -255,54 +255,7 @@ async function loadApp() {
|
|||
}
|
||||
|
||||
// as quickly as we possibly can, set a default theme...
|
||||
// we do this by checking to see if the theme's "base" has loaded first so we can
|
||||
// safely rely on the assets.
|
||||
let a;
|
||||
const themeWatcher = new ThemeWatcher();
|
||||
const theme = themeWatcher.getEffectiveTheme();
|
||||
const baseTheme = getBaseTheme(theme);
|
||||
for (let i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
|
||||
const href = a.getAttribute("href");
|
||||
if (!href) continue;
|
||||
// shouldn't we be using the 'title' tag rather than the href?
|
||||
const match = href.match(/^bundles\/.*\/theme-(.*)\.css$/);
|
||||
if (match) {
|
||||
if (match[1] === baseTheme) {
|
||||
// remove the disabled flag off the stylesheet
|
||||
|
||||
// Firefox requires setting the attribute to false, so do
|
||||
// that instead of removing it. Related:
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1281135
|
||||
a.disabled = false;
|
||||
|
||||
// in case the Tinter.tint() in MatrixChat fires before the
|
||||
// CSS has actually loaded (which in practice happens)...
|
||||
|
||||
// This if fixes setTheme to not fire on Firefox
|
||||
// in case it is the first time loading Riot.
|
||||
// `InstallTrigger` is a Object which only exists on Firefox
|
||||
// (it is used for their Plugins) and can be used as a
|
||||
// feature check.
|
||||
// Firefox loads css always before js. This is why we dont use
|
||||
// onload or it's EventListener as those will never trigger.
|
||||
if (typeof InstallTrigger !== 'undefined') {
|
||||
setTheme(theme);
|
||||
} else {
|
||||
// FIXME: we should probably block loading the app or even
|
||||
// showing a spinner until the theme is loaded, to avoid
|
||||
// flashes of unstyled content.
|
||||
a.onload = () => {
|
||||
setTheme(theme);
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// Firefox requires this to not be done via `setAttribute`
|
||||
// or via HTML.
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1281135
|
||||
a.disabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
await setTheme();
|
||||
|
||||
// Now that we've loaded the theme (CSS), display the config syntax error if needed.
|
||||
if (configSyntaxError) {
|
||||
|
|
Loading…
Reference in New Issue