feat: wip extension page

This commit is contained in:
Ash Keel 2023-01-26 13:19:34 +01:00
parent f80a268512
commit ce944487fc
No known key found for this signature in database
GPG Key ID: BAD8D93E7314ED3E
6 changed files with 50 additions and 4 deletions

View File

@ -1 +1 @@
1e088af20465ec91bc3495c250e91b1a
850ddc6e558430e6d6953ad6b69ed006

View File

@ -0,0 +1,19 @@
export class Extension extends EventTarget {
private readonly worker: Worker;
constructor(public readonly source: string) {
super();
const blob = new Blob([source], { type: 'text/javascript' });
this.worker = new Worker(URL.createObjectURL(blob));
this.worker.onerror = (ev) =>
this.dispatchEvent(new CustomEvent('error', { detail: ev }));
this.worker.onmessage = (ev) =>
this.dispatchEvent(new CustomEvent('message', { detail: ev }));
}
stop() {
this.worker.terminate();
}
}
export default { Extension };

View File

@ -15,7 +15,8 @@
},
"strimertul": {
"settings": "Server settings",
"ui-config": "User interface"
"ui-config": "User interface",
"extensions": "Extensions"
},
"twitch": {
"configuration": "Configuration",
@ -309,6 +310,9 @@
"language": "Language",
"repeat-onboarding": "Repeat onboarding",
"partial-translation": "Partial translation"
},
"extensions": {
"title": "Extensions"
}
},
"form-actions": {

View File

@ -45,6 +45,7 @@ import ServerSettingsPage from './pages/ServerSettings';
import StrimertulPage from './pages/Strimertul';
import TwitchSettingsPage from './pages/TwitchSettings';
import UISettingsPage from './pages/UISettingsPage';
import ExtensionsPage from './pages/Extensions';
import { styled, TextBlock } from './theme';
const LoadingDiv = styled('div', {
@ -88,13 +89,18 @@ const sections: RouteSection[] = [
{
title: 'menu.pages.strimertul.settings',
url: '/http',
icon: <CodeIcon />,
icon: <MixerHorizontalIcon />,
},
{
title: 'menu.pages.strimertul.ui-config',
url: '/ui-config',
icon: <MixIcon />,
},
{
title: 'menu.pages.strimertul.extensions',
url: '/extensions',
icon: <CodeIcon />,
},
],
},
{
@ -256,6 +262,7 @@ export default function App(): JSX.Element {
<Route path="/debug" element={<DebugPage />} />
<Route path="/http" element={<ServerSettingsPage />} />
<Route path="/ui-config" element={<UISettingsPage />} />
<Route path="/extensions" element={<ExtensionsPage />} />
<Route path="/twitch/settings" element={<TwitchSettingsPage />} />
<Route
path="/twitch/bot/commands"

View File

@ -0,0 +1,15 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { PageContainer, PageHeader, PageTitle } from '../theme';
export default function ExtensionsPage(): React.ReactElement {
const { t } = useTranslation();
return (
<PageContainer>
<PageHeader>
<PageTitle>{t('pages.extensions.title')}</PageTitle>
</PageHeader>
</PageContainer>
);
}

View File

@ -2,6 +2,7 @@ import { styled } from './theme';
export const PageContainer = styled('div', {
padding: '2rem',
paddingTop: '1rem',
maxWidth: '1000px',
width: '100%',
margin: '0 auto',
@ -12,7 +13,7 @@ export const PageHeader = styled('header', {});
export const PageTitle = styled('h1', {
fontSize: '25pt',
fontWeight: '600',
marginBottom: '0.5rem',
marginBottom: '1rem',
});
export const SectionHeader = styled('h2', {