mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-09-23 11:52:58 +00:00
Merge branch 'master' of https://github.com/naturalcrit/homebrewery into listpage-ui
This commit is contained in:
+64
-9
@@ -93,23 +93,77 @@ pre {
|
|||||||
## changelog
|
## changelog
|
||||||
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
|
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
|
{{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
|
##### 5e-Cleric
|
||||||
* [x] Major update to editor framework (Codemirror 6)
|
* [x] Add image preview when hovering over image syntax
|
||||||
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
|
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
|
##### 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
|
### Saturday 4/04/2026 - v3.21.0
|
||||||
|
|
||||||
{{taskList
|
{{taskList
|
||||||
##### Gazook89
|
##### 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
|
##### abquintic
|
||||||
* [x] Move example snippet images out of imgur (for folks without imgur access)
|
* [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
|
* [x] Multiple other backend fixes and refactors
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
### Friday 1/11/2026 - v3.20.1
|
### Friday 1/11/2026 - v3.20.1
|
||||||
|
|
||||||
{{taskList
|
{{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)
|
Fixes issue [#4079](https://github.com/naturalcrit/homebrewery/issues/4079)
|
||||||
|
|
||||||
##### Calculuschild
|
##### Calculuschild
|
||||||
* [x] `꞉꞉꞉꞉` now produces `<br>` instead of a `<div>`
|
* [x] `꞉꞉꞉꞉` now produces `<br>` instead of a `<div>`
|
||||||
* [x] Fix typos in tables freezing the editor
|
* [x] Fix typos in tables freezing the editor
|
||||||
|
|
||||||
Fixes issue [#4059](https://github.com/naturalcrit/homebrewery/issues/4059)
|
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 `phb.standalone.css` plus a build system for creating it
|
||||||
* Added page numbers and footer text
|
* Added page numbers and footer text
|
||||||
* Page accent now flips each page
|
* Page accent now flips each page
|
||||||
|
|||||||
@@ -69,7 +69,8 @@ const EditPage = (props)=>{
|
|||||||
const [themeBundle, setThemeBundle] = useState({});
|
const [themeBundle, setThemeBundle] = useState({});
|
||||||
const [unsavedChanges, setUnsavedChanges] = useState(false);
|
const [unsavedChanges, setUnsavedChanges] = useState(false);
|
||||||
const [alertTrashedGoogleBrew, setAlertTrashedGoogleBrew] = useState(props.brew.trashed);
|
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 [confirmGoogleTransfer, setConfirmGoogleTransfer] = useState(false);
|
||||||
const [autoSaveEnabled, setAutoSaveEnabled] = useState(true);
|
const [autoSaveEnabled, setAutoSaveEnabled] = useState(true);
|
||||||
const [warnUnsavedChanges, setWarnUnsavedChanges] = useState(true);
|
const [warnUnsavedChanges, setWarnUnsavedChanges] = useState(true);
|
||||||
@@ -105,7 +106,7 @@ const EditPage = (props)=>{
|
|||||||
};
|
};
|
||||||
return ()=>{
|
return ()=>{
|
||||||
document.removeEventListener('keydown', handleControlKeys);
|
document.removeEventListener('keydown', handleControlKeys);
|
||||||
window.onBeforeUnload = null;
|
window.onbeforeunload = null;
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -162,8 +163,12 @@ const EditPage = (props)=>{
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleGoogleClick = ()=>{
|
const handleGoogleClick = ()=>{
|
||||||
|
if(global.account !== currentBrew.authors[0]) {
|
||||||
|
setalertOwnershipToTransfer(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(!global.account?.googleId) {
|
if(!global.account?.googleId) {
|
||||||
setAlertLoginToTransfer(true);
|
setAlertNoGoogleToTransfer(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,11 +179,13 @@ const EditPage = (props)=>{
|
|||||||
const closeAlerts = (e)=>{
|
const closeAlerts = (e)=>{
|
||||||
e.stopPropagation(); //Only handle click once so alert doesn't reopen
|
e.stopPropagation(); //Only handle click once so alert doesn't reopen
|
||||||
setAlertTrashedGoogleBrew(false);
|
setAlertTrashedGoogleBrew(false);
|
||||||
setAlertLoginToTransfer(false);
|
setAlertNoGoogleToTransfer(false);
|
||||||
setConfirmGoogleTransfer(false);
|
setConfirmGoogleTransfer(false);
|
||||||
|
setalertOwnershipToTransfer(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
const toggleGoogleStorage = ()=>{
|
const toggleGoogleStorage = (e)=>{
|
||||||
|
closeAlerts(e);
|
||||||
const newSaveGoogle = !saveGoogle;
|
const newSaveGoogle = !saveGoogle;
|
||||||
setSaveGoogle((prev)=>!prev);
|
setSaveGoogle((prev)=>!prev);
|
||||||
setError(null);
|
setError(null);
|
||||||
@@ -260,32 +267,42 @@ const EditPage = (props)=>{
|
|||||||
<Nav.item className='googleDriveStorage' onClick={handleGoogleClick}>
|
<Nav.item className='googleDriveStorage' onClick={handleGoogleClick}>
|
||||||
<img src={googleDriveIcon} className={saveGoogle ? '' : 'inactive'} alt='Google Drive icon' />
|
<img src={googleDriveIcon} className={saveGoogle ? '' : 'inactive'} alt='Google Drive icon' />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{alertOwnershipToTransfer && (
|
||||||
|
<div className='errorContainer'>
|
||||||
|
You must be the Owner to transfer between the Homebrewery and Google Drive!
|
||||||
|
The owner of this file is {currentBrew.authors[0]}
|
||||||
|
<div className='confirm' onClick={closeAlerts}> Okay </div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{alertNoGoogleToTransfer && (
|
||||||
|
<div className='errorContainer'>
|
||||||
|
You must be signed in to a Google account to transfer between the Homebrewery and Google Drive!
|
||||||
|
<a target='_blank' rel='noopener noreferrer' href={`https://www.naturalcrit.com/login?redirect=${window.location.href}`}>
|
||||||
|
<div className='confirm' onClick={closeAlerts}> Sign In </div>
|
||||||
|
</a>
|
||||||
|
<div className='deny' onClick={closeAlerts}> Not Now </div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{alertTrashedGoogleBrew && (
|
||||||
|
<div className='errorContainer'>
|
||||||
|
This brew is currently in your Trash folder on Google Drive!<br />
|
||||||
|
If you want to keep it, make sure to move it before it is deleted permanently!<br />
|
||||||
|
<div className='confirm' onClick={toggleGoogleStorage}> Save my brew </div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{confirmGoogleTransfer && (
|
{confirmGoogleTransfer && (
|
||||||
<div className='errorContainer' onClick={closeAlerts}>
|
<div className='errorContainer'>
|
||||||
{saveGoogle
|
{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 your Google Drive storage back to the Homebrewery?'
|
||||||
: 'Would you like to transfer this brew from the Homebrewery to your personal Google Drive storage?'}
|
: 'Would you like to transfer this brew from the Homebrewery to your personal Google Drive storage?'}
|
||||||
<br />
|
<br />
|
||||||
<div className='confirm' onClick={toggleGoogleStorage}> Yes </div>
|
<div className='confirm' onClick={toggleGoogleStorage}> Yes </div>
|
||||||
<div className='deny'> No </div>
|
<div className='deny' onClick={closeAlerts}> No </div>
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{alertLoginToTransfer && (
|
|
||||||
<div className='errorContainer' onClick={closeAlerts}>
|
|
||||||
You must be signed in to a Google account to transfer between the homebrewery and Google Drive!
|
|
||||||
<a target='_blank' rel='noopener noreferrer' href={`https://www.naturalcrit.com/login?redirect=${window.location.href}`}>
|
|
||||||
<div className='confirm'> Sign In </div>
|
|
||||||
</a>
|
|
||||||
<div className='deny'> Not Now </div>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{alertTrashedGoogleBrew && (
|
|
||||||
<div className='errorContainer' onClick={closeAlerts}>
|
|
||||||
This brew is currently in your Trash folder on Google Drive!<br />
|
|
||||||
If you want to keep it, make sure to move it before it is deleted permanently!<br />
|
|
||||||
<div className='confirm'> OK </div>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Nav.item>
|
</Nav.item>
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "homebrewery",
|
"name": "homebrewery",
|
||||||
"version": "3.22.0",
|
"version": "3.23.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "homebrewery",
|
"name": "homebrewery",
|
||||||
"version": "3.22.0",
|
"version": "3.23.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "homebrewery",
|
"name": "homebrewery",
|
||||||
"description": "Create authentic looking D&D homebrews using only markdown",
|
"description": "Create authentic looking D&D homebrews using only markdown",
|
||||||
"version": "3.22.0",
|
"version": "3.23.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"engines": {
|
"engines": {
|
||||||
"npm": ">=10.8 <12",
|
"npm": ">=10.8 <12",
|
||||||
|
|||||||
Reference in New Issue
Block a user