Auto Update
diff --git a/src/components/settings/TabContent.vue b/src/components/settings/TabContent.vue
index 917d3df..0825281 100644
--- a/src/components/settings/TabContent.vue
+++ b/src/components/settings/TabContent.vue
@@ -4,7 +4,7 @@
computed: {
className() {
- return "tab-content " + (this.tab === this.activeTab ? "active" : "")
+ return "tab-content tab-" + this.tab + " " + (this.tab === this.activeTab ? "active" : "")
}
}
}
diff --git a/src/components/settings/TabListItem.vue b/src/components/settings/TabListItem.vue
index 68c49a1..9fc53e4 100644
--- a/src/components/settings/TabListItem.vue
+++ b/src/components/settings/TabListItem.vue
@@ -4,7 +4,7 @@
computed: {
tabClass() {
- return this.tab === this.activeTab ? "active" : ""
+ return "tab-" + this.tab + " " + (this.tab === this.activeTab ? "active" : "")
}
}
}
diff --git a/tests/basic-editing.spec.js b/tests/basic-editing.spec.js
index 797a6fd..b5bdff5 100644
--- a/tests/basic-editing.spec.js
+++ b/tests/basic-editing.spec.js
@@ -4,7 +4,6 @@ import { HeynotePage } from "./test-utils.js";
let heynotePage
test.beforeEach(async ({ page }) => {
- console.log("beforeEach")
heynotePage = new HeynotePage(page)
await heynotePage.goto()
});
diff --git a/tests/formatting.spec.js b/tests/formatting.spec.js
index 76d91ae..5b5bbac 100644
--- a/tests/formatting.spec.js
+++ b/tests/formatting.spec.js
@@ -4,7 +4,6 @@ import { HeynotePage } from "./test-utils.js";
let heynotePage
test.beforeEach(async ({ page }) => {
- console.log("beforeEach")
heynotePage = new HeynotePage(page)
await heynotePage.goto()
})
diff --git a/tests/language-detection.spec.js b/tests/language-detection.spec.js
index 6d5868d..3f07418 100644
--- a/tests/language-detection.spec.js
+++ b/tests/language-detection.spec.js
@@ -4,7 +4,6 @@ import { HeynotePage } from "./test-utils.js";
let heynotePage
test.beforeEach(async ({ page }) => {
- console.log("beforeEach")
heynotePage = new HeynotePage(page)
await heynotePage.goto()
})
diff --git a/tests/markdown.spec.js b/tests/markdown.spec.js
index d174c13..38b2b1f 100644
--- a/tests/markdown.spec.js
+++ b/tests/markdown.spec.js
@@ -4,7 +4,6 @@ import { HeynotePage } from "./test-utils.js";
let heynotePage
test.beforeEach(async ({ page }) => {
- console.log("beforeEach")
heynotePage = new HeynotePage(page)
await heynotePage.goto()
});
diff --git a/tests/math.spec.js b/tests/math.spec.js
index d6913e5..8f69d72 100644
--- a/tests/math.spec.js
+++ b/tests/math.spec.js
@@ -4,7 +4,6 @@ import { HeynotePage } from "./test-utils.js";
let heynotePage
test.beforeEach(async ({ page }) => {
- console.log("beforeEach")
heynotePage = new HeynotePage(page)
await heynotePage.goto()
});
diff --git a/tests/settings.spec.js b/tests/settings.spec.js
new file mode 100644
index 0000000..67f2232
--- /dev/null
+++ b/tests/settings.spec.js
@@ -0,0 +1,40 @@
+import { test, expect } from "@playwright/test";
+import { HeynotePage } from "./test-utils.js";
+
+let heynotePage
+
+test.beforeEach(async ({ page }) => {
+ heynotePage = new HeynotePage(page)
+ await heynotePage.goto()
+});
+
+
+test("test open settings dialog", async ({ page }) => {
+ await page.locator("css=.status-block.settings").click()
+ await expect(page.locator("css=.overlay .settings .dialog")).toBeVisible()
+})
+
+test("test close settings dialog", async ({ page }) => {
+ await page.locator("css=.status-block.settings").click()
+ await page.locator("css=.overlay .settings .dialog .bottom-bar .close").click()
+ await expect(page.locator("css=.overlay .settings .dialog")).not.toBeVisible()
+})
+
+test("test close settings dialog with escape", async ({ page }) => {
+ await page.locator("css=.status-block.settings").click()
+ await page.locator("body").press("Escape")
+ await expect(page.locator("css=.overlay .settings .dialog")).not.toBeVisible()
+})
+
+test("test change line gutter setting", async ({ page }) => {
+ await expect(page.locator("css=.cm-lineNumbers")).toBeVisible()
+ await page.locator("css=.status-block.settings").click()
+ await page.locator("css=.overlay .settings .dialog .sidebar li.tab-appearance").click()
+ await expect(page.locator("css=.settings .tab-content.tab-appearance")).toBeVisible()
+ await page.getByLabel("Show line numbers").click()
+ await expect(page.locator("css=.cm-lineNumbers")).toBeHidden()
+ expect((await heynotePage.getStoredSettings()).showLineNumberGutter).toBe(false)
+ await page.getByLabel("Show line numbers").click()
+ await expect(page.locator("css=.cm-lineNumbers")).toBeVisible()
+ expect((await heynotePage.getStoredSettings()).showLineNumberGutter).toBe(true)
+})
diff --git a/tests/test-utils.js b/tests/test-utils.js
index 93a29ae..d249170 100644
--- a/tests/test-utils.js
+++ b/tests/test-utils.js
@@ -42,4 +42,8 @@ export class HeynotePage {
const block = blocks[blockIndex]
return content.slice(block.content.from, block.content.to)
}
+
+ async getStoredSettings() {
+ return await this.page.evaluate(() => JSON.parse(window.localStorage.getItem("settings")))
+ }
}
diff --git a/webapp/bridge.js b/webapp/bridge.js
index 0183e69..3ce14d1 100644
--- a/webapp/bridge.js
+++ b/webapp/bridge.js
@@ -1,3 +1,5 @@
+import { SETTINGS_CHANGE_EVENT, OPEN_SETTINGS_EVENT } from "../electron/constants";
+
const mediaMatch = window.matchMedia('(prefers-color-scheme: dark)')
let themeCallback = null
mediaMatch.addEventListener("change", async (event) => {
@@ -31,8 +33,46 @@ if (uaPlatform.indexOf("Win") !== -1) {
}
}
+
+class IpcRenderer {
+ constructor() {
+ this.callbacks = {}
+ }
+
+ on(event, callback) {
+ if (!this.callbacks[event]) {
+ this.callbacks[event] = []
+ }
+ this.callbacks[event].push(callback)
+ }
+
+ send(event, ...args) {
+ if (this.callbacks[event]) {
+ for (const callback of this.callbacks[event]) {
+ callback(null, ...args)
+ }
+ }
+ }
+}
+
+const ipcRenderer = new IpcRenderer()
+
+// get initial settings
+let settingsData = localStorage.getItem("settings")
+let initialSettings = {
+ keymap: "default",
+ emacsMetaKey: "meta",
+ showLineNumberGutter: true,
+ showFoldGutter: true,
+}
+if (settingsData !== null) {
+ initialSettings = Object.assign(initialSettings, JSON.parse(settingsData))
+}
+
+
const Heynote = {
platform: platform,
+ isWebApp: true,
buffer: {
async load() {
@@ -57,12 +97,19 @@ const Heynote = {
//ipcRenderer.on(WINDOW_CLOSE_EVENT, callback)
},
+ settings: initialSettings,
+
onOpenSettings(callback) {
- //ipcRenderer.on(OPEN_SETTINGS_EVENT, callback)
+ ipcRenderer.on(OPEN_SETTINGS_EVENT, callback)
},
onSettingsChange(callback) {
- //ipcRenderer.on(SETTINGS_CHANGE_EVENT, (event, settings) => callback(settings))
+ ipcRenderer.on(SETTINGS_CHANGE_EVENT, (event, settings) => callback(settings))
+ },
+
+ setSettings(settings) {
+ localStorage.setItem("settings", JSON.stringify(settings))
+ ipcRenderer.send(SETTINGS_CHANGE_EVENT, settings)
},
themeMode: {
@@ -88,10 +135,6 @@ const Heynote = {
initial: localStorage.getItem("theme") || "system",
},
- settings: {
- keymap: "default",
- },
-
getCurrencyData: async () => {
if (currencyData !== null) {
return currencyData
@@ -102,4 +145,4 @@ const Heynote = {
},
}
-export default Heynote
+export { Heynote, ipcRenderer}
diff --git a/webapp/index.html b/webapp/index.html
index 9f88204..dba49a6 100644
--- a/webapp/index.html
+++ b/webapp/index.html
@@ -11,8 +11,9 @@