diff --git a/changelog.md b/changelog.md
index 136f6346a..d783130f0 100644
--- a/changelog.md
+++ b/changelog.md
@@ -93,23 +93,77 @@ pre {
## changelog
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
-### Saturday 4/20/2026 - v3.22.0
-
+### Monday 9/07/2026 - v3.23.0
{{taskList
+##### firstmatekidd (new contributor!)
+* [x] Add nav buttons to tab order for accesibility
+* [x] Add title to brewRenderer iframe for accessibility
+* [x] Add aria labels to toolbars
+
+Partially fixes issue [#3032](https://github.com/naturalcrit/homebrewery/issues/3032)
+
+##### ReinaSweet (new contributor!)
+* [x] Added security to prevent scripts running in brews
+
+##### Gazook89
+* [x] Lazy load brew images for faster first load
+* [x] Fix snippet menus getting cut off behind divider bar
+
+Fixes issue [#3840](https://github.com/naturalcrit/homebrewery/issues/3840)
+
+##### Abquintic
+* [x] Fix variables not hoisting in later pages
+
##### 5e-Cleric
-* [x] Major update to editor framework (Codemirror 6)
-Fixes issues [#3511](https://github.com/naturalcrit/homebrewery/issues/3511), [#4590](https://github.com/naturalcrit/homebrewery/issues/4590), [#4563](https://github.com/naturalcrit/homebrewery/issues/4653), [#4655](https://github.com/naturalcrit/homebrewery/issues/4655)
-* [x] Fix to Admin page tab names
+* [x] Add image preview when hovering over image syntax
+
+Fixes issue [#2037](https://github.com/naturalcrit/homebrewery/issues/2037)
+
+* [x] Remember editor theme across tabs
+
+Fixes issue [#4858](https://github.com/naturalcrit/homebrewery/issues/4858)
+
+* [x] Add ability to remove co-authors if you are the owner
+
+Fixes part of issue [#4101](https://github.com/naturalcrit/homebrewery/issues/4101)
##### G-Ambatte
-* [x] Fix white page crash on certain browsers
+* [x] Fix editor panel shrinking when openingdev tools
+
+Fixes issue [#4866](https://github.com/naturalcrit/homebrewery/issues/4866)
+
+* [x] Added security to prevent scripts running in brews
+
+Fixes issue [#4904](https://github.com/naturalcrit/homebrewery/issues/4904)
+
+##### Abquintic, G-Ambatte, Gazook89, 5e-Cleric
+* [x] Multiple background fixes and code cleanups
}}
+### Wednesday 5/13/2026 - v3.22.1
+{{taskList
+##### Frederlk (new Contributor!)
+* [x] Add "share current page" to {{openSans **SHARE :fas_share_nodes:**}} menu
+
+##### Calculuschild, 5e-Cleric
+* [x] Fix brews triggering unneeded save when loaded
+
+##### G-Ambatte
+* [x] Fix brews with `$` in text getting out of sync on save
+
+##### 5e-Cleric, Gazook89
+* [x] Fix various issues with Codemirror 6
+
+Fixes issues [#4771](https://github.com/naturalcrit/homebrewery/issues/4771), [#4583](https://github.com/naturalcrit/homebrewery/issues/4783)
+}}
+
+\page
+
### Saturday 4/04/2026 - v3.21.0
{{taskList
##### Gazook89
-* [x] Allow custom {{openSans **:fas_table_list: SNIPPETS**}} to be inserted mid-line
+* [x] Allow custom {{openSans **:fas_table_list: SNIPPETS**}} dropdown to be inserted mid-line
##### abquintic
* [x] Move example snippet images out of imgur (for folks without imgur access)
@@ -131,6 +185,7 @@ Fixes issues [#543](https://github.com/naturalcrit/homebrewery/issues/543), [#24
* [x] Multiple other backend fixes and refactors
}}
+
### Friday 1/11/2026 - v3.20.1
{{taskList
@@ -326,7 +381,7 @@ Fixes issue [#1729](https://github.com/naturalcrit/homebrewery/issues/1729)
Fixes issue [#4079](https://github.com/naturalcrit/homebrewery/issues/4079)
##### Calculuschild
-* [x] `꞉꞉꞉꞉` now produces `
` instead of a `
`
+* [x] `꞉꞉꞉꞉` now produces `
` instead of a `<div>`
* [x] Fix typos in tables freezing the editor
Fixes issue [#4059](https://github.com/naturalcrit/homebrewery/issues/4059)
@@ -2396,4 +2451,4 @@ Massive changelog incoming:
* Added `phb.standalone.css` plus a build system for creating it
* Added page numbers and footer text
-* Page accent now flips each page
\ No newline at end of file
+* Page accent now flips each page
diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx
index dc8c27d3a..36df0f1bb 100644
--- a/client/homebrew/pages/editPage/editPage.jsx
+++ b/client/homebrew/pages/editPage/editPage.jsx
@@ -69,7 +69,8 @@ const EditPage = (props)=>{
const [themeBundle, setThemeBundle] = useState({});
const [unsavedChanges, setUnsavedChanges] = useState(false);
const [alertTrashedGoogleBrew, setAlertTrashedGoogleBrew] = useState(props.brew.trashed);
- const [alertLoginToTransfer, setAlertLoginToTransfer] = useState(false);
+ const [alertNoGoogleToTransfer, setAlertNoGoogleToTransfer] = useState(false);
+ const [alertOwnershipToTransfer, setAlertOwnershipToTransfer] = useState(false);
const [confirmGoogleTransfer, setConfirmGoogleTransfer] = useState(false);
const [autoSaveEnabled, setAutoSaveEnabled] = useState(true);
const [warnUnsavedChanges, setWarnUnsavedChanges] = useState(true);
@@ -105,7 +106,7 @@ const EditPage = (props)=>{
};
return ()=>{
document.removeEventListener('keydown', handleControlKeys);
- window.onBeforeUnload = null;
+ window.onbeforeunload = null;
};
}, []);
@@ -162,8 +163,12 @@ const EditPage = (props)=>{
};
const handleGoogleClick = ()=>{
+ if(global.account !== currentBrew.authors[0]) {
+ setalertOwnershipToTransfer(true);
+ return;
+ }
if(!global.account?.googleId) {
- setAlertLoginToTransfer(true);
+ setAlertNoGoogleToTransfer(true);
return;
}
@@ -174,11 +179,13 @@ const EditPage = (props)=>{
const closeAlerts = (e)=>{
e.stopPropagation(); //Only handle click once so alert doesn't reopen
setAlertTrashedGoogleBrew(false);
- setAlertLoginToTransfer(false);
+ setAlertNoGoogleToTransfer(false);
setConfirmGoogleTransfer(false);
+ setalertOwnershipToTransfer(false);
};
- const toggleGoogleStorage = ()=>{
+ const toggleGoogleStorage = (e)=>{
+ closeAlerts(e);
const newSaveGoogle = !saveGoogle;
setSaveGoogle((prev)=>!prev);
setError(null);
@@ -260,32 +267,42 @@ const EditPage = (props)=>{
+
+
+ {alertOwnershipToTransfer && (
+
+ You must be the Owner to transfer between the Homebrewery and Google Drive!
+ The owner of this file is {currentBrew.authors[0]}
+
Okay
+
+ )}
+
+ {alertNoGoogleToTransfer && (
+
+ You must be signed in to a Google account to transfer between the Homebrewery and Google Drive!
+
+ Sign In
+
+
Not Now
+
+ )}
+
+ {alertTrashedGoogleBrew && (
+
+ This brew is currently in your Trash folder on Google Drive!
+ If you want to keep it, make sure to move it before it is deleted permanently!
+
Save my brew
+
+ )}
+
{confirmGoogleTransfer && (
-
+
{saveGoogle
? 'Would you like to transfer this brew from your Google Drive storage back to the Homebrewery?'
: 'Would you like to transfer this brew from the Homebrewery to your personal Google Drive storage?'}
Yes
-
No
-
- )}
-
- {alertLoginToTransfer && (
-
- You must be signed in to a Google account to transfer between the homebrewery and Google Drive!
-
- Sign In
-
-
Not Now
-
- )}
-
- {alertTrashedGoogleBrew && (
-
- This brew is currently in your Trash folder on Google Drive!
- If you want to keep it, make sure to move it before it is deleted permanently!
-
OK
+
No
)}
diff --git a/package-lock.json b/package-lock.json
index 242d9e608..8309fba77 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "homebrewery",
- "version": "3.22.0",
+ "version": "3.23.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "homebrewery",
- "version": "3.22.0",
+ "version": "3.23.0",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index daabc12d0..bc413ed00 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "homebrewery",
"description": "Create authentic looking D&D homebrews using only markdown",
- "version": "3.22.0",
+ "version": "3.23.0",
"type": "module",
"engines": {
"npm": ">=10.8 <12",