${this.props.style} ` }} />
{/* Render pages from Markdown tab */}
diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less
index 231e3301e..abb80fc5f 100644
--- a/client/homebrew/brewRenderer/brewRenderer.less
+++ b/client/homebrew/brewRenderer/brewRenderer.less
@@ -1,19 +1,11 @@
@import (multiple, less) 'shared/naturalcrit/styles/reset.less';
-& {@import (multiple, less) './client/homebrew/phbStyle/phb.styleLegacy.less';} //&{} keeps internal variables locally-scoped
-& {@import (multiple, less) './client/homebrew/phbStyle/phb.style.less';}
.brewRenderer{
will-change : transform;
overflow-y : scroll;
.pages{
margin : 30px 0px;
- &>.phb{
- margin-right : auto;
- margin-bottom : 30px;
- margin-left : auto;
- box-shadow : 1px 4px 14px #000;
- }
- &>.phb3{
+ &>.page{
margin-right : auto;
margin-bottom : 30px;
margin-left : auto;
diff --git a/client/homebrew/editor/snippetbar/snippets/magic.gen.js b/client/homebrew/editor/snippetbar/snippets/magic.gen.js
index a7765e979..caea3c4af 100644
--- a/client/homebrew/editor/snippetbar/snippets/magic.gen.js
+++ b/client/homebrew/editor/snippetbar/snippets/magic.gen.js
@@ -82,11 +82,11 @@ module.exports = {
return [
`#### ${_.sample(spellNames)}`,
`*${_.sample(level)}-level ${_.sample(spellSchools)}*`,
- '___',
- '- **Casting Time:** 1 action',
- `- **Range:** ${_.sample(['Self', 'Touch', '30 feet', '60 feet'])}`,
- `- **Components:** ${components}`,
- `- **Duration:** ${_.sample(['Until dispelled', '1 round', 'Instantaneous', 'Concentration, up to 10 minutes', '1 hour'])}`,
+ '',
+ '**Casting Time:** :: 1 action',
+ `**Range:** :: ${_.sample(['Self', 'Touch', '30 feet', '60 feet'])}`,
+ `**Components:** :: ${components}`,
+ `**Duration:** :: ${_.sample(['Until dispelled', '1 round', 'Instantaneous', 'Concentration, up to 10 minutes', '1 hour'])}`,
'',
'A flame, equivalent in brightness to a torch, springs from an object that you touch. ',
'The effect look like a regular flame, but it creates no heat and doesn\'t use oxygen. ',
diff --git a/client/homebrew/editor/snippetbar/snippets/monsterblock.gen.js b/client/homebrew/editor/snippetbar/snippets/monsterblock.gen.js
index c455e90f5..4db3019ea 100644
--- a/client/homebrew/editor/snippetbar/snippets/monsterblock.gen.js
+++ b/client/homebrew/editor/snippetbar/snippets/monsterblock.gen.js
@@ -146,18 +146,18 @@ module.exports = {
## ${getMonsterName()}
*${getType()}, ${getAlignment()}*
___
- : **Armor Class** : ${_.random(10, 20)} (chain mail, shield)
- : **Hit Points** : ${_.random(1, 150)}(1d4 + 5)
- : **Speed** : ${_.random(0, 50)}ft.
+ **Armor Class** :: ${_.random(10, 20)} (chain mail, shield)
+ **Hit Points** :: ${_.random(1, 150)}(1d4 + 5)
+ **Speed** :: ${_.random(0, 50)}ft.
___
| STR | DEX | CON | INT | WIS | CHA |
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
${getStats()}
___
- : **Condition Immunities** : ${genList(['groggy', 'swagged', 'weak-kneed', 'buzzed', 'groovy', 'melancholy', 'drunk'], 3)}
- : **Senses** : darkvision 60 ft., passive Perception ${_.random(3, 20)}
- : **Languages** : ${genList(['Common', 'Pottymouth', 'Gibberish', 'Latin', 'Jive'], 2)}
- : **Challenge** : ${_.random(0, 15)} (${_.random(10, 10000)} XP)
+ **Condition Immunities** :: ${genList(['groggy', 'swagged', 'weak-kneed', 'buzzed', 'groovy', 'melancholy', 'drunk'], 3)}
+ **Senses** :: darkvision 60 ft., passive Perception ${_.random(3, 20)}
+ **Languages** :: ${genList(['Common', 'Pottymouth', 'Gibberish', 'Latin', 'Jive'], 2)}
+ **Challenge** :: ${_.random(0, 15)} (${_.random(10, 10000)} XP)
___
:
${_.times(_.random(genLines, genLines + 2), function(){return genAbilities();}).join('\n\t\t\t\n\t\t\t')}
diff --git a/client/homebrew/editor/snippetbar/snippets/snippets.js b/client/homebrew/editor/snippetbar/snippets/snippets.js
index f72817c7a..6ecae9429 100644
--- a/client/homebrew/editor/snippetbar/snippets/snippets.js
+++ b/client/homebrew/editor/snippetbar/snippets/snippets.js
@@ -27,18 +27,34 @@ module.exports = [
},
{
name : 'Vertical Spacing',
- icon : 'fas fa-times-circle',
- gen : ''
+ icon : 'fas fa-arrows-alt-v',
+ gen : '\n::::\n'
+ },
+ {
+ name : 'Horizontal Spacing',
+ icon : 'fas fa-arrows-alt-h',
+ gen : ' {{width="100px"}} '
},
{
name : 'Wide Block',
- icon : 'fas fa-times-circle',
- gen : ''
+ icon : 'fas fa-window-maximize',
+ gen : dedent`\n
+ {{wide
+ Everything in here will be extra wide. Tables, text, everything!
+ Beware though, CSS columns can behave a bit weird sometimes. You may
+ have to rely on the automatic column-break rather than \`\column\` if
+ you mix columns and wide blocks on the same page.
+ }}
+ \n`
},
{
name : 'Image',
- icon : 'fas fa-times-circle',
- gen : ''
+ icon : 'fas fa-image',
+ gen : dedent`
+
+ Credit: Kyounghwan Kim`
},
{
name : 'Background Image',
@@ -130,26 +146,28 @@ module.exports = [
name : 'Note',
icon : 'fas fa-sticky-note',
gen : function(){
- return [
- '> ##### Time to Drop Knowledge',
- '> Use notes to point out some interesting information. ',
- '> ',
- '> **Tables and lists** both work within a note.'
- ].join('\n');
+ return dedent`
+ {{note
+ ##### Time to Drop Knowledge
+ Use notes to point out some interesting information.
+
+ **Tables and lists** both work within a note.
+ }}
+ \n`;
},
},
{
name : 'Descriptive Text Box',
icon : 'fas fa-comment-alt',
gen : function(){
- return [
- '
',
- '##### Time to Drop Knowledge',
- 'Use notes to point out some interesting information. ',
- '',
- '**Tables and lists** both work within a note.',
- '
'
- ].join('\n');
+ return dedent`
+ {{descriptive
+ ##### Time to Drop Knowledge
+ Use descriptive boxes to highlight text that should be read aloud.
+
+ **Tables and lists** both work within a descriptive box.
+ }}
+ \n`;
},
},
{
diff --git a/client/homebrew/editor/snippetbar/snippets/tableOfContents.gen.js b/client/homebrew/editor/snippetbar/snippets/tableOfContents.gen.js
index 8a03b0530..f0964e582 100644
--- a/client/homebrew/editor/snippetbar/snippets/tableOfContents.gen.js
+++ b/client/homebrew/editor/snippetbar/snippets/tableOfContents.gen.js
@@ -1,4 +1,5 @@
const _ = require('lodash');
+const dedent = require('dedent-tabs').default;
const getTOC = (pages)=>{
const add1 = (title, page)=>{
@@ -9,7 +10,7 @@ const getTOC = (pages)=>{
});
};
const add2 = (title, page)=>{
- if(!_.last(res)) add1('', page);
+ if(!_.last(res)) add1(null, page);
_.last(res).children.push({
title : title,
page : page + 1,
@@ -17,8 +18,8 @@ const getTOC = (pages)=>{
});
};
const add3 = (title, page)=>{
- if(!_.last(res)) add1('', page);
- if(!_.last(_.last(res).children)) add2('', page);
+ if(!_.last(res)) add1(null, page);
+ if(!_.last(_.last(res).children)) add2(null, page);
_.last(_.last(res).children).children.push({
title : title,
page : page + 1,
@@ -51,13 +52,21 @@ module.exports = function(brew){
const pages = brew.text.split('\\page');
const TOC = getTOC(pages);
const markdown = _.reduce(TOC, (r, g1, idx1)=>{
- r.push(`- **[${idx1 + 1} ${g1.title}](#p${g1.page})**`);
+ if(g1.title !== null) {
+ r.push(`\t\t- ### [{{ ${g1.title}}}{{ ${g1.page}}}](#p${g1.page})`);
+ }
if(g1.children.length){
_.each(g1.children, (g2, idx2)=>{
- r.push(` - [${idx1 + 1}.${idx2 + 1} ${g2.title}](#p${g2.page})`);
+ if(g2.title !== null) {
+ r.push(`\t\t - #### [{{ ${g2.title}}}{{ ${g2.page}}}](#p${g2.page})`);
+ }
if(g2.children.length){
_.each(g2.children, (g3, idx3)=>{
- r.push(` - [${idx1 + 1}.${idx2 + 1}.${idx3 + 1} ${g3.title}](#p${g3.page})`);
+ if(g2.title !== null) {
+ r.push(`\t\t - [{{ ${g3.title}}}{{ ${g3.page}}}](#p${g3.page})`);
+ } else { // Don't over-indent if no level-2 parent entry
+ r.push(`\t\t - [{{ ${g3.title}}}{{ ${g3.page}}}](#p${g3.page})`);
+ }
});
}
});
@@ -65,8 +74,11 @@ module.exports = function(brew){
return r;
}, []).join('\n');
- return `
-##### Table Of Contents
+ return dedent`
+ {{toc,wide
+ # Table Of Contents
+
${markdown}
-
\n`;
+ }}
+ \n`;
};
diff --git a/client/homebrew/navbar/recent.navitem.jsx b/client/homebrew/navbar/recent.navitem.jsx
index d12389948..f55817df0 100644
--- a/client/homebrew/navbar/recent.navitem.jsx
+++ b/client/homebrew/navbar/recent.navitem.jsx
@@ -80,7 +80,8 @@ const RecentItems = createClass({
componentDidUpdate : function(prevProps) {
if(prevProps.brew && this.props.brew.editId !== prevProps.brew.editId) {
- if(this.props.storageKey == 'edit') {
+ let edited = JSON.parse(localStorage.getItem(EDIT_KEY) || '[]');
+ if(this.props.storageKey == 'edit') {
let prevEditId = prevProps.brew.editId;
if(prevProps.brew.googleId){
prevEditId = `${prevProps.brew.googleId}${prevProps.brew.editId}`;
diff --git a/client/homebrew/pages/printPage/printPage.jsx b/client/homebrew/pages/printPage/printPage.jsx
index ffd11841c..d4f15c91b 100644
--- a/client/homebrew/pages/printPage/printPage.jsx
+++ b/client/homebrew/pages/printPage/printPage.jsx
@@ -59,6 +59,7 @@ const PrintPage = createClass({
render : function(){
return
+
{/* Apply CSS from Style tab */}
${this.props.brew.style} ` }} />
{this.renderPages()}
diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx
index e6b7530b8..6527c3993 100644
--- a/client/homebrew/pages/userPage/userPage.jsx
+++ b/client/homebrew/pages/userPage/userPage.jsx
@@ -53,6 +53,7 @@ const UserPage = createClass({
const brews = this.getSortedBrews();
return
+
diff --git a/client/homebrew/phbStyle/border.png b/client/homebrew/phbStyle/border.png
deleted file mode 100644
index 9bfd85e38..000000000
Binary files a/client/homebrew/phbStyle/border.png and /dev/null differ
diff --git a/client/homebrew/phbStyle/note_border.png b/client/homebrew/phbStyle/note_border.png
deleted file mode 100644
index bf7b30188..000000000
Binary files a/client/homebrew/phbStyle/note_border.png and /dev/null differ
diff --git a/client/homebrew/phbStyle/phb.assets.less b/client/homebrew/phbStyle/phb.assets.less
deleted file mode 100644
index 3e7a8ef03..000000000
--- a/client/homebrew/phbStyle/phb.assets.less
+++ /dev/null
@@ -1,9 +0,0 @@
-@footerAccentImage : data-uri('./client/homebrew/phbStyle/images/footerAccent.png');
-@frameBorderImage : data-uri('./client/homebrew/phbStyle/images/frameBorder.png');
-@backgroundImage : data-uri('./client/homebrew/phbStyle/images/parchmentBackground.jpg');
-@redTriangleImage : data-uri('./client/homebrew/phbStyle/images/redTriangle.png');
-@monsterBorderImageLegacy : data-uri('./client/homebrew/phbStyle/images/monsterBorderLegacy.png');
-@noteBorderImage : data-uri('./client/homebrew/phbStyle/images/noteBorder.png');
-@descriptiveBoxImage : data-uri('./client/homebrew/phbStyle/images/descriptiveBorder.png');
-@monsterBlockBackground : data-uri('./client/homebrew/phbStyle/images/parchmentBackgroundGrayscale.jpg');
-@monsterBorderImage : data-uri('./client/homebrew/phbStyle/images/monsterBorderFancy.png');
diff --git a/client/homebrew/phbStyle/red.png b/client/homebrew/phbStyle/red.png
deleted file mode 100644
index 6a275c22b..000000000
Binary files a/client/homebrew/phbStyle/red.png and /dev/null differ
diff --git a/package-lock.json b/package-lock.json
index 4abdba1b8..140fd0a27 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,13 +9,13 @@
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.14.6",
+ "@babel/core": "^7.14.8",
"@babel/plugin-transform-runtime": "^7.14.5",
- "@babel/preset-env": "^7.14.7",
+ "@babel/preset-env": "^7.14.8",
"@babel/preset-react": "^7.14.5",
"body-parser": "^1.19.0",
"classnames": "^2.3.1",
- "codemirror": "^5.62.0",
+ "codemirror": "^5.62.2",
"cookie-parser": "^1.4.5",
"create-react-class": "^15.7.0",
"dedent-tabs": "^0.9.0",
@@ -23,14 +23,14 @@
"express-async-handler": "^1.1.4",
"express-static-gzip": "2.1.1",
"fs-extra": "10.0.0",
- "googleapis": "78.0.0",
+ "googleapis": "82.0.0",
"jwt-simple": "^0.5.6",
"less": "^3.13.1",
"lodash": "^4.17.21",
"marked": "2.1.3",
"markedLegacy": "npm:marked@^0.3.19",
"moment": "^2.29.1",
- "mongoose": "^5.12.15",
+ "mongoose": "^5.13.3",
"nanoid": "3.1.23",
"nconf": "^0.11.3",
"prop-types": "15.7.2",
@@ -44,7 +44,7 @@
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
},
"devDependencies": {
- "eslint": "^7.29.0",
+ "eslint": "^7.31.0",
"eslint-plugin-react": "^7.24.0",
"pico-check": "^2.1.3"
},
@@ -72,19 +72,19 @@
}
},
"node_modules/@babel/core": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
- "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz",
+ "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==",
"dependencies": {
"@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.14.5",
+ "@babel/generator": "^7.14.8",
"@babel/helper-compilation-targets": "^7.14.5",
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helpers": "^7.14.6",
- "@babel/parser": "^7.14.6",
+ "@babel/helper-module-transforms": "^7.14.8",
+ "@babel/helpers": "^7.14.8",
+ "@babel/parser": "^7.14.8",
"@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5",
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -146,11 +146,11 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
- "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz",
+ "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==",
"dependencies": {
- "@babel/types": "^7.14.5",
+ "@babel/types": "^7.14.8",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@@ -356,18 +356,18 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz",
- "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz",
+ "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==",
"dependencies": {
"@babel/helper-module-imports": "^7.14.5",
"@babel/helper-replace-supers": "^7.14.5",
- "@babel/helper-simple-access": "^7.14.5",
+ "@babel/helper-simple-access": "^7.14.8",
"@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.14.8",
"@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8"
},
"engines": {
"node": ">=6.9.0"
@@ -420,11 +420,11 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz",
- "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz",
+ "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==",
"dependencies": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.14.8"
},
"engines": {
"node": ">=6.9.0"
@@ -453,9 +453,9 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
- "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz",
+ "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==",
"engines": {
"node": ">=6.9.0"
}
@@ -483,13 +483,13 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
- "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz",
+ "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==",
"dependencies": {
"@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8"
},
"engines": {
"node": ">=6.9.0"
@@ -538,9 +538,9 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/@babel/parser": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
- "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz",
+ "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1595,9 +1595,9 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz",
- "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz",
+ "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==",
"dependencies": {
"@babel/compat-data": "^7.14.7",
"@babel/helper-compilation-targets": "^7.14.5",
@@ -1666,7 +1666,7 @@
"@babel/plugin-transform-unicode-escapes": "^7.14.5",
"@babel/plugin-transform-unicode-regex": "^7.14.5",
"@babel/preset-modules": "^0.1.4",
- "@babel/types": "^7.14.5",
+ "@babel/types": "^7.14.8",
"babel-plugin-polyfill-corejs2": "^0.2.2",
"babel-plugin-polyfill-corejs3": "^0.2.2",
"babel-plugin-polyfill-regenerator": "^0.2.2",
@@ -1746,17 +1746,17 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
- "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz",
+ "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==",
"dependencies": {
"@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.14.5",
+ "@babel/generator": "^7.14.8",
"@babel/helper-function-name": "^7.14.5",
"@babel/helper-hoist-variables": "^7.14.5",
"@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/parser": "^7.14.7",
- "@babel/types": "^7.14.5",
+ "@babel/parser": "^7.14.8",
+ "@babel/types": "^7.14.8",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -1789,11 +1789,11 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/@babel/types": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
- "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz",
+ "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.14.8",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -1801,9 +1801,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
- "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -1821,9 +1821,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
@@ -1855,6 +1855,49 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
+ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "dev": true
+ },
"node_modules/@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -1960,9 +2003,9 @@
}
},
"node_modules/acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
@@ -3138,9 +3181,9 @@
}
},
"node_modules/codemirror": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.62.0.tgz",
- "integrity": "sha512-Xnl3304iCc8nyVZuRkzDVVwc794uc9QNX0UcPGeNic1fbzkSrO4l4GVXho9tRNKBgPYZXgocUqXyfIv3BILhCQ=="
+ "version": "5.62.2",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.62.2.tgz",
+ "integrity": "sha512-tVFMUa4J3Q8JUd1KL9yQzQB0/BJt7ZYZujZmTPgo/54Lpuq3ez4C8x/ATUY/wv7b7X3AUq8o3Xd+2C5ZrCGWHw=="
},
"node_modules/collection-visit": {
"version": "1.0.0",
@@ -3811,13 +3854,14 @@
}
},
"node_modules/eslint": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz",
- "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==",
+ "version": "7.31.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz",
+ "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.2",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -4732,9 +4776,9 @@
}
},
"node_modules/globals": {
- "version": "13.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
- "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
+ "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -4753,6 +4797,9 @@
"dev": true,
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/google-auth-library": {
@@ -4789,9 +4836,9 @@
}
},
"node_modules/googleapis": {
- "version": "78.0.0",
- "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-78.0.0.tgz",
- "integrity": "sha512-Qx3WyG0kP1EHMc5z5lHDZyNg/u/1T9P0yudfp9y/ZrtQTpCLQM+7hH2Ca/C3Gnnn0qwN8hsn9E5Os03L46fldA==",
+ "version": "82.0.0",
+ "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-82.0.0.tgz",
+ "integrity": "sha512-TytL2h+Cl82RP8ZZ4hgiqOz/ZKWJ5nqn2ZaQ1bNIsIp6z4xuasXyJsgPaZzHADyRx/zNQfRfJGwzRInYJy7X4A==",
"dependencies": {
"google-auth-library": "^7.0.2",
"googleapis-common": "^5.0.2"
@@ -6291,9 +6338,9 @@
}
},
"node_modules/mongodb": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz",
- "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==",
+ "version": "3.6.10",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.10.tgz",
+ "integrity": "sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q==",
"dependencies": {
"bl": "^2.2.1",
"bson": "^1.1.4",
@@ -6306,17 +6353,38 @@
},
"optionalDependencies": {
"saslprep": "^1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws4": {
+ "optional": true
+ },
+ "bson-ext": {
+ "optional": true
+ },
+ "kerberos": {
+ "optional": true
+ },
+ "mongodb-client-encryption": {
+ "optional": true
+ },
+ "mongodb-extjson": {
+ "optional": true
+ },
+ "snappy": {
+ "optional": true
+ }
}
},
"node_modules/mongoose": {
- "version": "5.12.15",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.15.tgz",
- "integrity": "sha512-GVvxE2/mbUsxAbTtleFlehCNMFlzcgKue/olukIpoN6iw1MYXKodf+ZIRndO+2jzlgbZgiHkAZZJbcFNt1DgHA==",
+ "version": "5.13.3",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.3.tgz",
+ "integrity": "sha512-q+zX6kqHAvwxf5speMWhq6qF4vdj+x6/kfD5RSKdZKNm52yGmaUygN+zgrtQjBZPFEzG0B3vF6GP0PoAGadE+w==",
"dependencies": {
"@types/mongodb": "^3.5.27",
+ "@types/node": "14.x || 15.x",
"bson": "^1.1.4",
"kareem": "2.3.2",
- "mongodb": "3.6.8",
+ "mongodb": "3.6.10",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.8.3",
"mquery": "3.2.5",
@@ -9516,19 +9584,19 @@
"integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw=="
},
"@babel/core": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
- "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz",
+ "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==",
"requires": {
"@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.14.5",
+ "@babel/generator": "^7.14.8",
"@babel/helper-compilation-targets": "^7.14.5",
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helpers": "^7.14.6",
- "@babel/parser": "^7.14.6",
+ "@babel/helper-module-transforms": "^7.14.8",
+ "@babel/helpers": "^7.14.8",
+ "@babel/parser": "^7.14.8",
"@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5",
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -9571,11 +9639,11 @@
}
},
"@babel/generator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
- "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz",
+ "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==",
"requires": {
- "@babel/types": "^7.14.5",
+ "@babel/types": "^7.14.8",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@@ -9730,18 +9798,18 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz",
- "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz",
+ "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==",
"requires": {
"@babel/helper-module-imports": "^7.14.5",
"@babel/helper-replace-supers": "^7.14.5",
- "@babel/helper-simple-access": "^7.14.5",
+ "@babel/helper-simple-access": "^7.14.8",
"@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.14.8",
"@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8"
}
},
"@babel/helper-optimise-call-expression": {
@@ -9779,11 +9847,11 @@
}
},
"@babel/helper-simple-access": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz",
- "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz",
+ "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==",
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.14.8"
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
@@ -9803,9 +9871,9 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
- "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg=="
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz",
+ "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow=="
},
"@babel/helper-validator-option": {
"version": "7.14.5",
@@ -9824,13 +9892,13 @@
}
},
"@babel/helpers": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
- "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz",
+ "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==",
"requires": {
"@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8"
}
},
"@babel/highlight": {
@@ -9869,9 +9937,9 @@
}
},
"@babel/parser": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
- "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA=="
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz",
+ "integrity": "sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA=="
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.14.5",
@@ -10546,9 +10614,9 @@
}
},
"@babel/preset-env": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz",
- "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz",
+ "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==",
"requires": {
"@babel/compat-data": "^7.14.7",
"@babel/helper-compilation-targets": "^7.14.5",
@@ -10617,7 +10685,7 @@
"@babel/plugin-transform-unicode-escapes": "^7.14.5",
"@babel/plugin-transform-unicode-regex": "^7.14.5",
"@babel/preset-modules": "^0.1.4",
- "@babel/types": "^7.14.5",
+ "@babel/types": "^7.14.8",
"babel-plugin-polyfill-corejs2": "^0.2.2",
"babel-plugin-polyfill-corejs3": "^0.2.2",
"babel-plugin-polyfill-regenerator": "^0.2.2",
@@ -10683,17 +10751,17 @@
}
},
"@babel/traverse": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
- "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz",
+ "integrity": "sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==",
"requires": {
"@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.14.5",
+ "@babel/generator": "^7.14.8",
"@babel/helper-function-name": "^7.14.5",
"@babel/helper-hoist-variables": "^7.14.5",
"@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/parser": "^7.14.7",
- "@babel/types": "^7.14.5",
+ "@babel/parser": "^7.14.8",
+ "@babel/types": "^7.14.8",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -10719,18 +10787,18 @@
}
},
"@babel/types": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
- "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
+ "version": "7.14.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz",
+ "integrity": "sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==",
"requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.14.8",
"to-fast-properties": "^2.0.0"
}
},
"@eslint/eslintrc": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
- "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
@@ -10745,9 +10813,9 @@
},
"dependencies": {
"debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true,
"requires": {
"ms": "2.1.2"
@@ -10767,6 +10835,40 @@
}
}
},
+ "@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
+ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "dev": true
+ },
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -10850,9 +10952,9 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
},
"acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"requires": {}
},
@@ -11836,9 +11938,9 @@
}
},
"codemirror": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.62.0.tgz",
- "integrity": "sha512-Xnl3304iCc8nyVZuRkzDVVwc794uc9QNX0UcPGeNic1fbzkSrO4l4GVXho9tRNKBgPYZXgocUqXyfIv3BILhCQ=="
+ "version": "5.62.2",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.62.2.tgz",
+ "integrity": "sha512-tVFMUa4J3Q8JUd1KL9yQzQB0/BJt7ZYZujZmTPgo/54Lpuq3ez4C8x/ATUY/wv7b7X3AUq8o3Xd+2C5ZrCGWHw=="
},
"collection-visit": {
"version": "1.0.0",
@@ -12405,13 +12507,14 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz",
- "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==",
+ "version": "7.31.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz",
+ "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==",
"dev": true,
"requires": {
"@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.2",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -13133,9 +13236,9 @@
}
},
"globals": {
- "version": "13.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
- "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
+ "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -13174,9 +13277,9 @@
}
},
"googleapis": {
- "version": "78.0.0",
- "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-78.0.0.tgz",
- "integrity": "sha512-Qx3WyG0kP1EHMc5z5lHDZyNg/u/1T9P0yudfp9y/ZrtQTpCLQM+7hH2Ca/C3Gnnn0qwN8hsn9E5Os03L46fldA==",
+ "version": "82.0.0",
+ "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-82.0.0.tgz",
+ "integrity": "sha512-TytL2h+Cl82RP8ZZ4hgiqOz/ZKWJ5nqn2ZaQ1bNIsIp6z4xuasXyJsgPaZzHADyRx/zNQfRfJGwzRInYJy7X4A==",
"requires": {
"google-auth-library": "^7.0.2",
"googleapis-common": "^5.0.2"
@@ -14339,9 +14442,9 @@
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"mongodb": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz",
- "integrity": "sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ==",
+ "version": "3.6.10",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.10.tgz",
+ "integrity": "sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q==",
"requires": {
"bl": "^2.2.1",
"bson": "^1.1.4",
@@ -14352,14 +14455,15 @@
}
},
"mongoose": {
- "version": "5.12.15",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.15.tgz",
- "integrity": "sha512-GVvxE2/mbUsxAbTtleFlehCNMFlzcgKue/olukIpoN6iw1MYXKodf+ZIRndO+2jzlgbZgiHkAZZJbcFNt1DgHA==",
+ "version": "5.13.3",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.3.tgz",
+ "integrity": "sha512-q+zX6kqHAvwxf5speMWhq6qF4vdj+x6/kfD5RSKdZKNm52yGmaUygN+zgrtQjBZPFEzG0B3vF6GP0PoAGadE+w==",
"requires": {
"@types/mongodb": "^3.5.27",
+ "@types/node": "14.x || 15.x",
"bson": "^1.1.4",
"kareem": "2.3.2",
- "mongodb": "3.6.8",
+ "mongodb": "3.6.10",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.8.3",
"mquery": "3.2.5",
diff --git a/package.json b/package.json
index 0dbd36585..e31d91cea 100644
--- a/package.json
+++ b/package.json
@@ -40,13 +40,13 @@
]
},
"dependencies": {
- "@babel/core": "^7.14.6",
+ "@babel/core": "^7.14.8",
"@babel/plugin-transform-runtime": "^7.14.5",
- "@babel/preset-env": "^7.14.7",
+ "@babel/preset-env": "^7.14.8",
"@babel/preset-react": "^7.14.5",
"body-parser": "^1.19.0",
"classnames": "^2.3.1",
- "codemirror": "^5.62.0",
+ "codemirror": "^5.62.2",
"cookie-parser": "^1.4.5",
"create-react-class": "^15.7.0",
"dedent-tabs": "^0.9.0",
@@ -54,14 +54,14 @@
"express-async-handler": "^1.1.4",
"express-static-gzip": "2.1.1",
"fs-extra": "10.0.0",
- "googleapis": "78.0.0",
+ "googleapis": "82.0.0",
"jwt-simple": "^0.5.6",
"less": "^3.13.1",
"lodash": "^4.17.21",
"marked": "2.1.3",
"markedLegacy": "npm:marked@^0.3.19",
"moment": "^2.29.1",
- "mongoose": "^5.12.15",
+ "mongoose": "^5.13.3",
"nanoid": "3.1.23",
"nconf": "^0.11.3",
"prop-types": "15.7.2",
@@ -75,7 +75,7 @@
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
},
"devDependencies": {
- "eslint": "^7.29.0",
+ "eslint": "^7.31.0",
"eslint-plugin-react": "^7.24.0",
"pico-check": "^2.1.3"
}
diff --git a/scripts/buildHomebrew.js b/scripts/buildHomebrew.js
index 94afe801b..29ce3ca1b 100644
--- a/scripts/buildHomebrew.js
+++ b/scripts/buildHomebrew.js
@@ -8,6 +8,7 @@ const isDev = !!process.argv.find((arg)=>arg=='--dev');
const lessTransform = require('vitreum/transforms/less.js');
const assetTransform = require('vitreum/transforms/asset.js');
const babel = require('@babel/core');
+const less = require('less');
const babelify = async (code)=>(await babel.transformAsync(code, { presets: ['@babel/preset-env', '@babel/preset-react'], plugins: ['@babel/plugin-transform-runtime'] })).code;
@@ -23,7 +24,27 @@ const build = async ({ bundle, render, ssr })=>{
await fs.outputFile('./build/homebrew/bundle.css', css);
await fs.outputFile('./build/homebrew/bundle.js', bundle);
await fs.outputFile('./build/homebrew/ssr.js', ssr);
- await fs.copy('./client/homebrew/phbStyle/fonts', './build/fonts');
+ await fs.copy('./themes/fonts', './build/fonts');
+ let src = './themes/5ePhbLegacy.style.less';
+ //Parse brew theme files
+ less.render(fs.readFileSync(src).toString(), {
+ compress : !isDev
+ }, function(e, output) {
+ fs.outputFile('./build/themes/5ePhbLegacy.style.css', output.css);
+ });
+ src = './themes/5ePhb.style.less';
+ less.render(fs.readFileSync(src).toString(), {
+ compress : !isDev
+ }, function(e, output) {
+ fs.outputFile('./build/themes/5ePhb.style.css', output.css);
+ });
+ // await less.render(lessCode, {
+ // compress : !dev,
+ // sourceMap : (dev ? {
+ // sourceMapFileInline: true,
+ // outputSourceFiles: true
+ // } : false),
+ // })
//compress files in production
if(!isDev){
@@ -37,7 +58,7 @@ const build = async ({ bundle, render, ssr })=>{
}
};
-fs.emptyDirSync('./build/homebrew');
+fs.emptyDirSync('./build');
pack('./client/homebrew/homebrew.jsx', {
paths : ['./shared'],
libs : Proj.libs,
diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js
index 317c8fdc0..37784f740 100644
--- a/shared/naturalcrit/markdown.js
+++ b/shared/naturalcrit/markdown.js
@@ -19,74 +19,141 @@ renderer.paragraph = function(text){
let match;
if(text.startsWith('${text}\n`;
};
-// Mustache-style Divs {{class \n content ... \n}}
-let blockCount = 0;
-const blockRegex = /^ *{{(?:="[\w,\-. ]*"|[^"'\s])*$|^ *}}$/gm;
-const inlineFullRegex = /{{[^\n]*}}/g;
-const inlineRegex = /{{(?:="[\w,\-. ]*"|[^"'{}}\s])*\s*|}}/g;
-
-renderer.text = function(text){
- const newText = text.replaceAll('"', '"');
- let matches;
-
- if(matches = newText.match(inlineFullRegex)) {
-
- //SPAN - INLINE
- matches = newText.match(inlineRegex);
- let matchIndex = 0;
- const res = _.reduce(newText.split(inlineRegex), (r, splitText)=>{
-
- if(splitText) r.push(Markdown.parseInline(splitText, { renderer: renderer }));
-
- const block = matches[matchIndex] ? matches[matchIndex].trimLeft() : '';
- if(block && block.startsWith('{{')) {
- const values = processStyleTags(block.substring(2));
- r.push(`
{
- if(splitText) r.push(Markdown.parseInline(splitText, { renderer: renderer }));
-
- const block = matches[matchIndex] ? matches[matchIndex].trimLeft() : '';
- if(block && block.startsWith('{')) {
- const values = processStyleTags(block.substring(2));
- r.push(``);
- blockCount++;
- } else if(block == '}}' && blockCount !== 0){
- r.push('
');
- blockCount--;
- }
-
- matchIndex++;
-
- return r;
- }, []).join('');
- return res;
- } else {
- if(!matches) {
- return `${text}`;
+ return { // Token to generate
+ type : 'mustacheSpans', // Should match "name" above
+ raw : raw, // Text to consume from the source
+ text : text, // Additional custom properties
+ tags : tags,
+ tokens : this.inlineTokens(text) // inlineTokens to process **bold**, *italics*, etc.
+ };
+ }
}
+ },
+ renderer(token) {
+ return `tag.replace(/="(.*)"/g, ':$1;'));
- return `${classes.join(' ')}" ${id ? `id="${id}"` : ''} ${styles ? `style="${styles.join(' ')}"` : ''}`;
+ return `${classes.join(' ')}" ${id ? `id="${id}"` : ''} ${styles.length ? `style="${styles.join(' ')}"` : ''}`;
};
module.exports = {
marked : Markdown,
render : (rawBrewText)=>{
- blockCount = 0;
rawBrewText = rawBrewText.replace(/^\\column$/gm, `
`)
.replace(/^(:+)$/gm, (match)=>`${`
`.repeat(match.length)}\n`)
- .replace(/(?:^|>) *:([^:\n]*):([^\n]*)\n/gm, (match, term, def)=>`${Markdown.parseInline(term)} ${def} `)
- .replace(/(.*<\/dt> .*<\/dd>\n?)+/gm, `$1 \n\n`)
.replace(/^}}/gm, '\n}}')
.replace(/^({{[^\n]*)$/gm, '$1\n');
return Markdown(
diff --git a/client/homebrew/phbStyle/phb.style.less b/themes/5ePhb.style.less
similarity index 77%
rename from client/homebrew/phbStyle/phb.style.less
rename to themes/5ePhb.style.less
index a5c66b7f4..137fcafa9 100644
--- a/client/homebrew/phbStyle/phb.style.less
+++ b/themes/5ePhb.style.less
@@ -1,5 +1,5 @@
-@import (less) './client/homebrew/phbStyle/phb.fonts.less';
-@import (less) './client/homebrew/phbStyle/phb.assets.less';
+@import (less) './themes/fonts/5e/fonts.less';
+@import (less) './themes/assets/assets.less';
//Colors
@background : #EEE5CE;
@@ -19,9 +19,12 @@ body {
font-family : ScalySansRemake;
font-size : 0.325cm;
line-height : 1.2em;
- p,dl,ul {
+ p,dl,ul,ol {
line-height : 1.2em;
}
+ ul, ol {
+ padding-left : 1em;
+ }
em{
font-style : italic;
}
@@ -42,7 +45,7 @@ body {
-webkit-column-gap : 0.9cm;
-moz-column-gap : 0.9cm;
}
-.phb3{
+.page{
.useColumns();
counter-increment : phb-page-numbers;
position : relative;
@@ -64,10 +67,10 @@ body {
// *****************************/
p{
overflow-wrap : break-word; //TODO: MAKE ALL MARGINS TOP-ONLY. USE * + * STYLE SELECTORS
- margin-bottom : 1em;
+ margin-bottom : 0.8em;
line-height : 1.3em;
&+p{
- margin-top : -1em;
+ margin-top : -0.8em;
}
}
ul{
@@ -194,31 +197,75 @@ body {
//*****************************
// * NOTE
// *****************************/
- blockquote{
+ .note{
+ &::before{
+ content : "";
+ box-sizing : border-box;
+ border-style : solid;
+ border-width : 11px;
+ border-image : @noteBorderImage 12;
+ border-image-outset : 9px 0px;
+ box-shadow : 1px 4px 14px #888;
+ position : absolute;
+ width : 100%;
+ height : 100%;
+ top : 0;
+ left : 0;
+ }
.useSansSerif();
- box-sizing : border-box;
- margin-bottom : 1em;
- padding : 5px 10px;
+ position : relative;
+ margin-top : 1.3em;
+ margin-left : -0.1em;
+ margin-right : -0.1em;
background-color : @noteGreen;
- border-style : solid;
- border-width : 11px;
- border-image : @noteBorderImage 11;
- border-image-outset : 9px 0px;
- box-shadow : 1px 4px 14px #888;
- -webkit-transform : translateZ(0); //Prevents shadows from breaking across columns
- p, ul{
- font-size : 0.352cm;
- line-height : 1.1em;
+ padding : 0.5em 0.6em;
+ & + * {
+ margin-top : 1.3em;
+ }
+ p{
+ display : block;
+ padding-bottom : 0px;
+ }
+ p + p {
+ padding-top : .8em;
+ }
+ :last-child {
+ margin-bottom : 0em;
}
}
- //If a note starts a column, give it space at the top to render border
- pre+blockquote, h2+blockquote, h3+blockquote, h4+blockquote, h5+blockquote {
- margin-top : 13px;
+ //************************************
+ // * DESCRIPTIVE TEXT BOX
+ // ************************************/
+ .descriptive{
+ .useSansSerif();
+ display : block-inline;
+ margin-top : 1.4em;
+ background-color : #faf7ea;
+ font-family : ScalySansRemake;
+ border-style : solid;
+ border-width : 7px;
+ border-image : @descriptiveBoxImage 12 stretch;
+ border-image-outset : 4px;
+ box-shadow : 0px 0px 6px #faf7ea;
+ padding : 0.1em;
+ & + * {
+ margin-top : 1.4em;
+ }
+ p{
+ display : block;
+ padding-bottom : 0px;
+ line-height : 1.5em;
+ }
+ p + p {
+ padding-top : .8em;
+ }
+ :last-child {
+ margin-bottom : 0em;
+ }
}
//*****************************
// * MONSTER STAT BLOCK
// *****************************/
-
.monster {
&.frame {
border-style : solid;
@@ -283,11 +330,6 @@ body {
dl {
.useSansSerif();
color : @headerText;
- padding-left :1.3em;
- text-indent :-1.3em;
- }
- dd {
- text-indent : 0px;
}
// Monster Ability table
@@ -414,7 +456,7 @@ body {
//*****************************
// * SPELL LIST
// *****************************/
-.phb3 .spellList{
+.page .spellList{
.useSansSerif();
column-count : 4;
column-span : all;
@@ -440,7 +482,7 @@ body {
//*****************************
// * WIDE
// *****************************/
-.phb3 .wide{
+.page .wide{
column-span : all;
-webkit-column-span : all;
-moz-column-span : all;
@@ -448,7 +490,7 @@ body {
//*****************************
// * CLASS TABLE
// *****************************/
-.phb3 .classTable{
+.page .classTable{
margin-top : 25px;
margin-bottom : 40px;
border-collapse : separate;
@@ -464,72 +506,83 @@ body {
margin-bottom : 10px;
}
}
-//************************************
-// * DESCRIPTIVE TEXT BOX
-// ************************************/
-.phb3 .descriptive{
- display : block-inline;
- margin-bottom : 1em;
- background-color : #faf7ea;
- font-family : ScalySansRemake;
- border-style : solid;
- border-width : 7px;
- border-image : @descriptiveBoxImage 12 stretch;
- border-image-outset : 4px;
- box-shadow : 0px 0px 6px #faf7ea;
- p{
- display : block;
- padding-bottom : 0px;
- line-height : 1.5em;
- }
- p + p {
- padding-top : .8em;
- }
- em {
- font-family : ScalySansRemake;
- font-style : italic;
- }
- strong {
- font-family : ScalySansRemake;
- font-weight : 800;
- letter-spacing : -0.02em;
- }
-}
-.phb3 pre+.descriptive{
- margin-top : 8px;
-}
//*****************************
// * TABLE OF CONTENTS
// *****************************/
-.phb3 .toc{
+.page .toc{
-webkit-column-break-inside : avoid;
page-break-inside : avoid;
break-inside : avoid;
+ h1 {
+ text-align : center;
+ margin-bottom : 0.1cm;
+ }
a{
- color : black;
+ display : table;
+ color : inherit;
text-decoration : none;
&:hover{
text-decoration : underline;
}
}
+ h4 {
+ margin-top : 0.1cm;
+ }
ul{
padding-left : 0;
list-style-type : none;
+ li + li h3 {
+ margin-top : 0.26cm;
+ line-height : 1em
+ }
+ h3 span:first-child::after {
+ border : none;
+ }
+ span {
+ display : table-cell;
+ &:first-child {
+ position : relative;
+ overflow : hidden;
+ &::after {
+ content : "";
+ position : absolute;
+ bottom : 0.08cm; /* Set as you want */
+ margin-left : 0.06cm; /* Spacing before dot leaders */
+ width : 100%;
+ border-bottom : 0.05cm dotted #000;
+ }
+ }
+ &:last-child {
+ font-family : BookInsanityRemake;
+ font-size : 0.34cm;
+ font-weight : normal;
+ color : black;
+ text-align : right;
+ vertical-align : bottom; /* Keep Price text bottom-aligned */
+ width : 1%;
+ padding-left : 0.06cm; /* Spacing after dot leaders */
+ /*white-space: nowrap; /* Uncomment if needed */
+ }
+ }
+ ul { /*List indent*/
+ margin-left : 1em;
+ }
}
- &>ul>li{
- margin-bottom : 10px;
+ &.wide{
+ .useColumns(0.96);
}
}
//*****************************
// * MUSTACHE DIVS/SPANS
// *****************************/
-.phb3 {
+.page {
.block {
break-inside : avoid;
+ -webkit-transform : translateZ(0); //Prevents shadows from breaking across columns
}
- .inline-block {
- display : block;
+ .inline {
+ display : inline-block;
}
div {
column-gap : 0.5cm; //Default spacing if a div uses multicolumns
@@ -539,24 +592,33 @@ body {
//*****************************
// * DEFINITION LISTS
// *****************************/
-.phb3 {
- // dl {
- // margin-top: 10px;
- // }
+.page {
+ dl {
+ line-height : 1.3em;
+ padding-left : 1em;
+ text-indent : -1em;
+ }
+ dl + p {
+ margin-top: 0.5em;
+ }
+ p + dl {
+ margin-top: -0.5em;
+ }
dt {
float: left;
//clear: left; //Doesn't seem necessary
margin-right: 5px;
}
- // dd {
- // margin-left: 0px;
- // }
+ dd {
+ margin-left : 0px;
+ text-indent : 0px;
+ }
}
//*****************************
// * BLANK LINE
// *****************************/
-.phb3 {
+.page {
.blank {
height: 0.75em;
}
diff --git a/client/homebrew/phbStyle/phb.styleLegacy.less b/themes/5ePhbLegacy.style.less
similarity index 98%
rename from client/homebrew/phbStyle/phb.styleLegacy.less
rename to themes/5ePhbLegacy.style.less
index 32fd8b95e..0f1cae7ec 100644
--- a/client/homebrew/phbStyle/phb.styleLegacy.less
+++ b/themes/5ePhbLegacy.style.less
@@ -1,6 +1,6 @@
-@import (less) './client/homebrew/phbStyle/phb.fontsLegacy.less';
-@import (less) './client/homebrew/phbStyle/phb.assets.less';
-@import (less) './client/homebrew/phbStyle/phb.depricated.less';
+@import (less) './themes/fonts/5e legacy/fonts.less';
+@import (less) './themes/assets/assets.less';
+@import (less) './themes/phb.depricated.less';
//Colors
@background : #EEE5CE;
@noteGreen : #e0e5c1;
diff --git a/themes/assets/assets.less b/themes/assets/assets.less
new file mode 100644
index 000000000..672e3261e
--- /dev/null
+++ b/themes/assets/assets.less
@@ -0,0 +1,9 @@
+@footerAccentImage : data-uri('./themes/assets/footerAccent.png');
+@frameBorderImage : data-uri('./themes/assets/frameBorder.png');
+@backgroundImage : data-uri('./themes/assets/parchmentBackground.jpg');
+@redTriangleImage : data-uri('./themes/assets/redTriangle.png');
+@monsterBorderImageLegacy : data-uri('./themes/assets/monsterBorderLegacy.png');
+@noteBorderImage : data-uri('./themes/assets/noteBorder.png');
+@descriptiveBoxImage : data-uri('./themes/assets/descriptiveBorder.png');
+@monsterBlockBackground : data-uri('./themes/assets/parchmentBackgroundGrayscale.jpg');
+@monsterBorderImage : data-uri('./themes/assets/monsterBorderFancy.png');
diff --git a/client/homebrew/phbStyle/images/descriptiveBorder.png b/themes/assets/descriptiveBorder.png
similarity index 100%
rename from client/homebrew/phbStyle/images/descriptiveBorder.png
rename to themes/assets/descriptiveBorder.png
diff --git a/client/homebrew/phbStyle/images/footerAccent.png b/themes/assets/footerAccent.png
similarity index 100%
rename from client/homebrew/phbStyle/images/footerAccent.png
rename to themes/assets/footerAccent.png
diff --git a/client/homebrew/phbStyle/images/frameBorder.png b/themes/assets/frameBorder.png
similarity index 100%
rename from client/homebrew/phbStyle/images/frameBorder.png
rename to themes/assets/frameBorder.png
diff --git a/client/homebrew/phbStyle/images/monsterBorderFancy.png b/themes/assets/monsterBorderFancy.png
similarity index 100%
rename from client/homebrew/phbStyle/images/monsterBorderFancy.png
rename to themes/assets/monsterBorderFancy.png
diff --git a/client/homebrew/phbStyle/images/monsterBorderLegacy.png b/themes/assets/monsterBorderLegacy.png
similarity index 100%
rename from client/homebrew/phbStyle/images/monsterBorderLegacy.png
rename to themes/assets/monsterBorderLegacy.png
diff --git a/client/homebrew/phbStyle/images/noteBorder.png b/themes/assets/noteBorder.png
similarity index 100%
rename from client/homebrew/phbStyle/images/noteBorder.png
rename to themes/assets/noteBorder.png
diff --git a/client/homebrew/phbStyle/images/parchmentBackground.jpg b/themes/assets/parchmentBackground.jpg
similarity index 100%
rename from client/homebrew/phbStyle/images/parchmentBackground.jpg
rename to themes/assets/parchmentBackground.jpg
diff --git a/client/homebrew/phbStyle/images/parchmentBackgroundGrayscale.jpg b/themes/assets/parchmentBackgroundGrayscale.jpg
similarity index 100%
rename from client/homebrew/phbStyle/images/parchmentBackgroundGrayscale.jpg
rename to themes/assets/parchmentBackgroundGrayscale.jpg
diff --git a/client/homebrew/phbStyle/images/redTriangle.png b/themes/assets/redTriangle.png
similarity index 100%
rename from client/homebrew/phbStyle/images/redTriangle.png
rename to themes/assets/redTriangle.png
diff --git a/client/homebrew/phbStyle/fonts/legacy/Bookinsanity Bold Italic.woff2 b/themes/fonts/5e legacy/Bookinsanity Bold Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Bookinsanity Bold Italic.woff2
rename to themes/fonts/5e legacy/Bookinsanity Bold Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Bookinsanity Bold.woff2 b/themes/fonts/5e legacy/Bookinsanity Bold.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Bookinsanity Bold.woff2
rename to themes/fonts/5e legacy/Bookinsanity Bold.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Bookinsanity Italic.woff2 b/themes/fonts/5e legacy/Bookinsanity Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Bookinsanity Italic.woff2
rename to themes/fonts/5e legacy/Bookinsanity Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Bookinsanity.woff2 b/themes/fonts/5e legacy/Bookinsanity.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Bookinsanity.woff2
rename to themes/fonts/5e legacy/Bookinsanity.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Mr Eaves Small Caps.woff2 b/themes/fonts/5e legacy/Mr Eaves Small Caps.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Mr Eaves Small Caps.woff2
rename to themes/fonts/5e legacy/Mr Eaves Small Caps.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Scaly Sans Caps.woff2 b/themes/fonts/5e legacy/Scaly Sans Caps.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Scaly Sans Caps.woff2
rename to themes/fonts/5e legacy/Scaly Sans Caps.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Scaly Sans.woff2 b/themes/fonts/5e legacy/Scaly Sans.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Scaly Sans.woff2
rename to themes/fonts/5e legacy/Scaly Sans.woff2
diff --git a/client/homebrew/phbStyle/fonts/legacy/Solbera Imitation.woff2 b/themes/fonts/5e legacy/Solbera Imitation.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/legacy/Solbera Imitation.woff2
rename to themes/fonts/5e legacy/Solbera Imitation.woff2
diff --git a/client/homebrew/phbStyle/phb.fontsLegacy.less b/themes/fonts/5e legacy/fonts.less
similarity index 62%
rename from client/homebrew/phbStyle/phb.fontsLegacy.less
rename to themes/fonts/5e legacy/fonts.less
index a4043047f..0c47c8e7e 100644
--- a/client/homebrew/phbStyle/phb.fontsLegacy.less
+++ b/themes/fonts/5e legacy/fonts.less
@@ -1,25 +1,25 @@
/* Main Font, serif */
@font-face {
font-family: BookSanity;
- src: url('../fonts/legacy/Bookinsanity.woff2');
+ src: url('../fonts/5e legacy/Bookinsanity.woff2');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: BookSanity;
- src: url('../fonts/legacy/Bookinsanity Bold.woff2');
+ src: url('../fonts/5e legacy/Bookinsanity Bold.woff2');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: BookSanity;
- src: url('../fonts/legacy/Bookinsanity Italic.woff2');
+ src: url('../fonts/5e legacy/Bookinsanity Italic.woff2');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: BookSanity;
- src: url('../fonts/legacy/Bookinsanity Bold Italic.woff2');
+ src: url('../fonts/5e legacy/Bookinsanity Bold Italic.woff2');
font-weight: bold;
font-style: italic;
}
@@ -27,13 +27,13 @@
/* Notes and Tables, sans-serif */
@font-face {
font-family: ScalySans;
- src: url('../fonts/legacy/Scaly Sans.woff2');
+ src: url('../fonts/5e legacy/Scaly Sans.woff2');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: ScalySansSmallCaps;
- src: url('../fonts/legacy/Scaly Sans Caps.woff2');
+ src: url('../fonts/5e legacy/Scaly Sans Caps.woff2');
font-weight: normal;
font-style: normal;
}
@@ -41,7 +41,7 @@
/* Headers */
@font-face {
font-family: MrJeeves;
- src: url('../fonts/legacy/Mr Eaves Small Caps.woff2');
+ src: url('../fonts/5e legacy/Mr Eaves Small Caps.woff2');
font-weight: normal;
font-style: normal;
}
@@ -49,7 +49,7 @@
/* Fancy Drop Cap */
@font-face {
font-family: Solberry;
- src: url('../fonts/legacy/Solbera Imitation.woff2');
+ src: url('../fonts/5e legacy/Solbera Imitation.woff2');
font-weight: normal;
font-style: normal;
}
diff --git a/client/homebrew/phbStyle/fonts/v3/Bookinsanity Bold Italic.woff2 b/themes/fonts/5e/Bookinsanity Bold Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Bookinsanity Bold Italic.woff2
rename to themes/fonts/5e/Bookinsanity Bold Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Bookinsanity Bold.woff2 b/themes/fonts/5e/Bookinsanity Bold.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Bookinsanity Bold.woff2
rename to themes/fonts/5e/Bookinsanity Bold.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Bookinsanity Italic.woff2 b/themes/fonts/5e/Bookinsanity Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Bookinsanity Italic.woff2
rename to themes/fonts/5e/Bookinsanity Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Bookinsanity Semibold Italic.woff2 b/themes/fonts/5e/Bookinsanity Semibold Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Bookinsanity Semibold Italic.woff2
rename to themes/fonts/5e/Bookinsanity Semibold Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Bookinsanity.woff2 b/themes/fonts/5e/Bookinsanity.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Bookinsanity.woff2
rename to themes/fonts/5e/Bookinsanity.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Mr Eaves Small Caps.woff2 b/themes/fonts/5e/Mr Eaves Small Caps.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Mr Eaves Small Caps.woff2
rename to themes/fonts/5e/Mr Eaves Small Caps.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Scaly Sans Bold Italic.woff2 b/themes/fonts/5e/Scaly Sans Bold Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Scaly Sans Bold Italic.woff2
rename to themes/fonts/5e/Scaly Sans Bold Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Scaly Sans Bold.woff2 b/themes/fonts/5e/Scaly Sans Bold.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Scaly Sans Bold.woff2
rename to themes/fonts/5e/Scaly Sans Bold.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Scaly Sans Caps.woff2 b/themes/fonts/5e/Scaly Sans Caps.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Scaly Sans Caps.woff2
rename to themes/fonts/5e/Scaly Sans Caps.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Scaly Sans Italic.woff2 b/themes/fonts/5e/Scaly Sans Italic.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Scaly Sans Italic.woff2
rename to themes/fonts/5e/Scaly Sans Italic.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Scaly Sans.woff2 b/themes/fonts/5e/Scaly Sans.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Scaly Sans.woff2
rename to themes/fonts/5e/Scaly Sans.woff2
diff --git a/client/homebrew/phbStyle/fonts/v3/Solbera Imitation Tweak.woff2 b/themes/fonts/5e/Solbera Imitation Tweak.woff2
similarity index 100%
rename from client/homebrew/phbStyle/fonts/v3/Solbera Imitation Tweak.woff2
rename to themes/fonts/5e/Solbera Imitation Tweak.woff2
diff --git a/client/homebrew/phbStyle/phb.fonts.less b/themes/fonts/5e/fonts.less
similarity index 63%
rename from client/homebrew/phbStyle/phb.fonts.less
rename to themes/fonts/5e/fonts.less
index 855f3cca2..7cd1c9652 100644
--- a/client/homebrew/phbStyle/phb.fonts.less
+++ b/themes/fonts/5e/fonts.less
@@ -1,25 +1,25 @@
/* Main Font, serif */
@font-face {
font-family: BookInsanityRemake;
- src: url('../fonts/v3/Bookinsanity.woff2');
+ src: url('../fonts/5e/Bookinsanity.woff2');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: BookInsanityRemake;
- src: url('../fonts/v3/Bookinsanity Bold.woff2');
+ src: url('../fonts/5e/Bookinsanity Bold.woff2');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: BookInsanityRemake;
- src: url('../fonts/v3/Bookinsanity Italic.woff2');
+ src: url('../fonts/5e/Bookinsanity Italic.woff2');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: BookInsanityRemake;
- src: url('../fonts/v3/Bookinsanity Bold Italic.woff2');
+ src: url('../fonts/5e/Bookinsanity Bold Italic.woff2');
font-weight: bold;
font-style: italic;
}
@@ -27,31 +27,31 @@
/* Notes and Tables, sans-serif */
@font-face {
font-family: ScalySansRemake;
- src: url('../fonts/v3/Scaly Sans.woff2');
+ src: url('../fonts/5e/Scaly Sans.woff2');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: ScalySansRemake;
- src: url('../fonts/v3/Scaly Sans Bold.woff2');
+ src: url('../fonts/5e/Scaly Sans Bold.woff2');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: ScalySansRemake;
- src: url('../fonts/v3/Scaly Sans Italic.woff2');
+ src: url('../fonts/5e/Scaly Sans Italic.woff2');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: ScalySansRemake;
- src: url('../fonts/v3/Scaly Sans Bold Italic.woff2');
+ src: url('../fonts/5e/Scaly Sans Bold Italic.woff2');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: ScalySansSmallCapsRemake;
- src: url('../fonts/v3/Scaly Sans Caps.woff2');
+ src: url('../fonts/5e/Scaly Sans Caps.woff2');
font-weight: normal;
font-style: normal;
}
@@ -59,15 +59,15 @@
/* Headers */
@font-face {
font-family: MrEavesRemake;
- src: url('../fonts/v3/Mr Eaves Small Caps.woff2');
+ src: url('../fonts/5e/Mr Eaves Small Caps.woff2');
font-weight: normal;
font-style: normal;
}
/* Fancy Drop Cap */
@font-face {
- font-family: SolberaImitationRemake; //Tweaked v3 version
- src: url('../fonts/v3/Solbera Imitation Tweak.woff2');
+ font-family: SolberaImitationRemake; //Tweaked 5e version
+ src: url('../fonts/5e/Solbera Imitation Tweak.woff2');
font-weight: normal;
font-style: normal;
}
diff --git a/client/homebrew/phbStyle/phb.depricated.less b/themes/phb.depricated.less
similarity index 100%
rename from client/homebrew/phbStyle/phb.depricated.less
rename to themes/phb.depricated.less