From 9e5451b94093211a6353af104e3799b44d8b66cb Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Mon, 2 Aug 2021 21:12:20 -0500 Subject: [PATCH 01/29] Add Artist Snippet Add Artist Snippet --- .../editor/snippetbar/snippets/snippets.js | 12 ++++++++ .../snippetbar/snippetsLegacy/snippets.js | 8 +++++ themes/5ePhb.style.less | 26 ++++++++++++++++ themes/5ePhbLegacy.style.less | 28 ++++++++++++++++++ .../5e legacy/WalterTurncoat-Regular.woff2 | Bin 0 -> 61412 bytes themes/fonts/5e legacy/fonts.less | 6 ++++ themes/fonts/5e/WalterTurncoat-Regular.woff2 | Bin 0 -> 61412 bytes themes/fonts/5e/fonts.less | 6 ++++ 8 files changed, 86 insertions(+) create mode 100644 themes/fonts/5e legacy/WalterTurncoat-Regular.woff2 create mode 100644 themes/fonts/5e/WalterTurncoat-Regular.woff2 diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js index 2ac8c7ea0..d7cf7aac8 100644 --- a/client/homebrew/editor/snippetbar/snippets/snippets.js +++ b/client/homebrew/editor/snippetbar/snippets/snippets.js @@ -191,6 +191,18 @@ module.exports = [ icon : 'fas fa-hat-wizard', gen : MagicGen.item, }, + { + name : 'Artist Credit', + icon : 'fas fa-signature', + gen : function(){ + return dedent` + {{artist,top:10px,left:10px + ##### Starry Night + [Van Gogh](https://www.vangoghmuseum.nl/en) + }} + \n`; + }, + }, ] }, diff --git a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js index 2d4e2d0e4..b77e9269a 100644 --- a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js +++ b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js @@ -166,6 +166,14 @@ module.exports = [ icon : 'far fa-file-word', gen : CoverPageGen, }, + { + name : 'Artist Credit', + icon : 'fas fa-signature', + gen : '
\n' + + '##### Starry Night\n' + + '[Van Gogh](https://www.vangoghmuseum.nl/en)\n' + + '
\n' + }, ] }, diff --git a/themes/5ePhb.style.less b/themes/5ePhb.style.less index 3ca74dbf4..af5fdfe00 100644 --- a/themes/5ePhb.style.less +++ b/themes/5ePhb.style.less @@ -263,6 +263,32 @@ body { margin-bottom : 0em; } } + //***************************** + // * ARTIST CREDIT BLOCK + // *****************************/ + .artist { + position:absolute; + text-align:center; + font-family:'Walter Turncoat','ScalySansSmallCapsRemake', sans-serif; + font-size:10px; + p, p + p { + margin:unset; + text-indent:unset; + line-height:1em; + } + h5 { + font-size:1.3em; + font-family:'Walter Turncoat' + } + a{ + color:black; + text-decoration:unset; + &:hover { + text-decoration:underline; + } + } + } + //***************************** // * MONSTER STAT BLOCK // *****************************/ diff --git a/themes/5ePhbLegacy.style.less b/themes/5ePhbLegacy.style.less index 0f1cae7ec..295d7000c 100644 --- a/themes/5ePhbLegacy.style.less +++ b/themes/5ePhbLegacy.style.less @@ -445,6 +445,34 @@ body { .phb pre+.descriptive{ margin-top : 8px; } + +//***************************** +// * ARTIST CREDIT BLOCK +// *****************************/ +.phb { + .artist { + position:absolute; + text-align:center; + font-family:'Walter Turncoat','ScalySansSmallCapsRemake', sans-serif; + font-size:10px; + p, p + p { + margin:unset; + text-indent:unset; + line-height:1em; + } + h5 { + font-size:1.3em; + font-family:'Walter Turncoat' + } + a{ + color:black; + text-decoration:unset; + &:hover { + text-decoration:underline; + } + } + } +} //***************************** // * TABLE OF CONTENTS // *****************************/ diff --git a/themes/fonts/5e legacy/WalterTurncoat-Regular.woff2 b/themes/fonts/5e legacy/WalterTurncoat-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..758e2400d31eaf9f27885d116f266c1564b637ff GIT binary patch literal 61412 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 Hjza(djQ4%x literal 0 HcmV?d00001 diff --git a/themes/fonts/5e legacy/fonts.less b/themes/fonts/5e legacy/fonts.less index 0c47c8e7e..88e058a15 100644 --- a/themes/fonts/5e legacy/fonts.less +++ b/themes/fonts/5e legacy/fonts.less @@ -37,6 +37,12 @@ font-weight: normal; font-style: normal; } +@font-face { + font-family: 'Walter Turncoat'; + src: url('../fonts/5e legacy/WalterTurncoat-Regular.woff2'); + font-weight: normal; + font-style: normal; +} /* Headers */ @font-face { diff --git a/themes/fonts/5e/WalterTurncoat-Regular.woff2 b/themes/fonts/5e/WalterTurncoat-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..758e2400d31eaf9f27885d116f266c1564b637ff GIT binary patch literal 61412 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 Hjza(djQ4%x literal 0 HcmV?d00001 diff --git a/themes/fonts/5e/fonts.less b/themes/fonts/5e/fonts.less index 7cd1c9652..be7e09d0e 100644 --- a/themes/fonts/5e/fonts.less +++ b/themes/fonts/5e/fonts.less @@ -55,6 +55,12 @@ font-weight: normal; font-style: normal; } +@font-face { + font-family: 'Walter Turncoat'; + src: url('../fonts/5e/WalterTurncoat-Regular.woff2'); + font-weight: normal; + font-style: normal; +} /* Headers */ @font-face { From d763f2de2fc8a8e0a0c3d6ff2780440faa8184f7 Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Wed, 4 Aug 2021 15:50:31 -0500 Subject: [PATCH 02/29] Update fonts.less --- themes/fonts/5e legacy/fonts.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/fonts/5e legacy/fonts.less b/themes/fonts/5e legacy/fonts.less index 88e058a15..a3527130b 100644 --- a/themes/fonts/5e legacy/fonts.less +++ b/themes/fonts/5e legacy/fonts.less @@ -38,7 +38,7 @@ font-style: normal; } @font-face { - font-family: 'Walter Turncoat'; + font-family: WalterTurncoat; src: url('../fonts/5e legacy/WalterTurncoat-Regular.woff2'); font-weight: normal; font-style: normal; From 2ab0c9cbebdeae8cdea2e41886996d3dca7f50f4 Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Wed, 4 Aug 2021 15:53:21 -0500 Subject: [PATCH 03/29] update font name in 5e styles --- themes/5ePhb.style.less | 2 +- themes/5ePhbLegacy.style.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/5ePhb.style.less b/themes/5ePhb.style.less index af5fdfe00..af4c9519f 100644 --- a/themes/5ePhb.style.less +++ b/themes/5ePhb.style.less @@ -278,7 +278,7 @@ body { } h5 { font-size:1.3em; - font-family:'Walter Turncoat' + font-family:WalterTurncoat; } a{ color:black; diff --git a/themes/5ePhbLegacy.style.less b/themes/5ePhbLegacy.style.less index 295d7000c..d527e7c1e 100644 --- a/themes/5ePhbLegacy.style.less +++ b/themes/5ePhbLegacy.style.less @@ -462,7 +462,7 @@ body { } h5 { font-size:1.3em; - font-family:'Walter Turncoat' + font-family:WalterTurncoat; } a{ color:black; From 70217155435d9bd32b488efb3153cae92993c79f Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 10 Aug 2021 00:51:30 -0400 Subject: [PATCH 04/29] /v3_preview page will show a v3 version of the homepage --- client/homebrew/homebrew.jsx | 1 + client/homebrew/pages/homePage/homePage.jsx | 9 +- .../homebrew/pages/homePage/welcome_msg_v3.md | 174 ++++++++++++++++++ server.js | 33 +++- shared/naturalcrit/markdown.js | 4 +- 5 files changed, 207 insertions(+), 14 deletions(-) create mode 100644 client/homebrew/pages/homePage/welcome_msg_v3.md diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 118c21e91..aa7b04a63 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -49,6 +49,7 @@ const Homebrew = createClass({ }/> }/> }/> + }/> }/> diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index b8ee5634b..dfb4908a0 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -1,6 +1,7 @@ require('./homePage.less'); const React = require('react'); const createClass = require('create-react-class'); +const _ = require('lodash'); const cx = require('classnames'); const request = require('superagent'); const { Meta } = require('vitreum/headtags'); @@ -49,9 +50,9 @@ const HomePage = createClass({ this.refs.editor.update(); }, handleTextChange : function(text){ - this.setState({ - brew : { text: text } - }); + this.setState((prevState)=>({ + brew : _.merge({}, prevState.brew, { text: text }) + })); }, renderNavbar : function(){ return @@ -81,7 +82,7 @@ const HomePage = createClass({ renderer={this.state.brew.renderer} showEditButtons={false} /> - + diff --git a/client/homebrew/pages/homePage/welcome_msg_v3.md b/client/homebrew/pages/homePage/welcome_msg_v3.md new file mode 100644 index 000000000..6377e934c --- /dev/null +++ b/client/homebrew/pages/homePage/welcome_msg_v3.md @@ -0,0 +1,174 @@ +```css +.page #example + table td { + border:1px dashed #00000030; +} + + +``` + +# The Homebrewery *V3* +Welcome traveler from an antique land. Please sit and tell us of what you have seen. The unheard of monsters, who slither and bite. Tell us of the wondrous items and and artifacts you have found, their mysteries yet to be unlocked. Of the vexing vocations and surprising skills you have seen. + +### Homebrew D&D made easy +The Homebrewery makes the creation and sharing of authentic looking Fifth-Edition homebrews easy. It uses [Markdown](https://help.github.com/articles/markdown-basics/) with a little CSS magic to make your brews come to life. + +**Try it!** Simply edit the text on the left and watch it *update live* on the right. + +### Editing and Sharing +When you create your own homebrew, you will be given a *edit url* and a *share url*. + +Any changes you make while on the *edit url* will be automatically saved to the database within a few seconds. Anyone with the edit url will be able to make edits to your homebrew, so be careful about who you share it with. + +Anyone with the *share url* will be able to access a read-only version of your homebrew. + +### PDF Creation +PDF Printing works best in Google Chrome. If you are having quality/consistency issues, try using Chrome to print instead. + +After clicking the "Print" item in the navbar a new page will open and a print dialog will pop-up. +* Set the **Destination** to "Save as PDF" +* Set **Paper Size** to "Letter" +* If you are printing on A4 paper, make sure to have the "A4 page size snippet" in your brew +* In **Options** make sure "Background Images" is selected. +* Hit print and enjoy! You're done! + +If you want to save ink or have a monochrome printer, add the **Ink Friendly** snippet to your brew before you print + + + +\column + +## New in V3.0.0 +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. 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. + +Scroll down to the next page for a brief summary of the changes and new features available in V3! + +#### New Things All The Time! +What's new in the latest update? Check out the full changelog [here](/changelog). + +### Helping out +Like this tool? Want to buy me a beer? [Head here](https://www.patreon.com/Naturalcrit) to help me keep the servers running. + +This tool will **always** be free, never have ads, and I will never offer any "premium" features or whatever. + +### Bugs, Issues, Suggestions? +Need help getting started or just the right look for your brew? Head to [r/Homebrewery](https://www.reddit.com/r/homebrewery/submit?selftext=true&title=%5BIssue%5D%20Describe%20Your%20Issue%20Here) and let us know! + +Have an idea of how to make The Homebrewery better? Or did you find something that wasn't quite right? Check out the [GitHub Repo](https://github.com/naturalcrit/homebrewery/) to report technical issues. + + + +### Legal Junk +The Homebrewery is licensed using the [MIT License](https://github.com/naturalcrit/homebrewery/blob/master/license). Which means you are free to use The Homebrewery any way that you want, except for claiming that you made it yourself. + +If you wish to sell or in some way gain profit for what's created on this site, it's your responsibility to ensure you have the proper licenses/rights for any images or resources used. + +#### Crediting Me +If you'd like to credit The Homebrewery in your brew, I'd be flattered! Just reference that you made it with The Homebrewery. + +### More Resources +If you are looking for more 5e Homebrew resources check out [r/UnearthedArcana](https://www.reddit.com/r/UnearthedArcana/) and their list of useful resources [here](https://www.reddit.com/r/UnearthedArcana/comments/3uwxx9/resources_open_to_the_community/). + + + + + +
1
+
PART 1 | FANCINESS
+ + + + +\page + +## Markdown+ +Homebrewery aims to make homebrewering as simple as possible, providing a live editor in combination with Markdown syntax for formatting. + +In version 3.0.0, with a goal of retaining maximum flexibility while elmininating the need for any HTML in a brew, Homebrewery has developed additional Markdown-like syntax. + +{{text-align:center +**You must enable v3 via the metadata editor!** +}} + + +### Curly Brackets +The biggest change in version 3 is the replacement of `` and `
` with `{{ }}`. Inline spans and block elements can be created and given ID's and Classes, as well as css properties, each of which are comma separated with no spaces. Spans and Blocks start the same: + +#### Span +My favorite author is {{pen,#author,color:orange,font-family:"trebuchet ms" Brandon Sanderson}}. The orange text is given a class of `pen`, and id of `author`, colored orange, and given a new font. + + +#### Block +{{purple,#book,background:#aa88aa55,text-align:center +My favorite book is Wheel of Time. This block has a class of `purple`, an id of `book`, and has been styled with a purple background and centered text. +}} + + +#### Injection +For any element that is not inside a span or block, you can *inject* attributes using the same syntax but with single brackets immediately after the element. Below, a width and border are set for an image: + +![alt-text](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:100px,border:"2px solid",border-radius:10px} + +\* *this does not currently work for tables yet* + +### Vertical Spacing +The HTML tag `
` has been replaced by either a single `:` along on a line, or multiple `:` on the same line. + +:: + +Much nicer than `




` + +### Definition Lists +V3 uses HTML *definition lists* to create "lists" with hanging indents. + + +**Condition Immunities** :: Here is some text that is long and overflows into a second line, creating a "hanging indent". +**Senses** :: Here is some text that is long and overflows into a second line, creating a "hanging indent". + + + +\column + +### Tables +New in v3.0.0 is the option to add column & row spanning between cells. You can see a working example in the updated Class Table Snippet, but a simplified example is given below. + +A cell can be spanned across columns by bunching pipe `|` characters together. + +Row spanning is achieved by adding a `^` at the end of a cell just before the `|`. + +These can be combined to span a cell across both columns and rows. Cells must have the same colspan if they are to be rowspan'd. + +##### Example +| | Spanned Header || +| Head A | Head B | Head C | +|:-------|:-------|:-------| +| 1A | 1B | 1C | +| 2A ^| 2B | 2C | +| 3A ^| 3B 3C || +| 4A | 4B 4C^|| +| 5A ^| 5B | 5C | +| 6A | 6B ^| 6C | + + +## Images +Images must be hosted online somewhere, like [Imgur](https://www.imgur.com). You use the address to that image to reference it in your brew\*. Images can be included using Markdown-style images. + +Using *Curly Injection* you can assign an id, classes, or specific inline CSS properties to the image. + +::: + +\* *When using Imgur-hosted images, use the "direct link", which can be found when you click into your image in the Imgur interace.* + +## Snippets +Homebrewery comes with a series of *code snippets* found at the top of the editor pane that make it easy to create brews as quickly as possible. Just set your cursor where you want the code to appear in the editor pane, choose a snippet, and make the adjustments you need. + + +## Style Editor Panel + +{{fa,fa-paint-brush}}Also, 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 excepts CSS for styling without requiring `' ].join('\n') }, + { + name : 'Square Page Size', + icon : 'far fa-file', + gen : ['' + ].join('\n') + }, { name : 'Ink Friendly', icon : 'fas fa-tint', From a63949636ebe60eeffffd796f26491fa8c1d2c7f Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Tue, 10 Aug 2021 22:02:46 -0500 Subject: [PATCH 07/29] Update Ink Friendly snippet for v3 updated the ink friendly snippet so that it points to elements like .monster rather than hr+blockquote. Goes further than original snippet by setting white background for monster, note, descriptive blocks. Did not update Legacy. --- client/homebrew/editor/snippetbar/snippets/snippets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js index d68cc32ac..6e26ab9ee 100644 --- a/client/homebrew/editor/snippetbar/snippets/snippets.js +++ b/client/homebrew/editor/snippetbar/snippets/snippets.js @@ -319,9 +319,9 @@ module.exports = [ name : 'Ink Friendly', icon : 'fas fa-tint', gen : ['', '' ].join('\n') From a48c74b2e714e769c0fe714c189ea785990458f8 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 10 Aug 2021 23:42:46 -0400 Subject: [PATCH 08/29] Replace Regex Lookbehind with obnoxious workaround so Safari doesn't break --- shared/naturalcrit/markdown.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js index 01abc33a7..72783b41a 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/naturalcrit/markdown.js @@ -384,8 +384,10 @@ const splitCells = (tableRow, count, prevRow = [])=>{ return ` ${p1}`; } }); + tableRow = ` ${tableRow}`; - const cells = tableRow.split(/(?: \||(?<=\|)\|)(?=[^\|]|$)/g); + // Split into cells. Contents are: no pipes unless escaped. Add any ending pipes; if not don't include ending space + const cells = [...tableRow.matchAll(/(?:[^\|]+(?:\\\|)*)+(?:\|+(?=\|)|(?= \|))/g)].map((x)=>x[0]); let i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe From af8ca7141d4e298aa5d10f96c05809715b659185 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Aug 2021 01:01:04 -0400 Subject: [PATCH 09/29] Update welcome_msg_v3.md --- .../homebrew/pages/homePage/welcome_msg_v3.md | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/client/homebrew/pages/homePage/welcome_msg_v3.md b/client/homebrew/pages/homePage/welcome_msg_v3.md index 6377e934c..9a5294f81 100644 --- a/client/homebrew/pages/homePage/welcome_msg_v3.md +++ b/client/homebrew/pages/homePage/welcome_msg_v3.md @@ -12,7 +12,7 @@ Welcome traveler from an antique land. Please sit and tell us of what you have s ### Homebrew D&D made easy The Homebrewery makes the creation and sharing of authentic looking Fifth-Edition homebrews easy. It uses [Markdown](https://help.github.com/articles/markdown-basics/) with a little CSS magic to make your brews come to life. -**Try it!** Simply edit the text on the left and watch it *update live* on the right. +**Try it!** Simply edit the text on the left and watch it *update live* on the right. Note that not every button is visible on this demo page. Click New {{fas,fa-plus-square}} in the navbar above to start brewing with all the features! ### Editing and Sharing When you create your own homebrew, you will be given a *edit url* and a *share url*. @@ -27,11 +27,11 @@ PDF Printing works best in Google Chrome. If you are having quality/consistency After clicking the "Print" item in the navbar a new page will open and a print dialog will pop-up. * Set the **Destination** to "Save as PDF" * Set **Paper Size** to "Letter" -* If you are printing on A4 paper, make sure to have the "A4 page size snippet" in your brew +* If you are printing on A4 paper, make sure to have the {{far,fa-file}} **A4 Pagesize** snippet in your brew * In **Options** make sure "Background Images" is selected. * Hit print and enjoy! You're done! -If you want to save ink or have a monochrome printer, add the **Ink Friendly** snippet to your brew before you print +If you want to save ink or have a monochrome printer, add the {{fas,fa-tint}} **Ink Friendly** snippet to your brew before you print @@ -55,12 +55,12 @@ This tool will **always** be free, never have ads, and I will never offer any "p ### Bugs, Issues, Suggestions? Need help getting started or just the right look for your brew? Head to [r/Homebrewery](https://www.reddit.com/r/homebrewery/submit?selftext=true&title=%5BIssue%5D%20Describe%20Your%20Issue%20Here) and let us know! -Have an idea of how to make The Homebrewery better? Or did you find something that wasn't quite right? Check out the [GitHub Repo](https://github.com/naturalcrit/homebrewery/) to report technical issues. +Have an idea to make The Homebrewery better? Or did you find something that wasn't quite right? Check out the [GitHub Repo](https://github.com/naturalcrit/homebrewery/) to report technical issues. ### Legal Junk -The Homebrewery is licensed using the [MIT License](https://github.com/naturalcrit/homebrewery/blob/master/license). Which means you are free to use The Homebrewery any way that you want, except for claiming that you made it yourself. +The Homebrewery is licensed using the [MIT License](https://github.com/naturalcrit/homebrewery/blob/master/license). Which means you are free to use The Homebrewery codebase any way that you want, except for claiming that you made it yourself. If you wish to sell or in some way gain profit for what's created on this site, it's your responsibility to ensure you have the proper licenses/rights for any images or resources used. @@ -83,32 +83,37 @@ If you are looking for more 5e Homebrew resources check out [r/UnearthedArcana]( \page ## Markdown+ -Homebrewery aims to make homebrewering as simple as possible, providing a live editor in combination with Markdown syntax for formatting. +The Homebrewery aims to make homebrewing as simple as possible, providing a live editor with Markdown syntax that is more human-readable and faster to write with than raw HTML. -In version 3.0.0, with a goal of retaining maximum flexibility while elmininating the need for any HTML in a brew, Homebrewery has developed additional Markdown-like syntax. +In version 3.0.0, with a goal of adding maximum flexibility without users resorting to complex HTML to accomplish simple tasks, Homebrewery provides an extended verision of Markdown with additional syntax. {{text-align:center -**You must enable v3 via the metadata editor!** +**You can enable V3 via the {{fa,fa-info-circle}} **Properties** button!** }} ### Curly Brackets -The biggest change in version 3 is the replacement of `` and `
` with `{{ }}`. Inline spans and block elements can be created and given ID's and Classes, as well as css properties, each of which are comma separated with no spaces. Spans and Blocks start the same: +The biggest change in V3 is the replacement of `` and `
` with `{{ }}` for a cleaner custom formatting. Inline spans and block elements can be created and given ID's and Classes, as well as css properties, each of which are comma separated with no spaces. Use double quotes if a value requires spaces. Spans and Blocks start the same: #### Span -My favorite author is {{pen,#author,color:orange,font-family:"trebuchet ms" Brandon Sanderson}}. The orange text is given a class of `pen`, and id of `author`, colored orange, and given a new font. +My favorite author is {{pen,#author,color:orange,font-family:"trebuchet ms" Brandon Sanderson}}. The orange text is given a class of `pen`, and id of `author`, colored orange, and given a new font. Note that the first space outside of quotes marks the beginning of the content. #### Block {{purple,#book,background:#aa88aa55,text-align:center -My favorite book is Wheel of Time. This block has a class of `purple`, an id of `book`, and has been styled with a purple background and centered text. +My favorite book is Wheel of Time. This block has a class of `purple`, an id of `book`, and has been styled with a purple background and centered text. Note that the opening and curly brackets are on their own lines without any other contents. }} #### Injection -For any element that is not inside a span or block, you can *inject* attributes using the same syntax but with single brackets immediately after the element. Below, a width and border are set for an image: +For any element not inside a span or block, you can *inject* attributes using the same syntax but with single brackets in a single line immediately after the element. -![alt-text](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:100px,border:"2px solid",border-radius:10px} +Inline elements like *italics* {color:#D35400} or images require the injection on the same line. + +Block elements like headers require injection starting on the line immediately following. + +##### A Purple Header +{color:purple} \* *this does not currently work for tables yet* @@ -122,16 +127,12 @@ Much nicer than `




` ### Definition Lists V3 uses HTML *definition lists* to create "lists" with hanging indents. - -**Condition Immunities** :: Here is some text that is long and overflows into a second line, creating a "hanging indent". -**Senses** :: Here is some text that is long and overflows into a second line, creating a "hanging indent". - - +**Senses** :: Here is some text that is long and overflows into a second line, creating a "hanging indent". \column ### Tables -New in v3.0.0 is the option to add column & row spanning between cells. You can see a working example in the updated Class Table Snippet, but a simplified example is given below. +Tables now allow column & row spanning between cells. This is included in some updated snippets, but a simplified example is given below. A cell can be spanned across columns by bunching pipe `|` characters together. @@ -156,7 +157,7 @@ Images must be hosted online somewhere, like [Imgur](https://www.imgur.com). You Using *Curly Injection* you can assign an id, classes, or specific inline CSS properties to the image. -::: +![alt-text](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:100px,border:"2px solid",border-radius:10px} \* *When using Imgur-hosted images, use the "direct link", which can be found when you click into your image in the Imgur interace.* From 77d447c0a3776b6e3269b43181d4a75cbb2b5e50 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Aug 2021 12:54:18 -0400 Subject: [PATCH 10/29] Fix redundant Codemirror hotkeys --- shared/naturalcrit/codeEditor/codeEditor.jsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/shared/naturalcrit/codeEditor/codeEditor.jsx index bbfdbfa75..9707bde56 100644 --- a/shared/naturalcrit/codeEditor/codeEditor.jsx +++ b/shared/naturalcrit/codeEditor/codeEditor.jsx @@ -47,12 +47,6 @@ const CodeEditor = createClass({ indentWithTabs : true, tabSize : 2, extraKeys : { - 'Ctrl-B' : this.makeBold, - 'Cmd-B' : this.makeBold, - 'Ctrl-I' : this.makeItalic, - 'Cmd-I' : this.makeItalic, - 'Ctrl-M' : this.makeSpan, - 'Cmd-M' : this.makeSpan, 'Ctrl-B' : this.makeBold, 'Cmd-B' : this.makeBold, 'Ctrl-I' : this.makeItalic, @@ -60,7 +54,7 @@ const CodeEditor = createClass({ 'Ctrl-M' : this.makeSpan, 'Cmd-M' : this.makeSpan, 'Ctrl-/' : this.makeComment, - 'Cmd-/' : this.makeComment, + 'Cmd-/' : this.makeComment } }); From 0075b0836a1617daf24b70c3ec1e8ffdd57ed157 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 11 Aug 2021 15:36:57 -0400 Subject: [PATCH 11/29] Popup error when gDrive credentials are expired on both /edit and /new --- client/homebrew/pages/editPage/editPage.jsx | 25 ++++++- client/homebrew/pages/newPage/newPage.jsx | 77 ++++++++++++++++++-- client/homebrew/pages/newPage/newPage.less | 80 +++++++++++++++++++-- server/googleActions.js | 4 +- server/homebrew.api.js | 18 +++-- 5 files changed, 188 insertions(+), 16 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index a643296d4..0967e05e2 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -322,7 +322,9 @@ const EditPage = createClass({ let errMsg = ''; try { errMsg += `${this.state.errors.toString()}\n\n`; - errMsg += `\`\`\`\n${JSON.stringify(this.state.errors.response.error, null, ' ')}\n\`\`\``; + errMsg += `\`\`\`\n${this.state.errors.stack}\n`; + errMsg += `${JSON.stringify(this.state.errors.response.error, null, ' ')}\n\`\`\``; + console.log(errMsg); } catch (e){} if(this.state.errors.status == '401'){ @@ -344,6 +346,27 @@ const EditPage = createClass({ ; } + if(this.state.errors.status == '403' && this.state.errors.response.body.errors[0].reason == 'insufficientPermissions'){ + return + Oops! +
+ ; + } + return Oops!
diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 1925d2dfa..e77fbc987 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -61,7 +61,7 @@ const NewPage = createClass({ isSaving : false, saveGoogle : (global.account && global.account.googleId ? true : false), - errors : [], + errors : null, htmlErrors : Markdown.validate(this.props.brew.text) }; }, @@ -138,6 +138,14 @@ const NewPage = createClass({ })); }, + clearErrors : function(){ + this.setState({ + errors : null, + isSaving : false + + }); + }, + save : async function(){ this.setState({ isSaving : true @@ -161,7 +169,7 @@ const NewPage = createClass({ console.log(err.status === 401 ? 'Not signed in!' : 'Error Creating New Google Brew!'); - this.setState({ isSaving: false }); + this.setState({ isSaving: false, errors: err }); return; }); @@ -191,12 +199,73 @@ const NewPage = createClass({ }, renderSaveButton : function(){ + if(this.state.errors){ + let errMsg = ''; + try { + errMsg += `${this.state.errors.toString()}\n\n`; + errMsg += `\`\`\`\n${this.state.errors.stack}\n`; + errMsg += `${JSON.stringify(this.state.errors.response.error, null, ' ')}\n\`\`\``; + console.log(errMsg); + } catch (e){} + + if(this.state.errors.status == '401'){ + return + Oops! +
+ You must be signed in to a Google account + to save this to
Google Drive!
+ +
+ Sign In +
+
+
+ Not Now +
+
+
; + } + + if(this.state.errors.status == '403' && this.state.errors.response.body.errors[0].reason == 'insufficientPermissions'){ + return + Oops! +
+ Looks like your Google credentials have + expired! Visit the log in page to sign out + and sign back in with Google + to save this to Google Drive! + +
+ Sign In +
+
+
+ Not Now +
+
+
; + } + + return + Oops! +
+ Looks like there was a problem saving.
+ Report the issue + here + . +
+
; + } + if(this.state.isSaving){ - return + return save... ; } else { - return + return save ; } diff --git a/client/homebrew/pages/newPage/newPage.less b/client/homebrew/pages/newPage/newPage.less index 8cd21b2ec..4f39e626d 100644 --- a/client/homebrew/pages/newPage/newPage.less +++ b/client/homebrew/pages/newPage/newPage.less @@ -1,10 +1,82 @@ .newPage{ - - .saveButton{ + .navItem.save{ background-color: @orange; &:hover{ background-color: @green; } + &.error{ + position : relative; + background-color : @red; + } } - -} \ No newline at end of file + .errorContainer{ + animation-name: glideDown; + animation-duration: 0.4s; + position : absolute; + top : 100%; + left : 50%; + z-index : 100000; + width : 140px; + padding : 3px; + color : white; + background-color : #333; + border : 3px solid #444; + border-radius : 5px; + transform : translate(-50% + 3px, 10px); + text-align : center; + font-size : 10px; + font-weight : 800; + text-transform : uppercase; + a{ + color : @teal; + } + &:before { + content: ""; + width: 0px; + height: 0px; + position: absolute; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid transparent; + border-bottom: 10px solid #444; + left: 53px; + top: -23px; + } + &:after { + content: ""; + width: 0px; + height: 0px; + position: absolute; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 10px solid transparent; + border-bottom: 10px solid #333; + left: 53px; + top: -19px; + } + .deny { + width : 48%; + margin : 1px; + padding : 5px; + background-color : #333; + display : inline-block; + border-left : 1px solid #666; + .animate(background-color); + &:hover{ + background-color : red; + } + } + .confirm { + width : 48%; + margin : 1px; + padding : 5px; + background-color : #333; + display : inline-block; + color : white; + .animate(background-color); + &:hover{ + background-color : teal; + } + } + } +} diff --git a/server/googleActions.js b/server/googleActions.js index bfe1b406f..eab6babf3 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -168,6 +168,7 @@ GoogleActions = { .catch((err)=>{ console.log('Error saving to google'); console.error(err); + throw (err); //return res.status(500).send('Error while saving'); }); } @@ -203,8 +204,9 @@ GoogleActions = { media : media }) .catch((err)=>{ + console.log('Error while creating new Google brew'); console.error(err); - return res.status(500).send('Error while creating google brew'); + throw (err); }); if(!obj) return; diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 1f988761d..36d0aa576 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -141,9 +141,12 @@ const newGoogleBrew = async (req, res, next)=>{ req.body = brew; - const newBrew = await GoogleActions.newGoogleBrew(oAuth2Client, brew); - - return res.status(200).send(newBrew); + try { + const newBrew = await GoogleActions.newGoogleBrew(oAuth2Client, brew); + return res.status(200).send(newBrew); + } catch (err) { + return res.status(err.response.status).send(err); + } }; const updateGoogleBrew = async (req, res, next)=>{ @@ -154,9 +157,12 @@ const updateGoogleBrew = async (req, res, next)=>{ const brew = req.body; brew.text = mergeBrewText(brew.text, brew.style); - const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew); - - return res.status(200).send(updatedBrew); + try { + const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew); + return res.status(200).send(updatedBrew); + } catch (err) { + return res.status(err.response.status).send(err); + } }; router.post('/api', newBrew); From 69a69bbb82e897839c146c85aad75c99c67ec258 Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Wed, 11 Aug 2021 21:44:39 -0500 Subject: [PATCH 12/29] Add 'editor' property to snippets.js Add another property to the snippet groups, "editor", with values either "text" or "style". --- client/homebrew/editor/snippetbar/snippets/snippets.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js index 6e26ab9ee..ad8dc2750 100644 --- a/client/homebrew/editor/snippetbar/snippets/snippets.js +++ b/client/homebrew/editor/snippetbar/snippets/snippets.js @@ -14,6 +14,7 @@ module.exports = [ { groupName : 'Editor', icon : 'fas fa-pencil-alt', + editor : 'text', snippets : [ { name : 'Column Break', @@ -129,6 +130,7 @@ module.exports = [ { groupName : 'PHB', icon : 'fas fa-book', + editor : 'text', snippets : [ { name : 'Spell', @@ -208,6 +210,7 @@ module.exports = [ { groupName : 'Tables', icon : 'fas fa-table', + editor : 'text', snippets : [ { name : 'Class Table', @@ -290,6 +293,7 @@ module.exports = [ { groupName : 'Page', icon : 'fas fa-print', + editor : 'style', snippets : [ { name : 'A4 Page Size', From db227256870399a1d7becb43354e421ff1267b61 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Thu, 12 Aug 2021 00:06:56 -0400 Subject: [PATCH 13/29] New fix to table regex. Avoids ReDOS issues. --- .eslintrc.js | 2 +- shared/naturalcrit/markdown.js | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e8618b8c7..bc8b5c8cd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -32,7 +32,7 @@ module.exports = { skipBlankLines : true, }], 'max-depth' : ['warn', { max: 4 }], - 'max-params' : ['warn', { max: 4 }], + 'max-params' : ['warn', { max: 5 }], 'no-restricted-syntax' : ['warn', 'ClassDeclaration', 'SwitchStatement'], 'no-unused-vars' : ['warn', { vars : 'all', diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js index 72783b41a..8bdda100e 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/naturalcrit/markdown.js @@ -371,30 +371,36 @@ const getTableCell = (text, cell, type, align)=>{ const splitCells = (tableRow, count, prevRow = [])=>{ // trim any excessive pipes at start of row tableRow = tableRow.replace(/^\|+(?=\|)/, '') - .replace(/(\|+)/g, (match, p1, offset, str)=>{ + .replace(/(\|)(\|*)/g, (match, p1, p2, offset, str)=>{ let escaped = false, curr = offset; while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; if(escaped) { // odd number of slashes means | is escaped - // so we leave it and the slashes alone - return p1; + // so apply a space after to separate from unescaped pipes + return `${p1} ${p2}`; } else { // add space before unescaped | to distinguish it from an escaped pipe - return ` ${p1}`; + return ` ${p1}${p2}`; } }); tableRow = ` ${tableRow}`; - // Split into cells. Contents are: no pipes unless escaped. Add any ending pipes; if not don't include ending space - const cells = [...tableRow.matchAll(/(?:[^\|]+(?:\\\|)*)+(?:\|+(?=\|)|(?= \|))/g)].map((x)=>x[0]); - let i = 0; + // Split into cells by matching anything that ends with space followed by pipes + const cells = [...tableRow.matchAll(/[^\|].*?(?: \|+|$)/g)].map((x)=>{ + if(x[0].slice(-2) == ' |') //Cut off the added space too if only one pipe + return x[0].slice(0, -2); + else { + return x[0].slice(0, -1); + } + }); // First/last cell in a row cannot be empty if it has no leading/trailing pipe if(!cells[0].trim()) { cells.shift(); } if(!cells[cells.length - 1].trim()) { cells.pop(); } let numCols = 0; + let i = 0; for (; i < cells.length; i++) { const trimmedCell = cells[i].split(/ \|+$/)[0]; From 3d9f8ea142f4fb5d622f550a3633a5aaeeb506ff Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Thu, 12 Aug 2021 06:01:48 -0500 Subject: [PATCH 14/29] Update snippet.js 'editor' to 'view' Change new property 'editor' to 'view' on @calculuschild 's recommendation. --- client/homebrew/editor/snippetbar/snippets/snippets.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js index ad8dc2750..8f608a614 100644 --- a/client/homebrew/editor/snippetbar/snippets/snippets.js +++ b/client/homebrew/editor/snippetbar/snippets/snippets.js @@ -14,7 +14,7 @@ module.exports = [ { groupName : 'Editor', icon : 'fas fa-pencil-alt', - editor : 'text', + view : 'text', snippets : [ { name : 'Column Break', @@ -130,7 +130,7 @@ module.exports = [ { groupName : 'PHB', icon : 'fas fa-book', - editor : 'text', + view : 'text', snippets : [ { name : 'Spell', @@ -210,7 +210,7 @@ module.exports = [ { groupName : 'Tables', icon : 'fas fa-table', - editor : 'text', + view : 'text', snippets : [ { name : 'Class Table', @@ -293,7 +293,7 @@ module.exports = [ { groupName : 'Page', icon : 'fas fa-print', - editor : 'style', + view : 'style', snippets : [ { name : 'A4 Page Size', From 3545bdc5868dcda1b9014ce3e17bc550e7794cb3 Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Thu, 12 Aug 2021 06:59:55 -0500 Subject: [PATCH 15/29] Update snippetbar.jsx with filter for editor/view specific menus Add logic to filter available snippet menus based on the view/editor that is open ("text" vs "style") for both Legacy and v3. --- .../homebrew/editor/snippetbar/snippetbar.jsx | 24 +++++++++++++++---- .../snippetbar/snippetsLegacy/snippets.js | 4 ++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index 0c054b12b..560786344 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -39,12 +39,26 @@ const Snippetbar = createClass({ renderSnippetGroups : function(){ let snippets = []; - if(this.props.view === 'text') { - if(this.props.renderer === 'V3') - snippets = SnippetsV3; + + if(this.props.renderer === 'V3') + if(this.props.view === 'text') { + snippets = SnippetsV3.filter(SnippetsV3 => SnippetsV3.view === 'text'); + } + else if(this.props.view === 'style') { + snippets = SnippetsV3.filter(SnippetsV3 => SnippetsV3.view === 'style'); + } else - snippets = SnippetsLegacy; - } + snippets = null + else + if(this.props.view === 'text') { + snippets = SnippetsLegacy.filter(SnippetsLegacy => SnippetsLegacy.view === 'text'); + } + else if(this.props.view === 'style') { + snippets = SnippetsLegacy.filter(SnippetsLegacy => SnippetsLegacy.view === 'style'); + } + else + snippets = null + return _.map(snippets, (snippetGroup)=>{ return Date: Thu, 12 Aug 2021 07:00:51 -0500 Subject: [PATCH 16/29] Change 'print' to 'page' on Legacy snippet.js Tiny fix to change "Print" menu to "Page" menu on Legacy. --- client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js index d497148e3..b66430dbb 100644 --- a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js +++ b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js @@ -266,7 +266,7 @@ module.exports = [ /**************** PRINT *************/ { - groupName : 'Print', + groupName : 'Page', icon : 'fas fa-print', view : 'style', snippets : [ From 807f865d8b1ea88db7c640eb201f05993e32f2eb Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Thu, 12 Aug 2021 07:42:08 -0500 Subject: [PATCH 17/29] Match Legacy snippets to v3, remove ' + gen : ['/* A4 Page Size */', + '.phb{', + ' width : 210mm;', + ' height : 296.8mm;', + '}', + '' ].join('\n') }, { name : 'Square Page Size', icon : 'far fa-file', - gen : ['' + gen : ['/* Square Page Size */', + '.page {', + ' width:5.25in;', + ' height:5.25in;', + ' padding:.5in;', + ' columns:unset;', + '}', + '' ].join('\n') }, { name : 'Ink Friendly', icon : 'fas fa-tint', - gen : ['', + gen : ['/* Ink Friendly */', + '.pages *:is(.page,.monster,.note,.descriptive) {', + ' background:white !important;', + ' box-shadow:0px 0px 3px !important;', + '}', + '', + '.page .note:before {', + ' box-shadow:0px 0px 3px;', + '}', '' ].join('\n') }, diff --git a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js index b66430dbb..5015d371a 100644 --- a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js +++ b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js @@ -271,24 +271,36 @@ module.exports = [ view : 'style', snippets : [ { - name : 'A4 PageSize', + name : 'A4 Page Size', icon : 'far fa-file', - gen : ['' + '}' + ].join('\n') + }, + { + name : 'Square Page Size', + icon : 'far fa-file', + gen : ['/* Square Page Size */', + '.phb {', + ' width:5.25in;', + ' height:5.25in;', + ' padding:.5in;', + ' columns:unset;', + '}', + '' ].join('\n') }, { name : 'Ink Friendly', icon : 'fas fa-tint', - gen : ['', + gen : ['/* Ink Friendly */', + '.phb, .phb blockquote, .phb hr+blockquote {', + ' background : white;', + ' box-shadow : 0px 0px 3px;', + '}', '' ].join('\n') }, From 562bf6d4ac29ecff79b9d233dbc0c5292c8c68bd Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Thu, 12 Aug 2021 07:45:00 -0500 Subject: [PATCH 18/29] Fix to snippets.js both legacy and v3 for CircleCI --- client/homebrew/editor/snippetbar/snippets/snippets.js | 8 ++++---- .../homebrew/editor/snippetbar/snippetsLegacy/snippets.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js index 39f28133c..a4c47d765 100644 --- a/client/homebrew/editor/snippetbar/snippets/snippets.js +++ b/client/homebrew/editor/snippetbar/snippets/snippets.js @@ -14,7 +14,7 @@ module.exports = [ { groupName : 'Editor', icon : 'fas fa-pencil-alt', - view : 'text', + view : 'text', snippets : [ { name : 'Column Break', @@ -130,7 +130,7 @@ module.exports = [ { groupName : 'PHB', icon : 'fas fa-book', - view : 'text', + view : 'text', snippets : [ { name : 'Spell', @@ -210,7 +210,7 @@ module.exports = [ { groupName : 'Tables', icon : 'fas fa-table', - view : 'text', + view : 'text', snippets : [ { name : 'Class Table', @@ -293,7 +293,7 @@ module.exports = [ { groupName : 'Page', icon : 'fas fa-print', - view : 'style', + view : 'style', snippets : [ { name : 'A4 Page Size', diff --git a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js index 5015d371a..b9cf865a9 100644 --- a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js +++ b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js @@ -13,7 +13,7 @@ module.exports = [ { groupName : 'Editor', icon : 'fas fa-pencil-alt', - view : 'text', + view : 'text', snippets : [ { name : 'Column Break', @@ -115,7 +115,7 @@ module.exports = [ { groupName : 'PHB', icon : 'fas fa-book', - view : 'text', + view : 'text', snippets : [ { name : 'Spell', @@ -183,7 +183,7 @@ module.exports = [ { groupName : 'Tables', icon : 'fas fa-table', - view : 'text', + view : 'text', snippets : [ { name : 'Class Table', @@ -268,7 +268,7 @@ module.exports = [ { groupName : 'Page', icon : 'fas fa-print', - view : 'style', + view : 'style', snippets : [ { name : 'A4 Page Size', From 88c485ffe5934c44e16b668baf0df0473ee25411 Mon Sep 17 00:00:00 2001 From: Gazook89 <58999374+Gazook89@users.noreply.github.com> Date: Thu, 12 Aug 2021 21:10:13 -0500 Subject: [PATCH 19/29] circleCI fix hopefully last one.. circleCI fixes circleCI fixes --- .../homebrew/editor/snippetbar/snippetbar.jsx | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index 560786344..5302a339b 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -39,26 +39,20 @@ const Snippetbar = createClass({ renderSnippetGroups : function(){ let snippets = []; - if(this.props.renderer === 'V3') if(this.props.view === 'text') { - snippets = SnippetsV3.filter(SnippetsV3 => SnippetsV3.view === 'text'); - } - else if(this.props.view === 'style') { - snippets = SnippetsV3.filter(SnippetsV3 => SnippetsV3.view === 'style'); - } - else - snippets = null + snippets = SnippetsV3.filter((SnippetsV3)=>SnippetsV3.view === 'text'); + } else if(this.props.view === 'style') { + snippets = SnippetsV3.filter((SnippetsV3)=>SnippetsV3.view === 'style'); + } else + snippets = null; else - if(this.props.view === 'text') { - snippets = SnippetsLegacy.filter(SnippetsLegacy => SnippetsLegacy.view === 'text'); - } - else if(this.props.view === 'style') { - snippets = SnippetsLegacy.filter(SnippetsLegacy => SnippetsLegacy.view === 'style'); - } - else - snippets = null - + if(this.props.view === 'text') { + snippets = SnippetsLegacy.filter((SnippetsLegacy)=>SnippetsLegacy.view === 'text'); + } else if(this.props.view === 'style') { + snippets = SnippetsLegacy.filter((SnippetsLegacy)=>SnippetsLegacy.view === 'style'); + } else + snippets = null; return _.map(snippets, (snippetGroup)=>{ return Date: Fri, 13 Aug 2021 03:00:59 +0000 Subject: [PATCH 20/29] Bump nanoid from 3.1.23 to 3.1.25 Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.23 to 3.1.25. - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/3.1.23...3.1.25) --- updated-dependencies: - dependency-name: nanoid dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19aa2bb61..c75f61fdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.1", "mongoose": "^5.13.6", - "nanoid": "3.1.23", + "nanoid": "3.1.25", "nconf": "^0.11.3", "prop-types": "15.7.2", "query-string": "7.0.1", @@ -6405,9 +6405,9 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -14420,9 +14420,9 @@ "optional": true }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==" }, "nanomatch": { "version": "1.2.13", diff --git a/package.json b/package.json index 3e185be9d..bb36a7d3b 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.1", "mongoose": "^5.13.6", - "nanoid": "3.1.23", + "nanoid": "3.1.25", "nconf": "^0.11.3", "prop-types": "15.7.2", "query-string": "7.0.1", From 9dc6d2532a697af7dbe563bbab7464524dc439e3 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 13 Aug 2021 14:38:43 -0400 Subject: [PATCH 21/29] Drastic simplification of SpanTables via better regex Thanks @ericscheid for finding a good regex! --- shared/naturalcrit/markdown.js | 43 +++++++--------------------------- 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js index 8bdda100e..0eef037db 100644 --- a/shared/naturalcrit/markdown.js +++ b/shared/naturalcrit/markdown.js @@ -369,53 +369,28 @@ const getTableCell = (text, cell, type, align)=>{ }; const splitCells = (tableRow, count, prevRow = [])=>{ - // trim any excessive pipes at start of row - tableRow = tableRow.replace(/^\|+(?=\|)/, '') - .replace(/(\|)(\|*)/g, (match, p1, p2, offset, str)=>{ - let escaped = false, - curr = offset; - while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; - if(escaped) { - // odd number of slashes means | is escaped - // so apply a space after to separate from unescaped pipes - return `${p1} ${p2}`; - } else { - // add space before unescaped | to distinguish it from an escaped pipe - return ` ${p1}${p2}`; - } - }); - tableRow = ` ${tableRow}`; + const cells = [...tableRow.matchAll(/(?:[^|\\]|\\.?)+(?:\|+|$)/g)].map((x)=>x[0]); - // Split into cells by matching anything that ends with space followed by pipes - const cells = [...tableRow.matchAll(/[^\|].*?(?: \|+|$)/g)].map((x)=>{ - if(x[0].slice(-2) == ' |') //Cut off the added space too if only one pipe - return x[0].slice(0, -2); - else { - return x[0].slice(0, -1); - } - }); - - // First/last cell in a row cannot be empty if it has no leading/trailing pipe - if(!cells[0].trim()) { cells.shift(); } - if(!cells[cells.length - 1].trim()) { cells.pop(); } + // Remove first/last cell in a row if whitespace only and no leading/trailing pipe + if(!cells[0]?.trim()) { cells.shift(); } + if(!cells[cells.length - 1]?.trim()) { cells.pop(); } let numCols = 0; - let i = 0; + let i, j, trimmedCell, prevCell, prevCols; - for (; i < cells.length; i++) { - const trimmedCell = cells[i].split(/ \|+$/)[0]; + for (i = 0; i < cells.length; i++) { + trimmedCell = cells[i].split(/\|+$/)[0]; cells[i] = { rowspan : 1, colspan : Math.max(cells[i].length - trimmedCell.length, 1), text : trimmedCell.trim().replace(/\\\|/g, '|') - // trim whitespace and display escaped pipes as normal character + // display escaped pipes as normal character }; // Handle Rowspan if(trimmedCell.slice(-1) == '^' && prevRow.length) { // Find matching cell in previous row - let prevCols = 0; - let j, prevCell; + prevCols = 0; for (j = 0; j < prevRow.length; j++) { prevCell = prevRow[j]; if((prevCols == numCols) && (prevCell.colspan == cells[i].colspan)) { From 4588e02faf2060bd3e3f22fceac8270e5fe38405 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Aug 2021 19:03:49 +0000 Subject: [PATCH 22/29] Bump mongoose from 5.13.6 to 5.13.7 Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.13.6 to 5.13.7. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md) - [Commits](https://github.com/Automattic/mongoose/commits/5.13.7) --- updated-dependencies: - dependency-name: mongoose dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c75f61fdf..b96f158e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "marked": "2.1.3", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.1", - "mongoose": "^5.13.6", + "mongoose": "^5.13.7", "nanoid": "3.1.25", "nconf": "^0.11.3", "prop-types": "15.7.2", @@ -6321,9 +6321,9 @@ } }, "node_modules/mongoose": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.6.tgz", - "integrity": "sha512-IyswXkgxnnl+rpiU+lzXl5/BOEle2llDfuPBrN6K+Eb5vS6a/HN/A9zrdtOcSTb0tVoCZ0QN5PfDSwa/EEGBuQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.7.tgz", + "integrity": "sha512-ADIvftZ+KfoTALMZ0n8HvBlezFhcUd73hQaHQDwQ+3X+JZlqE47fUy9yhFZ2SjT+qzmuaCcIXCfhewIc38t2fQ==", "dependencies": { "@types/mongodb": "^3.5.27", "bson": "^1.1.4", @@ -14345,9 +14345,9 @@ } }, "mongoose": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.6.tgz", - "integrity": "sha512-IyswXkgxnnl+rpiU+lzXl5/BOEle2llDfuPBrN6K+Eb5vS6a/HN/A9zrdtOcSTb0tVoCZ0QN5PfDSwa/EEGBuQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.7.tgz", + "integrity": "sha512-ADIvftZ+KfoTALMZ0n8HvBlezFhcUd73hQaHQDwQ+3X+JZlqE47fUy9yhFZ2SjT+qzmuaCcIXCfhewIc38t2fQ==", "requires": { "@types/mongodb": "^3.5.27", "bson": "^1.1.4", diff --git a/package.json b/package.json index bb36a7d3b..988c36f55 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "marked": "2.1.3", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.29.1", - "mongoose": "^5.13.6", + "mongoose": "^5.13.7", "nanoid": "3.1.25", "nconf": "^0.11.3", "prop-types": "15.7.2", From 58568468f6c640234a32a50faac683253c2601ff Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sat, 14 Aug 2021 00:52:35 -0400 Subject: [PATCH 23/29] Fix font in v3. Clean up LESS formatting. --- themes/5ePhb.style.less | 23 ++++++++++++----------- themes/5ePhbLegacy.style.less | 23 ++++++++++++----------- themes/fonts/5e/fonts.less | 2 +- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/themes/5ePhb.style.less b/themes/5ePhb.style.less index 2dd99c95b..04b0e7418 100644 --- a/themes/5ePhb.style.less +++ b/themes/5ePhb.style.less @@ -267,23 +267,24 @@ body { // * ARTIST CREDIT BLOCK // *****************************/ .artist { - position:absolute; - text-align:center; - font-family:'WalterTurncoat','ScalySansSmallCapsRemake', sans-serif; - font-size:10px; + position : absolute; + text-align : center; + font-family : WalterTurncoat; + font-size : 0.27cm; p, p + p { - margin:unset; - text-indent:unset; - line-height:1em; + margin : unset; + text-indent : unset; + line-height : 1em; } h5 { - font-size:1.3em; + font-size : 1.3em; + font-family : WalterTurncoat; } a{ - color:black; - text-decoration:unset; + color : black; + text-decoration : unset; &:hover { - text-decoration:underline; + text-decoration :underline; } } } diff --git a/themes/5ePhbLegacy.style.less b/themes/5ePhbLegacy.style.less index a5e5e4610..bb6c570d9 100644 --- a/themes/5ePhbLegacy.style.less +++ b/themes/5ePhbLegacy.style.less @@ -451,23 +451,24 @@ body { // *****************************/ .phb { .artist { - position:absolute; - text-align:center; - font-family:'WalterTurncoat','ScalySansSmallCapsRemake', sans-serif; - font-size:10px; + position : absolute; + text-align : center; + font-family : WalterTurncoat; + font-size : 0.27cm; p, p + p { - margin:unset; - text-indent:unset; - line-height:1em; + margin : unset; + text-indent : unset; + line-height : 1em; } h5 { - font-size:1.3em; + font-size : 1.3em; + font-family : WalterTurncoat; } a{ - color:black; - text-decoration:unset; + color : black; + text-decoration : unset; &:hover { - text-decoration:underline; + text-decoration : underline; } } } diff --git a/themes/fonts/5e/fonts.less b/themes/fonts/5e/fonts.less index be7e09d0e..df4f169d2 100644 --- a/themes/fonts/5e/fonts.less +++ b/themes/fonts/5e/fonts.less @@ -56,7 +56,7 @@ font-style: normal; } @font-face { - font-family: 'Walter Turncoat'; + font-family: WalterTurncoat; src: url('../fonts/5e/WalterTurncoat-Regular.woff2'); font-weight: normal; font-style: normal; From 8f7d6a3eb5ba32db5e37fd69bea9b54add4a80e2 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sat, 14 Aug 2021 23:21:13 -0400 Subject: [PATCH 24/29] Update color, snippet positioning, added into v3 Image and BackgroundImage --- .../editor/snippetbar/snippets/snippets.js | 18 ++++++++++++++---- .../snippetbar/snippetsLegacy/snippets.js | 2 +- themes/5ePhb.style.less | 16 +++++++++------- themes/5ePhbLegacy.style.less | 16 +++++++++------- 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js index ba0f477b7..76e444bdd 100644 --- a/client/homebrew/editor/snippetbar/snippets/snippets.js +++ b/client/homebrew/editor/snippetbar/snippets/snippets.js @@ -51,13 +51,23 @@ module.exports = [ name : 'Image', icon : 'fas fa-image', gen : dedent` - ![cat warrior](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:325px} - Credit: Kyounghwan Kim` + ![cat warrior](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:325px,mix-blend-mode:multiply} + + {{artist,position:relative,top:-230px,left:-100px,margin-bottom:-30px + ##### Cat Warrior + [Kyoung Hwan Kim](https://www.artstation.com/tahra) + }}` }, { name : 'Background Image', icon : 'fas fa-tree', - gen : `![homebrew mug](http://i.imgur.com/hMna6G0.png) {position:absolute,top:50px,right:30px,width:280px}` + gen : dedent` + ![homebrew mug](http://i.imgur.com/hMna6G0.png) {position:absolute,top:50px,right:30px,width:280px} + + {{artist,top:90px,right:30px + ##### Homebrew Mug + [naturalcrit](https://homebrew.naturalcrit.com) + }}` }, { name : 'QR Code', @@ -203,7 +213,7 @@ module.exports = [ icon : 'fas fa-signature', gen : function(){ return dedent` - {{artist,top:10px,left:10px + {{artist,top:90px,right:30px ##### Starry Night [Van Gogh](https://www.vangoghmuseum.nl/en) }} diff --git a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js index 677b0e826..69f8e1597 100644 --- a/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js +++ b/client/homebrew/editor/snippetbar/snippetsLegacy/snippets.js @@ -174,7 +174,7 @@ module.exports = [ { name : 'Artist Credit', icon : 'fas fa-signature', - gen : '
\n' + + gen : '
\n' + '##### Starry Night\n' + '[Van Gogh](https://www.vangoghmuseum.nl/en)\n' + '
\n' diff --git a/themes/5ePhb.style.less b/themes/5ePhb.style.less index 04b0e7418..613d66efa 100644 --- a/themes/5ePhb.style.less +++ b/themes/5ePhb.style.less @@ -2,12 +2,13 @@ @import (less) './themes/assets/assets.less'; //Colors -@background : #EEE5CE; -@noteGreen : #e0e5c1; -@headerUnderline : #c9ad6a; -@horizontalRule : #9c2b1b; -@headerText : #58180D; -@monsterStatBackground : #EEDBAB; +@background : #EEE5CE; // Light parchment +@noteGreen : #e0e5c1; // Pastel green +@headerUnderline : #c9ad6a; // Gold +@horizontalRule : #9c2b1b; // Maroon +@headerText : #58180D; // Dark maroon +@monsterStatBackground : #EEDBAB; // Light orange parchment +@captionText : #766649; // Brown @page { margin: 0; } body { counter-reset : phb-page-numbers; @@ -271,6 +272,7 @@ body { text-align : center; font-family : WalterTurncoat; font-size : 0.27cm; + color : @captionText; p, p + p { margin : unset; text-indent : unset; @@ -281,7 +283,7 @@ body { font-family : WalterTurncoat; } a{ - color : black; + color : @captionText; text-decoration : unset; &:hover { text-decoration :underline; diff --git a/themes/5ePhbLegacy.style.less b/themes/5ePhbLegacy.style.less index bb6c570d9..17e11260a 100644 --- a/themes/5ePhbLegacy.style.less +++ b/themes/5ePhbLegacy.style.less @@ -2,12 +2,13 @@ @import (less) './themes/assets/assets.less'; @import (less) './themes/phb.depricated.less'; //Colors -@background : #EEE5CE; -@noteGreen : #e0e5c1; -@headerUnderline : #c9ad6a; -@horizontalRule : #9c2b1b; -@headerText : #58180D; -@monsterStatBackground : #FDF1DC; +@background : #EEE5CE; // Light parchment +@noteGreen : #e0e5c1; // Pastel green +@headerUnderline : #c9ad6a; // Gold +@horizontalRule : #9c2b1b; // Maroon +@headerText : #58180D; // Dark maroon +@monsterStatBackground : #FDF1DC; // Lighter parchment +@captionText : #766649; // Brown @page { margin: 0; } body { counter-reset : phb-page-numbers; @@ -455,6 +456,7 @@ body { text-align : center; font-family : WalterTurncoat; font-size : 0.27cm; + color : @captionText; p, p + p { margin : unset; text-indent : unset; @@ -465,7 +467,7 @@ body { font-family : WalterTurncoat; } a{ - color : black; + color : @captionText; text-decoration : unset; &:hover { text-decoration : underline; From d8536438740de90cce5b62aa8bdcc02419be2f6d Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sat, 14 Aug 2021 23:38:21 -0400 Subject: [PATCH 25/29] Inherit colors --- themes/5ePhb.style.less | 4 ++-- themes/5ePhbLegacy.style.less | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/themes/5ePhb.style.less b/themes/5ePhb.style.less index 613d66efa..095d7c568 100644 --- a/themes/5ePhb.style.less +++ b/themes/5ePhb.style.less @@ -283,10 +283,10 @@ body { font-family : WalterTurncoat; } a{ - color : @captionText; + color : inherit; text-decoration : unset; &:hover { - text-decoration :underline; + text-decoration : underline; } } } diff --git a/themes/5ePhbLegacy.style.less b/themes/5ePhbLegacy.style.less index 17e11260a..d814d4036 100644 --- a/themes/5ePhbLegacy.style.less +++ b/themes/5ePhbLegacy.style.less @@ -467,7 +467,7 @@ body { font-family : WalterTurncoat; } a{ - color : @captionText; + color : inherit; text-decoration : unset; &:hover { text-decoration : underline; From edce4e5bbc10bba6af4aa5fb4a51d713a9efa819 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sun, 15 Aug 2021 00:45:01 -0400 Subject: [PATCH 26/29] Refactoring switching logic, formatting LESS --- .../homebrew/editor/snippetbar/snippetbar.jsx | 14 +------ .../editor/snippetbar/snippets/snippets.js | 39 ++++++++++--------- .../snippetbar/snippetsLegacy/snippets.js | 33 +++++++++------- 3 files changed, 41 insertions(+), 45 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index 5302a339b..9ea04695f 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -40,19 +40,9 @@ const Snippetbar = createClass({ let snippets = []; if(this.props.renderer === 'V3') - if(this.props.view === 'text') { - snippets = SnippetsV3.filter((SnippetsV3)=>SnippetsV3.view === 'text'); - } else if(this.props.view === 'style') { - snippets = SnippetsV3.filter((SnippetsV3)=>SnippetsV3.view === 'style'); - } else - snippets = null; + snippets = SnippetsV3.filter((snippetGroup)=>snippetGroup.view === this.props.view); else - if(this.props.view === 'text') { - snippets = SnippetsLegacy.filter((SnippetsLegacy)=>SnippetsLegacy.view === 'text'); - } else if(this.props.view === 'style') { - snippets = SnippetsLegacy.filter((SnippetsLegacy)=>SnippetsLegacy.view === 'style'); - } else - snippets = null; + snippets = SnippetsLegacy.filter((snippetGroup)=>snippetGroup.view === this.props.view); return _.map(snippets, (snippetGroup)=>{ return Date: Sun, 15 Aug 2021 00:51:22 -0400 Subject: [PATCH 27/29] Lint --- server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index d0d7b351d..281a0477d 100644 --- a/server.js +++ b/server.js @@ -45,14 +45,14 @@ const sanitizeBrew = (brew, full=false)=>{ return brew; }; -const splitTextAndStyle = (brew) => { - brew.text = brew.text.replaceAll('\r\n','\n'); +const splitTextAndStyle = (brew)=>{ + brew.text = brew.text.replaceAll('\r\n', '\n'); if(brew.text.startsWith('```css')) { const index = brew.text.indexOf('```\n\n'); brew.style = brew.text.slice(7, index - 1); brew.text = brew.text.slice(index + 5); } -} +}; app.use('/', serveCompressedStaticAssets(`${__dirname}/build`)); @@ -101,7 +101,7 @@ app.use(require('./server/admin.api.js')); const HomebrewModel = require('./server/homebrew.model.js').model; const welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); -const welcomeText_v3 = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg_v3.md', 'utf8'); +const welcomeTextV3 = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg_v3.md', 'utf8'); const changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); String.prototype.replaceAll = function(s, r){return this.split(s).join(r);}; @@ -123,7 +123,7 @@ app.get('/', async (req, res, next)=>{ //Home page v3 app.get('/v3_preview', async (req, res, next)=>{ const brew = { - text : welcomeText_v3, + text : welcomeTextV3, renderer : 'V3' }; splitTextAndStyle(brew); From 7977e869c3df30f804360847d7cde8c9e28e879f Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Mon, 16 Aug 2021 00:52:34 -0400 Subject: [PATCH 28/29] Small tweaks. Move "Create your own" button slightly. --- client/homebrew/pages/homePage/homePage.less | 6 ++-- .../homebrew/pages/homePage/welcome_msg_v3.md | 28 +++++++++++-------- server.js | 2 +- themes/5ePhb.style.less | 5 +++- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/client/homebrew/pages/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less index 37b412282..719e89f22 100644 --- a/client/homebrew/pages/homePage/homePage.less +++ b/client/homebrew/pages/homePage/homePage.less @@ -5,7 +5,7 @@ position : absolute; display : block; right : 70px; - bottom : 70px; + bottom : 50px; z-index : 100; z-index : 5001; padding : 1em; @@ -23,7 +23,7 @@ position : absolute; display : block; right : 200px; - bottom : 90px; + bottom : 70px; z-index : 100; z-index : 5000; padding : 0.8em; @@ -40,4 +40,4 @@ right : 350px; } } -} \ No newline at end of file +} diff --git a/client/homebrew/pages/homePage/welcome_msg_v3.md b/client/homebrew/pages/homePage/welcome_msg_v3.md index 9a5294f81..471932ed1 100644 --- a/client/homebrew/pages/homePage/welcome_msg_v3.md +++ b/client/homebrew/pages/homePage/welcome_msg_v3.md @@ -3,6 +3,10 @@ border:1px dashed #00000030; } +.page { + padding-bottom : 1.6cm; +} + ``` @@ -86,22 +90,19 @@ If you are looking for more 5e Homebrew resources check out [r/UnearthedArcana]( The Homebrewery aims to make homebrewing as simple as possible, providing a live editor with Markdown syntax that is more human-readable and faster to write with than raw HTML. In version 3.0.0, with a goal of adding maximum flexibility without users resorting to complex HTML to accomplish simple tasks, Homebrewery provides an extended verision of Markdown with additional syntax. - -{{text-align:center -**You can enable V3 via the {{fa,fa-info-circle}} **Properties** button!** -}} +**You can enable V3 via the {{fa,fa-info-circle}} Properties button!** ### Curly Brackets The biggest change in V3 is the replacement of `` and `
` with `{{ }}` for a cleaner custom formatting. Inline spans and block elements can be created and given ID's and Classes, as well as css properties, each of which are comma separated with no spaces. Use double quotes if a value requires spaces. Spans and Blocks start the same: #### Span -My favorite author is {{pen,#author,color:orange,font-family:"trebuchet ms" Brandon Sanderson}}. The orange text is given a class of `pen`, and id of `author`, colored orange, and given a new font. Note that the first space outside of quotes marks the beginning of the content. +My favorite author is {{pen,#author,color:orange,font-family:"trebuchet ms" Brandon Sanderson}}. The orange text has a class of `pen`, an id of `author`, is colored orange, and given a new font. The first space outside of quotes marks the beginning of the content. #### Block -{{purple,#book,background:#aa88aa55,text-align:center -My favorite book is Wheel of Time. This block has a class of `purple`, an id of `book`, and has been styled with a purple background and centered text. Note that the opening and curly brackets are on their own lines without any other contents. +{{purple,#book,text-align:center,background:#aa88aa55 +My favorite book is Wheel of Time. This block has a class of `purple`, an id of `book`, and centered text with a colored background. The opening and closing brackets are on lines separate from the block contents. }} @@ -110,15 +111,15 @@ For any element not inside a span or block, you can *inject* attributes using th Inline elements like *italics* {color:#D35400} or images require the injection on the same line. -Block elements like headers require injection starting on the line immediately following. +Block elements like headers require the injection to start on the line immediately following. ##### A Purple Header -{color:purple} +{color:purple,text-align:center} \* *this does not currently work for tables yet* ### Vertical Spacing -The HTML tag `
` has been replaced by either a single `:` along on a line, or multiple `:` on the same line. +A blank line can be achieved with a run of one or more `:` alone on a line. More `:`'s will create more space. :: @@ -129,12 +130,15 @@ V3 uses HTML *definition lists* to create "lists" with hanging indents. **Senses** :: Here is some text that is long and overflows into a second line, creating a "hanging indent". +### Column Breaks +Column and page breaks with `\column` and `\page`. + \column ### Tables Tables now allow column & row spanning between cells. This is included in some updated snippets, but a simplified example is given below. -A cell can be spanned across columns by bunching pipe `|` characters together. +A cell can be spanned across columns by grouping multiple pipe `|` characters at the end of a cell. Row spanning is achieved by adding a `^` at the end of a cell just before the `|`. @@ -167,7 +171,7 @@ Homebrewery comes with a series of *code snippets* found at the top of the edito ## Style Editor Panel -{{fa,fa-paint-brush}}Also, 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 excepts CSS for styling without requiring `