From 3d1a1cd033622d0a1d6f3b1ea572c90e5c4dda7a Mon Sep 17 00:00:00 2001 From: Athou Date: Fri, 5 May 2023 18:28:31 +0200 Subject: [PATCH] add support for custom js code that will be executed on page load (#1032) --- commafeed-client/index.html | 1 + commafeed-client/src/app/types.ts | 1 + .../{CustomCss.tsx => CustomCodeSettings.tsx} | 41 +++++++++++---- commafeed-client/src/locales/ar/messages.po | 16 +++--- commafeed-client/src/locales/ca/messages.po | 16 +++--- commafeed-client/src/locales/cs/messages.po | 16 +++--- commafeed-client/src/locales/cy/messages.po | 16 +++--- commafeed-client/src/locales/da/messages.po | 16 +++--- commafeed-client/src/locales/de/messages.po | 16 +++--- commafeed-client/src/locales/en/messages.po | 18 ++++--- commafeed-client/src/locales/es/messages.po | 16 +++--- commafeed-client/src/locales/fa/messages.po | 16 +++--- commafeed-client/src/locales/fi/messages.po | 16 +++--- commafeed-client/src/locales/fr/messages.po | 16 +++--- commafeed-client/src/locales/gl/messages.po | 16 +++--- commafeed-client/src/locales/hu/messages.po | 16 +++--- commafeed-client/src/locales/id/messages.po | 16 +++--- commafeed-client/src/locales/it/messages.po | 16 +++--- commafeed-client/src/locales/ja/messages.po | 16 +++--- commafeed-client/src/locales/ko/messages.po | 16 +++--- commafeed-client/src/locales/ms/messages.po | 16 +++--- commafeed-client/src/locales/nb/messages.po | 16 +++--- commafeed-client/src/locales/nl/messages.po | 16 +++--- commafeed-client/src/locales/nn/messages.po | 16 +++--- commafeed-client/src/locales/pl/messages.po | 16 +++--- commafeed-client/src/locales/pt/messages.po | 16 +++--- commafeed-client/src/locales/ru/messages.po | 16 +++--- commafeed-client/src/locales/sk/messages.po | 16 +++--- commafeed-client/src/locales/sv/messages.po | 16 +++--- commafeed-client/src/locales/tr/messages.po | 16 +++--- commafeed-client/src/locales/zh/messages.po | 16 +++--- .../src/pages/app/SettingsPage.tsx | 12 ++--- commafeed-client/vite.config.ts | 1 + .../com/commafeed/CommaFeedApplication.java | 2 + .../commafeed/backend/model/UserSettings.java | 5 ++ .../commafeed/frontend/model/Settings.java | 3 ++ .../commafeed/frontend/resource/UserREST.java | 2 + .../servlet/AbstractCustomCodeServlet.java | 51 +++++++++++++++++++ .../frontend/servlet/CustomCssServlet.java | 46 +++++------------ .../frontend/servlet/CustomJsServlet.java | 29 +++++++++++ .../resources/changelogs/db.changelog-3.2.xml | 6 +++ 41 files changed, 431 insertions(+), 219 deletions(-) rename commafeed-client/src/components/settings/{CustomCss.tsx => CustomCodeSettings.tsx} (60%) create mode 100644 commafeed-server/src/main/java/com/commafeed/frontend/servlet/AbstractCustomCodeServlet.java create mode 100644 commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomJsServlet.java diff --git a/commafeed-client/index.html b/commafeed-client/index.html index b31c73fb..fca20ffa 100644 --- a/commafeed-client/index.html +++ b/commafeed-client/index.html @@ -11,5 +11,6 @@
+ diff --git a/commafeed-client/src/app/types.ts b/commafeed-client/src/app/types.ts index 4b7a3080..a06e8b8c 100644 --- a/commafeed-client/src/app/types.ts +++ b/commafeed-client/src/app/types.ts @@ -231,6 +231,7 @@ export interface Settings { showRead: boolean scrollMarks: boolean customCss?: string + customJs?: string scrollSpeed: number sharingSettings: SharingSettings } diff --git a/commafeed-client/src/components/settings/CustomCss.tsx b/commafeed-client/src/components/settings/CustomCodeSettings.tsx similarity index 60% rename from commafeed-client/src/components/settings/CustomCss.tsx rename to commafeed-client/src/components/settings/CustomCodeSettings.tsx index 90c1ac09..5d9e06b3 100644 --- a/commafeed-client/src/components/settings/CustomCss.tsx +++ b/commafeed-client/src/components/settings/CustomCodeSettings.tsx @@ -11,20 +11,24 @@ import { TbDeviceFloppy } from "react-icons/tb" interface FormData { customCss: string + customJs: string } -export function CustomCss() { +export function CustomCodeSettings() { const settings = useAppSelector(state => state.user.settings) - const customCss = settings?.customCss const dispatch = useAppDispatch() const form = useForm() const { setValues } = form - const saveCustomCss = useAsyncCallback( + const saveCustomCode = useAsyncCallback( async (d: FormData) => { if (!settings) return - await client.user.saveSettings({ ...settings, customCss: d.customCss }) + await client.user.saveSettings({ + ...settings, + customCss: d.customCss, + customJs: d.customJs, + }) }, { onSuccess: () => { @@ -34,25 +38,27 @@ export function CustomCss() { ) useEffect(() => { - if (!customCss) return + if (!settings) return setValues({ - customCss, + customCss: settings.customCss, + customJs: settings.customJs, }) - }, [setValues, customCss]) + }, [setValues, settings]) return ( <> - {saveCustomCss.error && ( + {saveCustomCode.error && ( - + )} -
+