import { ajax } from "discourse/lib/ajax"; const keySelector = "meta[name=discourse_theme_key]"; export function currentThemeKey() { let themeKey = null; let elem = _.first($(keySelector)); if (elem) { themeKey = elem.content; if (_.isEmpty(themeKey)) { themeKey = null; } } return themeKey; } export function setLocalTheme(key, themeSeq) { if (key) { $.cookie("theme_key", `${key},${themeSeq}`, { path: "/", expires: 9999 }); } else { $.cookie("theme_key", null, { path: "/", expires: 1 }); } } export function refreshCSS(node, hash, newHref, options) { let $orig = $(node); if ($orig.data("reloading")) { if (options && options.force) { clearTimeout($orig.data("timeout")); $orig.data("copy").remove(); } else { return; } } if (!$orig.data("orig")) { $orig.data("orig", node.href); } $orig.data("reloading", true); const orig = $(node).data("orig"); let reloaded = $orig.clone(true); if (hash) { reloaded[0].href = orig + (orig.indexOf("?") >= 0 ? "&hash=" : "?hash=") + hash; } else { reloaded[0].href = newHref; } $orig.after(reloaded); let timeout = setTimeout(() => { $orig.remove(); reloaded.data("reloading", false); }, 2000); $orig.data("timeout", timeout); $orig.data("copy", reloaded); } export function previewTheme(key) { if (currentThemeKey() !== key) { Discourse.set("assetVersion", "forceRefresh"); ajax(`/themes/assets/${key ? key : "default"}`).then(results => { let elem = _.first($(keySelector)); if (elem) { elem.content = key; } results.themes.forEach(theme => { let node = $(`link[rel=stylesheet][data-target=${theme.target}]`)[0]; if (node) { refreshCSS(node, null, theme.url, { force: true }); } }); }); } } export function listThemes(site) { let themes = site.get("user_themes"); if (!themes) { return null; } let hasDefault = !!themes.findBy("default", true); let results = []; if (!hasDefault) { results.push({ name: I18n.t("themes.default_description"), id: null }); } themes.forEach(t => { results.push({ name: t.name, id: t.theme_key }); }); return results.length === 0 ? null : results; }