diff options
Diffstat (limited to 'apps/theming/src/helpers/refreshStyles.js')
-rw-r--r-- | apps/theming/src/helpers/refreshStyles.js | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/apps/theming/src/helpers/refreshStyles.js b/apps/theming/src/helpers/refreshStyles.js index 0c4a7cea22b..ba198be0a00 100644 --- a/apps/theming/src/helpers/refreshStyles.js +++ b/apps/theming/src/helpers/refreshStyles.js @@ -1,33 +1,26 @@ /** - * @copyright 2022 Christopher Ng <chrng8@gmail.com> - * - * @author Christopher Ng <chrng8@gmail.com> - * - * @license AGPL-3.0-or-later - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ -export const refreshStyles = () => { - // Refresh server-side generated theming CSS - [...document.head.querySelectorAll('link.theme')].forEach(theme => { +/** + * Refresh server-side generated theming CSS + * This resolves when all themes are reloaded + */ +export async function refreshStyles() { + const themes = [...document.head.querySelectorAll('link.theme')] + const promises = themes.map((theme) => new Promise((resolve) => { const url = new URL(theme.href) url.searchParams.set('v', Date.now()) const newTheme = theme.cloneNode() newTheme.href = url.toString() - newTheme.onload = () => theme.remove() + newTheme.onload = () => { + theme.remove() + resolve() + } document.head.append(newTheme) - }) + })) + + // Wait until all themes are loaded + await Promise.allSettled(promises) } |