From 90de9c0af16b15e59acbb28d96fed0413a1743c0 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 1 Sep 2025 21:51:27 +1200 Subject: [PATCH 01/16] Change all links to User Page to use encodeURIComponent --- client/homebrew/navbar/account.navitem.jsx | 2 +- client/homebrew/navbar/metadata.navitem.jsx | 2 +- .../homebrew/pages/basePages/listPage/brewItem/brewItem.jsx | 2 +- client/homebrew/pages/errorPage/errors/errorIndex.js | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 6b412c368..07ae51ef9 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -70,7 +70,7 @@ const Account = createClass({ {global.account.username} diff --git a/client/homebrew/navbar/metadata.navitem.jsx b/client/homebrew/navbar/metadata.navitem.jsx index 2a29aec40..50cefc1a7 100644 --- a/client/homebrew/navbar/metadata.navitem.jsx +++ b/client/homebrew/navbar/metadata.navitem.jsx @@ -32,7 +32,7 @@ const MetadataNav = createClass({ return <> {this.props.brew.authors.map((author, idx, arr)=>{ const spacer = arr.length - 1 == idx ? <> : , ; - return {author}{spacer}; + return {author}{spacer}; })} ; }, diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx index b4c455b88..b0c0d3aa9 100644 --- a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx @@ -143,7 +143,7 @@ const BrewItem = ({ {author} - ) : ({author})} + ) : ({author})} {index < brew.authors.length - 1 && ', '} ))} diff --git a/client/homebrew/pages/errorPage/errors/errorIndex.js b/client/homebrew/pages/errorPage/errors/errorIndex.js index c0220b648..91e1074a2 100644 --- a/client/homebrew/pages/errorPage/errors/errorIndex.js +++ b/client/homebrew/pages/errorPage/errors/errorIndex.js @@ -96,7 +96,7 @@ const errorIndex = (props)=>{ **Brew Title:** ${escape(props.brew.brewTitle) || 'Unable to show title'} - **Current Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${author})`;}).join(', ') || 'Unable to list authors'} + **Current Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${encodeURIComponent(author)})`;}).join(', ') || 'Unable to list authors'} [Click here to be redirected to the brew's share page.](/share/${props.brew.shareId})`, @@ -111,7 +111,7 @@ const errorIndex = (props)=>{ **Brew Title:** ${escape(props.brew.brewTitle) || 'Unable to show title'} - **Current Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${author})`;}).join(', ') || 'Unable to list authors'} + **Current Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${encodeURIComponent(author)})`;}).join(', ') || 'Unable to list authors'} [Click here to be redirected to the brew's share page.](/share/${props.brew.shareId})`, @@ -216,7 +216,7 @@ const errorIndex = (props)=>{ **Brew Title:** ${escape(props.brew.brewTitle)} - **Brew Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${author})`;}).join(', ') || 'Unable to list authors'}`, + **Brew Authors:** ${props.brew.authors?.map((author)=>{return `[${author}](/user/${encodeURIComponent(author)})`;}).join(', ') || 'Unable to list authors'}`, // ####### Admin page error ####### '52' : dedent` From a0d288057f5afe1ff6b6f48e488e9e26a13b9e39 Mon Sep 17 00:00:00 2001 From: David Bolack Date: Tue, 28 Oct 2025 14:10:04 -0500 Subject: [PATCH 02/16] Add Docker Image build and Publish to workflow Adds docker:build and docker:publish npm scripts expects DOCKERID to contain the user/organization id for formatting the tag ( DOCKERID/hombrewery:version ) Add CircleCI test to ensure image still builds --- .circleci/config.yml | 3 +++ package.json | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fb239ceb3..bcdf362ec 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -88,6 +88,9 @@ jobs: - run: name: Test - Content Negotiation command: npm run test:content-negotiation + - run: + name: Test - Build Docker image + command: DOCKERID=circliciTest npm run docker:build workflows: build_and_test: diff --git a/package.json b/package.json index 666832db8..37b362bc8 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,9 @@ "phb": "node --experimental-require-module scripts/phb.js", "prod": "set NODE_ENV=production && npm run build", "postinstall": "npm run build", - "start": "node --experimental-require-module server.js" + "start": "node --experimental-require-module server.js", + "docker:build": "docker build -t ${DOCKERID}/homebrewery:$npm_package_version .", + "docker:publish": "docker login && docker push ${DOCKERID}/homebrewery:$npm_package_version" }, "author": "stolksdorf", "license": "MIT", From bc41b9043d093dcb0968c37cd982228a95e60af8 Mon Sep 17 00:00:00 2001 From: David Bolack Date: Tue, 28 Oct 2025 14:44:54 -0500 Subject: [PATCH 03/16] Remove circleci tests --- .circleci/config.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bcdf362ec..fb239ceb3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -88,9 +88,6 @@ jobs: - run: name: Test - Content Negotiation command: npm run test:content-negotiation - - run: - name: Test - Build Docker image - command: DOCKERID=circliciTest npm run docker:build workflows: build_and_test: From 081fd6f39d34f922b4d119e9068cecb00dec9dc0 Mon Sep 17 00:00:00 2001 From: Gazook89 Date: Mon, 3 Nov 2025 20:58:00 -0600 Subject: [PATCH 04/16] Move nav.jsx from shared to client directory Moving the one file, changing a lot of imports (18 files), and deleting a directory. --- client/homebrew/navbar/account.navitem.jsx | 2 +- client/homebrew/navbar/error-navitem.jsx | 2 +- client/homebrew/navbar/help.navitem.jsx | 2 +- client/homebrew/navbar/metadata.navitem.jsx | 2 +- {shared/naturalcrit/nav => client/homebrew/navbar}/nav.jsx | 0 client/homebrew/navbar/navbar.jsx | 2 +- client/homebrew/navbar/newbrew.navitem.jsx | 2 +- client/homebrew/navbar/patreon.navitem.jsx | 2 +- client/homebrew/navbar/print.navitem.jsx | 2 +- client/homebrew/navbar/recent.navitem.jsx | 2 +- client/homebrew/navbar/share.navitem.jsx | 2 +- client/homebrew/navbar/vault.navitem.jsx | 2 +- client/homebrew/pages/basePages/uiPage/uiPage.jsx | 2 +- client/homebrew/pages/editPage/editPage.jsx | 2 +- client/homebrew/pages/homePage/homePage.jsx | 2 +- client/homebrew/pages/newPage/newPage.jsx | 2 +- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- client/homebrew/pages/userPage/userPage.jsx | 2 +- client/homebrew/pages/vaultPage/vaultPage.jsx | 2 +- 19 files changed, 18 insertions(+), 18 deletions(-) rename {shared/naturalcrit/nav => client/homebrew/navbar}/nav.jsx (100%) diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 6b412c368..5f7424e25 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -1,6 +1,6 @@ const React = require('react'); const createClass = require('create-react-class'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const request = require('superagent'); const Account = createClass({ diff --git a/client/homebrew/navbar/error-navitem.jsx b/client/homebrew/navbar/error-navitem.jsx index a2650dbc8..6b739379b 100644 --- a/client/homebrew/navbar/error-navitem.jsx +++ b/client/homebrew/navbar/error-navitem.jsx @@ -1,6 +1,6 @@ require('./error-navitem.less'); const React = require('react'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const ErrorNavItem = ({ error = '', clearError })=>{ const response = error.response; diff --git a/client/homebrew/navbar/help.navitem.jsx b/client/homebrew/navbar/help.navitem.jsx index bf0098c8d..0b1ff6c3a 100644 --- a/client/homebrew/navbar/help.navitem.jsx +++ b/client/homebrew/navbar/help.navitem.jsx @@ -1,7 +1,7 @@ const React = require('react'); const dedent = require('dedent-tabs').default; -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); module.exports = function(props){ return diff --git a/client/homebrew/navbar/metadata.navitem.jsx b/client/homebrew/navbar/metadata.navitem.jsx index 2a29aec40..435ad4491 100644 --- a/client/homebrew/navbar/metadata.navitem.jsx +++ b/client/homebrew/navbar/metadata.navitem.jsx @@ -2,7 +2,7 @@ const React = require('react'); const createClass = require('create-react-class'); const Moment = require('moment'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const MetadataNav = createClass({ diff --git a/shared/naturalcrit/nav/nav.jsx b/client/homebrew/navbar/nav.jsx similarity index 100% rename from shared/naturalcrit/nav/nav.jsx rename to client/homebrew/navbar/nav.jsx diff --git a/client/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx index 7929bb5e2..bafed9db0 100644 --- a/client/homebrew/navbar/navbar.jsx +++ b/client/homebrew/navbar/navbar.jsx @@ -2,7 +2,7 @@ require('./navbar.less'); const React = require('react'); const createClass = require('create-react-class'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const PatreonNavItem = require('./patreon.navitem.jsx'); const Navbar = createClass({ diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index d19b7595f..fe8c05dc7 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,6 +1,6 @@ const React = require('react'); const _ = require('lodash'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const { splitTextStyleAndMetadata } = require('../../../shared/helpers.js'); // Importing the function from helpers.js const BREWKEY = 'homebrewery-new'; diff --git a/client/homebrew/navbar/patreon.navitem.jsx b/client/homebrew/navbar/patreon.navitem.jsx index 92b42dceb..d957231de 100644 --- a/client/homebrew/navbar/patreon.navitem.jsx +++ b/client/homebrew/navbar/patreon.navitem.jsx @@ -1,5 +1,5 @@ const React = require('react'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); module.exports = function(props){ return ( brew.googleId && !brew.stubbed diff --git a/client/homebrew/navbar/vault.navitem.jsx b/client/homebrew/navbar/vault.navitem.jsx index 087297011..1087ca978 100644 --- a/client/homebrew/navbar/vault.navitem.jsx +++ b/client/homebrew/navbar/vault.navitem.jsx @@ -1,6 +1,6 @@ const React = require('react'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); module.exports = function (props) { return ( diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.jsx b/client/homebrew/pages/basePages/uiPage/uiPage.jsx index 20dc6b26b..e0e75d7c9 100644 --- a/client/homebrew/pages/basePages/uiPage/uiPage.jsx +++ b/client/homebrew/pages/basePages/uiPage/uiPage.jsx @@ -2,7 +2,7 @@ require('./uiPage.less'); const React = require('react'); const createClass = require('create-react-class'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const Navbar = require('../../../navbar/navbar.jsx'); const NewBrewItem = require('../../../navbar/newbrew.navitem.jsx'); const HelpNavItem = require('../../../navbar/help.navitem.jsx'); diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 524f31ac9..7c2c08379 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -14,7 +14,7 @@ import SplitPane from 'client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'naturalcrit/nav/nav.jsx'; +import Nav from 'client/homebrew/navbar/nav.jsx'; import Navbar from '../../navbar/navbar.jsx'; import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; import AccountNavItem from '../../navbar/account.navitem.jsx'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 82c5b7084..2d3d76b27 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -14,7 +14,7 @@ import SplitPane from 'client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'naturalcrit/nav/nav.jsx'; +import Nav from 'client/homebrew/navbar/nav.jsx'; import Navbar from '../../navbar/navbar.jsx'; import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; import AccountNavItem from '../../navbar/account.navitem.jsx'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index dccf7deb7..b464fc09d 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -14,7 +14,7 @@ import SplitPane from 'client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'naturalcrit/nav/nav.jsx'; +import Nav from 'client/homebrew/navbar/nav.jsx'; import Navbar from '../../navbar/navbar.jsx'; import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; import AccountNavItem from '../../navbar/account.navitem.jsx'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 50104a665..d9bd36b70 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -3,7 +3,7 @@ const React = require('react'); const { useState, useEffect, useCallback } = React; const { Meta } = require('vitreum/headtags'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const Navbar = require('../../navbar/navbar.jsx'); const MetadataNav = require('../../navbar/metadata.navitem.jsx'); const PrintNavItem = require('../../navbar/print.navitem.jsx'); diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index e4a8b0b4e..2419db3ad 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -4,7 +4,7 @@ const _ = require('lodash'); const ListPage = require('../basePages/listPage/listPage.jsx'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const Navbar = require('../../navbar/navbar.jsx'); const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; const Account = require('../../navbar/account.navitem.jsx'); diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx index e098bb1a2..eb0764b88 100644 --- a/client/homebrew/pages/vaultPage/vaultPage.jsx +++ b/client/homebrew/pages/vaultPage/vaultPage.jsx @@ -5,7 +5,7 @@ require('./vaultPage.less'); const React = require('react'); const { useState, useEffect, useRef } = React; -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const Navbar = require('../../navbar/navbar.jsx'); const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; const Account = require('../../navbar/account.navitem.jsx'); From fc569e560b7a4e9f93d47b25f83256c37858a8d9 Mon Sep 17 00:00:00 2001 From: Gazook89 Date: Mon, 3 Nov 2025 21:50:31 -0600 Subject: [PATCH 05/16] Move renderWarnings from shared to client Moving this component to the component folder so it's closer to where it is actually used. Not moving to the `homebrew` folder because ultimately i think pretty much everything in that folder should move to the components as well (`homebrew` isn't a helpful folder distinction). Deletes a directory, moves 2 files. --- .../components}/renderWarnings/renderWarnings.jsx | 4 ++-- .../components}/renderWarnings/renderWarnings.less | 0 client/homebrew/brewRenderer/brewRenderer.jsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename {shared/homebrewery => client/components}/renderWarnings/renderWarnings.jsx (93%) rename {shared/homebrewery => client/components}/renderWarnings/renderWarnings.less (100%) diff --git a/shared/homebrewery/renderWarnings/renderWarnings.jsx b/client/components/renderWarnings/renderWarnings.jsx similarity index 93% rename from shared/homebrewery/renderWarnings/renderWarnings.jsx rename to client/components/renderWarnings/renderWarnings.jsx index e9c5f6f57..6b8ea8184 100644 --- a/shared/homebrewery/renderWarnings/renderWarnings.jsx +++ b/client/components/renderWarnings/renderWarnings.jsx @@ -3,7 +3,7 @@ const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); -import Dialog from '../../../client/components/dialog.jsx'; +import Dialog from '../dialog.jsx'; const RenderWarnings = createClass({ displayName : 'RenderWarnings', @@ -25,7 +25,7 @@ const RenderWarnings = createClass({ if(!isChrome){ return
  • Built for Chrome
    - Other browsers have not been tested for compatiblilty. If you + Other browsers have not been tested for compatibility. If you experience issues with your document not rendering or printing properly, please try using the latest version of Chrome before submitting a bug report. diff --git a/shared/homebrewery/renderWarnings/renderWarnings.less b/client/components/renderWarnings/renderWarnings.less similarity index 100% rename from shared/homebrewery/renderWarnings/renderWarnings.less rename to client/components/renderWarnings/renderWarnings.less diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a19d33375..fa4625c84 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -10,7 +10,7 @@ const ErrorBar = require('./errorBar/errorBar.jsx'); const ToolBar = require('./toolBar/toolBar.jsx'); //TODO: move to the brew renderer -const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx'); +const RenderWarnings = require('client/components/renderWarnings/renderWarnings.jsx'); const NotificationPopup = require('./notificationPopup/notificationPopup.jsx'); const Frame = require('react-frame-component').default; const dedent = require('dedent-tabs').default; From c38cc77fd063ad12bdf58b40ae080c90293401cb Mon Sep 17 00:00:00 2001 From: Gazook89 Date: Tue, 4 Nov 2025 12:52:12 -0600 Subject: [PATCH 06/16] Move SVG components to components folder Move the SVGs out of the `shared` directory, closer to where they are actually used. They are svg jsx files, setup as components, so i've moved them to the components directory. Deleted `combat.svg.jsx` because we don't use it anywhere. renamed the remaining two to be more descriptive of the image for additional clarity. --- .../homebrew.svg.jsx => client/components/svg/cauldron.svg.jsx | 0 .../components/svg/naturalcrit-d20.svg.jsx | 0 client/homebrew/pages/accountPage/accountPage.jsx | 2 +- shared/naturalcrit/nav/nav.jsx | 2 +- shared/naturalcrit/svg/combat.svg.jsx | 3 --- 5 files changed, 2 insertions(+), 5 deletions(-) rename shared/naturalcrit/svg/homebrew.svg.jsx => client/components/svg/cauldron.svg.jsx (100%) rename shared/naturalcrit/svg/naturalcrit.svg.jsx => client/components/svg/naturalcrit-d20.svg.jsx (100%) delete mode 100644 shared/naturalcrit/svg/combat.svg.jsx diff --git a/shared/naturalcrit/svg/homebrew.svg.jsx b/client/components/svg/cauldron.svg.jsx similarity index 100% rename from shared/naturalcrit/svg/homebrew.svg.jsx rename to client/components/svg/cauldron.svg.jsx diff --git a/shared/naturalcrit/svg/naturalcrit.svg.jsx b/client/components/svg/naturalcrit-d20.svg.jsx similarity index 100% rename from shared/naturalcrit/svg/naturalcrit.svg.jsx rename to client/components/svg/naturalcrit-d20.svg.jsx diff --git a/client/homebrew/pages/accountPage/accountPage.jsx b/client/homebrew/pages/accountPage/accountPage.jsx index b69eb6e3e..412cf7812 100644 --- a/client/homebrew/pages/accountPage/accountPage.jsx +++ b/client/homebrew/pages/accountPage/accountPage.jsx @@ -1,7 +1,7 @@ const React = require('react'); const moment = require('moment'); const UIPage = require('../basePages/uiPage/uiPage.jsx'); -const NaturalCritIcon = require('naturalcrit/svg/naturalcrit.svg.jsx'); +const NaturalCritIcon = require('client/components/svg/naturalcrit-d20.svg.jsx'); let SAVEKEY = ''; diff --git a/shared/naturalcrit/nav/nav.jsx b/shared/naturalcrit/nav/nav.jsx index 50dff4c33..16f194716 100644 --- a/shared/naturalcrit/nav/nav.jsx +++ b/shared/naturalcrit/nav/nav.jsx @@ -5,7 +5,7 @@ const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); -const NaturalCritIcon = require('naturalcrit/svg/naturalcrit.svg.jsx'); +const NaturalCritIcon = require('client/components/svg/naturalcrit-d20.svg.jsx'); const Nav = { base : createClass({ diff --git a/shared/naturalcrit/svg/combat.svg.jsx b/shared/naturalcrit/svg/combat.svg.jsx deleted file mode 100644 index fc92b4df4..000000000 --- a/shared/naturalcrit/svg/combat.svg.jsx +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(props){ - return ; -}; From 29fe6430ce583da460c522edf9979017974f957a Mon Sep 17 00:00:00 2001 From: Gazook89 Date: Tue, 4 Nov 2025 13:12:56 -0600 Subject: [PATCH 07/16] Move codeEditor to components directory This simply moves the codeEditor folder to the components directory. `codeEditor.jsx` simply builds a component which is then used elsewhere, and isn't shared between client and server, so it should be in the client directory. Arguably it could go in `client/homebrew/editor` but I think the `/homebrew/` folder should be eliminated down the line and it's contents just re-sorted. When working on the editor right now it's a pain to switch between `shared` and `client` hunting for the right file. --- .../components}/codeEditor/autocompleteEmoji.js | 0 .../naturalcrit => client/components}/codeEditor/close-tag.js | 0 .../naturalcrit => client/components}/codeEditor/codeEditor.jsx | 0 .../components}/codeEditor/codeEditor.less | 0 .../naturalcrit => client/components}/codeEditor/fold-css.js | 0 .../naturalcrit => client/components}/codeEditor/fold-pages.js | 0 client/homebrew/editor/editor.jsx | 2 +- 7 files changed, 1 insertion(+), 1 deletion(-) rename {shared/naturalcrit => client/components}/codeEditor/autocompleteEmoji.js (100%) rename {shared/naturalcrit => client/components}/codeEditor/close-tag.js (100%) rename {shared/naturalcrit => client/components}/codeEditor/codeEditor.jsx (100%) rename {shared/naturalcrit => client/components}/codeEditor/codeEditor.less (100%) rename {shared/naturalcrit => client/components}/codeEditor/fold-css.js (100%) rename {shared/naturalcrit => client/components}/codeEditor/fold-pages.js (100%) diff --git a/shared/naturalcrit/codeEditor/autocompleteEmoji.js b/client/components/codeEditor/autocompleteEmoji.js similarity index 100% rename from shared/naturalcrit/codeEditor/autocompleteEmoji.js rename to client/components/codeEditor/autocompleteEmoji.js diff --git a/shared/naturalcrit/codeEditor/close-tag.js b/client/components/codeEditor/close-tag.js similarity index 100% rename from shared/naturalcrit/codeEditor/close-tag.js rename to client/components/codeEditor/close-tag.js diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx similarity index 100% rename from shared/naturalcrit/codeEditor/codeEditor.jsx rename to client/components/codeEditor/codeEditor.jsx diff --git a/shared/naturalcrit/codeEditor/codeEditor.less b/client/components/codeEditor/codeEditor.less similarity index 100% rename from shared/naturalcrit/codeEditor/codeEditor.less rename to client/components/codeEditor/codeEditor.less diff --git a/shared/naturalcrit/codeEditor/fold-css.js b/client/components/codeEditor/fold-css.js similarity index 100% rename from shared/naturalcrit/codeEditor/fold-css.js rename to client/components/codeEditor/fold-css.js diff --git a/shared/naturalcrit/codeEditor/fold-pages.js b/client/components/codeEditor/fold-pages.js similarity index 100% rename from shared/naturalcrit/codeEditor/fold-pages.js rename to client/components/codeEditor/fold-pages.js diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index d6fdf3f08..d7a037b97 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -6,7 +6,7 @@ const _ = require('lodash'); const dedent = require('dedent-tabs').default; import Markdown from '../../../shared/naturalcrit/markdown.js'; -const CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); +const CodeEditor = require('client/components/codeEditor/codeEditor.jsx'); const SnippetBar = require('./snippetbar/snippetbar.jsx'); const MetadataEditor = require('./metadataEditor/metadataEditor.jsx'); From c5aa774daa3153c1e3a8d61ef7bcf9db831d09c2 Mon Sep 17 00:00:00 2001 From: Gazook89 Date: Tue, 4 Nov 2025 22:29:28 -0600 Subject: [PATCH 08/16] Move markdown.js and markdownlegacy.js Moves the two files up a level, directly in `/shared/`. Everything else is just updating paths for that. --- client/homebrew/brewRenderer/brewRenderer.jsx | 4 ++-- .../brewRenderer/notificationPopup/notificationPopup.jsx | 2 +- client/homebrew/editor/editor.jsx | 2 +- client/homebrew/pages/editPage/editPage.jsx | 2 +- client/homebrew/pages/errorPage/errorPage.jsx | 2 +- client/homebrew/pages/homePage/homePage.jsx | 2 +- client/homebrew/pages/newPage/newPage.jsx | 2 +- server/homebrew.api.js | 2 +- shared/{naturalcrit => }/markdown.js | 8 ++++---- shared/{naturalcrit => }/markdownLegacy.js | 0 shared/naturalcrit/codeEditor/autocompleteEmoji.js | 8 ++++---- tests/markdown/basic.test.js | 2 +- tests/markdown/definition-lists.test.js | 2 +- tests/markdown/emojis.test.js | 2 +- tests/markdown/hard-breaks.test.js | 2 +- tests/markdown/mustache-syntax.test.js | 2 +- tests/markdown/non-breaking-spaces.test.js | 2 +- tests/markdown/paragraph-justification.test.js | 2 +- tests/markdown/variables.test.js | 2 +- themes/V3/Blank/snippets/footer.gen.js | 2 +- 20 files changed, 26 insertions(+), 26 deletions(-) rename shared/{naturalcrit => }/markdown.js (98%) rename shared/{naturalcrit => }/markdownLegacy.js (100%) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a19d33375..2450a3041 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -4,8 +4,8 @@ const React = require('react'); const { useState, useRef, useMemo, useEffect } = React; const _ = require('lodash'); -const MarkdownLegacy = require('naturalcrit/markdownLegacy.js'); -import Markdown from 'naturalcrit/markdown.js'; +const MarkdownLegacy = require('markdownLegacy.js'); +import Markdown from 'markdown.js'; const ErrorBar = require('./errorBar/errorBar.jsx'); const ToolBar = require('./toolBar/toolBar.jsx'); diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx index 38a85e0c7..ad8f9140a 100644 --- a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx +++ b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx @@ -1,7 +1,7 @@ require('./notificationPopup.less'); import React, { useEffect, useState } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; import Dialog from '../../../components/dialog.jsx'; diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index d6fdf3f08..2f38d41aa 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -4,7 +4,7 @@ const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const dedent = require('dedent-tabs').default; -import Markdown from '../../../shared/naturalcrit/markdown.js'; +import Markdown from '../../../shared/markdown.js'; const CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); const SnippetBar = require('./snippetbar/snippetbar.jsx'); diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 524f31ac9..cb696a758 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -4,7 +4,7 @@ import './editPage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; diff --git a/client/homebrew/pages/errorPage/errorPage.jsx b/client/homebrew/pages/errorPage/errorPage.jsx index 4ac73da8c..1b7b19e2f 100644 --- a/client/homebrew/pages/errorPage/errorPage.jsx +++ b/client/homebrew/pages/errorPage/errorPage.jsx @@ -1,7 +1,7 @@ require('./errorPage.less'); const React = require('react'); const UIPage = require('../basePages/uiPage/uiPage.jsx'); -import Markdown from '../../../../shared/naturalcrit/markdown.js'; +import Markdown from '../../../../shared/markdown.js'; const ErrorIndex = require('./errors/errorIndex.js'); const ErrorPage = ({ brew })=>{ diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 82c5b7084..8e2dd9a18 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -4,7 +4,7 @@ import './homePage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index dccf7deb7..13bddfc87 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -4,7 +4,7 @@ import './newPage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 2cedb5972..4d4f5a911 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -4,7 +4,7 @@ import { model as HomebrewModel } from './homebrew.model.js'; import express from 'express'; import zlib from 'zlib'; import GoogleActions from './googleActions.js'; -import Markdown from '../shared/naturalcrit/markdown.js'; +import Markdown from '../shared/markdown.js'; import yaml from 'js-yaml'; import asyncHandler from 'express-async-handler'; import { nanoid } from 'nanoid'; diff --git a/shared/naturalcrit/markdown.js b/shared/markdown.js similarity index 98% rename from shared/naturalcrit/markdown.js rename to shared/markdown.js index c48539008..412be27a7 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/markdown.js @@ -16,10 +16,10 @@ import { gfmHeadingId as MarkedGFMHeadingId, resetHeadings as MarkedGFMResetHead import { markedEmoji as MarkedEmojis } from 'marked-emoji'; //Icon fonts included so they can appear in emoji autosuggest dropdown -import diceFont from '../../themes/fonts/iconFonts/diceFont.js'; -import elderberryInn from '../../themes/fonts/iconFonts/elderberryInn.js'; -import gameIcons from '../../themes/fonts/iconFonts/gameIcons.js'; -import fontAwesome from '../../themes/fonts/iconFonts/fontAwesome.js'; +import diceFont from '../themes/fonts/iconFonts/diceFont.js'; +import elderberryInn from '../themes/fonts/iconFonts/elderberryInn.js'; +import gameIcons from '../themes/fonts/iconFonts/gameIcons.js'; +import fontAwesome from '../themes/fonts/iconFonts/fontAwesome.js'; const renderer = new Marked.Renderer(); const tokenizer = new Marked.Tokenizer(); diff --git a/shared/naturalcrit/markdownLegacy.js b/shared/markdownLegacy.js similarity index 100% rename from shared/naturalcrit/markdownLegacy.js rename to shared/markdownLegacy.js diff --git a/shared/naturalcrit/codeEditor/autocompleteEmoji.js b/shared/naturalcrit/codeEditor/autocompleteEmoji.js index c7efa172b..ae7f2628f 100644 --- a/shared/naturalcrit/codeEditor/autocompleteEmoji.js +++ b/shared/naturalcrit/codeEditor/autocompleteEmoji.js @@ -1,7 +1,7 @@ -import diceFont from '../../../themes/fonts/iconFonts/diceFont.js'; -import elderberryInn from '../../../themes/fonts/iconFonts/elderberryInn.js'; -import fontAwesome from '../../../themes/fonts/iconFonts/fontAwesome.js'; -import gameIcons from '../../../themes/fonts/iconFonts/gameIcons.js'; +import diceFont from 'themes/fonts/iconFonts/diceFont.js'; +import elderberryInn from 'themes/fonts/iconFonts/elderberryInn.js'; +import fontAwesome from 'themes/fonts/iconFonts/fontAwesome.js'; +import gameIcons from 'themes/fonts/iconFonts/gameIcons.js'; const emojis = { ...diceFont, diff --git a/tests/markdown/basic.test.js b/tests/markdown/basic.test.js index aaa2adf58..ddceb9197 100644 --- a/tests/markdown/basic.test.js +++ b/tests/markdown/basic.test.js @@ -1,6 +1,6 @@ -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; test('Processes the markdown within an HTML block if its just a class wrapper', function() { const source = '
    *Bold text*
    '; diff --git a/tests/markdown/definition-lists.test.js b/tests/markdown/definition-lists.test.js index 144dad880..12499d559 100644 --- a/tests/markdown/definition-lists.test.js +++ b/tests/markdown/definition-lists.test.js @@ -1,6 +1,6 @@ -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; describe('Inline Definition Lists', ()=>{ test('No Term 1 Definition', function() { diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js index e70ebb673..e21eec414 100644 --- a/tests/markdown/emojis.test.js +++ b/tests/markdown/emojis.test.js @@ -1,4 +1,4 @@ -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; const dedent = require('dedent-tabs').default; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/tests/markdown/hard-breaks.test.js b/tests/markdown/hard-breaks.test.js index 63bfaef9c..068b2053a 100644 --- a/tests/markdown/hard-breaks.test.js +++ b/tests/markdown/hard-breaks.test.js @@ -1,6 +1,6 @@ -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; describe('Hard Breaks', ()=>{ test('Single Break', function() { diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index d17518411..5743f7903 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ const dedent = require('dedent-tabs').default; -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/tests/markdown/non-breaking-spaces.test.js b/tests/markdown/non-breaking-spaces.test.js index e498645a6..9da59b047 100644 --- a/tests/markdown/non-breaking-spaces.test.js +++ b/tests/markdown/non-breaking-spaces.test.js @@ -1,6 +1,6 @@ -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; describe('Non-Breaking Spaces Interactions', ()=>{ test('I am actually a single-line definition list!', function() { diff --git a/tests/markdown/paragraph-justification.test.js b/tests/markdown/paragraph-justification.test.js index 7876f5a26..f5a5b12ab 100644 --- a/tests/markdown/paragraph-justification.test.js +++ b/tests/markdown/paragraph-justification.test.js @@ -1,6 +1,6 @@ -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; describe('Justification', ()=>{ test('Left Justify', function() { diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index ea98fe56c..64232078f 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ const dedent = require('dedent-tabs').default; -import Markdown from 'naturalcrit/markdown.js'; +import Markdown from 'markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/themes/V3/Blank/snippets/footer.gen.js b/themes/V3/Blank/snippets/footer.gen.js index 9384baed7..417085642 100644 --- a/themes/V3/Blank/snippets/footer.gen.js +++ b/themes/V3/Blank/snippets/footer.gen.js @@ -1,4 +1,4 @@ -import Markdown from '../../../../shared/naturalcrit/markdown.js'; +import Markdown from '../../../../shared/markdown.js'; module.exports = { createFooterFunc : function(headerSize=1){ From 20d38d03d65d0c94772aaaeba23c6fda6606aa9f Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 6 Nov 2025 22:29:43 +1300 Subject: [PATCH 09/16] Rename New Page save function to trySave for better Edit Page compatibility --- client/homebrew/pages/newPage/newPage.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index dccf7deb7..a8a7306e4 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -56,6 +56,10 @@ const NewPage = (props)=>{ const editorRef = useRef(null); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); + // const saveTimeout = useRef(null); + // const warnUnsavedTimeout = useRef(null); + const trySaveRef = useRef(trySave); // CTRL+S listener lives outside React and needs ref to use trySave with latest copy of brew + const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges useEffect(()=>{ loadBrew(); @@ -114,6 +118,11 @@ const NewPage = (props)=>{ if(autoSaveEnabled) trySave(false, hasChange); }, [currentBrew]); + useEffect(()=>{ + trySaveRef.current = trySave; + unsavedChangesRef.current = unsavedChanges; + }); + const handleSplitMove = ()=>{ editorRef.current.update(); }; @@ -141,7 +150,7 @@ const NewPage = (props)=>{ } }; - const save = async ()=>{ + const trySave = async ()=>{ setIsSaving(true); const updatedBrew = { ...currentBrew }; @@ -190,7 +199,7 @@ const NewPage = (props)=>{ // #3 - Unsaved changes exist, click to save, show SAVE NOW if(unsavedChanges) - return save now; + return save now; // #4 - No unsaved changes, autosave is ON, show AUTO-SAVED if(autoSaveEnabled) From 2ce13f61e1b94a83960267e00d0609dfd699fd76 Mon Sep 17 00:00:00 2001 From: Gazook89 Date: Sun, 9 Nov 2025 23:29:55 -0600 Subject: [PATCH 10/16] update relative paths to absolute paths --- .../homebrew/pages/basePages/uiPage/uiPage.jsx | 10 +++++----- client/homebrew/pages/editPage/editPage.jsx | 18 +++++++++--------- client/homebrew/pages/homePage/homePage.jsx | 16 ++++++++-------- client/homebrew/pages/newPage/newPage.jsx | 16 ++++++++-------- client/homebrew/pages/sharePage/sharePage.jsx | 10 +++++----- client/homebrew/pages/userPage/userPage.jsx | 14 +++++++------- client/homebrew/pages/vaultPage/vaultPage.jsx | 10 +++++----- 7 files changed, 47 insertions(+), 47 deletions(-) diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.jsx b/client/homebrew/pages/basePages/uiPage/uiPage.jsx index e0e75d7c9..1880779c9 100644 --- a/client/homebrew/pages/basePages/uiPage/uiPage.jsx +++ b/client/homebrew/pages/basePages/uiPage/uiPage.jsx @@ -3,11 +3,11 @@ const React = require('react'); const createClass = require('create-react-class'); const Nav = require('client/homebrew/navbar/nav.jsx'); -const Navbar = require('../../../navbar/navbar.jsx'); -const NewBrewItem = require('../../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../../navbar/help.navitem.jsx'); -const RecentNavItem = require('../../../navbar/recent.navitem.jsx').both; -const Account = require('../../../navbar/account.navitem.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const NewBrewItem = require('client/homebrew/navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('client/homebrew/navbar/help.navitem.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); const UIPage = createClass({ diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index d0cc811ca..ed4ec39b4 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -15,14 +15,14 @@ import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import { both as RecentNavItem } from '../../navbar/recent.navitem.jsx'; +import Navbar from 'client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; +import { both as RecentNavItem } from 'client/homebrew/navbar/recent.navitem.jsx'; // Page specific imports import { Meta } from 'vitreum/headtags'; @@ -30,7 +30,7 @@ import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; -import ShareNavItem from '../../navbar/share.navitem.jsx'; +import ShareNavItem from 'client/homebrew/navbar/share.navitem.jsx'; import LockNotification from './lockNotification/lockNotification.jsx'; import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js'; import googleDriveIcon from '../../googleDrive.svg'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 20c418326..32401163c 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -15,14 +15,14 @@ import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import { both as RecentNavItem } from '../../navbar/recent.navitem.jsx'; +import Navbar from 'client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; +import { both as RecentNavItem } from 'client/homebrew/navbar/recent.navitem.jsx'; // Page specific imports import { Meta } from 'vitreum/headtags'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index b98f91635..3ecfe073c 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -15,14 +15,14 @@ import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import { both as RecentNavItem } from '../../navbar/recent.navitem.jsx'; +import Navbar from 'client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; +import { both as RecentNavItem } from 'client/homebrew/navbar/recent.navitem.jsx'; // Page specific imports import { Meta } from 'vitreum/headtags'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index d9bd36b70..32e88c9d8 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -4,11 +4,11 @@ const { useState, useEffect, useCallback } = React; const { Meta } = require('vitreum/headtags'); const Nav = require('client/homebrew/navbar/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); -const MetadataNav = require('../../navbar/metadata.navitem.jsx'); -const PrintNavItem = require('../../navbar/print.navitem.jsx'); -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const MetadataNav = require('client/homebrew/navbar/metadata.navitem.jsx'); +const PrintNavItem = require('client/homebrew/navbar/print.navitem.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js'); diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index 2419db3ad..b9273f3c3 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -5,13 +5,13 @@ const _ = require('lodash'); const ListPage = require('../basePages/listPage/listPage.jsx'); const Nav = require('client/homebrew/navbar/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); -const NewBrew = require('../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../navbar/help.navitem.jsx'); -const ErrorNavItem = require('../../navbar/error-navitem.jsx'); -const VaultNavitem = require('../../navbar/vault.navitem.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); +const NewBrew = require('client/homebrew/navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('client/homebrew/navbar/help.navitem.jsx'); +const ErrorNavItem = require('client/homebrew/navbar/error-navitem.jsx'); +const VaultNavitem = require('client/homebrew/navbar/vault.navitem.jsx'); const UserPage = (props)=>{ props = { diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx index eb0764b88..f9e14c180 100644 --- a/client/homebrew/pages/vaultPage/vaultPage.jsx +++ b/client/homebrew/pages/vaultPage/vaultPage.jsx @@ -6,11 +6,11 @@ const React = require('react'); const { useState, useEffect, useRef } = React; const Nav = require('client/homebrew/navbar/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); -const NewBrew = require('../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../navbar/help.navitem.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); +const NewBrew = require('client/homebrew/navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('client/homebrew/navbar/help.navitem.jsx'); const BrewItem = require('../basePages/listPage/brewItem/brewItem.jsx'); const SplitPane = require('client/components/splitPane/splitPane.jsx'); const ErrorIndex = require('../errorPage/errors/errorIndex.js'); From 6a4ea2c6c92cc812002b3930c3ba1cad8fc0e71a Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 11 Nov 2025 22:06:44 +1300 Subject: [PATCH 11/16] Move toggleGoogleStorage's trySave call to useEffect block --- client/homebrew/pages/editPage/editPage.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 524f31ac9..99567ea24 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -119,6 +119,10 @@ const EditPage = (props)=>{ if(autoSaveEnabled) trySave(false, hasChange); }, [currentBrew]); + useEffect(()=>{ + trySave(true); + }, [saveGoogle]); + const handleSplitMove = ()=>{ editorRef.current?.update(); }; @@ -179,7 +183,6 @@ const EditPage = (props)=>{ const toggleGoogleStorage = ()=>{ setSaveGoogle((prev)=>!prev); setError(null); - trySave(true); }; const trySave = (immediate = false, hasChanges = true)=>{ From 590688f1235796b2d740549d11697eda46bcbf9d Mon Sep 17 00:00:00 2001 From: MiniX16 Date: Wed, 12 Nov 2025 17:59:28 +0100 Subject: [PATCH 12/16] Add unsaved-change warning to Home page editor --- client/homebrew/pages/homePage/homePage.jsx | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 82c5b7084..5f2a3d14b 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -53,8 +53,9 @@ const HomePage =(props)=>{ const [isSaving , setIsSaving] = useState(false); const [autoSaveEnabled , setAutoSaveEnable] = useState(false); - const editorRef = useRef(null); - const lastSavedBrew = useRef(_.cloneDeep(props.brew)); + const editorRef = useRef(null); + const lastSavedBrew = useRef(_.cloneDeep(props.brew)); + const unsavedChangesRef = useRef(unsavedChanges); useEffect(()=>{ fetchThemeBundle(setError, setThemeBundle, currentBrew.renderer, currentBrew.theme); @@ -69,13 +70,28 @@ const HomePage =(props)=>{ } }; + const handleBeforeUnload = (e)=>{ + if(unsavedChangesRef.current) { + e.preventDefault(); + e.returnValue = ''; + return ''; + } + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + document.addEventListener('keydown', handleControlKeys); return ()=>{ document.removeEventListener('keydown', handleControlKeys); + window.removeEventListener('beforeunload', handleBeforeUnload); }; }, []); + useEffect(()=>{ + unsavedChangesRef.current = unsavedChanges; + }, [unsavedChanges]); + const save = ()=>{ request.post('/api') .send(currentBrew) From b66625e59d41886c297b0b77469ced9bde419196 Mon Sep 17 00:00:00 2001 From: MiniX16 Date: Thu, 13 Nov 2025 12:16:37 +0100 Subject: [PATCH 13/16] Handle unsaved warning with onbeforeunload --- client/homebrew/pages/homePage/homePage.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 5f2a3d14b..8405f34d3 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -78,13 +78,15 @@ const HomePage =(props)=>{ } }; - window.addEventListener('beforeunload', handleBeforeUnload); + const previousBeforeUnload = window.onbeforeunload; + + window.onbeforeunload = handleBeforeUnload; document.addEventListener('keydown', handleControlKeys); return ()=>{ document.removeEventListener('keydown', handleControlKeys); - window.removeEventListener('beforeunload', handleBeforeUnload); + window.onbeforeunload = previousBeforeUnload; }; }, []); From 24065b43e9809b325c7158fc85dbae465dd04818 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sat, 15 Nov 2025 03:07:56 +0000 Subject: [PATCH 14/16] bump version to 3.20.0 --- changelog.md | 4608 +++++++++++++++++++++++---------------------- package-lock.json | 4 +- package.json | 2 +- 3 files changed, 2335 insertions(+), 2279 deletions(-) diff --git a/changelog.md b/changelog.md index 0a108b9f2..3537bb8ed 100644 --- a/changelog.md +++ b/changelog.md @@ -1,2276 +1,2332 @@ -```css -.beta { - color : white; - padding : 4px 6px; - line-height : 1em; - background : grey; - border-radius : 12px; - font-family : monospace; - font-size : 10px; - font-weight : 800; - margin-top : -5px; - margin-bottom : -5px; -} - -.fac { - height: 1em; - line-height: 2em; - margin-bottom: -0.05cm -} - -h5 { - font-size: .35cm !important; -} - -.page ul ul { - margin-left: 0px; -} - -.page .taskList { - display:block; - break-inside:auto; -} - -.taskList li input { - list-style-type : none; - margin-left : -0.52cm; - transform: translateY(.05cm); - filter: brightness(1.1) drop-shadow(1px 2px 1px #222); -} - -.taskList ul { - margin-bottom: 0px; - margin-top: 0px; -} - -.taskList li input[checked] { - filter: sepia(100%) hue-rotate(60deg) saturate(3.5) contrast(4) brightness(1.1) drop-shadow(1px 2px 1px #222); -} - -pre + * { - margin-top: 0.17cm; -} - -pre { - margin-top: 0.17cm; -} - -.page p + pre { - margin-top : 0.1cm; -} - -.page ul + h5 { - margin-top: 0.25cm; -} - -.page p + h5 { - margin-top: 0.25cm; -} - -.page .openSans { - font-family: 'Open Sans'; - font-size: 0.9em; -} - -.page { - padding-bottom: 1.5cm; -} - -.varSyntaxTable th:first-of-type { - width:6cm; -} - -.page .exampleTable td,th { - border:1px dashed #00000030; -} -``` - -## changelog -For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery). - -### Wednesday 7/09/2025 - v3.19.3 - -{{taskList -##### calculuschild -* [x] Restoring original saving behavior; will continue investigating why save was failing for some users in background -}} - - -### Wednesday 7/09/2025 - v3.19.2 - -{{taskList -##### calculuschild -* [x] Hotfix for saving issues - Please refresh your browser and report if problems continue -}} - -### Wednesday 7/09/2025 - v3.19.1 - -{{taskList -##### calculuschild -* [x] Send diffs instead of full file on save - should help with timeout/disconnect errors -}} - -\column - -### Thursday 05/22/2025 - v3.19.0 - -{{taskList -##### abquintic -* [x] Fix crash due to colons after `\page` - -Fixes issue [#4105](https://github.com/naturalcrit/homebrewery/issues/4105) - -* [x] Fix images with spaces in alt text not rendering - -Fixes issue [#3659](https://github.com/naturalcrit/homebrewery/issues/3659) - -* [x] Custom snippets! Open the new {{openSans **:fas_table_list: SNIPPETS**}} tab (next to the {{openSans **:fas_paintbrush: STYLE**}} tab). Custom snippets will appear in a new snippet dropdown, and will be included when imported as a custom theme. - -* [x] Move several generic styles/snippets from PHB to the Blank theme; generic snippets like image masks no longer require the PHB theme. - -* [x] Extract several Markdown+ syntax extensions into their own NPM packages, for use by the wider community. - -* [x] Allow `\pagebreak` and `\columnbreak` as alternatives to `\page` and `\column` - -Partially fixes issue [#4035](https://github.com/naturalcrit/homebrewery/issues/4035) - -* [x] Fix misbehaving column breaks on old Chrome - -Fixes issue [#4192](https://github.com/naturalcrit/homebrewery/issues/4192) - -* [x] Self-host font-awesome icons; fix missing icons on local installs - -Fixes issue [#1965](https://github.com/naturalcrit/homebrewery/issues/1965) -Fixes issue [#1548](https://github.com/naturalcrit/homebrewery/issues/1548) - -##### G-Ambatte -* [x] Fix CORS issue on local installs - -* [x] Fix print size issues when using the Facing and Flow view options. - -Fixes issue [#4146](https://github.com/naturalcrit/homebrewery/issues/4146) - -* [x] New built-in `$[HB_pageNumber]` variable. Works with math operations or can be reassigned like any other variable for more customization over the old `{{pageNumber,auto}}` snippet.\ -New snippet found at {{openSans **:fas_pencil: TEXT EDITOR :fas_arrow_right: :fas_bookmark: PAGE NUMBERING :fas_arrow_right: :fas_arrow_down_1_9: VARIABLE AUTO PAGE NUMBER**}} - -##### 5e-Cleric -* [x] Fix search bar covering up snippet bar (3 times) - -Fixes issue [#4098](https://github.com/naturalcrit/homebrewery/issues/4098) - -* [x] Save view toolbar settings across sessions - -Fixes issue [#3835](https://github.com/naturalcrit/homebrewery/issues/3835) - -* [x] Fix styling issues on the view toolbar - -* [x] Update the Darkbrewery editor theme - -Fixes issue [#3312](https://github.com/naturalcrit/homebrewery/issues/3312) - -}} - -\page - -### Monday 03/10/2025 - v3.18.0 - -{{taskList -##### abquintic -* [x] Add ability to paste in any Share ID/URL into a brew's {{openSans :fas_circle_info: **Properties** :fas_arrow_right: **THEMES**}} selection, as long as that brew has been tagged as `meta:theme`. You can now share your custom brew themes without needing to make a personal copy. -* [x] Begin migration of custom Markdown extensions into their own NPM packages, for easier adoption by other users or projects -* [x] Fix external HTML appearing in open codeblocks - -Fixes issue [#3206](https://github.com/naturalcrit/homebrewery/issues/3206) - -* [x] Fix tables not rendering when directly after text - - -##### G-Ambatte -* [x] Cleanup of "cover pages" in the {{openSans :fas_rectangle_list: **NAVIGATION**}} list -* [x] Fix autosave triggering when no changes are present - -Fixes issue [#4051](https://github.com/naturalcrit/homebrewery/issues/4051) - -* [x] Remove empty table rows resulting from rowspan - -Fixes issue [#1729](https://github.com/naturalcrit/homebrewery/issues/1729) - -##### 5e-Cleric -* [x] Style fixes for covers art and logos on A4 size pages -* [x] Fix crash when trying to open brews that don't exist -* [x] Tweaks and style update styling on {{openSans **VAULT** :fas_dungeon:}} page. - -Fixes issue [#4079](https://github.com/naturalcrit/homebrewery/issues/4079) - -##### Calculuschild -* [x] `꞉꞉꞉꞉` now produces `
    ` instead of a `
    ` -* [x] Fix typos in tables freezing the editor - -Fixes issue [#4059](https://github.com/naturalcrit/homebrewery/issues/4059) - - -##### MollyMaclachlan (New Contributor!) -* [x] Fixed typos in the Monster Stat Block snippet - -Fixes issue [#4073](https://github.com/naturalcrit/homebrewery/issues/4073) - - -##### All -* [x] Update dependencies and scripts -* [x] Refactor components and backend tools -}} - -\column - -### Thursday 01/30/2025 - v3.17.0 - -{{taskList -##### 5e-Cleric - -* [x] Update FAQ - -* [x] Fix styling for Vault buttons and checkboxes - -* [x] Improve navigation bar styling - -* [x] Add feature to change username at https://www.naturalcrit.com/account - -* [x] Fix Reddit link crash when title has non-latin chars - -##### abquintic - -* [x] Fix page shadows toolbar option - -Fixes issue [#3919](https://github.com/naturalcrit/homebrewery/issues/3919) - -* [x] Add `:>>>` syntax for horizontal :>>>>> spaces - -* [x] Update Docker install instructions - -Fixes issue [#1930](https://github.com/naturalcrit/homebrewery/issues/1930) - -* [x] Allow styling pages via `\page{myStyles}` (with calculuschild) - -Fixes issue [#3901](https://github.com/naturalcrit/homebrewery/issues/3901) - -* [x] Update Ubuntu install instructions - -Fixes issue [#1952](https://github.com/naturalcrit/homebrewery/issues/1952) - -* [x] Add `:-:` `:-` `-:` syntax for paragraph alignment, similar to table column alignment; for example: - --: -: Right-aligned - -:-: :-: Centered - -* [x] Add `:-- 50% --:` syntax to allow setting table column widths by percentage; for example: -``` -| Narrow | Wide | -|:- 10% -:|:-90%--:| -| Cell | Cell | -``` - - -| Narrow | Wide | -|:- 10% -:|:-90%--:| -|Cell | Cell | -{exampleTable} - -##### G-Ambatte - -* [x] Fix crash when opening brew Properties tab - -Fixes issue [#3927](https://github.com/naturalcrit/homebrewery/issues/3927) - -* [x] Update error pages with steps to refresh credentials - -Fixes issue [#3955](https://github.com/naturalcrit/homebrewery/issues/3955) - -* [x] Add {{openSans :fas_rectangle_list: **NAVIGATION**}} menu to the viewer toolbar - -##### calculuschild - -* [x] Reduce display lag on large brews - -##### Gazook89 - -* [x] Smarter detection of current page number - -Fixes issue [#3824](https://github.com/naturalcrit/homebrewery/issues/3824) - -##### All -* [x] Update dependencies and scripts -* [x] Refactor components and fix various errors -}} - -\page - -### Wednesday 11/27/2024 - v3.16.1 - -{{taskList -##### 5e-Cleric - -* [x] Allow linking to specific HTML IDs via `#ID` at the end of the URL, e.g.: `homebrewery.naturalcrit.com/share/share/a6RCXwaDS58i#p4` to link to Page 4 directly - -Fixes issues [#2820](https://github.com/naturalcrit/homebrewery/issues/2820), [#3505](https://github.com/naturalcrit/homebrewery/issues/3505) - -* [x] Fix generation of link to certain Google Drive brews - -Fixes issue [#3776](https://github.com/naturalcrit/homebrewery/issues/3776) - -##### abquintic - -* [x] Fix blank pages appearing when pasting text - -Fixes issue [#3718](https://github.com/naturalcrit/homebrewery/issues/3718) - -##### Gazook89 - -* [x] Add new brew viewing options to the view toolbar -- {{fac,single-spread}} {{openSans **SINGLE PAGE**}} -- {{fac,facing-spread}} {{openSans **TWO PAGE**}} -- {{fac,flow-spread}} {{openSans **GRID**}} - -Fixes issue [#1379](https://github.com/naturalcrit/homebrewery/issues/1379) - -* [x] Updates to tag input boxes - -##### G-Ambatte - -* [x] Admin tools to fix certain corrupted documents - -Fixes issue [#3801](https://github.com/naturalcrit/homebrewery/issues/3801) - -* [x] Fix print window being affected by document zoom - -Fixes issue [#3744](https://github.com/naturalcrit/homebrewery/issues/3744) - - -##### calculuschild, 5e-Cleric, G-Ambatte, Gazook89, abquintic - -* [x] Multiple code refactors, cleanups, and security fixes -}} - -### Saturday 10/12/2024 - v3.16.0 - -{{taskList -##### 5e-Cleric - -* [x] Added a new API endpoint `/metadata/:shareId` to fetch metadata about individual brews - -Fixes issue [#2638](https://github.com/naturalcrit/homebrewery/issues/2638) - -* [x] Added A3, A5, and Card page size snippets under {{openSans **:fas_paintbrush: STYLE TAB :fas_arrow_right: :fas_print: PRINT**}} - -* [x] Adjust navbar styling for very long titles - -Fixes issue [#2071](https://github.com/naturalcrit/homebrewery/issues/2071) - -* [x] Added some sorting options to the {{openSans **VAULT** {{fas,fa-dungeon}}}} page - -* [x] Fix `language` property not working in share page - -Fixes issue [#3776](https://github.com/naturalcrit/homebrewery/issues/3776) - -##### abquintic - -* [x] New {{openSans **:fas_pencil: TEXT EDITOR :fas_arrow_right: :fas_bookmark: PAGE NUMBER :fas_arrow_right:**}} -{{openSans **:fas_xmark: SKIP PAGE NUMBER**}} and {{openSans **:fas_arrow_rotate_left: RESTART PAGE NUMBER**}} snippets for more control over automatic page numbering. - -Fixes issue [#513](https://github.com/naturalcrit/homebrewery/issues/513) - -* [x] New Table of Contents control options via {{openSans **:fas_pencil: TEXT EDITOR :fas_arrow_right: :fas_book: TABLE OF CONTENTS**}} submenus. By default, H1-H3 is included in the ToC generation, but the new options allow marking `{{blocks}}` to include or exclude specific or ranges of contained headers. Also, a global option to increase the default range of H1-H3 to H1-H4/5/6. After applying these markers, you must regenerate the Table of Contents to see the changes. - -* [x] Added a ":fas_lock: SYNC VIEWS" button onto the divider bar. When locked, scrolling on either panel will sync the other panel to the same page. - -Fixes issue [#241](https://github.com/naturalcrit/homebrewery/issues/241) - -##### Gazook89 - -* [x] Added a :fas_glasses: HIDE button to the page navigation bar - -##### G-Ambatte - -* [x] Automatic local backups of your files, in case of accidental data loss. Stores up to 5 snapshots of each brew edited in your browser, incrementing from a few minutes old to a maximum of several days. Restore a backup by clicking an entry in the new {{openSans **:fas_clock_rotate_left: HISTORY**}} button in the snippet bar. - -Fixes issue [#3070](https://github.com/naturalcrit/homebrewery/issues/3070) - -* [x] Fix issue with legacy brews breaking on Share page - -Fixes issue [#3764](https://github.com/naturalcrit/homebrewery/issues/3764) - -* [x] Fix print size when printing a zoomed document - -Fixes issue [#3744](https://github.com/naturalcrit/homebrewery/issues/3744) - -##### All - -* [x] Background code cleanup, security fixes, dev tool improvements, dependency updates, prep for upcoming features, etc. -}} - -### Wednesday 9/25/2024 - v3.15.1 - -{{taskList -##### calculuschild - -* [x] Background fixes to handle Google Drive issues - -* [x] Remove duplicate error logging - -##### calculuschild, 5e-Cleric - -* [x] Fix links in {{openSans **RECENT BREWS :fas_clock_rotate_left:**}} and user {{openSans **BREWS :fas_beer_mug_empty:**}} pointing to trashed Google Drive files after transferring from Google to Homebrewery storage - -Fixes issue [#3776](https://github.com/naturalcrit/homebrewery/issues/3776) -}} - -\page - -### Wednesday 9/04/2024 - v3.15.0 - -{{taskList -##### 5e-Cleric, abquintic, calculuschild, Gazook89, G-Ambatte, Ericsheid, Kaiburr - -* [x] New {{openSans **VAULT** {{fas,fa-dungeon}}}} page 🎉🎉🎉 -: -All **PUBLISHED** brews ({{openSans :fas_circle_info: **Properties**}} menu) will be searchable, by title or author, and filtered by renderer. More features and adjustments will be coming. -: -Note: If any of your own brews are not showing up in search (particularly if stored on Google Drive), please edit and re-save to ensure our database has the data needed from document to be searchable. - -Fixes issue [#697](https://github.com/naturalcrit/homebrewery/issues/697) - -##### Gazook89 - -* [x] Auto-focus on text editor when switching editor tabs -}} - -### Wednesday 8/28/2024 - v3.14.3 - -{{taskList -##### calculuschild, G-Ambatte - -* [x] New {{openSans **IMAGES → {{fac,image-wrap-left}} IMAGE WRAP LEFT/RIGHT**}} snippets - -Fixes issue [#380](https://github.com/naturalcrit/homebrewery/issues/380) - -* [x] Fix v3.14.2 bug with `꞉꞉꞉꞉` failing after tables - -##### 5e-Cleric - -* [x] Fix Account page crash when not logged in - -Fixes issue [#3605](https://github.com/naturalcrit/homebrewery/issues/3605) - -##### abquintic - -* [x] Fix jump hotkeys conflicting with `CTRL + SHIFT`. Preview and Source movement shortcuts now use `CTRL + SHIFT + META + LEFT\RIGHTARROW` - -##### G-Ambatte - -* [x] Fix display issue with image wrap icons -}} - - -### Tuesday 8/27/2024 - v3.14.2 - -{{taskList -##### calculuschild - -* [x] Reroute invalid urls to homepage - -Fixes issues [#3269](https://github.com/naturalcrit/homebrewery/issues/3629) - -* [x] Background dependency updates - -##### G-Ambatte - -* [x] Add route to get brew styling via `/css/shareId` - -Fixes issues [#1097](https://github.com/naturalcrit/homebrewery/issues/1097) - -* [x] Fix `:emojis:` preventing code folding - -Fixes issues [#3604](https://github.com/naturalcrit/homebrewery/issues/3604) - -* [x] Fix mask image warping when rotated and stretched - -Fixes issues [#3636](https://github.com/naturalcrit/homebrewery/issues/3636) - -* [x] Fix Table of Contents uppercasing - -Fixes issues [#3572](https://github.com/naturalcrit/homebrewery/issues/3572) - -##### abquintic - -* [x] Create globally unique Header IDs across pages - -Fixes issues [#1430](https://github.com/naturalcrit/homebrewery/issues/1430) - -* [x] Fix colon `꞉꞉꞉꞉` being parsed in codeblocks - -* [x] Prevent crashes when loading undefined renderer or theme bundle - -* [x] Add Jump-To hotkeys - - * Use `CTRL/META + SHIFT + LEFTARROW` to brewJump - * Use `CTRL/META + SHIFT + RIGHTARROW` to sourceJump - -* [x] Prevent reload from clobbering modified fresh clones - -##### 5e-Cleric, Gazook89 - -* [x] Viewer tools for zoom/page navigation -}} - -### Tuesday 8/13/2024 - v3.14.1 - -{{taskList -##### abquintic - -* [x] Allow Table of Contents to flow across columns - -Fixes issues [#2563](https://github.com/naturalcrit/homebrewery/issues/2563) - -* [x] Fix unusual margin spacing for adjacent `.descriptive` and `.wide` blocks - -Fixes issues [#2688](https://github.com/naturalcrit/homebrewery/issues/2688) - -* [x] Add code folding to :fas_paintbrush: {{openSans **STYLE**}} tab - -##### G-Ambatte - -* [x] Fix edge case where Table of Contents generator changed capitalization of headings - -Fixes issues [#3572](https://github.com/naturalcrit/homebrewery/issues/3572) - -* [x] Fix **Ink Friendly** snippet causing unselectable PDF text - -Fixes issues [#3563](https://github.com/naturalcrit/homebrewery/issues/3563) - -* [x] Prevent brews selecting themselves as a theme - -Fixes issues [#3614](https://github.com/naturalcrit/homebrewery/issues/3614) - -* [x] Fix info pages (`/faq`, `/migrate`, etc.) showing blank authorship info - -Fixes issues [#3568](https://github.com/naturalcrit/homebrewery/issues/3568) - -* [x] Add `abs()`, `sign()` and `signed()` functions to variable syntax math handler - -Fixes issues [#3537](https://github.com/naturalcrit/homebrewery/issues/3537) - -* [x] Fix variable math handler not processing commas (i.e., in `$[max(varA,varB)]` - -Fixes issues [#3613](https://github.com/naturalcrit/homebrewery/issues/3613) - -* [x] Fix variable math handler scrambling variables with names that are subsets of other variables - -Fixes issues [#3622](https://github.com/naturalcrit/homebrewery/issues/3622) - -##### calculuschild - -* [x] Fix `/migrate` page using an editor context instead of share context - -##### 5e-Cleric - -* [x] Fix Monster Stat Blocks losing color in Safari -}} - -\page - -### Monday 7/29/2024 - v3.14.0 -{{taskList - -##### abquintic, calculuschild - -* [x] Alternative Brew Themes, including importing other brews as a base theme. - -- In the :fas_circle_info: **Properties** menu, find the new {{openSans **THEME**}} dropdown. It lists Brew Themes, including a new **Blank** theme as a simpler basis for custom styling. -- Brews tagged with `meta:theme` will appear in the Brew Themes list. Selecting one loads its :fas_paintbrush: **Style** tab contents as the CSS basis for the current brew, allowing one brew to style multiple documents. -- Brews with `meta:theme` can also select their own Theme, i.e. layering Themes on top of each other. -- The next goal is to make **Published** Themes shareable between users. - - -Fixes issues [#1899](https://github.com/naturalcrit/homebrewery/issues/1899), [#3085](https://github.com/naturalcrit/homebrewery/issues/3085) - -##### G-Ambatte - -* [x] Fix Drop-cap font becoming corrupted when Bold - -Fixes issues [#3551](https://github.com/naturalcrit/homebrewery/issues/3551) - -* [x] Fixes to UI styling - -Fixes issues [#3568](https://github.com/naturalcrit/homebrewery/issues/3568) - -}} - - -### Saturday 6/7/2024 - v3.13.1 -{{taskList - -##### calculuschild, G-Ambatte - -* [x] Hotfixes for issues with v3.13.0 - -Fixes issues [#3559](https://github.com/naturalcrit/homebrewery/issues/3559), [#3552](https://github.com/naturalcrit/homebrewery/issues/3552), [#3554](https://github.com/naturalcrit/homebrewery/issues/3554) -}} - -### Friday 28/6/2024 - v3.13.0 -{{taskList - -##### calculuschild - -* [x] Add `:emoji:` Markdown syntax, with autosuggest; start typing after the first `:` for matching emojis from -:fab_font_awesome: FontAwesome, :df_d20: DiceFont, :ei_action: ElderberryInn, and a subset of :gi_broadsword: GameIcons - -* [x] Fix `{curly injection}` to append to, rather than erase and replace target CSS -* [x] {{openSans **GET PDF**}} {{fa,fa-file-pdf}} now opens the print dialog directly, rather than redirecting to a separate page - -##### Gazook - -* [x] Several small style tweaks to the UI -* [x] Cleaning and refactoring several large pieces of code - -##### 5e-Cleric - -* [x] For error pages, add links to user account and `/share` page if available - -Fixes issue [#3298](https://github.com/naturalcrit/homebrewery/issues/3298) - -* [x] Change FrontCover title to use stroke outline instead of faking it with dozens of shadows -* [x] Cleaning and refactoring several large pieces of CSS - -##### abquintic - -* [x] Added additional {{openSans **TABLE OF CONTENTS**}} snippet options. Explicitly include or exclude items from the ToC generation via CSS properties -`--TOC:exclude` or `--TOC:include`, or change the included header depth from 3 to 6 (default 3) with `tocDepthH6` - -##### MurdoMaclachlan *(new contributor!)* - -* [x] Added "proficiency bonus" to Monster Stat Block snippet. - -Fixes issue [#3397](https://github.com/naturalcrit/homebrewery/issues/3397) -}} - -### Monday 18/3/2024 - v3.12.0 -{{taskList - -##### 5e-Cleric - -* [x] Fix language-specific hyphenation on print page - -Fixes issue [#3294](https://github.com/naturalcrit/homebrewery/issues/3294) - -* [x] Upgrade Font-Awesome to v6.51 - -* [x] Allow downloaded files to be uploaded via {{openSans **NEW {{fa,fa-plus-square}} → FROM UPLOAD {{fa,fa-upload}}**}} - -##### G-Ambatte - -* [x] Fix an edge case crash with empty documents - -Fixes issue [#3315](https://github.com/naturalcrit/homebrewery/issues/3315) - -* [x] Brews on the user page can be searched by tag; clicking a tag adds it to the filter - -Fixes issue [#3164](https://github.com/naturalcrit/homebrewery/issues/3164) - -* [x] Add *DiceFont* icons {{df,d20-20}} `{{df,icon-name}}` - -##### abquintic - -* [x] Fix ^super^ and ^^sub^^ highlighting in the text editor - -* [x] Add new syntax for multiline Definition Lists: - - -``` -Term -::Definition 1 -::Definition 2 -with more text -``` - -produces: - -Term -::Definition 1 -::Definition 2 -with more text - -Fixes issue [#2340](https://github.com/naturalcrit/homebrewery/issues/2340) - -##### RKuerten : -* [x] Fix monster stat block backgrounds on print page - -Fixes issue [#3275](https://github.com/naturalcrit/homebrewery/issues/3275) - -* [x] Added new text editor theme: "Darkvision". - -##### calculuschild, G-Ambatte, 5e-Cleric - -* [x] Codebase and UI cleanup -}} - -\page - - -### Friday 21/2/2024 - v3.11.0 -{{taskList - -##### Gazook89 - -* [x] Brew view count no longer increases when viewed by owner - -Fixes issue [#3037](https://github.com/naturalcrit/homebrewery/issues/3037) - -* [x] Small tweak to PHB H3 sizing - -Fixes issue [#2989](https://github.com/naturalcrit/homebrewery/issues/2989) - -* [x] Add **Fold/Unfold All** {{fas,fa-compress-alt}} / {{fas,fa-expand-alt}} buttons to editor bar - -Fixes issue [#2965](https://github.com/naturalcrit/homebrewery/issues/2965) - - -##### G-Ambatte - -* [x] Share link added to Editor Access error page - -Fixes issue [#3086](https://github.com/naturalcrit/homebrewery/issues/3086) - -* [x] Add Darkbrewery theme to Editor theme selector {{fas,fa-palette}} - -Fixes issue [#3034](https://github.com/naturalcrit/homebrewery/issues/3034) - -* [x] Fix Firefox prints with alternating blank pages - -Fixes issue [#3115](https://github.com/naturalcrit/homebrewery/issues/3115) - -* [x] Admin page working again - -Fixes issue [#2657](https://github.com/naturalcrit/homebrewery/issues/2657) - - -##### 5e-Cleric - -* [x] Fix indenting issue with Monster Blocks and italics in Class Feature - -Fixes issues [#527](https://github.com/naturalcrit/homebrewery/issues/527), -[#3247](https://github.com/naturalcrit/homebrewery/issues/3247) - -* [x] Allow CSS vars in curly syntax to be formatted as strings using single quotes - -`{{--customVar:"'a string'"}}` - -Fixes issue [#3066](https://github.com/naturalcrit/homebrewery/issues/3066) - -* [x] Add *Elderberry Inn* icons {{ei,action}} `{{ei,icon-name}}` - -Fixes issue [#3171](https://github.com/naturalcrit/homebrewery/issues/3171) - -* [x] New {{openSans **{{fas,fa-keyboard}} FONTS** }} snippets! - -Fixes issue [#3171](https://github.com/naturalcrit/homebrewery/issues/3171) - -* [x] New page now opens in a new tab - - -##### abquintic (new contributor!) - -* [x] Add ^super^ `^abc^` and ^^sub^^ `^^abc^^` syntax. - -Fixes issue [#2171](https://github.com/naturalcrit/homebrewery/issues/2171) - -* [x] Add HTML tag assignment to curly syntax `{{tag=value}}` - -Fixes issue [1488](https://github.com/naturalcrit/homebrewery/issues/1488) - -* [x] {{openSans **Brew → Clone to New**}} now clones tags - -Fixes issue [1488](https://github.com/naturalcrit/homebrewery/issues/1488) - -##### calculuschild - -* [x] Better error messages for "Out of Google Drive Storage" and "Not logged in to edit" - -Fixes issues [2510](https://github.com/naturalcrit/homebrewery/issues/2510), -[2975](https://github.com/naturalcrit/homebrewery/issues/2975) - -* [x] Brew Variables -}} - -\ - -{{wide - -### Brew Variable Syntax - -You may already be familiar with `[link](url)` and `![image](url)` synax. We have expanded this to include a third `$[variable](text)` syntax. All three of these syntaxes now share a common set of features: - -{{varSyntaxTable -| syntax | description | -|:-------|-------------| -| `[var]:content` | Assigns a variable (must start on a line by itself, and ends at the next blank line) | -| `[var](content)` | Assigns a variable and outputs it (can be inline) | -| `[var]` | Outputs the variable contents as a link, if formatted as a valid link | -| `![var]` | Outputs as an image, if formatted as a valid image | -| `$[var]` | Outputs as Markdown | -| `$[var1 + var2 - 2 * var3]` | Performs math operations and outputs result if all variables are valid numbers | -}} - -}} - -{{wide,margin-top:0,margin-bottom:0 -### Examples -}} - -{{wide,columns:2,margin-top:0,margin-bottom:0 - -``` -[first]: Bob - -[last]: Jones - -My name is $[first] $[last]. -``` - -\column - -[first]: Bob - -[last]: Jones - -My name is $[first] $[last]. - -}} - -{{wide,columns:2,margin-top:0,margin-bottom:0 - -``` -[myTable]: -| h1 | h2 | -|----|----| -| c1 | c2 | - -Here is my table: -$[myTable] -``` - -\column - -[myTable]: -| h1 | h2 | -|----|----| -| c1 | c2 | - -Here is my table: -$[myTable] -}} - -{{wide,columns:2,margin-top:0,margin-bottom:0 - -``` -There are $[TableNum] tables total. - -#### Table $[TableNum](1): Horses - -#### Table $[TableNum]($[TableNum + 1]): Cows -``` - -\column - -There are $[TableNum] tables in this document. *(note: final value of `$[TableNum]` gets hoisted up if available)* - - -#### Table $[TableNum](1): Horses - -#### Table $[TableNum]($[TableNum + 1]): Cows -}} - -\page - -### Friday 13/10/2023 - v3.10.0 -{{taskList - -##### G-Ambatte - -* [x] Fix user preferred save location being ignored - -Fixes issue [#2993](https://github.com/naturalcrit/homebrewery/issues/2993) - -* [x] Fix crash to white screen when starting new brews while not signed in - -Fixes issue [#2999](https://github.com/naturalcrit/homebrewery/issues/2999) - -* [x] Fix FreeBSD install script - -Fixes issue [#3005](https://github.com/naturalcrit/homebrewery/issues/3005) - -* [x] Fix *"This brew has been changed on another device"* triggering when manually saving during auto-save - -Fixes issue [#2641](https://github.com/naturalcrit/homebrewery/issues/2641) - -* [x] Fix Firefox different column-flow behavior - -Fixes issue [#2982](https://github.com/naturalcrit/homebrewery/issues/2982) - -* [x] Fix brew titles being mis-sorted on user page - -Fixes issue [#2775](https://github.com/naturalcrit/homebrewery/issues/2775) - -* [x] Text Editor themes now available via new drop-down - -Fixes issue [#362](https://github.com/naturalcrit/homebrewery/issues/362) - -##### 5e-Cleric - -* [x] New {{openSans **PHB → {{fas,fa-quote-right}} QUOTE** }} snippet for V3! - -Fixes issue [#2920](https://github.com/naturalcrit/homebrewery/issues/2920) - -* [x] Several updates and fixes to FAQ and Welcome page - -Fixes issue [#2729](https://github.com/naturalcrit/homebrewery/issues/2729), -[#2787](https://github.com/naturalcrit/homebrewery/issues/2787) - -##### Gazook89 - -* [x] Add syntax highlighting for Definition Lists :\: -}} - - -### Thursday 17/08/2023 - v3.9.2 -{{taskList - -##### calculuschild - -* [x] Fix links to certain old Google Drive files - -Fixes issue [#2917](https://github.com/naturalcrit/homebrewery/issues/2917) - -##### G-Ambatte - -* [x] Menus now open on click, and internally consistent - -Fixes issue [#2702](https://github.com/naturalcrit/homebrewery/issues/2702), [#2782](https://github.com/naturalcrit/homebrewery/issues/2782) - -* [x] Add smarter footer snippet - -Fixes issue [#2289](https://github.com/naturalcrit/homebrewery/issues/2289) - -* [x] Add sanitization in Style editor - -Fixes issue [#1437](https://github.com/naturalcrit/homebrewery/issues/1437) - -* [x] Rework class table snippets to remove unnecessary randomness - -Fixes issue [#2964](https://github.com/naturalcrit/homebrewery/issues/2964) - -* [x] Add User Page link to Google Drive file for file owners, add icons for additional storage locations - -Fixes issue [#2954](https://github.com/naturalcrit/homebrewery/issues/2954) - -* [x] Add default save location selection to Account Page - -Fixes issue [#2943](https://github.com/naturalcrit/homebrewery/issues/2943) - -##### 5e-Cleric - -* [x] Exclude cover pages from Table of Content generation (editing on mobile is still not recommended) - -Fixes issue [#2920](https://github.com/naturalcrit/homebrewery/issues/2920) - -##### Gazook89 - -* [x] Adjustments to improve mobile viewing -}} - - - -### Wednesday 28/06/2023 - v3.9.1 -{{taskList - -##### G-Ambatte - -* [x] Better error pages with more useful information - -Fixes issue [#1924](https://github.com/naturalcrit/homebrewery/issues/1924) -}} - -### Friday 02/06/2023 - v3.9.0 -{{taskList - -##### calculuschild - -* [x] Fix some files not showing up on userpage when user has a large number of brews in Google Drive - -Fixes issue [#2408](https://github.com/naturalcrit/homebrewery/issues/2408) - -* [x] Pressing tab now indents with spaces instead of tab character; fixes several issues with Markdown lists - -Fixes issues [#2092](https://github.com/naturalcrit/homebrewery/issues/2092), [#1556](https://github.com/naturalcrit/homebrewery/issues/1556) - -* [x] Rename `naturalCritLogo.svg` to `naturalCritLogoRed.svg`. Those using the {{beta BETA}} coverPage snippet may need to update that text to make the NaturalCrit logo appear again. - -##### G-Ambatte - -* [x] Fix strange animation of image masks - -Fixes issue [#2790](https://github.com/naturalcrit/homebrewery/issues/2790) - -##### 5e-Cleric - -* [x] New {{openSans **PHB → {{fac,book-part-cover}} PART COVER PAGE** }} snippet for V3! - -* [x] New {{openSans **PHB → {{fac,book-back-cover}} BACK COVER PAGE** }} snippet for V3! (Thanks to /u/Kaiburr_Kath-Hound on Reddit for providing some of these resources!) - -* [x] New {{openSans **TEXT EDITOR → {{fas,fa-bars}} INDEX** }} snippet for V3! - -* [x] Fix highlighting of curly braces inside comments - -Fixes issue [#2784](https://github.com/naturalcrit/homebrewery/issues/2784) -}} - -\page - -### Wednesday 12/04/2023 - v3.8.0 -{{taskList - -##### calculuschild - -* [x] Rename `{{coverPage}}` to `{{frontCover}}`. Those using this {{beta BETA}} feature will need to update that text to make the cover page appear again. - -* [x] Several background fixes to test scripts - -##### Jeddai - -* [X] Add content negotiation to exclude image requests from our API calls - -Fixes issue [#2595](https://github.com/naturalcrit/homebrewery/issues/2595) - -##### G-Ambatte - -* [x] Update server build scripts to fix Admin page - -Fixes issues [#2657](https://github.com/naturalcrit/homebrewery/issues/2657) - -* [x] Fix internal links inside `<\div>` blocks not receiving the `target=_self` attribute - -Fixes issues [#2680](https://github.com/naturalcrit/homebrewery/issues/2680) - -* [x] See brew details on `/share` pages by clicking the brew title (author, last update, tags, etc.) - -Fixes issues [#1679](https://github.com/naturalcrit/homebrewery/issues/1679) - -* [x] Add local Windows install script via Chocolatey - -##### 5e-Cleric - -* [x] New {{openSans **TABLES → {{fas,fa-language}} RUNE TABLE**}} snippets for V3. Adds an alphabetic script translation table. - -* [x] New {{openSans **IMAGES → {{fac,mask-center}} WATERCOLOR CENTER** }} snippets for V3, which adds a stylish watercolor texture to the center of your images! - -* [x] New {{openSans **PHB → {{fac,book-inside-cover}} INSIDE COVER PAGE** }} snippet for V3! (Thanks to /u/Kaiburr_Kath-Hound on Reddit for providing some of these resources!) - -* [x] Add some missing characters {{font-family:scalySansRemake Ñ ñ ç Ç Ý ý # ^ ¿ ' " ¡ ·}} to the "scalySansRemake" font in V3. - -Fixes issues [#2280](https://github.com/naturalcrit/homebrewery/issues/2280) - -##### Gazook89 - -* [x] Add "Language" selector in {{fa,fa-info-circle}} **Properties** menu. Sets the HTML Lang attribute for your brew to better handle hyphenation or spellcheck. - -Fixes issues [#1343](https://github.com/naturalcrit/homebrewery/issues/1343) - -* [x] Fix a crash when multiple `{injection}` tags appear in sequence - -Fixes issues [#2712](https://github.com/naturalcrit/homebrewery/issues/2712) - -##### MichielDeMey - -* [x] Remove all-caps display on Account button since usernames are case-sensitive. - -Fixes issues [#2731](https://github.com/naturalcrit/homebrewery/issues/2731) - -}} - -### Monday 13/03/2023 - v3.7.2 -{{taskList - -##### calculuschild - -* [x] Fix wide Monster Stat Blocks not spanning columns on Legacy -}} - -### Thursday 09/03/2023 - v3.7.1 -{{taskList - -##### Lucastucious (new contributor!) - -* [x] Changed `filter: drop-shadow` to `box-shadow` on text boxes, making PDF text selectable - -Fixes issues [#1569](https://github.com/naturalcrit/homebrewery/issues/1569) - -{{note -**NOTE:** If you create your PDF on a computer with an old version of Mac Preview (v10 or older) you may see shadows appear as solid gray. -}} - -##### MichielDeMey - -* [x] Updated the Google Drive icon -* [x] Backend fix to unit tests failing intermittently - -##### calculuschild - -* [x] Fix PDF pixelation on CoverPage text outlines -}} - -### Tuesday 28/02/2023 - v3.7.0 -{{taskList - -{{note -**NOTE:** Some new snippets will now show a {{beta BETA}} tag. Feel free to use them, but be aware we may change how they work depending on your feedback. -}} - -##### calculuschild - -* [x] New {{openSans **IMAGES → WATERCOLOR EDGE** {{fac,mask-edge}} }} and {{openSans **WATERCOLOR CORNER** {{fac,mask-corner}} }} snippets for V3, which adds a stylish watercolor texture to the edge of your images! (Thanks to /u/flamableconcrete on Reddit for providing these image masks!) - -* [x] Fix site not displaying on iOS devices - -##### 5e-Cleric - -* [x] New {{openSans **PHB → COVER PAGE** {{fac,book-front-cover}} }} snippet for V3, which adds a stylish coverpage to your brew! (Thanks to /u/Kaiburr_Kath-Hound on Reddit for providing some of these resources!) - -##### MichielDeMey (new contribuor!) - -* [x] Fix typo in testing scripts -* [x] Fix "mug" image not using HTTPS - -Fixes issues [#2687](https://github.com/naturalcrit/homebrewery/issues/2687) -}} - -### Saturday 18/02/2023 - v3.6.1 -{{taskList -##### G-Ambatte - -* [x] Fix users not being removed from Authors list - -Fixes issues [#2674](https://github.com/naturalcrit/homebrewery/issues/2674) -}} - -### Monday 23/01/2023 - v3.6.0 -{{taskList -##### calculuschild - -* [x] Fix Google Drive brews sometimes duplicating - -Fixes issues [#2603](https://github.com/naturalcrit/homebrewery/issues/2603) - -##### Jeddai - -* [x] Add unit tests with full coverage for the Homebrewery API - -* [x] Add message to refresh the browser if the user is missing an update to the Homebrewery - -Fixes issues [#2583](https://github.com/naturalcrit/homebrewery/issues/2583) -}} - -\page - -{{taskList -##### G-Ambatte - -* [x] Auto-compile Themes CSS on development server - -##### 5e-Cleric - -* [x] Fix cloned brews inheriting the parent view count -}} - - -### Friday 23/12/2022 - v3.5.0 -{{taskList - -##### Jeddai - -* [x] Only brew owners or invited authors can edit a brew - - - Visiting an `/edit` page of a brew that does not list you as an author will result in an error page. Authors can be added to any brew by opening its {{fa,fa-info-circle}} **Properties** menu and typing the author's username (case-sensitive) into the **Invited Authors** bubble. - - Warn user if a newer brew version has been saved on another device - -Fixes issues [#1987](https://github.com/naturalcrit/homebrewery/issues/1987) -}} - -### Saturday 10/12/2022 - v3.4.2 -{{taskList - -##### Jeddai - -* [x] Fix broken tags editor - -* [x] Reduce server load to fix some saving issues - -Fixes issues [#2322](https://github.com/naturalcrit/homebrewery/issues/2322) - -##### G-Ambatte - -* [x] Account page help link for Google Drive errors - -Fixes issues [#2520](https://github.com/naturalcrit/homebrewery/issues/2520) -}} - -### Monday 05/12/2022 - v3.4.1 -{{taskList - -##### G-Ambatte - -* [x] Fix Account page incorrect last login time - -Fixes issues [#2521](https://github.com/naturalcrit/homebrewery/issues/2521) - -##### Gazook - -* [x] Fix crashing on iOS and Safari browsers - -Fixes issues [#2531](https://github.com/naturalcrit/homebrewery/issues/2531) -}} - -### Monday 28/11/2022 - v3.4.0 -{{taskList - -##### G-Ambatte - -* [x] Fix for Chrome v108 handling of page size - -Fixes issues [#2445](https://github.com/naturalcrit/homebrewery/issues/2445), [#2516](https://github.com/naturalcrit/homebrewery/issues/2516) - -* [x] New account page with some user info, at {{openSans **USERNAME {{fa,fa-user}} → ACCOUNT {{fa,fa-user}}**}} - -Fixes issues [#2049](https://github.com/naturalcrit/homebrewery/issues/2049), [#2043](https://github.com/naturalcrit/homebrewery/issues/2043) - -* [x] Fix "Published/Private Brews" buttons on userpage - -Fixes issues [#2449](https://github.com/naturalcrit/homebrewery/issues/2449) - -##### Gazook - -* [x] Make autosave default on for new users - -* [x] Added link to our FAQ at {{openSans **NEED HELP? {{fa,fa-question-circle}} → FAQ {{fa,fa-question-circle}}**}} - -* [x] Fix curly blocks freezing with long property lists - -Fixes issues [#2393](https://github.com/naturalcrit/homebrewery/issues/2393) - -* [x] Items can now be removed from {{openSans **RECENT BREWS** {{fas,fa-history}} }} - -Fixes issues [#1918](https://github.com/naturalcrit/homebrewery/issues/1918) - -* [x] Curly injector syntax `{blue}` highlighting in editor - -Fixes issues [#1670](https://github.com/naturalcrit/homebrewery/issues/1670) - -}} - -### Thursday 28/10/2022 - v3.3.1 -{{taskList - -##### calculuschild - -* [x] Fixes to several broken CSS styles from v3.3.0 - -Fixes issues [#2468](https://github.com/naturalcrit/homebrewery/issues/2468) - -##### Jeddai - -* [x] Reduce size of thumbnails on social media links - -}} - -### Friday 19/10/2022 - v3.3.0 -{{taskList - -##### calculuschild - -* [x] Fix for tables broken by Chrome v106 - - -##### G-Ambatte: - -* [x] Fix Table of Contents broken by Chrome v106 - -Fixes issues [#2437](https://github.com/naturalcrit/homebrewery/issues/2437) - -* [x] Show brew thumbnails on user page - -Fixes issues [#2331](https://github.com/naturalcrit/homebrewery/issues/2331) - -* [x] Allow longer URLs for brew thumbnails - -Fixes issues [#2351](https://github.com/naturalcrit/homebrewery/issues/2351) - -* [x] Code no longer unfolds when inserting a snippet - -Fixes issues [#2135](https://github.com/naturalcrit/homebrewery/issues/2135) - -* [x] Fix brew settings being lost on first save - -Fixes issues [#2427](https://github.com/naturalcrit/homebrewery/issues/2427) - -##### Gazook: - -* [x] Several updates to bug reporting and error popups - -Fixes issues [#2376](https://github.com/naturalcrit/homebrewery/issues/2376) - -* [x] Fixes to userpage search bar - -Fixes issues [#1675](https://github.com/naturalcrit/homebrewery/issues/1675), [#2353](https://github.com/naturalcrit/homebrewery/issues/2353) - -* [x] Renderer *(legacy / V3)* now shown next to page # - -Fixes issues [#1928](https://github.com/naturalcrit/homebrewery/issues/1928) - -* [x] Prevent text selection when moving divider bar - -Fixes issues [#1632](https://github.com/naturalcrit/homebrewery/issues/1632) - -* [x] Tweak Monster Stat Block coloring - -Fixes issues [#2123](https://github.com/naturalcrit/homebrewery/issues/2123) - -* [x] Added dropdown button to toggle autosave - -Fixes issues [#1546](https://github.com/naturalcrit/homebrewery/issues/1546) - -}} - - -### Friday 08/09/2022 - v3.2.2 -{{taskList - -##### Jeddai: - -* [x] Fix brews not deleting from User page when removed from Google Drive externally. - - Fixes issues: [#2325](https://github.com/naturalcrit/homebrewery/issues/2325) - -##### G-Ambatte: - -* [x] Brew Tags are now searchable on the User page - -Fixes issues [#2317](https://github.com/naturalcrit/homebrewery/issues/2317), [#2319](https://github.com/naturalcrit/homebrewery/issues/2319), [#2334](https://github.com/naturalcrit/homebrewery/issues/2334) - -* [x] Several tweaks to the User page - - Fixes issues: [#1797](https://github.com/naturalcrit/homebrewery/issues/1797), [#2315](https://github.com/naturalcrit/homebrewery/issues/2315), [#2326](https://github.com/naturalcrit/homebrewery/issues/2326), [#2328](https://github.com/naturalcrit/homebrewery/issues/2328) -}} - - - -\page - -### Wednesday 31/08/2022 - v3.2.1 -{{taskList - -##### calculuschild - -* [x] Reference Links should now work inside tables - - Fixes issues: [#2307](https://github.com/naturalcrit/homebrewery/issues/2307) - -##### Jeddai: - -* [x] Fix printing from `/new` not working - - Fixes issues: [#1789](https://github.com/naturalcrit/homebrewery/issues/1789), [#1806](https://github.com/naturalcrit/homebrewery/issues/1806) - -* [x] Fix broken snippet buttons on `/new` - - Fixes issues: [#2311](https://github.com/naturalcrit/homebrewery/issues/2311) - -##### G-Ambatte: - -* [x] Several small tweaks to the User page - - Fixes issues: [#2301](https://github.com/naturalcrit/homebrewery/issues/2301), [#2303](https://github.com/naturalcrit/homebrewery/issues/2303), [#2121](https://github.com/naturalcrit/homebrewery/issues/2121) -}} - -### Saturday 27/08/2022 - v3.2.0 -{{taskList - -##### calculuschild - -* [x] The V3 renderer is now the default for new brews. - -* [x] Small tweaks to the spacing around the `classTable` style - -##### Jeddai: - -* [x] Brew transfers between Homebrewery and Google Drive now keep the same share and edit links! Metadata is now also kept across transfers. - - Fixes issues: [#1838](https://github.com/naturalcrit/homebrewery/issues/1838) - -* [x] Brews can now be labeled with tags; these will be searchable on the My Brews page in a future update. - - Fixes issues: [#758](https://github.com/naturalcrit/homebrewery/issues/758) - -##### Jlgraves: - -* [x] Small tweaks to the `ClassFeature` snippet - - Fixes issues: [#2215](https://github.com/naturalcrit/homebrewery/issues/2215) -}} - - -### Thursday 09/06/2022 - v3.1.1 -{{taskList - -##### calculuschild: - -* [x] Fixed class table decorations appearing on top of the table in PDF output. - - Fixes issues: [#1784](https://github.com/naturalcrit/homebrewery/issues/1784) - -* [x] Fix bottom decoration on half class tables disappearing when the table is too short. - - Fixes issues: [#2202](https://github.com/naturalcrit/homebrewery/issues/2202) -}} - -### Monday 06/06/2022 - v3.1.0 -{{taskList - -##### G-Ambatte: - -* [x] "Jump to Preview/Editor" buttons added to the divider bar. Easily sync between the editor and preview panels! - - Fixes issues: [#1756](https://github.com/naturalcrit/homebrewery/issues/1756) - -* [x] Speedups to the user page for users with large and/or many brews. - - Fixes issues: [#2147](https://github.com/naturalcrit/homebrewery/issues/2147) - -* [x] Search text on the user page is saved to the URL for easy bookmarking in your browser - - Fixes issues: [#1858](https://github.com/naturalcrit/homebrewery/issues/1858) - -* [x] Added easy login system for offline installs. - - Fixes issues: [#269](https://github.com/naturalcrit/homebrewery/issues/269) - -* [x] New **THUMBNAIL** option in the {{fa,fa-info-circle}} **Properties** menu. This image will show up in social media links. - - Fixes issues: [#820](https://github.com/naturalcrit/homebrewery/issues/820) -}} - -### Wednesday 27/03/2022 - v3.0.8 -{{taskList -* [x] Style updates to user page. - -* [x] Added a logout button (finally)! You can find it under {{openSans **USERNAME {{fa,fa-user}} → LOGOUT {{fas,fa-power-off}}**}} - - Fixes issues: [#303](https://github.com/naturalcrit/homebrewery/issues/303) - -* [x] Clarified the default text when submitting an issue via Reddit post. - -* [x] Fixed broken Table of Contents links in PDFs. (Thanks lucastucious!) - - Fixes issues: [#1749](https://github.com/naturalcrit/homebrewery/issues/1749) - -* [x] Fixed window resizing causing the edit page divider to get lost off of the edge of the page. - - Fixes issues: [#2053](https://github.com/naturalcrit/homebrewery/issues/2053) - -* [x] Fixed Class Table decorations overlapping main text. - - Fixes issues: [#1985](https://github.com/naturalcrit/homebrewery/issues/1985) - -* [x] Updated {{openSans **STYLE EDITOR {{fa,fa-pencil-alt}} → REMOVE DROP CAP {{fas,fa-remove-format}}**}} snippet to also remove small-caps first line font. - -* [x] Background work in preparation for brew themes. -}} - -### Wednesday 02/02/2022 - v3.0.7 -{{taskList -* [x] Revert active line highlighting. - - Fixes issues: [#1913](https://github.com/naturalcrit/homebrewery/issues/1913) - -* [x] Added install steps for Ubuntu. [HERE](https://github.com/naturalcrit/homebrewery/blob/master/install/README.UBUNTU.md) - - Fixes issues: [#1900](https://github.com/naturalcrit/homebrewery/issues/1900) - -* [x] Added social media links to home page. - -* [x] Increase brews visible on the user page to 1,000. - - Fixes issues: [#1943](https://github.com/naturalcrit/homebrewery/issues/1943) - -* [x] Added a Legacy to V3 migration guide under {{openSans **NEED HELP? {{fa,fa-question-circle}} → MIGRATE {{fas,fa-file-import}}**}} - -* [x] Background refactoring and unit tests. -}} - -### Saturday 18/12/2021 - v3.0.6 -{{taskList -* [x] Fixed text wrapping for long strings in code blocks. - - Fixes issues: [#1736](https://github.com/naturalcrit/homebrewery/issues/1736) - -* [x] Code search/replace PC: `CTRL F / CTRL SHIFT F` / Mac: `CMD F / OPTION CMD F` - - Fixes issues: [#1201](https://github.com/naturalcrit/homebrewery/issues/1201) - -* [x] Auto-closing HTML tags and curly braces `{{ }}` -* [x] Highlight current active line - - Fixes issues: [#1202](https://github.com/naturalcrit/homebrewery/issues/1202) - -* [x] Display tabs and trailing spaces - - Fixes issues: [#1622](https://github.com/naturalcrit/homebrewery/issues/1622) - -* [x] Make columns even in V3 Table of Contents. - - Fixes issues: [#1671](https://github.com/naturalcrit/homebrewery/issues/1671) - -* [x] Fix `CTRL P` failing to print from `/new` pages. - - Fixes issues: [#1815](https://github.com/naturalcrit/homebrewery/issues/1815) -}} - -\page - -### Tuesday 07/12/2021 - v3.0.5 -{{taskList -* [x] Fixed paragraph spacing for **note** and **descriptive** boxes in V3. - - Fixes issues: [#1836](https://github.com/naturalcrit/homebrewery/issues/1836) - -* [x] Added a whole bunch of hotkeys: - - * Page Break `CTRL + ENTER` - * Column Break `CTRL + SHIFT + ENTER` - * Bulleted Lists `CTRL + L` - * Numbered Lists `CTRL + SHIFT + L` - * Headers `CTRL + SHIFT + (1-6)` - * Underline `CTRL + U` - * Link `CTRL + K` - * Non-breaking space (\ ) `CTRL + .` - * Add Horizontal Space `CTRL + SHIFT + .` - * Remove Horizontal Space `CTRL + SHIFT + ,` - * Curly Span `CTRL + M` - * Curly Div `CTRL + SHIFT + M` - -* [x] Fixed page numbers in the editor panel getting scrambled when scrolling up and down. - -* [x] Faster swapping between tabs on long brews. - -* [x] Better error messages for common issue with Google Drive credentials expiring. -}} - -### Wednesday 17/11/2021 - v3.0.4 -{{taskList -* [x] Fixed incorrect sorting of Google brews by page count and views on the user page. - - Fixes issues: [#1793](https://github.com/naturalcrit/homebrewery/issues/1793) - -* [x] Added code folding! Only on a page-level for now. Hotkeys `CTRL + [` and `CTRL + ]` to fold/unfold all pages. (Thanks jeddai, new contributor!) - - Fixes issues: [#629](https://github.com/naturalcrit/homebrewery/issues/629) - -* [x] Fixed rendering issues due to the latest Chrome update to version 96. (Also thanks to jeddai!) - - Fixes issues: [#1828](https://github.com/naturalcrit/homebrewery/issues/1828) -}} - -### Wednesday 27/10/2021 - v3.0.3 - -{{taskList -* [x] Moved **Post To Reddit** button from {{fa,fa-info-circle}} **Properties** menu to the **SHARE** {{fa,fa-share-alt}} button as a dropdown. - -* [x] Added a **Copy URL** button to the **SHARE** {{fa,fa-share-alt}} button as a dropdown. - -* [x] Fixed pages being printed directly from `/new` not recognizing the V3 renderer. - - Fixes issues: [#1702](https://github.com/naturalcrit/homebrewery/issues/1702) - -* [x] Updated links to [r/UnearthedArcana](https://www.reddit.com/r/UnearthedArcana/) on home page. - - Fixes issues: [#1744](https://github.com/naturalcrit/homebrewery/issues/1744) - -* [x] Added a [FAQ page](https://homebrewery.naturalcrit.com/faq). - - Fixes issues: [#810](https://github.com/naturalcrit/homebrewery/issues/810) - -* [x] Added {{fa,fa-undo}} **Undo** and {{fa,fa-redo}} **Redo** buttons to the snippet bar. - -}} - -\column - -{{taskList - -* [x] Switching between the {{fa,fa-beer}} **Brew** and {{fa,fa-paint-brush}} **Style** tabs no longer loses your scroll position or undo history. - - Fixes issues: [#1735](https://github.com/naturalcrit/homebrewery/issues/1735) - -* [x] Divider bar between editor and preview panels can no longer be dragged off the edge of the screen. - - Fixes issues: [#1674](https://github.com/naturalcrit/homebrewery/issues/1674) -}} - - -### Wednesday 06/10/2021 - v3.0.2 - -{{taskList -* [x] Fixed V3 **EDITOR → QR Code** snippet not working on `/new` (unsaved) pages. - - Fixes issues: [#1710](https://github.com/naturalcrit/homebrewery/issues/1710) - -* [x] Reorganized several snippets from the **Brew Editor** panel into the **Style Editor** panel. - - Fixes issues: [Reported on Reddit](https://www.reddit.com/r/homebrewery/comments/pm6ki7/two_version_of_class_features_making_it_look_more/) - -* [x] Added a page counter to the right of each `\page` line in V3 to help navigate your brews. Starts counting from page 2. - - Fixes issues: [#846](https://github.com/naturalcrit/homebrewery/issues/846) - -* [x] Moved the changelog to be accessible by clicking on the Homebrewery version number. - - Fixes issues: [#1166](https://github.com/naturalcrit/homebrewery/issues/1166) -}} - -### Friday, 17/09/2021 - v3.0.1 - -{{taskList -* [x] Updated V3 **PHB → Class Feature** snippet to use V3 syntax. - - Fixes issues: [Reported on Reddit](https://www.reddit.com/r/homebrewery/comments/pm6ki7/two_version_of_class_features_making_it_look_more/) - -* [x] Improved V3 **PHB → Monster Stat Block** snippet and styling to allow for easier control of paragraph indentation in the Abilities text. - - Fixes issues: [#181](https://github.com/naturalcrit/homebrewery/issues/181) - -* [x] Improved Legacy **TABLES → Split Table** snippet by removing unneeded column-break backticks. - - Fixes issues: [#844](https://github.com/naturalcrit/homebrewery/issues/844) - -* [x] Changed block elements to use CSS `width` instead of `min-width`. This should make custom styles behave more predictably when trying to resize items. - - Fixes issues: [Reported on Reddit](https://www.reddit.com/r/homebrewery/comments/pohoy3/looking_for_help_with_basic_stuff_in_v3/) - -* [x] Fixed Partial Page Rendering in V3 for large brews - - Fixes issues: [Reported on Reddit](https://www.reddit.com/r/homebrewery/comments/pori3a/weird_behaviour_of_the_brew_after_page_50/) - -* [x] Fixed HTML validation to handle tags starting with 'a', as in `<​aside>`. - - Fixes issues: [#230](https://github.com/naturalcrit/homebrewery/issues/230) - -* [x] Fixed page footers switching side when printing. - - Fixes issues: [#1612](https://github.com/naturalcrit/homebrewery/issues/1612) -}} - - -\page - -### Saturday, 11/09/2021 - v3.0.0 - -We have been working on v3 for a *very* long time. We want to thank everyone for being paitent. - - -Some features planned for V3 have actually been released over the recent months as part of V2, and some are still on the way. But at its core, V3 provides brand new Markdown-to-Brew rendering system, which was no simple task. This has opened up access to all sorts of bugfixes, tweaks, and potential for new features that just wouldn't be possible on the old system. - -***BE WARNED:*** As we continue to develop V3, expect small tweaks in the styling, fonts, and snippets; your brews may look slightly different from day-to-day; some things might break completely while we tackle any bugs in this early stage. All of your old documents will continue to work as normal. We are not touching them. If you don't want to deal With the possibility of slight formatting changes, you may choose to stick with the Legacy renderer on any of your brews for as long as you like. However, most new features added from now on will only be available for brews using the V3 renderer. - -Massive changelog incoming: - -#### Markdown+ -With the latest major update to *The Homebrewery*, we've implemented an extended Markdown-like syntax for block and span elements, plus a few other changes, eliminating the need for HTML tags like `div`, and `span` in most cases. This should hopefully aid non-coders with readability, and also allows us a few tricks in the background to fix some old issues. No raw HTML tags should be needed in a brew, and going forward, raw HTML will no longer receive debugging support (*but can still be used if you insist*). - -All brews made prior to the release of v3.0.0 will still render normally, and you may switch between the "Legacy" brew renderer and the newer "V3" renderer via the {{fa,fa-info-circle}} **Properties** button on your brew. Much of the syntax and styling has changed in V3, so code in one version may be broken in the other. - -Visit [this page](/v3_preview) for brief examples of the new syntax! - -#### Extended Markdown Syntax: - -{{taskList -* [x] Add Divs and Spans for all your custom styling needs, via a simplified Markdown-like syntax: - ``` - {{myDivClass,#myId,color:red - My Div content - }} - - Hello {{mySpan,color:blue World}} ! - ``` - - Fixes issues: [#348](https://github.com/naturalcrit/homebrewery/issues/348) -}} - -\column - -{{taskList -* [x] Add inline CSS to Markdown objects via "curly injection" syntax: - ``` - Hello *world*{myClass,#id,color:red} - ``` - Fixes issues: [#403](https://github.com/naturalcrit/homebrewery/issues/403) - -* [x] Rowspan, Colspan, and multiple header rows with extended table syntax: -``` -| Header 1a | Header 1b | Header 1c | -| Header 2a | Header 2b | Header 2c | -|:---------:|:----------|:---------:| -| Span 2 columns || Span 2 | -| one col | one col | rows ^| -``` - Fixes issues: [#773](https://github.com/naturalcrit/homebrewery/issues/773), [#191](https://github.com/naturalcrit/homebrewery/issues/191) - -* [x] Hanging indents via `
    ` tags, as seen in the **PHB → Spell** snippet. Add via "double-colon" syntax: -``` -Term :: big long definition that bleeds onto multiple lines -``` - Fixes issues: [#182](https://github.com/naturalcrit/homebrewery/issues/182), [#149](https://github.com/naturalcrit/homebrewery/issues/149) - -* [x] Easier vertical spacing via colons alone on a line: - ``` - ::: - ``` - Fixes issues: [#374](https://github.com/naturalcrit/homebrewery/issues/374) - -* [x] Avoid paragraph indendation by ending the previous paragraph with a backslash `\` or two spaces ` ` - ``` - Paragraph one\ - Paragraph two - ``` - Fixes issues: [#636](https://github.com/naturalcrit/homebrewery/issues/636) - -* [x] Code blocks can be inserted by surrounding it with rows of three backticks ` ``` `, for demonstration purposes or to share custom styles. Inline-code can be inserted with single backticks `code` -
    ```
    - Here is some code!
    -```
    -
    - - Fixes issues: [#465](https://github.com/naturalcrit/homebrewery/issues/465) - -#### New and Fixed Snippets - -* [x] Column breaks now use `\column` instead of ` ``` ` backticks. - - Fixes issues: [#607](https://github.com/naturalcrit/homebrewery/issues/607) - -* [x] Page breaks using `\page` now only trigger when placed alone at the start of a line. - - Fixes issues: [#1147](https://github.com/naturalcrit/homebrewery/issues/1147) -}} - -\page -{{taskList -* [x] New **EDITOR → QR Code** snippet. - - Fixes issues: [#538](https://github.com/naturalcrit/homebrewery/issues/538) - -* [x] New **IMAGES → Watercolor Splatter** snippet, which adds one of a range of stylish stains to your brew. - -* [x] New **IMAGES → Watermark** snippet, which adds transparent text diagonally across the page. - -* [x] New **PHB → Magic Item** snippet. - - Fixes issues: [#671](https://github.com/naturalcrit/homebrewery/issues/671) - -* [x] New **TABLES → 1/3 Class Table** snippet for 1/3 casters. - - Fixes issues: [#191](https://github.com/naturalcrit/homebrewery/issues/191) - -* [x] Improved **EDITOR → Table of Contents** snippet to actually look like the PHB style. Will auto-generate based on the headers in your brew. - - Fixes issues: [#304](https://github.com/naturalcrit/homebrewery/issues/304) - -* [x] Improved **PHB → Monster Stat Block** snippet with textures, and an option to remove the frame entirely. - -* [x] Improved **PHB → Spell List** snippet can now be made single-column. - - Fixes issues: [#509](https://github.com/naturalcrit/homebrewery/issues/509), [#914](https://github.com/naturalcrit/homebrewery/issues/914) - -* [x] Improved **TABLES → Class Table** snippet is now cleaned up, has an option to remove the frame entirely, and includes additional boundary decorations. - - Fixes issues: [#773](https://github.com/naturalcrit/homebrewery/issues/773), [#302](https://github.com/naturalcrit/homebrewery/issues/302) - -#### Miscellaneous Formatting Fixes - -* [x] Paragraphs are now able to split across columns. - - Fixes issues: [#239](https://github.com/naturalcrit/homebrewery/issues/239) - -* [x] Multiple fixes for bold/italicize using asterisks `* *` - - Fixes issues: [#1321](https://github.com/naturalcrit/homebrewery/issues/1321), [#852](https://github.com/naturalcrit/homebrewery/issues/852) - -* [x] Multiple for list items not displaying correctly. - - Fixes issues: [#1085](https://github.com/naturalcrit/homebrewery/issues/1085), [#588](https://github.com/naturalcrit/homebrewery/issues/588) - -* [x] "Smart quotes", so left and right quotes are different. - - Fixes issues: [#849](https://github.com/naturalcrit/homebrewery/issues/849) - -* [x] Long URLs in links now wrap properly. - - Fixes issues: [#1136](https://github.com/naturalcrit/homebrewery/issues/1136) - -* [x] Better support for `wide` blocks that span across the whole page! No more problems with contents getting shunted off the edge, and each new wide element in a page will restart the next item back at column one. Manual `\column` breaks will help organize subsequent content between the columns as needed. - - Fixes issues: [#144](https://github.com/naturalcrit/homebrewery/issues/144), [#1024](https://github.com/naturalcrit/homebrewery/issues/1024) - -* [x] Fonts now support a wider range of latin characters for non-English brews, including áéíóúñ¡¿, etc... - - Fixes issues: [#116](https://github.com/naturalcrit/homebrewery/issues/116) - -* [x] Drop-caps (fancy first letters) have been re-styled and re-aligned to correct the ugly overlapping and cut-off on some characters like K and Y. - - Fixes issues: [#848](https://github.com/naturalcrit/homebrewery/issues/848) -}} - -\column - -### Under-the-Hood Stuff -We had to make a whole lot of background upgrades and changes to get all of this working, and now that the framework is in place, there's a lot more planned and upcoming *"sometime"* : - -{{taskList -* [ ] New Themes to style your brews. DMG, MM, a custom Homebrewery theme, and others. -* [ ] The ability to build your own custom themes using CSS, apply it to other brews, and share it with others! -* [ ] Easy control of item colors. Change your monster blocks, tables, and notes from yellow to green to red! -* [ ] New image-based snippets, including handwritten notes, title illustrations, and alternative decorations. -* [ ] New fun fonts like Elvish, Draconic, Orcish, etc. -* [ ] Better organization of personal brews using tags. -* [ ] ....a log-out button...? -* [ ] AND MORE. -}} - -### Interface -:: -#### Style Editor Panel - -{{fa,fa-paint-brush}} Technically released prior to v3 but still new to many users, check out the new **Style Editor** located on the right side of the Snippet bar. This editor accepts CSS for styling without requiring `