mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-06 14:22:52 +00:00
Merge branch 'master' into Fold-Buttons-in-Editor
This commit is contained in:
@@ -5,12 +5,12 @@
|
|||||||
version: 2.1
|
version: 2.1
|
||||||
|
|
||||||
orbs:
|
orbs:
|
||||||
node: circleci/node@3.0.0
|
node: circleci/node@5.1.0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/node:16.11.0
|
- image: cimg/node:20.8.0
|
||||||
- image: mongo:4.4
|
- image: mongo:4.4
|
||||||
|
|
||||||
working_directory: ~/homebrewery
|
working_directory: ~/homebrewery
|
||||||
@@ -27,7 +27,7 @@ jobs:
|
|||||||
# fallback to using the latest cache if no exact match is found
|
# fallback to using the latest cache if no exact match is found
|
||||||
- v1-dependencies-
|
- v1-dependencies-
|
||||||
|
|
||||||
- run: sudo npm install -g npm@8.10.0
|
- run: sudo npm install -g npm@10.2.0
|
||||||
- node/install-packages:
|
- node/install-packages:
|
||||||
app-dir: ~/homebrewery
|
app-dir: ~/homebrewery
|
||||||
cache-path: node_modules
|
cache-path: node_modules
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/node:16.11.0
|
- image: cimg/node:20.8.0
|
||||||
|
|
||||||
working_directory: ~/homebrewery
|
working_directory: ~/homebrewery
|
||||||
parallelism: 1
|
parallelism: 1
|
||||||
|
|||||||
66
changelog.md
66
changelog.md
@@ -80,6 +80,56 @@ pre {
|
|||||||
## changelog
|
## changelog
|
||||||
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
|
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
|
||||||
|
|
||||||
|
### Friday 13/10/2023 - v3.10.0
|
||||||
|
{{taskList
|
||||||
|
|
||||||
|
##### G-Ambatte
|
||||||
|
|
||||||
|
* [x] Fix user preferred save location being ignored
|
||||||
|
|
||||||
|
Fixes issue [#2993](https://github.com/naturalcrit/homebrewery/issues/2993)
|
||||||
|
|
||||||
|
* [x] Fix crash to white screen when starting new brews while not signed in
|
||||||
|
|
||||||
|
Fixes issue [#2999](https://github.com/naturalcrit/homebrewery/issues/2999)
|
||||||
|
|
||||||
|
* [x] Fix FreeBSD install script
|
||||||
|
|
||||||
|
Fixes issue [#3005](https://github.com/naturalcrit/homebrewery/issues/3005)
|
||||||
|
|
||||||
|
* [x] Fix *"This brew has been changed on another device"* triggering when manually saving during auto-save
|
||||||
|
|
||||||
|
Fixes issue [#2641](https://github.com/naturalcrit/homebrewery/issues/2641)
|
||||||
|
|
||||||
|
* [x] Fix Firefox different column-flow behavior
|
||||||
|
|
||||||
|
Fixes issue [#2982](https://github.com/naturalcrit/homebrewery/issues/2982)
|
||||||
|
|
||||||
|
* [x] Fix brew titles being mis-sorted on user page
|
||||||
|
|
||||||
|
Fixes issue [#2775](https://github.com/naturalcrit/homebrewery/issues/2775)
|
||||||
|
|
||||||
|
* [x] Text Editor themes now available via new drop-down
|
||||||
|
|
||||||
|
Fixes issue [#362](https://github.com/naturalcrit/homebrewery/issues/362)
|
||||||
|
|
||||||
|
##### 5e-Cleric
|
||||||
|
|
||||||
|
* [x] New {{openSans **PHB → {{fas,fa-quote-right}} QUOTE** }} snippet for V3!
|
||||||
|
|
||||||
|
Fixes issue [#2920](https://github.com/naturalcrit/homebrewery/issues/2920)
|
||||||
|
|
||||||
|
* [x] Several updates and fixes to FAQ and Welcome page
|
||||||
|
|
||||||
|
Fixes issue [#2729](https://github.com/naturalcrit/homebrewery/issues/2729),
|
||||||
|
[#2787](https://github.com/naturalcrit/homebrewery/issues/2787)
|
||||||
|
|
||||||
|
##### Gazook89
|
||||||
|
|
||||||
|
* [x] Add syntax highlighting for Definition Lists <code>:\:</code>
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
### Thursday 17/08/2023 - v3.9.2
|
### Thursday 17/08/2023 - v3.9.2
|
||||||
{{taskList
|
{{taskList
|
||||||
|
|
||||||
@@ -119,14 +169,15 @@ Fixes issue [#2943](https://github.com/naturalcrit/homebrewery/issues/2943)
|
|||||||
|
|
||||||
* [x] Exclude cover pages from Table of Content generation (editing on mobile is still not recommended)
|
* [x] Exclude cover pages from Table of Content generation (editing on mobile is still not recommended)
|
||||||
|
|
||||||
Fixes issue [#2920](https://github.com/naturalcrit/homebrewery/issues/2920)
|
Fixes issue [#2920](https://github.com/naturalcrit/homebrewery/issues/2920)
|
||||||
|
|
||||||
##### Gazook89
|
##### Gazook89
|
||||||
|
|
||||||
* [x] Adjustments to improve mobile viewing
|
* [x] Adjustments to improve mobile viewing
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Wednesday 28/06/2023 - v3.9.1
|
### Wednesday 28/06/2023 - v3.9.1
|
||||||
{{taskList
|
{{taskList
|
||||||
|
|
||||||
@@ -171,6 +222,8 @@ Fixes issue [#2790](https://github.com/naturalcrit/homebrewery/issues/2790)
|
|||||||
Fixes issue [#2784](https://github.com/naturalcrit/homebrewery/issues/2784)
|
Fixes issue [#2784](https://github.com/naturalcrit/homebrewery/issues/2784)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
\page
|
||||||
|
|
||||||
### Wednesday 12/04/2023 - v3.8.0
|
### Wednesday 12/04/2023 - v3.8.0
|
||||||
{{taskList
|
{{taskList
|
||||||
|
|
||||||
@@ -232,8 +285,6 @@ Fixes issues [#2731](https://github.com/naturalcrit/homebrewery/issues/2731)
|
|||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
\page
|
|
||||||
|
|
||||||
### Monday 13/03/2023 - v3.7.2
|
### Monday 13/03/2023 - v3.7.2
|
||||||
{{taskList
|
{{taskList
|
||||||
|
|
||||||
@@ -314,7 +365,11 @@ Fixes issues [#2603](https://github.com/naturalcrit/homebrewery/issues/2603)
|
|||||||
* [x] Add message to refresh the browser if the user is missing an update to the Homebrewery
|
* [x] Add message to refresh the browser if the user is missing an update to the Homebrewery
|
||||||
|
|
||||||
Fixes issues [#2583](https://github.com/naturalcrit/homebrewery/issues/2583)
|
Fixes issues [#2583](https://github.com/naturalcrit/homebrewery/issues/2583)
|
||||||
|
}}
|
||||||
|
|
||||||
|
\page
|
||||||
|
|
||||||
|
{{taskList
|
||||||
##### G-Ambatte
|
##### G-Ambatte
|
||||||
|
|
||||||
* [x] Auto-compile Themes CSS on development server
|
* [x] Auto-compile Themes CSS on development server
|
||||||
@@ -324,7 +379,6 @@ Fixes issues [#2583](https://github.com/naturalcrit/homebrewery/issues/2583)
|
|||||||
* [x] Fix cloned brews inheriting the parent view count
|
* [x] Fix cloned brews inheriting the parent view count
|
||||||
}}
|
}}
|
||||||
|
|
||||||
\page
|
|
||||||
|
|
||||||
### Friday 23/12/2022 - v3.5.0
|
### Friday 23/12/2022 - v3.5.0
|
||||||
{{taskList
|
{{taskList
|
||||||
@@ -1408,4 +1462,4 @@ Massive changelog incoming:
|
|||||||
|
|
||||||
* Added `phb.standalone.css` plus a build system for creating it
|
* Added `phb.standalone.css` plus a build system for creating it
|
||||||
* Added page numbers and footer text
|
* Added page numbers and footer text
|
||||||
* Page accent now flips each page
|
* Page accent now flips each page
|
||||||
@@ -149,6 +149,17 @@ const Editor = createClass({
|
|||||||
codeMirror.addLineClass(lineNumber, 'text', 'columnSplit');
|
codeMirror.addLineClass(lineNumber, 'text', 'columnSplit');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// definition lists
|
||||||
|
if(line.includes('::')){
|
||||||
|
const regex = /^([^\n]*?)::([^\n]*)(?:\n|$)/ym;
|
||||||
|
let match;
|
||||||
|
while ((match = regex.exec(line)) != null){
|
||||||
|
codeMirror.markText({ line: lineNumber, ch: line.indexOf(match[0]) }, { line: lineNumber, ch: line.indexOf(match[0]) + match[0].length }, { className: 'define' });
|
||||||
|
codeMirror.markText({ line: lineNumber, ch: line.indexOf(match[1]) }, { line: lineNumber, ch: line.indexOf(match[1]) + match[1].length }, { className: 'term' });
|
||||||
|
codeMirror.markText({ line: lineNumber, ch: line.indexOf(match[2]) }, { line: lineNumber, ch: line.indexOf(match[2]) + match[2].length }, { className: 'definition' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Highlight injectors {style}
|
// Highlight injectors {style}
|
||||||
if(line.includes('{') && line.includes('}')){
|
if(line.includes('{') && line.includes('}')){
|
||||||
const regex = /(?:^|[^{\n])({(?=((?::(?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':{}\s]*)*))\2})/gm;
|
const regex = /(?:^|[^{\n])({(?=((?::(?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':{}\s]*)*))\2})/gm;
|
||||||
|
|||||||
@@ -1,65 +1,73 @@
|
|||||||
@import 'themes/codeMirror/customEditorStyles.less';
|
@import 'themes/codeMirror/customEditorStyles.less';
|
||||||
.editor{
|
.editor {
|
||||||
position : relative;
|
position : relative;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
|
|
||||||
.codeEditor{
|
.codeEditor {
|
||||||
height : 100%;
|
height : 100%;
|
||||||
.pageLine{
|
.pageLine {
|
||||||
background : #33333328;
|
background : #33333328;
|
||||||
border-top : #339 solid 1px;
|
border-top : #333399 solid 1px;
|
||||||
}
|
}
|
||||||
.editor-page-count{
|
.editor-page-count {
|
||||||
color : grey;
|
|
||||||
float : right;
|
float : right;
|
||||||
|
color : grey;
|
||||||
}
|
}
|
||||||
.columnSplit{
|
.columnSplit {
|
||||||
font-style : italic;
|
font-style : italic;
|
||||||
color : grey;
|
color : grey;
|
||||||
background-color : fade(#299, 15%);
|
background-color : fade(#229999, 15%);
|
||||||
border-bottom : #299 solid 1px;
|
border-bottom : #229999 solid 1px;
|
||||||
}
|
}
|
||||||
.block:not(.cm-comment){
|
.define {
|
||||||
color : purple;
|
&:not(.term):not(.definition) {
|
||||||
|
font-weight : bold;
|
||||||
|
color : #949494;
|
||||||
|
background : #E5E5E5;
|
||||||
|
border-radius : 3px;
|
||||||
|
}
|
||||||
|
&.term { color : rgb(96, 117, 143); }
|
||||||
|
&.definition { color : rgb(97, 57, 178); }
|
||||||
|
}
|
||||||
|
.block:not(.cm-comment) {
|
||||||
font-weight : bold;
|
font-weight : bold;
|
||||||
|
color : purple;
|
||||||
//font-style: italic;
|
//font-style: italic;
|
||||||
}
|
}
|
||||||
.inline-block:not(.cm-comment){
|
.inline-block:not(.cm-comment) {
|
||||||
color : red;
|
|
||||||
font-weight : bold;
|
font-weight : bold;
|
||||||
|
color : red;
|
||||||
//font-style: italic;
|
//font-style: italic;
|
||||||
}
|
}
|
||||||
.injection:not(.cm-comment){
|
.injection:not(.cm-comment) {
|
||||||
|
font-weight : bold;
|
||||||
color : green;
|
color : green;
|
||||||
font-weight : bold;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.brewJump{
|
.brewJump {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
background-color : @teal;
|
right : 20px;
|
||||||
cursor : pointer;
|
bottom : 20px;
|
||||||
width : 30px;
|
z-index : 1000000;
|
||||||
height : 30px;
|
display : flex;
|
||||||
display : flex;
|
align-items : center;
|
||||||
align-items : center;
|
justify-content : center;
|
||||||
bottom : 20px;
|
width : 30px;
|
||||||
right : 20px;
|
height : 30px;
|
||||||
z-index : 1000000;
|
cursor : pointer;
|
||||||
justify-content : center;
|
background-color : @teal;
|
||||||
.tooltipLeft("Jump to brew page");
|
.tooltipLeft('Jump to brew page');
|
||||||
}
|
}
|
||||||
|
|
||||||
.editorToolbar{
|
.editorToolbar {
|
||||||
position: absolute;
|
position : absolute;
|
||||||
top: 5px;
|
top : 5px;
|
||||||
left: 50%;
|
left : 50%;
|
||||||
color: black;
|
z-index : 9;
|
||||||
font-size: 13px;
|
font-size : 13px;
|
||||||
z-index: 9;
|
color : black;
|
||||||
span {
|
span { padding : 2px 5px; }
|
||||||
padding: 2px 5px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ const errorIndex = (props)=>{
|
|||||||
## We can't find this brew in Google Drive!
|
## We can't find this brew in Google Drive!
|
||||||
|
|
||||||
This file was saved on Google Drive, but this link doesn't work anymore.
|
This file was saved on Google Drive, but this link doesn't work anymore.
|
||||||
${ props.brew.authors?.length > 0
|
${props.brew.authors?.length > 0
|
||||||
? `Note that this brew belongs to the Homebrewery account **${ props.brew.authors[0] }**,
|
? `Note that this brew belongs to the Homebrewery account **${props.brew.authors[0]}**,
|
||||||
${ props.brew.account
|
${props.brew.account
|
||||||
? `which is
|
? `which is
|
||||||
${props.brew.authors[0] == props.brew.account
|
${props.brew.authors[0] == props.brew.account
|
||||||
? `your account.`
|
? `your account.`
|
||||||
: `not your account (you are currently signed in as **${props.brew.account}**).`
|
: `not your account (you are currently signed in as **${props.brew.account}**).`
|
||||||
}`
|
}`
|
||||||
: 'and you are not currently signed in to any account.'
|
: 'and you are not currently signed in to any account.'
|
||||||
}`
|
}`
|
||||||
: ''
|
: ''
|
||||||
}
|
}
|
||||||
The Homebrewery cannot delete files from Google Drive on its own, so there
|
The Homebrewery cannot delete files from Google Drive on its own, so there
|
||||||
are three most likely possibilities:
|
are three most likely possibilities:
|
||||||
:
|
:
|
||||||
@@ -75,7 +75,9 @@ const errorIndex = (props)=>{
|
|||||||
|
|
||||||
**Brew Title:** ${props.brew.brewTitle || 'Unable to show title'}
|
**Brew Title:** ${props.brew.brewTitle || 'Unable to show title'}
|
||||||
|
|
||||||
**Current Authors:** ${props.brew.authors?.map((author)=>{return `${author}`;}).join(', ') || 'Unable to list authors'}`,
|
**Current Authors:** ${props.brew.authors?.map((author)=>{return `${author}`;}).join(', ') || 'Unable to list authors'}
|
||||||
|
|
||||||
|
[Click here to be redirected to the brew's share page.](/share/${props.brew.shareId})`,
|
||||||
|
|
||||||
// User is not signed in; must be a user on the Authors List
|
// User is not signed in; must be a user on the Authors List
|
||||||
'04' : dedent`
|
'04' : dedent`
|
||||||
|
|||||||
29894
package-lock.json
generated
29894
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
30
package.json
30
package.json
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "homebrewery",
|
"name": "homebrewery",
|
||||||
"description": "Create authentic looking D&D homebrews using only markdown",
|
"description": "Create authentic looking D&D homebrews using only markdown",
|
||||||
"version": "3.9.2",
|
"version": "3.10.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"npm": "^10.1.x",
|
"npm": "^10.2.x",
|
||||||
"node": ">=20.7.x"
|
"node": "^20.8.x"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -79,11 +79,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.22.20",
|
"@babel/core": "^7.23.2",
|
||||||
"@babel/plugin-transform-runtime": "^7.22.15",
|
"@babel/plugin-transform-runtime": "^7.23.2",
|
||||||
"@babel/preset-env": "^7.22.20",
|
"@babel/preset-env": "^7.23.2",
|
||||||
"@babel/preset-react": "^7.22.15",
|
"@babel/preset-react": "^7.22.15",
|
||||||
"@googleapis/drive": "^8.3.1",
|
"@googleapis/drive": "^8.4.0",
|
||||||
"body-parser": "^1.20.2",
|
"body-parser": "^1.20.2",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"codemirror": "^5.65.6",
|
"codemirror": "^5.65.6",
|
||||||
@@ -99,30 +99,30 @@
|
|||||||
"less": "^3.13.1",
|
"less": "^3.13.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"marked": "5.1.1",
|
"marked": "5.1.1",
|
||||||
"marked-extended-tables": "^1.0.6",
|
"marked-extended-tables": "^1.0.7",
|
||||||
"marked-gfm-heading-id": "^3.1.0",
|
"marked-gfm-heading-id": "^3.1.0",
|
||||||
"marked-smartypants-lite": "^1.0.0",
|
"marked-smartypants-lite": "^1.0.1",
|
||||||
"markedLegacy": "npm:marked@^0.3.19",
|
"markedLegacy": "npm:marked@^0.3.19",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"mongoose": "^7.5.2",
|
"mongoose": "^7.6.4",
|
||||||
"nanoid": "3.3.4",
|
"nanoid": "3.3.4",
|
||||||
"nconf": "^0.12.0",
|
"nconf": "^0.12.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-frame-component": "^4.1.3",
|
"react-frame-component": "^4.1.3",
|
||||||
"react-router-dom": "6.16.0",
|
"react-router-dom": "6.17.0",
|
||||||
"sanitize-filename": "1.6.3",
|
"sanitize-filename": "1.6.3",
|
||||||
"superagent": "^8.1.2",
|
"superagent": "^8.1.2",
|
||||||
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
|
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.50.0",
|
"eslint": "^8.53.0",
|
||||||
"eslint-plugin-jest": "^27.4.0",
|
"eslint-plugin-jest": "^27.6.0",
|
||||||
"eslint-plugin-react": "^7.33.2",
|
"eslint-plugin-react": "^7.33.2",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-expect-message": "^1.1.3",
|
"jest-expect-message": "^1.1.3",
|
||||||
"postcss-less": "^6.0.0",
|
"postcss-less": "^6.0.0",
|
||||||
"stylelint": "^15.10.3",
|
"stylelint": "^15.11.0",
|
||||||
"stylelint-config-recess-order": "^4.3.0",
|
"stylelint-config-recess-order": "^4.3.0",
|
||||||
"stylelint-config-recommended": "^13.0.0",
|
"stylelint-config-recommended": "^13.0.0",
|
||||||
"stylelint-stylistic": "^0.4.3",
|
"stylelint-stylistic": "^0.4.3",
|
||||||
|
|||||||
@@ -101,7 +101,10 @@ fs.emptyDirSync('./build');
|
|||||||
|
|
||||||
//v==---------------------------MOVE CM EDITOR THEMES -----------------------------==v//
|
//v==---------------------------MOVE CM EDITOR THEMES -----------------------------==v//
|
||||||
|
|
||||||
editorThemeFiles = fs.readdirSync('./node_modules/codemirror/theme');
|
const editorThemesBuildDir = './build/homebrew/cm-themes';
|
||||||
|
await fs.copy('./node_modules/codemirror/theme', editorThemesBuildDir);
|
||||||
|
await fs.copy('./themes/codeMirror/customThemes', editorThemesBuildDir);
|
||||||
|
editorThemeFiles = fs.readdirSync(editorThemesBuildDir);
|
||||||
|
|
||||||
const editorThemeFile = './themes/codeMirror/editorThemes.json';
|
const editorThemeFile = './themes/codeMirror/editorThemes.json';
|
||||||
if(fs.existsSync(editorThemeFile)) fs.rmSync(editorThemeFile);
|
if(fs.existsSync(editorThemeFile)) fs.rmSync(editorThemeFile);
|
||||||
@@ -114,7 +117,7 @@ fs.emptyDirSync('./build');
|
|||||||
stream.write('\n]\n');
|
stream.write('\n]\n');
|
||||||
stream.end();
|
stream.end();
|
||||||
|
|
||||||
await fs.copy('./node_modules/codemirror/theme', './build/homebrew/cm-themes');
|
|
||||||
await fs.copy('./themes/codeMirror', './build/homebrew/codeMirror');
|
await fs.copy('./themes/codeMirror', './build/homebrew/codeMirror');
|
||||||
|
|
||||||
//v==----------------------------- BUNDLE PACKAGES --------------------------------==v//
|
//v==----------------------------- BUNDLE PACKAGES --------------------------------==v//
|
||||||
@@ -151,14 +154,14 @@ fs.emptyDirSync('./build');
|
|||||||
// build(bundles);
|
// build(bundles);
|
||||||
//
|
//
|
||||||
|
|
||||||
})().catch(console.error);
|
//In development, set up LiveReload (refreshes browser), and Nodemon (restarts server)
|
||||||
|
if(isDev){
|
||||||
|
livereload('./build'); // Install the Chrome extension LiveReload to automatically refresh the browser
|
||||||
|
watchFile('./server.js', { // Restart server when change detected to this file or any nested directory from here
|
||||||
|
ignore : ['./build', './client', './themes'], // Ignore folders that are not running server code / avoids unneeded restarts
|
||||||
|
ext : 'js json' // Extensions to watch (only .js/.json by default)
|
||||||
|
//watch : ['./server', './themes'], // Watch additional folders if needed
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//In development, set up LiveReload (refreshes browser), and Nodemon (restarts server)
|
})().catch(console.error);
|
||||||
if(isDev){
|
|
||||||
livereload('./build'); // Install the Chrome extension LiveReload to automatically refresh the browser
|
|
||||||
watchFile('./server.js', { // Restart server when change detected to this file or any nested directory from here
|
|
||||||
ignore : ['./build', './client', './themes'], // Ignore folders that are not running server code / avoids unneeded restarts
|
|
||||||
ext : 'js json' // Extensions to watch (only .js/.json by default)
|
|
||||||
//watch : ['./server', './themes'], // Watch additional folders if needed
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -327,14 +327,17 @@ app.get('/share/:id', asyncHandler(getBrew('share')), asyncHandler(async (req, r
|
|||||||
type : 'article'
|
type : 'article'
|
||||||
};
|
};
|
||||||
|
|
||||||
if(req.params.id.length > 12 && !brew._id) {
|
// increase visitor view count, do not include visits by author(s)
|
||||||
const googleId = brew.googleId;
|
if(!brew.authors.includes(req.account?.username)){
|
||||||
const shareId = brew.shareId;
|
if(req.params.id.length > 12 && !brew._id) {
|
||||||
await GoogleActions.increaseView(googleId, shareId, 'share', brew)
|
const googleId = brew.googleId;
|
||||||
.catch((err)=>{next(err);});
|
const shareId = brew.shareId;
|
||||||
} else {
|
await GoogleActions.increaseView(googleId, shareId, 'share', brew)
|
||||||
await HomebrewModel.increaseView({ shareId: brew.shareId });
|
.catch((err)=>{next(err);});
|
||||||
}
|
} else {
|
||||||
|
await HomebrewModel.increaseView({ shareId: brew.shareId });
|
||||||
|
}
|
||||||
|
};
|
||||||
sanitizeBrew(req.brew, 'share');
|
sanitizeBrew(req.brew, 'share');
|
||||||
splitTextStyleAndMetadata(req.brew);
|
splitTextStyleAndMetadata(req.brew);
|
||||||
return next();
|
return next();
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ const api = {
|
|||||||
if(accessType === 'edit' && (authorsExist && !(isAuthor || isInvited))) {
|
if(accessType === 'edit' && (authorsExist && !(isAuthor || isInvited))) {
|
||||||
const accessError = { name: 'Access Error', status: 401 };
|
const accessError = { name: 'Access Error', status: 401 };
|
||||||
if(req.account){
|
if(req.account){
|
||||||
throw { ...accessError, message: 'User is not an Author', HBErrorCode: '03', authors: stub.authors, brewTitle: stub.title };
|
throw { ...accessError, message: 'User is not an Author', HBErrorCode: '03', authors: stub.authors, brewTitle: stub.title, shareId: stub.shareId };
|
||||||
}
|
}
|
||||||
throw { ...accessError, message: 'User is not logged in', HBErrorCode: '04', authors: stub.authors, brewTitle: stub.title };
|
throw { ...accessError, message: 'User is not logged in', HBErrorCode: '04', authors: stub.authors, brewTitle: stub.title };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
body { counter-reset : phb-page-numbers; }
|
body { counter-reset : phb-page-numbers; }
|
||||||
* { -webkit-print-color-adjust : exact; }
|
* { -webkit-print-color-adjust : exact; }
|
||||||
.useSansSerif() {
|
.useSansSerif() {
|
||||||
font-family : "ScalySansRemake";
|
font-family : 'ScalySansRemake';
|
||||||
font-size : 0.318cm;
|
font-size : 0.318cm;
|
||||||
line-height : 1.2em;
|
line-height : 1.2em;
|
||||||
p,dl,ul,ol { line-height : 1.2em; }
|
p,dl,ul,ol { line-height : 1.2em; }
|
||||||
@@ -57,7 +57,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
height : 279.4mm;
|
height : 279.4mm;
|
||||||
padding : 1.4cm 1.9cm 1.7cm;
|
padding : 1.4cm 1.9cm 1.7cm;
|
||||||
overflow : hidden;
|
overflow : hidden;
|
||||||
font-family : "BookInsanityRemake";
|
font-family : 'BookInsanityRemake';
|
||||||
font-size : 0.34cm;
|
font-size : 0.34cm;
|
||||||
counter-increment : phb-page-numbers;
|
counter-increment : phb-page-numbers;
|
||||||
background-color : var(--HB_Color_Background);
|
background-color : var(--HB_Color_Background);
|
||||||
@@ -114,7 +114,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
// * HEADERS
|
// * HEADERS
|
||||||
// *****************************/
|
// *****************************/
|
||||||
h1,h2,h3,h4 {
|
h1,h2,h3,h4 {
|
||||||
font-family : "MrEavesRemake";
|
font-family : 'MrEavesRemake';
|
||||||
font-weight : 800;
|
font-weight : 800;
|
||||||
color : var(--HB_Color_HeaderText);
|
color : var(--HB_Color_HeaderText);
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
margin-top : -0.3cm;
|
margin-top : -0.3cm;
|
||||||
margin-bottom : -20px;
|
margin-bottom : -20px;
|
||||||
margin-left : -40px;
|
margin-left : -40px;
|
||||||
font-family : "SolberaImitationRemake";
|
font-family : 'SolberaImitationRemake';
|
||||||
font-size : 3.5cm;
|
font-size : 3.5cm;
|
||||||
line-height : 1em;
|
line-height : 1em;
|
||||||
color : rgba(0, 0, 0, 0);
|
color : rgba(0, 0, 0, 0);
|
||||||
@@ -172,7 +172,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
h5 {
|
h5 {
|
||||||
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
||||||
//margin-bottom : 0.02cm;
|
//margin-bottom : 0.02cm;
|
||||||
font-family : "ScalySansSmallCapsRemake";
|
font-family : 'ScalySansSmallCapsRemake';
|
||||||
font-size : 0.423cm;
|
font-size : 0.423cm;
|
||||||
font-weight : 900;
|
font-weight : 900;
|
||||||
line-height : 0.951em; //Font is misaligned. Shift up slightly
|
line-height : 0.951em; //Font is misaligned. Shift up slightly
|
||||||
@@ -299,7 +299,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
.artist {
|
.artist {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
width : auto;
|
width : auto;
|
||||||
font-family : "WalterTurncoat";
|
font-family : 'WalterTurncoat';
|
||||||
font-size : 0.27cm;
|
font-size : 0.27cm;
|
||||||
color : var(--HB_Color_CaptionText);
|
color : var(--HB_Color_CaptionText);
|
||||||
text-align : center;
|
text-align : center;
|
||||||
@@ -309,7 +309,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
text-indent : unset;
|
text-indent : unset;
|
||||||
}
|
}
|
||||||
h5 {
|
h5 {
|
||||||
font-family : "WalterTurncoat";
|
font-family : 'WalterTurncoat';
|
||||||
font-size : 1.3em;
|
font-size : 1.3em;
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
@@ -405,12 +405,9 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
h3 {
|
h3 {
|
||||||
// margin-top : 0.05cm; //Font is misaligned. Shift up slightly
|
font-family : 'ScalySansSmallCapsRemake';
|
||||||
padding-bottom : 0.05cm;
|
font-size : 0.45cm;
|
||||||
font-family : "ScalySansRemake";
|
border-bottom : 1.5px solid var(--HB_Color_HeaderText);
|
||||||
font-weight : 800;
|
|
||||||
font-variant : small-caps;
|
|
||||||
border-bottom : 2px solid var(--HB_Color_HeaderText);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Triangle dividers
|
//Triangle dividers
|
||||||
@@ -503,7 +500,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
// ************************************/
|
// ************************************/
|
||||||
code {
|
code {
|
||||||
padding : 0px 4px;
|
padding : 0px 4px;
|
||||||
font-family : 'Courier New', "Courier", monospace;
|
font-family : 'Courier New', 'Courier', monospace;
|
||||||
font-size : 0.325;
|
font-size : 0.325;
|
||||||
color : #58180D;
|
color : #58180D;
|
||||||
overflow-wrap : break-word;
|
overflow-wrap : break-word;
|
||||||
@@ -641,7 +638,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
h1 {
|
h1 {
|
||||||
margin-top : 1.2cm;
|
margin-top : 1.2cm;
|
||||||
margin-bottom : 0;
|
margin-bottom : 0;
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 2.245cm;
|
font-size : 2.245cm;
|
||||||
font-weight : normal;
|
font-weight : normal;
|
||||||
line-height : 0.85em;
|
line-height : 0.85em;
|
||||||
@@ -654,7 +651,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black);
|
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black);
|
||||||
}
|
}
|
||||||
h2 {
|
h2 {
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 0.85cm;
|
font-size : 0.85cm;
|
||||||
font-weight : normal;
|
font-weight : normal;
|
||||||
color : white;
|
color : white;
|
||||||
@@ -687,7 +684,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
height : 1.7cm;
|
height : 1.7cm;
|
||||||
padding-top : 0.1cm;
|
padding-top : 0.1cm;
|
||||||
padding-left : 1cm;
|
padding-left : 1cm;
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 1cm;
|
font-size : 1cm;
|
||||||
font-weight : normal;
|
font-weight : normal;
|
||||||
color : white;
|
color : white;
|
||||||
@@ -704,7 +701,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
width : 70%;
|
width : 70%;
|
||||||
margin-right : auto;
|
margin-right : auto;
|
||||||
margin-left : auto;
|
margin-left : auto;
|
||||||
font-family : "Overpass";
|
font-family : 'Overpass';
|
||||||
font-size : 0.496cm;
|
font-size : 0.496cm;
|
||||||
color : white;
|
color : white;
|
||||||
text-align : center;
|
text-align : center;
|
||||||
@@ -735,14 +732,14 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
h1 {
|
h1 {
|
||||||
margin-top : 1.2cm;
|
margin-top : 1.2cm;
|
||||||
margin-bottom : 0;
|
margin-bottom : 0;
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 2.1cm;
|
font-size : 2.1cm;
|
||||||
font-weight : normal;
|
font-weight : normal;
|
||||||
line-height : 0.85em;
|
line-height : 0.85em;
|
||||||
text-transform : uppercase;
|
text-transform : uppercase;
|
||||||
}
|
}
|
||||||
h2 {
|
h2 {
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 0.85cm;
|
font-size : 0.85cm;
|
||||||
font-weight : normal;
|
font-weight : normal;
|
||||||
letter-spacing : 0.5cm;
|
letter-spacing : 0.5cm;
|
||||||
@@ -791,7 +788,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
.blank { height : 1.4em; }
|
.blank { height : 1.4em; }
|
||||||
h1 {
|
h1 {
|
||||||
margin-bottom : 0.3cm;
|
margin-bottom : 0.3cm;
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 1.35cm;
|
font-size : 1.35cm;
|
||||||
line-height : 0.95em;
|
line-height : 0.95em;
|
||||||
color : #ED1C24;
|
color : #ED1C24;
|
||||||
@@ -817,7 +814,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
border : none;
|
border : none;
|
||||||
}
|
}
|
||||||
p {
|
p {
|
||||||
font-family : "Overpass";
|
font-family : 'Overpass';
|
||||||
font-size : 0.332cm;
|
font-size : 0.332cm;
|
||||||
line-height : 1.5em;
|
line-height : 1.5em;
|
||||||
}
|
}
|
||||||
@@ -841,7 +838,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
p {
|
p {
|
||||||
position : relative;
|
position : relative;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
font-family : "NodestoCapsWide";
|
font-family : 'NodestoCapsWide';
|
||||||
font-size : 0.4cm;
|
font-size : 0.4cm;
|
||||||
line-height : 1em;
|
line-height : 1em;
|
||||||
color : #FFFFFF;
|
color : #FFFFFF;
|
||||||
@@ -874,7 +871,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
h1 {
|
h1 {
|
||||||
position : relative;
|
position : relative;
|
||||||
margin-top : 0.4cm;
|
margin-top : 0.4cm;
|
||||||
font-family : "NodestoCapsCondensed";
|
font-family : 'NodestoCapsCondensed';
|
||||||
font-size : 2.3cm;
|
font-size : 2.3cm;
|
||||||
text-align : center;
|
text-align : center;
|
||||||
text-transform : uppercase;
|
text-transform : uppercase;
|
||||||
@@ -885,7 +882,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
margin-top : -0.7em;
|
margin-top : -0.7em;
|
||||||
margin-right : auto;
|
margin-right : auto;
|
||||||
margin-left : auto;
|
margin-left : auto;
|
||||||
font-family : "Overpass";
|
font-family : 'Overpass';
|
||||||
font-size : 0.45cm;
|
font-size : 0.45cm;
|
||||||
line-height : 1.1em;
|
line-height : 1.1em;
|
||||||
}
|
}
|
||||||
@@ -968,9 +965,8 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
padding-left : 1em;
|
padding-left : 1em;
|
||||||
line-height : 1.25em;
|
line-height : 1.25em;
|
||||||
white-space : pre-line;
|
white-space : pre-line;
|
||||||
& + * { margin-top : 0.28cm; }
|
& + * { margin-top : 0.17cm; }
|
||||||
}
|
}
|
||||||
dl + * { margin-top : 0.17cm; }
|
|
||||||
p + dl { margin-top : 0.17cm; }
|
p + dl { margin-top : 0.17cm; }
|
||||||
dt {
|
dt {
|
||||||
display : inline;
|
display : inline;
|
||||||
@@ -1009,7 +1005,7 @@ body { counter-reset : phb-page-numbers; }
|
|||||||
outline : 1px solid #000000;
|
outline : 1px solid #000000;
|
||||||
}
|
}
|
||||||
th {
|
th {
|
||||||
font-family : "BookInsanityRemake";
|
font-family : 'BookInsanityRemake';
|
||||||
font-size : 0.45cm;
|
font-size : 0.45cm;
|
||||||
}
|
}
|
||||||
td { font-size : 0.7cm; }
|
td { font-size : 0.7cm; }
|
||||||
|
|||||||
129
themes/codeMirror/customThemes/darkbrewery-v301.css
Normal file
129
themes/codeMirror/customThemes/darkbrewery-v301.css
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
/* Main BG color and normal text color */
|
||||||
|
.CodeMirror {
|
||||||
|
background: #293134;
|
||||||
|
color: #91A6AA;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Brew BG */
|
||||||
|
.brewRenderer {
|
||||||
|
background-color: #293134;
|
||||||
|
}
|
||||||
|
/* Blinking cursor */
|
||||||
|
.CodeMirror-cursor {
|
||||||
|
border-left: 1px solid #e0e2e4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HB DARK NAV START*/
|
||||||
|
|
||||||
|
/* Bars at the top */
|
||||||
|
.snippetBar {
|
||||||
|
background-color: #2F393C;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
nav {
|
||||||
|
background-color: #293134;
|
||||||
|
}
|
||||||
|
nav .navItem {
|
||||||
|
background-color: #293134;
|
||||||
|
}
|
||||||
|
/* Fix for Homebrewery custom Snippet icons */
|
||||||
|
.snippetBar .fac {
|
||||||
|
filter: invert(1);
|
||||||
|
}
|
||||||
|
.snippetBar .snippetGroup .dropdown {
|
||||||
|
background-color: #2F393C;
|
||||||
|
}
|
||||||
|
/* HB DARK NAV END */
|
||||||
|
|
||||||
|
/* Line number stuff */
|
||||||
|
.CodeMirror-gutter-elt {
|
||||||
|
color: #81969A;
|
||||||
|
}
|
||||||
|
.CodeMirror-linenumber {
|
||||||
|
background-color: #293134;
|
||||||
|
}
|
||||||
|
.CodeMirror-gutter {
|
||||||
|
background-color: #293134;
|
||||||
|
}
|
||||||
|
/* column splits */
|
||||||
|
.editor .codeEditor .columnSplit {
|
||||||
|
font-style: italic;
|
||||||
|
color: inherit;
|
||||||
|
background-color:#1f5763;
|
||||||
|
border-bottom: #299 solid 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Colors for headings and such */
|
||||||
|
/* ###Headings */
|
||||||
|
.cm-s-default .cm-header {
|
||||||
|
color: #c51b1b;
|
||||||
|
-webkit-text-stroke-width: 0.1px;
|
||||||
|
-webkit-text-stroke-color: #000;
|
||||||
|
}
|
||||||
|
/* bold points */
|
||||||
|
.cm-header, .cm-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #309dd2;
|
||||||
|
}
|
||||||
|
/* Link headings */
|
||||||
|
.cm-s-default .cm-link {
|
||||||
|
color: #dd6300;
|
||||||
|
}
|
||||||
|
/* links */
|
||||||
|
.cm-s-default .cm-string {
|
||||||
|
color: #aa8261;
|
||||||
|
}
|
||||||
|
/*@import*/
|
||||||
|
.cm-s-default .cm-def {
|
||||||
|
color:#2986cc;
|
||||||
|
}
|
||||||
|
/* Bullets and such */
|
||||||
|
.cm-s-default .cm-variable-2 {
|
||||||
|
color: #3cbf30;
|
||||||
|
}
|
||||||
|
/* blocks */
|
||||||
|
.editor .codeEditor .block:not(.cm-comment) {
|
||||||
|
color: #e3e3e3;
|
||||||
|
}
|
||||||
|
/* inline blocks */
|
||||||
|
.editor .codeEditor .inline-block {
|
||||||
|
color: #e3e3e3;
|
||||||
|
}
|
||||||
|
/* Tags (divs) */
|
||||||
|
.cm-s-default .cm-tag {
|
||||||
|
color: #e3ff00;
|
||||||
|
}
|
||||||
|
.cm-s-default .cm-attribute {
|
||||||
|
color: #e3ff00;
|
||||||
|
}
|
||||||
|
.cm-s-default .cm-atom {
|
||||||
|
color:#000;
|
||||||
|
}
|
||||||
|
.cm-s-default .cm-qualifier{
|
||||||
|
color:#ee1919;
|
||||||
|
}
|
||||||
|
.cm-s-default .cm-comment{
|
||||||
|
color:#bbc700;
|
||||||
|
}
|
||||||
|
.cm-s-default .cm-keyword {
|
||||||
|
color:#c302df;
|
||||||
|
background-color:#b1b1b1;
|
||||||
|
}
|
||||||
|
.cm-s-default .cm-property.cm-error {
|
||||||
|
color:#c50202;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-foldmarker {
|
||||||
|
color:#f0ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* New page */
|
||||||
|
.editor .codeEditor .pageLine {
|
||||||
|
background: #000;
|
||||||
|
color:#000;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-default .cm-builtin {
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
"cobalt",
|
"cobalt",
|
||||||
"colorforth",
|
"colorforth",
|
||||||
"darcula",
|
"darcula",
|
||||||
|
"darkbrewery-v301",
|
||||||
"dracula",
|
"dracula",
|
||||||
"duotone-dark",
|
"duotone-dark",
|
||||||
"duotone-light",
|
"duotone-light",
|
||||||
|
|||||||
Reference in New Issue
Block a user