diff --git a/src/lib/wiktionary/index.ts b/src/lib/wiktionary/index.ts new file mode 100644 index 0000000..6a8fe37 --- /dev/null +++ b/src/lib/wiktionary/index.ts @@ -0,0 +1,2 @@ +export * from "./localStorage"; +export * from "./parseWiktionaryData"; diff --git a/src/lib/wiktionary/localStorage.ts b/src/lib/wiktionary/localStorage.ts new file mode 100644 index 0000000..f8a4b89 --- /dev/null +++ b/src/lib/wiktionary/localStorage.ts @@ -0,0 +1,9 @@ +export const WiktionaryStorageKey = "wiktionary-language"; + +export function getWiktionaryWordLanguage() { + return localStorage.getItem(WiktionaryStorageKey) || "Finnish"; +} + +export function setWiktionaryWordLanguage(value: string) { + localStorage.setItem(WiktionaryStorageKey, value); +} diff --git a/src/model/parseWiktionaryData.ts b/src/lib/wiktionary/parseWiktionaryData.ts similarity index 85% rename from src/model/parseWiktionaryData.ts rename to src/lib/wiktionary/parseWiktionaryData.ts index 36c7aac..6b5568b 100644 --- a/src/model/parseWiktionaryData.ts +++ b/src/lib/wiktionary/parseWiktionaryData.ts @@ -1,17 +1,24 @@ -import { Expression } from "./types"; +import { Expression } from "../../model/types"; -export function parseWiktionaryData( - prompt: string, - data: string -): Expression | null { - // Prevent next.js SSR from crashing here - if (typeof window === "undefined") return null; +// Currently only supports en.wiktionary.org (Wiktionary in English language) +// ^^ +interface ParseWiktionaryDataArguments { + prompt: string; + language: string; + data: string; +} + +export function parseWiktionaryData({ + prompt, + language, + data, +}: ParseWiktionaryDataArguments): Expression | null { const parser = new DOMParser(); const document = parser.parseFromString(data, "text/html"); // TODO settings-based language selection - const header = document.getElementById("Finnish")?.parentElement; + const header = document.getElementById(language)?.parentElement; if (!header) return null; // Grab window of wanted elements and filter out unwanted elements within the window diff --git a/src/views/AddExpressionView/AddExpressionView.tsx b/src/views/AddExpressionView/AddExpressionView.tsx index b94962b..cfd7793 100644 --- a/src/views/AddExpressionView/AddExpressionView.tsx +++ b/src/views/AddExpressionView/AddExpressionView.tsx @@ -2,11 +2,16 @@ import { useState } from "react"; import URL from "url"; import { ExpressionCard } from "../../components"; import { ExpressionDescription } from "../../components/ExpressionDescription"; +import { + getWiktionaryWordLanguage, + parseWiktionaryData, + setWiktionaryWordLanguage, +} from "../../lib/wiktionary"; import { addExpressionWithRelationships, Expression } from "../../model"; -import { parseWiktionaryData } from "../../model/parseWiktionaryData"; export function AddExpressionView() { const [prompt, setPrompt] = useState(""); + const [language, setLanguage] = useState(getWiktionaryWordLanguage()); const [expression, setExpression] = useState(null); const [submitStatus, setSubmitStatus] = useState(undefined); @@ -28,6 +33,20 @@ export function AddExpressionView() { /> ) : (
+ +