diff --git a/extensions/web-clipper/src/app.tsx b/extensions/web-clipper/src/app.tsx
index bbe34acb2..38a2952dc 100644
--- a/extensions/web-clipper/src/app.tsx
+++ b/extensions/web-clipper/src/app.tsx
@@ -16,20 +16,37 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
+import { useEffect } from "react";
import { ThemeProvider } from "./components/theme-provider";
import { useAppStore } from "./stores/app-store";
import { Login } from "./views/login";
import { Main } from "./views/main";
+import { Settings } from "./views/settings";
export function App() {
const isLoggedIn = useAppStore((s) => s.isLoggedIn);
const user = useAppStore((s) => s.user);
+ const route = useAppStore((s) => s.route);
+ const navigate = useAppStore((s) => s.navigate);
+
+ useEffect(() => {
+ if (!isLoggedIn) {
+ navigate("/login");
+ } else navigate("/");
+ }, [isLoggedIn]);
return (
{(() => {
- if (!isLoggedIn) return ;
- return ;
+ switch (route) {
+ case "/login":
+ return ;
+ default:
+ case "/":
+ return ;
+ case "/settings":
+ return ;
+ }
})()}
);
diff --git a/extensions/web-clipper/src/components/icons/index.ts b/extensions/web-clipper/src/components/icons/index.ts
index bf39ae7b4..937eb4c4c 100644
--- a/extensions/web-clipper/src/components/icons/index.ts
+++ b/extensions/web-clipper/src/components/icons/index.ts
@@ -37,7 +37,8 @@ import {
mdiNewspaper,
mdiMagnify,
mdiViewDayOutline,
- mdiViewDashboardOutline
+ mdiViewDashboardOutline,
+ mdiArrowLeft
} from "@mdi/js";
export const Icons = {
@@ -66,7 +67,8 @@ export const Icons = {
chevronUp: mdiChevronUp,
chevronRight: mdiChevronRight,
- none: ""
+ none: "",
+ back: mdiArrowLeft
};
export type IconNames = keyof typeof Icons;
diff --git a/extensions/web-clipper/src/content-scripts/all.ts b/extensions/web-clipper/src/content-scripts/all.ts
index 2c77b68ee..81b68ec94 100644
--- a/extensions/web-clipper/src/content-scripts/all.ts
+++ b/extensions/web-clipper/src/content-scripts/all.ts
@@ -25,11 +25,13 @@ import {
enterNodeSelectionMode
} from "@notesnook/clipper";
import { ClipArea, ClipMode } from "../common/bridge";
+import type { Config } from "@notesnook/clipper/dist/types";
type ClipMessage = {
type: "clip";
mode?: ClipMode;
area?: ClipArea;
+ settings?: Config;
};
type ViewportMessage = {
@@ -62,21 +64,22 @@ browser.runtime.onMessage.addListener(async (request) => {
function clip(message: ClipMessage) {
try {
+ const config = message.settings;
const isScreenshot = message.mode === "screenshot";
const withStyles = message.mode === "complete" || isScreenshot;
if (isScreenshot && message.area === "full-page") {
- return clipScreenshot(document.body, "jpeg");
+ return clipScreenshot(document.body, "jpeg", config);
} else if (message.area === "full-page") {
- return clipPage(document, withStyles, false);
+ return clipPage(document, withStyles, false, config);
} else if (message.area === "selection") {
- enterNodeSelectionMode(document).then((result) =>
+ enterNodeSelectionMode(document, config).then((result) =>
browser.runtime.sendMessage({ type: "manual", data: result })
);
} else if (message.area === "article") {
- return clipArticle(document, withStyles);
+ return clipArticle(document, withStyles, config);
} else if (message.area === "visible") {
- return clipPage(document, withStyles, true);
+ return clipPage(document, withStyles, true, config);
}
} catch (e) {
console.error(e);
diff --git a/extensions/web-clipper/src/stores/app-store.tsx b/extensions/web-clipper/src/stores/app-store.tsx
index d9a6bc9d6..bdeb8bbdd 100644
--- a/extensions/web-clipper/src/stores/app-store.tsx
+++ b/extensions/web-clipper/src/stores/app-store.tsx
@@ -27,8 +27,10 @@ interface AppStore {
notes: ItemReference[];
notebooks: NotebookReference[];
tags: ItemReference[];
+ route: string;
login(openNew?: boolean): Promise;
+ navigate(route: string): void;
}
export const useAppStore = create((set) => ({
@@ -37,6 +39,11 @@ export const useAppStore = create((set) => ({
notebooks: [],
notes: [],
tags: [],
+ route: "/login",
+
+ navigate(route) {
+ set({ route });
+ },
async login(openNew = false) {
set({ isLoggingIn: true });
diff --git a/extensions/web-clipper/src/views/main.tsx b/extensions/web-clipper/src/views/main.tsx
index 85aba7664..d5f3c19ac 100644
--- a/extensions/web-clipper/src/views/main.tsx
+++ b/extensions/web-clipper/src/views/main.tsx
@@ -29,13 +29,15 @@ import {
SelectedNotebook,
ClipArea,
ClipMode,
- ClipData,
+ ClipData
} from "../common/bridge";
import { usePersistentState } from "../hooks/use-persistent-state";
import { deleteClip, getClip } from "../utils/storage";
import { useAppStore } from "../stores/app-store";
import { connectApi } from "../api";
import { FlexScrollContainer } from "../components/scroll-container";
+import { DEFAULT_SETTINGS, SETTINGS_KEY } from "./settings";
+import type { Config } from "@notesnook/clipper/dist/types";
const clipAreas: { name: string; id: ClipArea; icon: string }[] = [
{
@@ -86,6 +88,9 @@ export function Main() {
// const [colorMode, setColorMode] = useColorMode();
const isPremium = useAppStore((s) => s.user?.pro);
+ const navigate = useAppStore((s) => s.navigate);
+
+ const [settings] = usePersistentState(SETTINGS_KEY, DEFAULT_SETTINGS);
const [title, setTitle] = useState();
const [url, setUrl] = useState();
const [clipNonce, setClipNonce] = useState(0);
@@ -375,7 +380,13 @@ export function Main() {
justifyContent: "flex-end"
}}
>
-