aboutsummaryrefslogtreecommitdiff
path: root/extension/src
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src')
-rw-r--r--extension/src/Folder.tsx2
-rw-r--r--extension/src/RadioButtonGroup.tsx53
-rw-r--r--extension/src/Settings.tsx17
-rw-r--r--extension/src/SettingsEditor.tsx73
-rw-r--r--extension/src/index.css4
-rw-r--r--extension/src/main.tsx13
6 files changed, 158 insertions, 4 deletions
diff --git a/extension/src/Folder.tsx b/extension/src/Folder.tsx
index 37f5cf6..06e8b30 100644
--- a/extension/src/Folder.tsx
+++ b/extension/src/Folder.tsx
@@ -6,7 +6,7 @@ function Folder (props: {data: BookmarkTreeNode}) {
<details open className="folder">
<summary>{props.data.title}</summary>
<div>
- {
+ {
props.data.children &&
props.data.children.map(child =>
child.children
diff --git a/extension/src/RadioButtonGroup.tsx b/extension/src/RadioButtonGroup.tsx
new file mode 100644
index 0000000..14f348d
--- /dev/null
+++ b/extension/src/RadioButtonGroup.tsx
@@ -0,0 +1,53 @@
+import React, {useId, useState} from "react";
+
+interface radioEntry {
+ label: string,
+ data: any,
+}
+
+interface IProps {
+ groupLabel: string,
+ items: radioEntry[],
+ defaultData: any
+}
+
+function RadioButtonGroup(props: IProps) {
+ const [selected, setSelected] = useState(props.defaultData);
+
+ return (
+ <>
+ <h3>{props.groupLabel}</h3>
+ <div className="radio-group">
+ { props.items.map((item) => (
+ <label>
+ <input
+ type="radio"
+ name={useId()}
+ value={item.data}
+ checked={item.data === selected}
+ onChange={e => setSelected(e.target.value)}
+ />
+ {item.label}
+ </label>
+ )) }
+ </div>
+ <span>currently selected: {selected}</span>
+ </>
+ )
+}
+
+export default RadioButtonGroup
+
+// <h3>Sort</h3>
+// <label>
+// <input type="radio" name="sort"/>
+// From bookmarks
+// </label>
+// <label>
+// <input type="radio" name="sort"/>
+// Alphabetical
+// </label>
+// <label>
+// <input type="radio" name="sort"/>
+// Frequency
+// </label> \ No newline at end of file
diff --git a/extension/src/Settings.tsx b/extension/src/Settings.tsx
new file mode 100644
index 0000000..7e44c34
--- /dev/null
+++ b/extension/src/Settings.tsx
@@ -0,0 +1,17 @@
+let settings: { [p: string]: any } = {
+ sort: "from-bookmarks",
+ backgroundMode: "from-theme",
+ backgroundColor: "#000000",
+ rootFolderID: 0,
+}
+
+function loadSettings() {
+ browser.storage.local.set(settings);
+}
+
+function writeSettings() {
+ browser.storage.local.get(settings).then(r => {
+ settings = r;
+ })
+}
+
diff --git a/extension/src/SettingsEditor.tsx b/extension/src/SettingsEditor.tsx
new file mode 100644
index 0000000..b10a705
--- /dev/null
+++ b/extension/src/SettingsEditor.tsx
@@ -0,0 +1,73 @@
+import RadioButtonGroup from "./RadioButtonGroup.tsx";
+import React, {useState} from "react";
+
+function SettingsEditor() {
+ const [selected, setSelected] = useState('0');
+
+ return (
+ <form>
+ <RadioButtonGroup groupLabel="Background Type" defaultData={"fromTheme"} items={[
+ {label: "From Theme", data: "fromTheme"},
+ {label: "Solid Color", data: "solidColor"},
+ {label: "Image", data: "image"},
+ ]}/>
+ <RadioButtonGroup groupLabel="Sort" defaultData={"fromBookmarks"} items={[
+ {label: "From Bookmarks", data: "fromBookmarks"},
+ {label: "Alphabetical", data: "alphabetical"},
+ {label: "Frequency", data: "frequency"},
+ {label: "Recently used", data: "recent"},
+ ]}/>
+
+ <h3>Root folder</h3>
+ <select onChange={e => setSelected(e.target.value)}>
+ <option value={'0'}>Bookmarks Toolbar id:0</option>
+ <option value={'1'}>Mobile Bookmarks id:1</option>
+ <option value={'2'}>Other Bookmarks id:2</option>
+ </select>
+ <span>currently selected: {selected}</span>
+ </form>
+ )
+}
+
+export default SettingsEditor;
+
+// <div id="settings-menu">
+// <h2>Settings</h2>
+//
+// <h3>Sort</h3>
+// <label>
+// <input type="radio" name="sort"/>
+// From bookmarks
+// </label>
+// <label>
+// <input type="radio" name="sort"/>
+// Alphabetical
+// </label>
+// <label>
+// <input type="radio" name="sort"/>
+// Frequency
+// </label>
+//
+// <h3>Background</h3>
+// <label>
+// <input type="radio" name="bg"/>
+// From Theme
+// </label>
+// <label>
+// <input type="radio" name="bg"/>
+// Solid color
+// </label>
+// <label>
+// <input type="radio" name="bg"/>
+// Image
+// </label>
+//
+// <h3>Root folder</h3>
+// <label>
+// <select>
+// <option>Bookmarks Toolbar id:0</option>
+// <option>Mobile Bookmarks id:1</option>
+// <option>Other Bookmarks id:2</option>
+// </select>
+// </label>
+// </div> \ No newline at end of file
diff --git a/extension/src/index.css b/extension/src/index.css
index 20d7bf2..82a8182 100644
--- a/extension/src/index.css
+++ b/extension/src/index.css
@@ -25,7 +25,11 @@ body {
flex-direction: column;
right: 0;
animation: slideIn 0.3s ease-in-out;
+}
+.radio-group {
+ display: flex;
+ flex-direction: column;
}
@keyframes slideIn {
diff --git a/extension/src/main.tsx b/extension/src/main.tsx
index d988d72..e545526 100644
--- a/extension/src/main.tsx
+++ b/extension/src/main.tsx
@@ -1,6 +1,7 @@
import { createRoot } from 'react-dom/client'
import './index.css'
import Folder from "./Folder.tsx";
+import SettingsEditor from "./SettingsEditor.tsx";
// @ts-ignore
if (typeof browser === "undefined") {
@@ -8,9 +9,15 @@ if (typeof browser === "undefined") {
}
browser.bookmarks.getTree().then(tree => {
- createRoot(document.getElementById('root')!).render(
- // @ts-ignore
- <Folder data={tree[0].children[0]} />
+ createRoot(document.body).render(
+ <>
+ <div id="settings-menu">
+ <SettingsEditor/>
+ </div>
+ <Folder data={ // @ts-ignore
+ tree[0].children[0]
+ }/>
+ </>
)
});