diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 440db1ce3..e95ea3a9d 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -176,7 +176,10 @@ const BrewRenderer = createClass({ : null} - + + style={{ width: '100%', height: '100%', visibility: this.state.visibility }} + contentDidMount={this.frameDidMount}>
@@ -189,6 +192,7 @@ const BrewRenderer = createClass({
{/* Apply CSS from Style tab */} +
${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