From b42469e4e06d82a0e458b94379e226257ba3ca6c Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Mon, 12 Sep 2022 13:14:29 +0200 Subject: [feature] Allow users to set custom css for their profiles + threads (#808) * add custom css account property + db func to fetch * allow account to get/set custom css * serve custom css for an account * go fmt * use monospace for customcss, add link * add custom css to account cache * fix broken field * add custom css docs to user guide * add `accounts-allow-custom-css` config flag * add allow custom css to /api/v1/instance response * only show/set custom css if allowed to do so * only set/serve custom account css if enabled * update swagger docs * chain promise * make bool a bit clearer * use cache for GetAccountCustomCSSByUsername --- web/source/panels/user/basic.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'web/source/panels/user/basic.js') diff --git a/web/source/panels/user/basic.js b/web/source/panels/user/basic.js index 29728c0b3..f507b782b 100644 --- a/web/source/panels/user/basic.js +++ b/web/source/panels/user/basic.js @@ -23,7 +23,7 @@ const Promise = require("bluebird"); const Submit = require("../../lib/submit"); -module.exports = function Basic({oauth, account}) { +module.exports = function Basic({oauth, account, allowCustomCSS}) { const [errorMsg, setError] = React.useState(""); const [statusMsg, setStatus] = React.useState(""); @@ -36,6 +36,7 @@ module.exports = function Basic({oauth, account}) { const [displayName, setDisplayName] = React.useState(""); const [bio, setBio] = React.useState(""); const [locked, setLocked] = React.useState(false); + const [customCSS, setCustomCSS] = React.useState(""); React.useEffect(() => { setHeaderSrc(account.header); @@ -44,7 +45,8 @@ module.exports = function Basic({oauth, account}) { setDisplayName(account.display_name); setBio(account.source ? account.source.note : ""); setLocked(account.locked); - }, [account, setHeaderSrc, setAvatarSrc, setDisplayName, setBio, setLocked]); + setCustomCSS((allowCustomCSS && account.custom_css) ? account.custom_css : ""); + }, [account, setHeaderSrc, setAvatarSrc, setDisplayName, setBio, setLocked, setCustomCSS]); const headerOnChange = (e) => { setHeaderFile(e.target.files[0]); @@ -75,7 +77,11 @@ module.exports = function Basic({oauth, account}) { formDataInfo.set("display_name", displayName); formDataInfo.set("note", bio); formDataInfo.set("locked", locked); - + + if (allowCustomCSS) { + formDataInfo.set("custom_css", customCSS); + } + return oauth.apiRequest("/api/v1/accounts/update_credentials", "PATCH", formDataInfo, "form"); }).then((json) => { setStatus("Saved!"); @@ -86,6 +92,7 @@ module.exports = function Basic({oauth, account}) { setDisplayName(json.display_name); setBio(json.source.note); setLocked(json.locked); + setCustomCSS(allowCustomCSS && json.custom_css ? json.custom_css : ""); }).catch((e) => { setError(e.message); setStatus(""); @@ -126,6 +133,13 @@ module.exports = function Basic({oauth, account}) {