0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-25 22:43:03 +00:00

Compare commits

..

138 Commits

Author SHA1 Message Date
Trevor Buckner
aa945c4177 Up to v3.14.1 2024-08-13 17:08:59 -04:00
Trevor Buckner
cbc6dcdc35 Merge pull request #3625 from G-Ambatte/fixVarNameAsParam-#3622
Tweak variable math split regex
2024-08-11 23:01:38 -04:00
Trevor Buckner
5894dc5a7a Merge branch 'master' into fixVarNameAsParam-#3622 2024-08-11 21:59:58 -04:00
Trevor Buckner
284bfe565b Merge pull request #3624 from G-Ambatte/fixVarNameSubstringClash-#3613
Fix var name substring clash #3613
2024-08-11 21:49:31 -04:00
G.Ambatte
075c8805e0 Merge branch 'fixVarNameAsParam-#3622' of https://github.com/G-Ambatte/homebrewery into fixVarNameAsParam-#3622 2024-08-10 08:24:23 +12:00
G.Ambatte
5c4187cd06 Add variable names as function parameter tests 2024-08-10 08:24:16 +12:00
G.Ambatte
1719cc68fa Merge branch 'master' into fixVarNameAsParam-#3622 2024-08-10 08:23:23 +12:00
G.Ambatte
3ba67fb3d0 Merge branch 'master' into fixVarNameSubstringClash-#3613 2024-08-10 07:56:04 +12:00
G.Ambatte
f58d52c4b6 Add comma to var math split regex 2024-08-10 07:54:50 +12:00
Trevor Buckner
e1ad6f8114 Merge pull request #3588 from G-Ambatte/fixInfoPanel-#3586
Add disableMeta prop to SharePage
2024-08-09 10:55:27 -04:00
G.Ambatte
22257a95e0 Merge branch 'master' into fixInfoPanel-#3586 2024-08-09 18:06:07 +12:00
G.Ambatte
713c978f08 Add disableMeta to /migrate 2024-08-09 18:05:36 +12:00
G.Ambatte
3eb0c7acfe Add variable name checks 2024-08-09 17:42:15 +12:00
G.Ambatte
c3e6c01ec1 Fix typo in regex 2024-08-09 15:33:28 +12:00
G.Ambatte
5bb5cdec05 Change replaceAll to use RegEx from string 2024-08-09 13:10:30 +12:00
Trevor Buckner
f8e68c1485 Merge pull request #3620 from naturalcrit/dependabot/npm_and_yarn/eslint-plugin-jest-28.8.0
Bump eslint-plugin-jest from 28.7.0 to 28.8.0
2024-08-08 18:14:24 -04:00
Trevor Buckner
60ccd08bce Merge branch 'master' into dependabot/npm_and_yarn/eslint-plugin-jest-28.8.0 2024-08-08 17:53:01 -04:00
Trevor Buckner
f241024167 Merge pull request #3585 from dbolack-ab/CSSFolding
Add Code folding on CSS style tab
2024-08-08 17:51:43 -04:00
Trevor Buckner
f1fd75574d Merge branch 'master' into CSSFolding 2024-08-08 17:51:05 -04:00
Trevor Buckner
31352e417f Simplify folding logic 2024-08-08 17:48:32 -04:00
Trevor Buckner
643af98ca3 Add comment 2024-08-08 17:44:16 -04:00
Trevor Buckner
3b61cd355f Fix edge case where string was emitting data: twice.
Also, a case where the input is right around 50 chars. It can be truncated twice, leading to a long `.....`
2024-08-08 17:43:57 -04:00
Trevor Buckner
8df19e3b8f Merge branch 'master' into dependabot/npm_and_yarn/eslint-plugin-jest-28.8.0 2024-08-08 11:14:13 -04:00
Trevor Buckner
91d6548822 Merge pull request #3621 from naturalcrit/dependabot/npm_and_yarn/marked-emoji-1.4.2
Bump marked-emoji from 1.4.1 to 1.4.2
2024-08-08 11:13:55 -04:00
dependabot[bot]
ef797b2a69 Bump marked-emoji from 1.4.1 to 1.4.2
Bumps [marked-emoji](https://github.com/UziTech/marked-emoji) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/UziTech/marked-emoji/releases)
- [Changelog](https://github.com/UziTech/marked-emoji/blob/main/release.config.cjs)
- [Commits](https://github.com/UziTech/marked-emoji/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: marked-emoji
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 03:05:41 +00:00
dependabot[bot]
33a62a0ac7 Bump eslint-plugin-jest from 28.7.0 to 28.8.0
Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.7.0 to 28.8.0.
- [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases)
- [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.7.0...v28.8.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 03:05:17 +00:00
Trevor Buckner
5a9025f555 Merge pull request #3618 from naturalcrit/dependabot/npm_and_yarn/eslint-plugin-jest-28.7.0
Bump eslint-plugin-jest from 28.6.0 to 28.7.0
2024-08-07 13:15:48 -04:00
Trevor Buckner
0a494633bb Merge branch 'master' into dependabot/npm_and_yarn/eslint-plugin-jest-28.7.0 2024-08-07 12:00:40 -04:00
Trevor Buckner
aeaea5b5e0 Merge pull request #3516 from dbolack-ab/Issue_2563
Update table of content list-item breakage rules for wide table of contents
2024-08-07 12:00:23 -04:00
Trevor Buckner
e03ec34104 Merge branch 'master' into Issue_2563 2024-08-07 11:59:32 -04:00
dependabot[bot]
c65ee59998 Bump eslint-plugin-jest from 28.6.0 to 28.7.0
Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 28.6.0 to 28.7.0.
- [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases)
- [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v28.6.0...v28.7.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:15:14 +00:00
Trevor Buckner
4d59a14f74 Merge pull request #3617 from naturalcrit/lint-metadataEditor.less
Lint metadataEditor.less
2024-08-03 17:29:47 -04:00
Trevor Buckner
3c8aaa7465 Update metadataEditor.less 2024-08-03 17:28:47 -04:00
Trevor Buckner
ac70403203 Merge pull request #3611 from naturalcrit/dependabot/npm_and_yarn/react-router-dom-6.26.0
Bump react-router-dom from 6.25.1 to 6.26.0
2024-08-03 02:51:13 -04:00
dependabot[bot]
a5e7ad882d Bump react-router-dom from 6.25.1 to 6.26.0
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.25.1 to 6.26.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.26.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-03 06:47:06 +00:00
Trevor Buckner
061925e89a Merge pull request #3616 from naturalcrit/Replace-stylistic-stylelint-with-@stylistic-stylelint
Migrate from stylelint-stylistic to @stylelint-stylistic
2024-08-03 02:46:04 -04:00
Trevor Buckner
5fc8b508d1 Merge branch 'master' into Replace-stylistic-stylelint-with-@stylistic-stylelint 2024-08-03 02:43:33 -04:00
Trevor Buckner
cb444bef9d stylelint-stylistic has a new owner; migrating to newer package 2024-08-03 02:42:22 -04:00
Trevor Buckner
481f2e7d39 Merge pull request #3587 from G-Ambatte/addSignedFunction-#3537
Add new var math functions
2024-08-03 02:12:23 -04:00
Trevor Buckner
7559652a32 Merge branch 'master' into addSignedFunction-#3537 2024-08-03 02:09:47 -04:00
Trevor Buckner
8e15466063 Merge pull request #3615 from G-Ambatte/fixSelectSelfInThemeSource-#3614
Prevent self-selection of User Theme
2024-08-03 02:07:33 -04:00
G.Ambatte
8ef319d2cd Merge branch 'master' into fixSelectSelfInThemeSource-#3614 2024-08-03 16:35:17 +12:00
G.Ambatte
1513a983f7 Skip self when generating metadata dropdown list 2024-08-03 16:32:49 +12:00
G.Ambatte
1b71bbaefb Remove escaping from new functions 2024-08-03 10:32:39 +12:00
G.Ambatte
fcd5279381 Enable built-in abs() 2024-08-03 10:32:18 +12:00
G.Ambatte
4276d38152 Merge branch 'master' into addSignedFunction-#3537 2024-08-03 09:47:00 +12:00
David Bolack
d6bf2dec7e Merge branch 'master' into CSSFolding 2024-08-02 15:27:04 -05:00
David Bolack
423a4a521a Correct truncation when looking for data: in css folding 2024-08-02 15:25:41 -05:00
David Bolack
05d4d5b1ff Revert "Correct truncation when looking for data: in css folding"
This reverts commit ad1e8d50d7.
2024-08-02 15:25:10 -05:00
David Bolack
ad1e8d50d7 Correct truncation when looking for data: in css folding 2024-08-02 15:24:14 -05:00
David Bolack
c926f0de79 Resolve import matching suggestion. 2024-08-02 15:10:39 -05:00
Víctor Losada Hernández
4337c67f69 Merge branch 'master' into Issue_2563 2024-08-01 23:37:43 +02:00
Trevor Buckner
bb06a3e4d4 Merge pull request #3526 from 5e-Cleric/fix-background-monster-in-safari
Fixing Monster Frame background in Safari for iphone and ipad
2024-08-01 17:23:37 -04:00
Trevor Buckner
6af9c9e432 Merge branch 'master' into Issue_2563 2024-08-01 17:16:18 -04:00
Trevor Buckner
84d0d15c5a Merge branch 'master' into fix-background-monster-in-safari 2024-08-01 17:07:18 -04:00
Trevor Buckner
b185fe8e35 Move Monster block changes under main monster block stuff 2024-08-01 17:06:18 -04:00
Trevor Buckner
adbb9e54c1 Merge branch 'master' into addSignedFunction-#3537 2024-08-01 16:12:46 -04:00
Trevor Buckner
1d3c2d7cd6 Merge branch 'master' into fixInfoPanel-#3586 2024-08-01 15:57:43 -04:00
Trevor Buckner
2dc397e9f1 Merge pull request #3610 from naturalcrit/MoveMigrateToSharePage
Move Migrate page to use Share component
2024-08-01 15:56:37 -04:00
Trevor Buckner
6465564b6f Add route to Homebrew.jsx 2024-08-01 15:37:00 -04:00
G.Ambatte
e1fe640e92 Update shared/naturalcrit/markdown.js
Co-authored-by: Trevor Buckner <calculuschild@gmail.com>
2024-08-02 07:03:27 +12:00
G.Ambatte
6f99fe7455 Update shared/naturalcrit/markdown.js
Co-authored-by: Trevor Buckner <calculuschild@gmail.com>
2024-08-02 07:02:57 +12:00
David Bolack
342963dae6 Merge branch 'master' into Issue_2563 2024-08-01 10:33:34 -05:00
David Bolack
957b1ed9e7 Merge branch 'master' into CSSFolding 2024-08-01 10:09:56 -05:00
Trevor Buckner
423ed28fbd Merge pull request #3517 from dbolack-ab/Issue_2688
Solve for .descriptive and .wide not getting along
2024-08-01 00:59:03 -04:00
Trevor Buckner
a4f17259e1 Merge branch 'master' into Issue_2688 2024-08-01 00:58:06 -04:00
Trevor Buckner
c2678e5f2c Merge pull request #3564 from G-Ambatte/fixInkFriendlySnippet-#3563
Stop Ink Friendly snippet making text unselectable in output PDF
2024-08-01 00:48:21 -04:00
Trevor Buckner
d797333b97 Merge branch 'master' into fixInkFriendlySnippet-#3563 2024-08-01 00:48:14 -04:00
Trevor Buckner
40777a3794 Merge pull request #3580 from G-Ambatte/fixToCUpperCasing-#3572
Fix Table of Contents uppercasing
2024-08-01 00:47:23 -04:00
Trevor Buckner
ac1005c2b0 Merge branch 'master' into fixInkFriendlySnippet-#3563 2024-08-01 00:47:02 -04:00
Trevor Buckner
c77395149b Tweak shadow values to match 5ePHB
box-shadows are a little smaller than drop-shadow. This just uses the same values we already found previously so the shadow size is not affected.
2024-08-01 00:46:08 -04:00
Trevor Buckner
fb0580fff1 Merge branch 'master' into fixToCUpperCasing-#3572 2024-08-01 00:41:47 -04:00
Trevor Buckner
0e953d08b2 Merge pull request #3609 from naturalcrit/dependabot/npm_and_yarn/babel/preset-env-7.25.3
Bump @babel/preset-env from 7.25.2 to 7.25.3
2024-07-31 23:54:21 -04:00
dependabot[bot]
7fce362a52 Bump @babel/preset-env from 7.25.2 to 7.25.3
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.25.2 to 7.25.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.25.3/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-01 03:47:39 +00:00
Trevor Buckner
3e7844ba6d Merge pull request #3591 from naturalcrit/dependabot/npm_and_yarn/eslint-plugin-react-7.35.0
Bump eslint-plugin-react from 7.34.3 to 7.35.0
2024-07-31 23:45:53 -04:00
Trevor Buckner
7619f8f420 Merge branch 'master' into dependabot/npm_and_yarn/eslint-plugin-react-7.35.0 2024-07-31 22:43:52 -04:00
Trevor Buckner
bac52f8376 Merge pull request #3582 from naturalcrit/dependabot/npm_and_yarn/react-router-dom-6.25.1
Bump react-router-dom from 6.24.1 to 6.25.1
2024-07-31 22:43:39 -04:00
Trevor Buckner
5c72cd9d47 Merge branch 'master' into dependabot/npm_and_yarn/react-router-dom-6.25.1 2024-07-31 21:54:53 -04:00
Trevor Buckner
89b59a52bc Merge pull request #3608 from G-Ambatte/fixTests
Fix tests post v3.14.0
2024-07-31 21:54:32 -04:00
Trevor Buckner
a6f2a1a4c8 Merge branch 'master' into fixTests 2024-07-31 21:51:46 -04:00
Trevor Buckner
e9e9fbe21c Merge pull request #3592 from dbolack-ab/UpdateDocker
Update Node version for Docker
2024-07-31 21:51:16 -04:00
G.Ambatte
e7108947d6 Fix expected values for pageCount and renderer 2024-08-01 13:24:23 +12:00
G.Ambatte
8b68f24135 Merge branch 'master' into fixInkFriendlySnippet-#3563 2024-08-01 12:43:20 +12:00
G.Ambatte
e32ae9a792 Merge branch 'master' into fixToCUpperCasing-#3572 2024-08-01 12:42:08 +12:00
G.Ambatte
758a951bf5 Merge branch 'master' into fixInfoPanel-#3586 2024-08-01 12:33:07 +12:00
G.Ambatte
21ac50cd27 Merge branch 'master' into addSignedFunction-#3537 2024-08-01 12:32:07 +12:00
dependabot[bot]
fc67a40167 Bump eslint-plugin-react from 7.34.3 to 7.35.0
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.34.3 to 7.35.0.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.3...v7.35.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-31 23:35:07 +00:00
dependabot[bot]
7949df1865 Bump react-router-dom from 6.24.1 to 6.25.1
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.24.1 to 6.25.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.25.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-31 23:35:06 +00:00
Trevor Buckner
8ed013cbb2 Merge pull request #3603 from naturalcrit/dependabot/npm_and_yarn/mongoose-8.5.2
Bump mongoose from 8.4.5 to 8.5.2
2024-07-31 19:34:29 -04:00
Trevor Buckner
0138c27863 Merge branch 'master' into dependabot/npm_and_yarn/mongoose-8.5.2 2024-07-31 19:34:00 -04:00
Trevor Buckner
7930c209ff Merge pull request #3599 from naturalcrit/dependabot/npm_and_yarn/babel/preset-env-7.25.2
Bump @babel/preset-env from 7.24.7 to 7.25.2
2024-07-31 19:33:51 -04:00
dependabot[bot]
26fdc1ba91 Bump mongoose from 8.4.5 to 8.5.2
Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.4.5 to 8.5.2.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/mongoose/compare/8.4.5...8.5.2)

---
updated-dependencies:
- dependency-name: mongoose
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-31 23:33:27 +00:00
Trevor Buckner
8681994747 Merge branch 'master' into dependabot/npm_and_yarn/babel/preset-env-7.25.2 2024-07-31 19:32:52 -04:00
Trevor Buckner
0e684b14a7 Merge pull request #3598 from naturalcrit/dependabot/npm_and_yarn/babel/core-7.25.2
Bump @babel/core from 7.24.7 to 7.25.2
2024-07-31 19:32:44 -04:00
Trevor Buckner
974f84d49f Merge branch 'master' into dependabot/npm_and_yarn/babel/core-7.25.2 2024-07-31 19:32:28 -04:00
Trevor Buckner
5a6abef4fb Merge pull request #3562 from naturalcrit/dependabot/npm_and_yarn/dompurify-3.1.6
Bump dompurify from 3.1.5 to 3.1.6
2024-07-31 19:32:09 -04:00
Trevor Buckner
15200e0c6e Merge branch 'master' into dependabot/npm_and_yarn/dompurify-3.1.6 2024-07-31 19:31:25 -04:00
Trevor Buckner
79c22f383f Allow renderer and pagecount into stubs
At this point, only text and textbin contents are still in google drive. Which is the majority of the file still. Renderer and Pagecount may become useful for Vault page, and Renderer is needed for themes.
2024-07-31 18:13:31 -04:00
Trevor Buckner
915f9aafa8 restore snippetBundle field somehow lost from /new and /home 2024-07-31 17:27:58 -04:00
Trevor Buckner
11f8809c5e Merge pull request #3606 from naturalcrit/FixUserThemesCrashes
Fix user themes crashes
2024-07-31 17:05:52 -04:00
Trevor Buckner
27a4831ea0 Add a theme to our reference pages (changelog, FAQ, migrate) 2024-07-31 16:53:54 -04:00
Trevor Buckner
1abced20d6 Do not fetch user themes if there is no user. 2024-07-31 16:53:34 -04:00
G.Ambatte
251d03b7be Merge branch 'master' into addSignedFunction-#3537 2024-07-31 20:58:40 +12:00
David Bolack
29bbf3fef9 Merge branch 'master' into Issue_2563 2024-07-30 10:59:43 -05:00
dependabot[bot]
fac0d151b6 Bump @babel/preset-env from 7.24.7 to 7.25.2
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.24.7 to 7.25.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.25.2/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-30 03:27:30 +00:00
dependabot[bot]
4f950b6024 Bump @babel/core from 7.24.7 to 7.25.2
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.24.7 to 7.25.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.25.2/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-30 03:27:04 +00:00
Trevor Buckner
1c1d331df9 Merge pull request #3597 from naturalcrit/v3.14.0
Up to v3.14.0
2024-07-29 21:55:19 -04:00
David Bolack
d640ad6bb7 Update Node version for Docker 2024-07-22 19:13:38 -05:00
David Bolack
2af2ad629d Try to account for situations where the URL folding is past the max length for the truncation so the user can see why this is a fold.
Remove missed debug messages.
2024-07-21 12:58:21 -05:00
David Bolack
2fc7aa454f Add data: URL folding for CSS.
Regex might need tweaking to catch all cases, but it catches the basics.
2024-07-21 12:40:49 -05:00
David Bolack
fde797c044 Rename prevLine to activeLine for better reading clarity. 2024-07-20 21:51:03 -05:00
David Bolack
6693fb1c13 reduce redundant trim()s 2024-07-20 21:40:22 -05:00
G.Ambatte
17f8de48a8 Add disableMeta prop to SharePage 2024-07-21 13:33:23 +12:00
G.Ambatte
aebfcc7885 Add new var math functions 2024-07-21 00:18:06 +12:00
David Bolack
2c4f3473e5 Trim the trailing { on a CSS fold. 2024-07-20 00:43:02 -05:00
G.Ambatte
9a4cc5f63e Add @import folding 2024-07-20 14:57:09 +12:00
David Bolack
c82b62f953 Add Code folding on CSS style tab 2024-07-19 16:03:44 -05:00
G.Ambatte
f830104531 Use textContent instead of innerText 2024-07-17 13:59:00 +12:00
Trevor Buckner
fed65f5430 Merge branch 'master' into dependabot/npm_and_yarn/dompurify-3.1.6 2024-07-13 17:44:37 -04:00
Trevor Buckner
c209a86f90 Merge branch 'master' into fixInkFriendlySnippet-#3563 2024-07-11 09:47:54 -04:00
G.Ambatte
0cf79ceeb1 Merge branch 'master' into fixInkFriendlySnippet-#3563 2024-07-09 08:00:27 +12:00
G.Ambatte
7b9bd70554 Change filter to box-shadow 2024-07-08 19:57:21 +00:00
David Bolack
a413dc8d4f Merge branch 'master' into Issue_2563 2024-07-08 10:14:06 -05:00
David Bolack
74ee09397e Merge branch 'master' into Issue_2688 2024-07-08 10:08:54 -05:00
dependabot[bot]
a06aa2a103 Bump dompurify from 3.1.5 to 3.1.6
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.1.5...3.1.6)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:17:11 +00:00
David Bolack
853f048812 Merge branch 'Issue_2563' of github.com:dbolack-ab/homebrewery into Issue_2563 2024-06-27 10:48:41 -05:00
David Bolack
4564066c63 Merge branch 'master' into Issue_2563 2024-06-27 10:44:32 -05:00
David Bolack
435fb6ecfe Merge branch 'Issue_2688' of github.com:dbolack-ab/homebrewery into Issue_2688 2024-06-19 19:16:52 -05:00
David Bolack
8a10fac81e Update Style based on suggestions. 2024-06-19 19:16:19 -05:00
David Bolack
7f1949a7f4 Merge branch 'master' into Issue_2688 2024-06-19 19:16:12 -05:00
Víctor Losada Hernández
47b56398b1 Merge branch 'master' into Issue_2563 2024-06-15 18:09:55 +02:00
Víctor Losada Hernández
2ea2f41bd0 Merge branch 'master' into Issue_2688 2024-06-15 18:05:28 +02:00
Víctor Losada Hernández
65d6eb11dd suggested changes 2024-06-10 22:09:25 +02:00
Víctor Losada Hernández
a591763d10 "Moved iOS-specific styles from .monster.frame to a separate @supports block" 2024-06-09 00:43:11 +02:00
Víctor Losada Hernández
62bf982a73 change to browser-specific solution 2024-06-08 23:40:11 +02:00
Víctor Losada Hernández
6294b12ad5 "Removed background-blend-mode from monster stat block and updated monsterBlockBackground image URL" 2024-06-08 22:59:12 +02:00
David Bolack
b7f88d53d0 Solve for .descriptive and .wide not getting along with suggested fix from Issue.
Uses more more direct target rather than rearrange the file.
2024-06-05 17:44:29 -05:00
David Bolack
cb8d98266c Update table of content list-item breakage rules for wide table of contents
Solves #2563
2024-06-05 17:17:49 -05:00
26 changed files with 2995 additions and 2694 deletions

View File

@@ -3,7 +3,7 @@
"stylelint-config-recess-order",
"stylelint-config-recommended"],
"plugins": [
"stylelint-stylistic",
"@stylistic/stylelint-plugin",
"./stylelint_plugins/declaration-colon-align.js",
"./stylelint_plugins/declaration-colon-min-space-before",
"./stylelint_plugins/declaration-block-multi-line-min-declarations"
@@ -16,32 +16,32 @@
"font-family-no-missing-generic-family-keyword" : null,
"font-weight-notation" : "named-where-possible",
"font-family-name-quotes" : "always-unless-keyword",
"stylistic/indentation" : "tab",
"@stylistic/indentation" : "tab",
"no-duplicate-selectors" : true,
"stylistic/color-hex-case" : "upper",
"@stylistic/color-hex-case" : "upper",
"color-hex-length" : "long",
"stylistic/selector-combinator-space-after" : "always",
"stylistic/selector-combinator-space-before" : "always",
"stylistic/selector-attribute-operator-space-before" : "never",
"stylistic/selector-attribute-operator-space-after" : "never",
"stylistic/selector-attribute-brackets-space-inside" : "never",
"@stylistic/selector-combinator-space-after" : "always",
"@stylistic/selector-combinator-space-before" : "always",
"@stylistic/selector-attribute-operator-space-before" : "never",
"@stylistic/selector-attribute-operator-space-after" : "never",
"@stylistic/selector-attribute-brackets-space-inside" : "never",
"selector-attribute-quotes" : "always",
"selector-pseudo-element-colon-notation" : "double",
"stylistic/selector-pseudo-class-parentheses-space-inside" : "never",
"stylistic/block-opening-brace-space-before" : "always",
"@stylistic/selector-pseudo-class-parentheses-space-inside" : "never",
"@stylistic/block-opening-brace-space-before" : "always",
"naturalcrit/declaration-colon-min-space-before" : 1,
"stylistic/declaration-block-trailing-semicolon" : "always",
"stylistic/declaration-colon-space-after" : "always",
"stylistic/number-leading-zero" : "always",
"@stylistic/declaration-block-trailing-semicolon" : "always",
"@stylistic/declaration-colon-space-after" : "always",
"@stylistic/number-leading-zero" : "always",
"function-url-quotes" : ["always", { "except": ["empty"] }],
"function-url-scheme-disallowed-list" : ["data","http"],
"comment-whitespace-inside" : "always",
"stylistic/string-quotes" : "single",
"stylistic/media-feature-range-operator-space-before" : "always",
"stylistic/media-feature-range-operator-space-after" : "always",
"stylistic/media-feature-parentheses-space-inside" : "never",
"stylistic/media-feature-colon-space-before" : "always",
"stylistic/media-feature-colon-space-after" : "always",
"@stylistic/string-quotes" : "single",
"@stylistic/media-feature-range-operator-space-before" : "always",
"@stylistic/media-feature-range-operator-space-after" : "always",
"@stylistic/media-feature-parentheses-space-inside" : "never",
"@stylistic/media-feature-colon-space-before" : "always",
"@stylistic/media-feature-colon-space-after" : "always",
"naturalcrit/declaration-colon-align" : true,
"naturalcrit/declaration-block-multi-line-min-declarations": 1
}

View File

@@ -1,4 +1,4 @@
FROM node:18-alpine
FROM node:20-alpine
RUN apk --no-cache add git
ENV NODE_ENV=docker

View File

@@ -84,6 +84,65 @@ pre {
## changelog
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
### 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

View File

@@ -367,7 +367,7 @@ const Editor = createClass({
view={this.state.view}
value={this.props.brew.style ?? DEFAULT_STYLE_TEXT}
onChange={this.props.onStyleChange}
enableFolding={false}
enableFolding={true}
editorTheme={this.state.editorTheme}
rerenderParent={this.rerenderParent} />
</>;

View File

@@ -28,6 +28,7 @@ const MetadataEditor = createClass({
return {
metadata : {
editId : null,
shareId : null,
title : '',
description : '',
thumbnail : '',
@@ -196,6 +197,7 @@ const MetadataEditor = createClass({
const listThemes = (renderer)=>{
return _.map(_.values(mergedThemes[renderer]), (theme)=>{
if(theme.path == this.props.metadata.shareId) return;
const preview = theme.thumbnail || `/themes/${theme.renderer}/${theme.path}/dropdownPreview.png`;
const texture = theme.thumbnail || `/themes/${theme.renderer}/${theme.path}/dropdownTexture.png`;
return <div className='item' key={`${renderer}_${theme.name}`} onClick={()=>this.handleTheme(theme)} title={''}>

View File

@@ -1,258 +1,239 @@
@import 'naturalcrit/styles/colors.less';
.metadataEditor{
.metadataEditor {
position : absolute;
z-index : 5;
box-sizing : border-box;
width : 100%;
padding : 25px;
background-color : #999;
height : calc(100vh - 54px); // 54px is the height of the navbar + snippet bar. probably a better way to dynamic get this.
padding : 25px;
overflow-y : auto;
background-color : #999999;
.sectionHead {
font-weight: 1000;
margin: 20px 0;
margin : 20px 0;
font-weight : 1000;
&:first-of-type {
margin-top: 0;
}
&:first-of-type { margin-top : 0; }
}
& > div {
margin-bottom: 10px;
}
& > div { margin-bottom : 10px; }
.field-group {
display: flex;
width: 100%;
flex-wrap: wrap;
gap: 10px;
display : flex;
flex-wrap : wrap;
gap : 10px;
width : 100%;
}
.field-column {
display: flex;
flex-direction: column;
flex: 5 0 200px;
gap: 10px;
display : flex;
flex : 5 0 200px;
flex-direction : column;
gap : 10px;
}
.field{
.field {
position : relative;
display : flex;
flex-wrap : wrap;
width : 100%;
min-width : 200px;
position : relative;
&>label{
& > label {
width : 80px;
font-size : 11px;
font-weight : 800;
line-height : 1.8em;
text-transform : uppercase;
}
&>.value{
& > .value {
flex : 1 1 auto;
width : 50px;
&:invalid {
background : #ffb9b9;
}
&:invalid { background : #FFB9B9; }
}
input[type='text'], textarea {
border : 1px solid gray;
&:focus {
outline: 1px solid #444;
}
&:focus { outline : 1px solid #444444; }
}
&.thumbnail{
&.thumbnail {
height : 1.4em;
label{
line-height: 2.0em;
label { line-height : 2.0em; }
.value {
overflow : hidden;
text-overflow : ellipsis;
}
.value{
overflow: hidden;
text-overflow: ellipsis;
}
button{
border: 1px solid #999;
color: white;
padding: 0px 5px;
background-color: black;
&:hover{
background-color: #777;
}
button {
padding : 0px 5px;
color : white;
background-color : black;
border : 1px solid #999999;
&:hover { background-color : #777777; }
}
}
&.description {
flex: 1;
flex : 1;
textarea.value {
resize : none;
height : auto;
font-family : 'Open Sans', sans-serif;
font-size : 0.8em;
resize : none;
}
}
&.language .language-dropdown {
max-width : 150px;
z-index : 200;
max-width : 150px;
}
small {
display : inline-block;
font-size : 0.6em;
font-style : italic;
line-height : 1.4em;
display : inline-block;
}
}
.thumbnail-preview {
position: relative;
justify-self: center;
width: 80px;
height: min-content;
flex: 1 1;
max-height: 115px;
aspect-ratio: 1 / 1;
object-fit: contain;
background-color: #AAA;
position : relative;
flex : 1 1;
justify-self : center;
width : 80px;
height : min-content;
max-height : 115px;
aspect-ratio : 1 / 1;
object-fit : contain;
background-color : #AAAAAA;
}
.systems.field .value{
label{
vertical-align : middle;
margin-right : 15px;
cursor : pointer;
font-size : 0.7em;
font-weight : 800;
user-select : none;
white-space : nowrap;
.systems.field .value {
label {
display : inline-flex;
align-items : center;
}
a {
font-size : 0.7em;
font-weight : 800;
display : inline-flex;
}
input{
margin-right : 15px;
font-size : 0.7em;
font-weight : 800;
white-space : nowrap;
vertical-align : middle;
cursor : pointer;
user-select : none;
}
a {
display : inline-flex;
font-size : 0.7em;
font-weight : 800;
}
input {
margin : 3px;
vertical-align : middle;
cursor : pointer;
}
}
.publish.field .value{
position : relative;
margin-bottom: 15px;
button{
width:100%;
}
button.publish{
.publish.field .value {
position : relative;
margin-bottom : 15px;
button { width : 100%; }
button.publish {
.button(@blueLight);
}
button.unpublish{
button.unpublish {
.button(@silver);
}
}
.delete.field .value{
button{
.delete.field .value {
button {
.button(@red);
}
}
.authors.field .value{
font-size: 0.8em;
.authors.field .value {
font-size : 0.8em;
line-height : 1.5em;
}
.themes.field{
.themes.field {
font-size : 13.33px;
.navDropdownContainer {
background-color : white;
position : relative;
z-index : 100;
position : relative;
z-index : 100;
background-color : white;
&.disabled {
font-style :italic;
font-style : italic;
background-color : darkgray;
color : dimgray;
font-style : italic;
color : dimgray;
background-color : darkgray;
}
&>div:first-child {
border : 2px solid rgb(118,118,118);
padding : 6px 3px;
background-color : inherit;
i {
float : right;
}
& > div:first-child {
padding : 6px 3px;
background-color : inherit;
border : 2px solid rgb(118,118,118);
i { float : right; }
&:hover {
background-color : @blue;
color : white;
color : white;
background-color : @blue;
}
}
.navDropdown .item > p {
width: 45%;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
height: 1.1em;
width : 45%;
height : 1.1em;
overflow : hidden;
text-overflow : ellipsis;
white-space : nowrap;
}
.navDropdown {
box-shadow : 0px 5px 10px rgba(0, 0, 0, 0.3);
position : absolute;
width : 100%;
box-shadow : 0px 5px 10px rgba(0, 0, 0, 0.3);
.item {
padding : 3px 3px;
border-top : 1px solid rgb(118, 118, 118);
position : relative;
padding : 3px 3px;
overflow : visible;
background-color : white;
background-color : white;
border-top : 1px solid rgb(118, 118, 118);
.preview {
display : flex;
flex-direction: column;
background : #ccc;
border-radius : 5px;
box-shadow : 0 0 5px black;
width : 200px;
color :black;
position : absolute;
top : 0;
right : 0;
opacity : 0;
transition : opacity 250ms ease;
z-index : 1;
overflow :hidden;
position : absolute;
top : 0;
right : 0;
z-index : 1;
display : flex;
flex-direction : column;
width : 200px;
overflow : hidden;
color : black;
background : #CCCCCC;
border-radius : 5px;
box-shadow : 0 0 5px black;
opacity : 0;
transition : opacity 250ms ease;
h6 {
font-weight : 900;
padding-inline:1em;
padding-block :.5em;
border-bottom :2px solid hsl(0,0%,40%);
padding-block : 0.5em;
padding-inline : 1em;
font-weight : 900;
border-bottom : 2px solid hsl(0,0%,40%);
}
}
&:hover {
background-color : @blue;
color : white;
}
&:hover > .preview {
opacity: 1;
color : white;
background-color : @blue;
}
&:hover > .preview { opacity : 1; }
.texture-container {
position: absolute;
width: 100%;
height: 100%;
min-height: 100%;
top: 0;
left: 0;
overflow: hidden;
position : absolute;
top : 0;
left : 0;
width : 100%;
height : 100%;
min-height : 100%;
overflow : hidden;
> img {
mask-image : linear-gradient(90deg, transparent, black 20%);
-webkit-mask-image : linear-gradient(90deg, transparent, black 20%);
position : absolute;
right : 0;
top : 0px;
width : 50%;
position : absolute;
top : 0px;
right : 0;
width : 50%;
min-height : 100%;
-webkit-mask-image : linear-gradient(90deg, transparent, black 20%);
mask-image : linear-gradient(90deg, transparent, black 20%);
}
}
}
@@ -260,84 +241,69 @@
}
}
.field .list {
display: flex;
flex: 1 0;
flex-wrap: wrap;
display : flex;
flex : 1 0;
flex-wrap : wrap;
> * {
flex: 0 0 auto;
}
> * { flex : 0 0 auto; }
#groupedIcon {
#backgroundColors;
display: inline-block;
height: ~"calc(100% + 0.6em)";
position: relative;
top: -0.3em;
right: -0.3em;
cursor: pointer;
min-width: 20px;
text-align: center;
color: white;
position : relative;
top : -0.3em;
right : -0.3em;
display : inline-block;
min-width : 20px;
height : ~'calc(100% + 0.6em)';
color : white;
text-align : center;
cursor : pointer;
i {
position: relative;
top: 50%;
transform: translateY(-50%);
position : relative;
top : 50%;
transform : translateY(-50%);
}
&:not(:last-child) {
border-right: 1px solid black;
}
&:not(:last-child) { border-right : 1px solid black; }
&:last-child {
border-radius: 0 0.5em 0.5em 0;
}
&:last-child { border-radius : 0 0.5em 0.5em 0; }
}
.badge {
background-color: #dddddd;
border-radius: .5em;
font-size: .9em;
margin: 2px;
padding: .3em;
padding : 0.3em;
margin : 2px;
font-size : 0.9em;
background-color : #DDDDDD;
border-radius : 0.5em;
.icon {
#groupedIcon
}
#groupedIcon; }
}
.input-group {
height: ~"calc(.9em + 4px + .6em)";
height : ~'calc(.9em + 4px + .6em)';
input {
border-radius: .5em 0 0 .5em;
}
input { border-radius : 0.5em 0 0 0.5em; }
input:last-child {
border-radius: .5em;
}
input:last-child { border-radius : 0.5em; }
.value {
width: 7.5vw;
min-width: 75px;
height: 100%;
width : 7.5vw;
min-width : 75px;
height : 100%;
}
.invalid:focus {
background-color: pink;
}
.invalid:focus { background-color : pink; }
.icon {
#groupedIcon;
height: 97%;
font-size: .8em;
right: 1px;
top: -.54em;
top : -0.54em;
right : 1px;
height : 97%;
font-size : 0.8em;
i {
font-size: 1.125em;
}
i { font-size : 1.125em; }
}
}
}

View File

@@ -71,8 +71,9 @@ const Homebrew = createClass({
<Route path='/new/:id' element={<WithRoute el={NewPage} brew={this.props.brew} userThemes={this.props.userThemes}/>} />
<Route path='/new' element={<WithRoute el={NewPage} userThemes={this.props.userThemes}/> } />
<Route path='/user/:username' element={<WithRoute el={UserPage} brews={this.props.brews} />} />
<Route path='/changelog' element={<WithRoute el={SharePage} brew={this.props.brew} />} />
<Route path='/faq' element={<WithRoute el={SharePage} brew={this.props.brew} />} />
<Route path='/changelog' element={<WithRoute el={SharePage} brew={this.props.brew} disableMeta={true} />} />
<Route path='/faq' element={<WithRoute el={SharePage} brew={this.props.brew} disableMeta={true} />} />
<Route path='/migrate' element={<WithRoute el={SharePage} brew={this.props.brew} disableMeta={true} />} />
<Route path='/account' element={<WithRoute el={AccountPage} brew={this.props.brew} accountDetails={this.props.brew.accountDetails} />} />
<Route path='/legacy' element={<WithRoute el={HomePage} brew={this.props.brew} />} />
<Route path='/error' element={<WithRoute el={ErrorPage} brew={this.props.brew} />} />

View File

@@ -95,6 +95,7 @@ const HomePage = createClass({
onTextChange={this.handleTextChange}
renderer={this.state.brew.renderer}
showEditButtons={false}
snippetBundle={this.state.themeBundle.snippets}
/>
<BrewRenderer
text={this.state.brew.text}

View File

@@ -217,6 +217,7 @@ const NewPage = createClass({
onMetaChange={this.handleMetaChange}
renderer={this.state.brew.renderer}
userThemes={this.props.userThemes}
snippetBundle={this.state.themeBundle.snippets}
/>
<BrewRenderer
text={this.state.brew.text}

View File

@@ -18,7 +18,8 @@ const SharePage = createClass({
displayName : 'SharePage',
getDefaultProps : function() {
return {
brew : DEFAULT_BREW_LOAD,
brew : DEFAULT_BREW_LOAD,
disableMeta : false
};
},
@@ -68,13 +69,21 @@ const SharePage = createClass({
},
render : function(){
const titleStyle = this.props.disableMeta ? { cursor: 'default' } : {};
const titleEl = <Nav.item className='brewTitle' style={titleStyle}>{this.props.brew.title}</Nav.item>;
return <div className='sharePage sitePage'>
<Meta name='robots' content='noindex, nofollow' />
<Navbar>
<Nav.section className='titleSection'>
<MetadataNav brew={this.props.brew}>
<Nav.item className='brewTitle'>{this.props.brew.title}</Nav.item>
</MetadataNav>
{
this.props.disableMeta ?
titleEl
:
<MetadataNav brew={this.props.brew}>
{titleEl}
</MetadataNav>
}
</Nav.section>
<Nav.section>

4996
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "homebrewery",
"description": "Create authentic looking D&D homebrews using only markdown",
"version": "3.14.0",
"version": "3.14.1",
"engines": {
"npm": "^10.2.x",
"node": "^20.8.x"
@@ -83,9 +83,9 @@
]
},
"dependencies": {
"@babel/core": "^7.24.7",
"@babel/core": "^7.25.2",
"@babel/plugin-transform-runtime": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-env": "^7.25.3",
"@babel/preset-react": "^7.24.7",
"@googleapis/drive": "^8.11.0",
"body-parser": "^1.20.2",
@@ -94,7 +94,7 @@
"cookie-parser": "^1.4.6",
"create-react-class": "^15.7.0",
"dedent-tabs": "^0.10.3",
"dompurify": "^3.1.5",
"dompurify": "^3.1.6",
"expr-eval": "^2.0.2",
"express": "^4.19.2",
"express-async-handler": "^1.2.0",
@@ -105,34 +105,34 @@
"less": "^3.13.1",
"lodash": "^4.17.21",
"marked": "11.2.0",
"marked-emoji": "^1.4.1",
"marked-emoji": "^1.4.2",
"marked-extended-tables": "^1.0.8",
"marked-gfm-heading-id": "^3.2.0",
"marked-smartypants-lite": "^1.0.2",
"markedLegacy": "npm:marked@^0.3.19",
"moment": "^2.30.1",
"mongoose": "^8.4.5",
"mongoose": "^8.5.2",
"nanoid": "3.3.4",
"nconf": "^0.12.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-frame-component": "^4.1.3",
"react-router-dom": "6.24.1",
"react-router-dom": "6.26.0",
"sanitize-filename": "1.6.3",
"superagent": "^9.0.2",
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
},
"devDependencies": {
"@stylistic/stylelint-plugin": "^3.0.0",
"eslint": "^8.57.0",
"eslint-plugin-jest": "^28.6.0",
"eslint-plugin-react": "^7.34.3",
"eslint-plugin-jest": "^28.8.0",
"eslint-plugin-react": "^7.35.0",
"jest": "^29.7.0",
"jest-expect-message": "^1.1.3",
"postcss-less": "^6.0.0",
"stylelint": "^15.11.0",
"stylelint-config-recess-order": "^4.6.0",
"stylelint-config-recommended": "^13.0.0",
"stylelint-stylistic": "^0.4.3",
"stylelint": "^16.8.0",
"stylelint-config-recess-order": "^5.0.1",
"stylelint-config-recommended": "^14.0.1",
"supertest": "^7.0.0"
}
}

View File

@@ -115,7 +115,8 @@ app.get('/legacy', (req, res, next)=>{
app.get('/migrate', (req, res, next)=>{
req.brew = {
text : migrateText,
renderer : 'V3'
renderer : 'V3',
theme : '5ePHB'
},
req.ogMeta = { ...defaultMetaTags,
@@ -132,7 +133,8 @@ app.get('/changelog', async (req, res, next)=>{
req.brew = {
title : 'Changelog',
text : changelogText,
renderer : 'V3'
renderer : 'V3',
theme : '5ePHB'
},
req.ogMeta = { ...defaultMetaTags,
@@ -149,7 +151,8 @@ app.get('/faq', async (req, res, next)=>{
req.brew = {
title : 'FAQ',
text : faqText,
renderer : 'V3'
renderer : 'V3',
theme : '5ePHB'
},
req.ogMeta = { ...defaultMetaTags,

View File

@@ -46,6 +46,9 @@ const api = {
},
//Get array of any of this user's brews tagged with `meta:theme`
getUsersBrewThemes : async (username)=>{
if(!username)
return {};
const fields = [
'title',
'tags',
@@ -183,7 +186,7 @@ const api = {
return modified;
},
excludeStubProps : (brew)=>{
const propsToExclude = ['text', 'textBin', 'renderer', 'pageCount'];
const propsToExclude = ['text', 'textBin'];
for (const prop of propsToExclude) {
brew[prop] = undefined;
}
@@ -251,16 +254,12 @@ const api = {
res.status(200).send(saved);
},
getThemeBundle : async(req, res)=>{
/*
getThemeBundle: Collects the theme and all parent themes
returns an object containing an array of css, in render order, and an array
of snippets ( currently empty )
Important parameter members:
req.params.id: This is the shareId ( User theme ) or name ( static theme )
loaded first.
req.params.renderer: This is the Markdown+ version for the static theme. If a
User theme the value will come from the User Theme metadata.
*/
/* getThemeBundle: Collects the theme and all parent themes
returns an object containing an array of css, and an array of snippets, in render order
req.params.id : The shareId ( User theme ) or name ( static theme )
req.params.renderer : The Markdown renderer used for this theme */
req.params.renderer = _.upperFirst(req.params.renderer);
let currentTheme;
const completeStyles = [];

View File

@@ -408,8 +408,8 @@ brew`);
expect(sent).not.toEqual(googleBrew);
expect(result.text).toBeUndefined();
expect(result.textBin).toBeUndefined();
expect(result.renderer).toBeUndefined();
expect(result.pageCount).toBeUndefined();
expect(result.renderer).toBe('v3');
expect(result.pageCount).toBe(1);
});
});
@@ -540,9 +540,9 @@ brew`);
description : '',
editId : expect.any(String),
gDrive : false,
pageCount : undefined,
pageCount : 1,
published : false,
renderer : undefined,
renderer : 'V3',
lang : 'en',
shareId : expect.any(String),
googleId : expect.any(String),

View File

@@ -39,8 +39,10 @@ if(typeof window !== 'undefined'){
//Autocompletion
require('codemirror/addon/hint/show-hint.js');
const foldCode = require('./fold-code');
foldCode.registerHomebreweryHelper(CodeMirror);
const foldPagesCode = require('./fold-pages');
foldPagesCode.registerHomebreweryHelper(CodeMirror);
const foldCSSCode = require('./fold-css');
foldCSSCode.registerHomebreweryHelper(CodeMirror);
}
const CodeEditor = createClass({
@@ -411,11 +413,11 @@ const CodeEditor = createClass({
foldOptions : function(cm){
return {
scanUp : true,
rangeFinder : CodeMirror.fold.homebrewery,
rangeFinder : this.props.language === 'css' ? CodeMirror.fold.homebrewerycss : CodeMirror.fold.homebrewery,
widget : (from, to)=>{
let text = '';
let currentLine = from.line;
const maxLength = 50;
let maxLength = 50;
let foldPreviewText = '';
while (currentLine <= to.line && text.length <= maxLength) {
@@ -430,10 +432,15 @@ const CodeEditor = createClass({
}
}
text = foldPreviewText || `Lines ${from.line+1}-${to.line+1}`;
text = text.replace('{', '').trim();
// Truncate data URLs at `data:`
const startOfData = text.indexOf('data:');
if(startOfData > 0)
maxLength = Math.min(startOfData + 5, maxLength);
text = text.trim();
if(text.length > maxLength)
text = `${text.substr(0, maxLength)}...`;
text = `${text.slice(0, maxLength)}...`;
return `\u21A4 ${text} \u21A6`;
}
@@ -450,3 +457,4 @@ const CodeEditor = createClass({
});
module.exports = CodeEditor;

View File

@@ -0,0 +1,44 @@
module.exports = {
registerHomebreweryHelper : function(CodeMirror) {
CodeMirror.registerHelper('fold', 'homebrewerycss', function(cm, start) {
// BRACE FOLDING
const startMatcher = /\{[ \t]*$/;
const endMatcher = /\}[ \t]*$/;
const activeLine = cm.getLine(start.line);
if(activeLine.match(startMatcher)) {
const lastLineNo = cm.lastLine();
let end = start.line + 1;
let braceCount = 1;
while (end < lastLineNo) {
const curLine = cm.getLine(end);
if(curLine.match(startMatcher)) braceCount++;
if(curLine.match(endMatcher)) braceCount--;
if(braceCount == 0) break;
++end;
}
return {
from : CodeMirror.Pos(start.line, 0),
to : CodeMirror.Pos(end, cm.getLine(end).length)
};
}
// @import and data-url folding
const importMatcher = /^@import.*?;/;
const dataURLMatcher = /url\(.*?data\:.*\)/;
if(activeLine.match(importMatcher) || activeLine.match(dataURLMatcher)) {
return {
from : CodeMirror.Pos(start.line, 0),
to : CodeMirror.Pos(start.line, activeLine.length)
};
}
return null;
});
}
};

View File

@@ -28,17 +28,18 @@ const mathParser = new MathParser({
round : true,
floor : true,
ceil : true,
abs : true,
sin : false, cos : false, tan : false, asin : false, acos : false,
atan : false, sinh : false, cosh : false, tanh : false, asinh : false,
acosh : false, atanh : false, sqrt : false, cbrt : false, log : false,
log2 : false, ln : false, lg : false, log10 : false, expm1 : false,
log1p : false, abs : false, trunc : false, join : false, sum : false,
log1p : false, trunc : false, join : false, sum : false, indexOf : false,
'-' : false, '+' : false, exp : false, not : false, length : false,
'!' : false, sign : false, random : false, fac : false, min : false,
max : false, hypot : false, pyt : false, pow : false, atan2 : false,
'if' : false, gamma : false, roundTo : false, map : false, fold : false,
filter : false, indexOf : false,
filter : false,
remainder : false, factorial : false,
comparison : false, concatenate : false,
@@ -46,6 +47,16 @@ const mathParser = new MathParser({
array : false, fndef : false
}
});
// Add sign function
mathParser.functions.sign = function (a) {
if(a >= 0) return '+';
return '-';
};
// Add signed function
mathParser.functions.signed = function (a) {
if(a >= 0) return `+${a}`;
return `${a}`;
};
//Processes the markdown within an HTML block if it's just a class-wrapper
renderer.html = function (html) {
@@ -441,7 +452,7 @@ const replaceVar = function(input, hoist=false, allowUnresolved=false) {
const label = match[2];
//v=====--------------------< HANDLE MATH >-------------------=====v//
const mathRegex = /[a-z]+\(|[+\-*/^()]/g;
const mathRegex = /[a-z]+\(|[+\-*/^(),]/g;
const matches = label.split(mathRegex);
const mathVars = matches.filter((match)=>isNaN(match))?.map((s)=>s.trim()); // Capture any variable names
@@ -451,7 +462,7 @@ const replaceVar = function(input, hoist=false, allowUnresolved=false) {
mathVars?.forEach((variable)=>{
const foundVar = lookupVar(variable, globalPageNumber, hoist);
if(foundVar && foundVar.resolved && foundVar.content && !isNaN(foundVar.content)) // Only subsitute math values if fully resolved, not empty strings, and numbers
replacedLabel = replacedLabel.replaceAll(variable, foundVar.content);
replacedLabel = replacedLabel.replaceAll(new RegExp(`(?<!\\w)(${variable})(?!\\w)`, 'g'), foundVar.content);
});
try {

View File

@@ -1,5 +1,5 @@
const stylelint = require('stylelint');
const { isNumber } = require('stylelint/lib/utils/validateTypes');
const { isNumber } = require('stylelint/lib/utils/validateTypes.cjs');
const { report, ruleMessages, validateOptions } = stylelint.utils;
const ruleName = 'naturalcrit/declaration-block-multi-line-min-declarations';

View File

@@ -1,5 +1,5 @@
const stylelint = require('stylelint');
const { isNumber } = require('stylelint/lib/utils/validateTypes');
const { isNumber } = require('stylelint/lib/utils/validateTypes.cjs');
const { report, ruleMessages, validateOptions } = stylelint.utils;
const ruleName = 'naturalcrit/declaration-colon-min-space-before';

View File

@@ -370,4 +370,36 @@ describe('Cross-page variables', ()=>{
const rendered = renderAllPages([source0, source1]).join('\n\\page\n').trimReturns();
expect(rendered, `Input:\n${[source0, source1].join('\n\\page\n')}`, { showPrefix: false }).toBe('<p>two</p><p>one</p>\\page<p>two</p>');
});
});
describe('Math function parameter handling', ()=>{
it('allows variables in single-parameter functions', function() {
const source = '[var]:4.1\n\n$[floor(var)]';
const rendered = Markdown.render(source).trimReturns();
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<p>4</p>`);
});
it('allows one variable and a number in two-parameter functions', function() {
const source = '[var]:4\n\n$[min(1,var)]';
const rendered = Markdown.render(source).trimReturns();
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<p>1</p>`);
});
it('allows two variables in two-parameter functions', function() {
const source = '[var1]:4\n\n[var2]:8\n\n$[min(var1,var2)]';
const rendered = Markdown.render(source).trimReturns();
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<p>4</p>`);
});
});
describe('Variable names that are subsets of other names', ()=>{
it('do not conflict with function names', function() {
const source = `[a]: -1\n\n$[abs(a)]`;
const rendered = Markdown.render(source).trimReturns();
expect(rendered).toBe('<p>1</p>');
});
it('do not conflict with other variable names', function() {
const source = `[ab]: 2\n\n[aba]: 8\n\n[ba]: 4\n\n$[ab + aba + ba]`;
const rendered = Markdown.render(source).trimReturns();
expect(rendered).toBe('<p>14</p>');
});
});

View File

@@ -349,7 +349,7 @@ module.exports = [
/* Ink Friendly */
*:is(.page,.monster,.note,.descriptive) {
background : white !important;
filter : drop-shadow(0px 0px 3px #888) !important;
box-shadow : 1px 4px 14px #888 !important;
}
.page img {

View File

@@ -35,7 +35,7 @@ const getTOC = (pages)=>{
const ToCExclude = getComputedStyle(heading).getPropertyValue('--TOC');
if(ToCExclude != 'exclude') {
recursiveAdd(heading.innerText.trim(), onPage, headerDepth.indexOf(heading.tagName), res);
recursiveAdd(heading.textContent.trim(), onPage, headerDepth.indexOf(heading.tagName), res);
}
});
return res;

View File

@@ -382,6 +382,14 @@
.useColumns(0.96, @fillMode: balance);
}
//only for IOS devices
@supports (-webkit-touch-callout: none) {
.page .monster.frame {
background-repeat : no-repeat;
background-size : cover;
}
}
// *****************************
// * FOOTER
// *****************************/
@@ -459,6 +467,7 @@
margin-left : 1.5em;
}
}
// *****************************
// * SPELL LIST
// *****************************/
@@ -883,6 +892,9 @@ h6,
.useColumns(0.96, @fillMode: balance);
}
}
.toc.wide li {
break-inside: auto;
}
}
// *****************************
@@ -907,6 +919,10 @@ h6,
.page h1 + * { margin-top : 0; }
.page .descriptive.wide + * {
margin-top: 0;
}
//*****************************
// * RUNE TABLE
// *****************************/

View File

@@ -7,6 +7,7 @@
@noteBorderImage : url('/assets/noteBorder.png');
@descriptiveBoxImage : url('/assets/descriptiveBorder.png');
@monsterBlockBackground : url('/assets/parchmentBackgroundGrayscale.jpg');
@monsterBlockOverlay : url('/assets/parchmentBackgroundOverlayed.jpg');
@monsterBorderImage : url('/assets/monsterBorderFancy.png');
@codeBorderImage : url('/assets/codeBorder.png');
@classTableDecoration : url('/assets/classTableDecoration.png');