aboutsummaryrefslogtreecommitdiffstats
path: root/apps/theming/src/helpers/refreshStyles.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/theming/src/helpers/refreshStyles.js')
-rw-r--r--apps/theming/src/helpers/refreshStyles.js41
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)
}