about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.json5
-rw-r--r--src/pages/src/App.svelte2
-rw-r--r--src/pages/src/Services/FrontendIcon.svelte43
-rw-r--r--src/pages/src/Services/RedirectType.svelte37
-rw-r--r--src/pages/src/Services/Services.svelte33
5 files changed, 98 insertions, 22 deletions
diff --git a/src/config.json b/src/config.json
index 3f58ea95..9728cdc3 100644
--- a/src/config.json
+++ b/src/config.json
@@ -917,14 +917,15 @@
         "simplyTranslate": {
           "name": "SimplyTranslate",
           "instanceList": true,
-          "url": "https://git.sr.ht/~metalune/simplytranslate_web",
+          "url": "https://codeberg.org/ManeraKai/simplytranslate",
           "localhost": true
         },
         "mozhi": {
           "name": "Mozhi",
           "instanceList": true,
           "url": "https://codeberg.org/aryak/mozhi",
-          "localhost": false
+          "localhost": false,
+          "imageType": "svg"
         },
         "libreTranslate": {
           "name": "LibreTranslate",
diff --git a/src/pages/src/App.svelte b/src/pages/src/App.svelte
index f24b43e0..c96d72df 100644
--- a/src/pages/src/App.svelte
+++ b/src/pages/src/App.svelte
@@ -103,7 +103,7 @@
   div {
     height: 100%;
     display: grid;
-    grid-template-columns: min-content 700px;
+    grid-template-columns: min-content 800px;
     margin: 0;
     padding-top: 50px;
     justify-content: center;
diff --git a/src/pages/src/Services/FrontendIcon.svelte b/src/pages/src/Services/FrontendIcon.svelte
new file mode 100644
index 00000000..24942fd6
--- /dev/null
+++ b/src/pages/src/Services/FrontendIcon.svelte
@@ -0,0 +1,43 @@
+<script>
+  import { onDestroy } from "svelte"
+  export let details
+  import { config, options } from "../stores"
+  let _options
+  let _config
+
+  const unsubscribeOptions = options.subscribe(val => (_options = val))
+  const unsubscribeConfig = config.subscribe(val => (_config = val))
+  onDestroy(() => {
+    unsubscribeOptions()
+    unsubscribeConfig()
+  })
+
+  let theme
+  $: if (_options) {
+    if (_options.theme == "dark") {
+      theme = "dark"
+    } else if (_options.theme == "light") {
+      theme = "light"
+    } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
+      theme = "dark"
+    } else {
+      theme = "light"
+    }
+  }
+
+  export let selectedService
+
+  $: imageType = _config.services[selectedService].frontends[details.value].imageType
+</script>
+
+{#if imageType}
+  {#if imageType == "svgMono"}
+    {#if theme == "dark"}
+      <img src={`/assets/images/${details.value}-icon-light.svg`} alt={details.label} />
+    {:else}
+      <img src={`/assets/images/${details.value}-icon.svg`} alt={details.label} />
+    {/if}
+  {:else}
+    <img src={`/assets/images/${details.value}-icon.${imageType}`} alt={details.label} />
+  {/if}
+{/if}
diff --git a/src/pages/src/Services/RedirectType.svelte b/src/pages/src/Services/RedirectType.svelte
index 8cddeafb..16b99083 100644
--- a/src/pages/src/Services/RedirectType.svelte
+++ b/src/pages/src/Services/RedirectType.svelte
@@ -2,7 +2,11 @@
   import { onDestroy } from "svelte"
 
   import RowSelect from "../components/RowSelect.svelte"
+  import SvelteSelect from "svelte-select"
   import { options, config } from "../stores"
+  import Row from "../components/Row.svelte"
+  import Label from "../components/Label.svelte"
+  import FrontendIcon from "./FrontendIcon.svelte"
 
   let _options
   let _config
@@ -52,7 +56,7 @@
       if (frontendConf.embeddable && frontendConf.instanceList) {
         embeddableFrontends.push({
           value: frontendId,
-          name: frontendConf.name,
+          label: frontendConf.name,
         })
       }
     }
@@ -70,13 +74,26 @@
 />
 
 {#if serviceConf.frontends[frontendName].desktopApp && serviceOptions.redirectType != "main_frame"}
-  <RowSelect
-    label="Embed Frontend"
-    value={_options.embedFrontend}
-    onChange={e => {
-      serviceOptions.embedFrontend = e.target.options[e.target.options.selectedIndex].value
-      options.set(_options)
-    }}
-    values={embeddableFrontends}
-  />
+  <Row>
+    <Label>Embed Frontend</Label>
+    <SvelteSelect
+      clearable={false}
+      class="svelte_select"
+      value={serviceOptions.embedFrontend}
+      on:change={e => {
+        serviceOptions.embedFrontend = e.detail.value
+        options.set(_options)
+      }}
+      items={embeddableFrontends}
+    >
+      <div class="slot" slot="item" let:item>
+        <FrontendIcon details={item} {selectedService} />
+        {item.label}
+      </div>
+      <div class="slot" slot="selection" let:selection>
+        <FrontendIcon details={selection} {selectedService} />
+        {selection.label}
+      </div>
+    </SvelteSelect>
+  </Row>
 {/if}
diff --git a/src/pages/src/Services/Services.svelte b/src/pages/src/Services/Services.svelte
index 7ce12ac6..22a82195 100644
--- a/src/pages/src/Services/Services.svelte
+++ b/src/pages/src/Services/Services.svelte
@@ -10,6 +10,7 @@
   import Instances from "./Instances.svelte"
   import SvelteSelect from "svelte-select"
   import ServiceIcon from "./ServiceIcon.svelte"
+  import FrontendIcon from "./FrontendIcon.svelte"
 
   let _options
   let _config
@@ -88,19 +89,31 @@
           {frontendWebsite}
         </a>
       </Label>
-      <Select
+
+      <SvelteSelect
+        clearable={false}
+        class="svelte_select"
         value={serviceOptions.frontend}
-        values={[
+        on:change={e => {
+          serviceOptions.frontend = e.detail.value
+          options.set(_options)
+        }}
+        items={[
           ...Object.entries(serviceConf.frontends).map(([frontendId, frontend]) => ({
             value: frontendId,
-            name: frontend.name,
+            label: frontend.name,
           })),
         ]}
-        onChange={e => {
-          serviceOptions.frontend = e.target.options[e.target.options.selectedIndex].value
-          options.set(_options)
-        }}
-      />
+      >
+        <div class="slot" slot="item" let:item>
+          <FrontendIcon details={item} {selectedService} />
+          {item.label}
+        </div>
+        <div class="slot" slot="selection" let:selection>
+          <FrontendIcon details={selection} {selectedService} />
+          {selection.label}
+        </div>
+      </SvelteSelect>
     </Row>
 
     <RedirectType {selectedService} />
@@ -156,7 +169,9 @@
     --item-active-background: red;
     --item-is-active-bg: grey;
     --item-hover-bg: grey;
-    --item-color: var(--text); /*text color*/
+    --item-is-active-color: var(--text);
+    --padding: 0 0 0 10px;
+    --item-color: var(--text);
   }
   :global(.svelte_select .slot) {
     display: flex;