mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-24 22:52:40 +00:00
Merge branch 'master' into dependabot/npm_and_yarn/supertest-7.1.0
This commit is contained in:
@@ -69,14 +69,11 @@ const corsOptions = {
|
||||
'https://homebrewery-stage.herokuapp.com',
|
||||
];
|
||||
|
||||
if(isLocalEnvironment) {
|
||||
const localNetworkRegex = /^http:\/\/(localhost|127\.0\.0\.1|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+):\d+$/;
|
||||
allowedOrigins.push(localNetworkRegex);
|
||||
}
|
||||
const localNetworkRegex = /^http:\/\/(localhost|127\.0\.0\.1|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+):\d+$/;
|
||||
|
||||
const herokuRegex = /^https:\/\/(?:homebrewery-pr-\d+\.herokuapp\.com|naturalcrit-pr-\d+\.herokuapp\.com)$/; // Matches any Heroku app
|
||||
|
||||
if(!origin || allowedOrigins.includes(origin) || herokuRegex.test(origin)) {
|
||||
if(!origin || allowedOrigins.includes(origin) || herokuRegex.test(origin) || (isLocalEnvironment && localNetworkRegex.test(origin))) {
|
||||
callback(null, true);
|
||||
} else {
|
||||
console.log(origin, 'not allowed');
|
||||
|
||||
@@ -60,6 +60,11 @@ mathParser.functions.signed = function (a) {
|
||||
return `${a}`;
|
||||
};
|
||||
|
||||
// Normalize variable names; trim edge spaces and shorten blocks of whitespace to 1 space
|
||||
const normalizeVarNames = (label)=>{
|
||||
return label.trim().replace(/\s+/g, ' ');
|
||||
};
|
||||
|
||||
//Processes the markdown within an HTML block if it's just a class-wrapper
|
||||
renderer.html = function (token) {
|
||||
let html = token.text;
|
||||
@@ -509,7 +514,7 @@ const replaceVar = function(input, hoist=false, allowUnresolved=false) {
|
||||
const match = regex.exec(input);
|
||||
|
||||
const prefix = match[1];
|
||||
const label = match[2];
|
||||
const label = normalizeVarNames(match[2]); // Ensure the label name is normalized as it should be in the var stack.
|
||||
|
||||
//v=====--------------------< HANDLE MATH >-------------------=====v//
|
||||
const mathRegex = /[a-z]+\(|[+\-*/^(),]/g;
|
||||
@@ -664,8 +669,8 @@ function MarkedVariables() {
|
||||
});
|
||||
}
|
||||
if(match[3]) { // Block Definition
|
||||
const label = match[4] ? match[4].trim().replace(/\s+/g, ' ') : null; // Trim edge spaces and shorten blocks of whitespace to 1 space
|
||||
const content = match[5] ? match[5].trim().replace(/[ \t]+/g, ' ') : null; // Trim edge spaces and shorten blocks of whitespace to 1 space
|
||||
const label = match[4] ? normalizeVarNames(match[4]) : null;
|
||||
const content = match[5] ? match[5].trim().replace(/[ \t]+/g, ' ') : null; // Normalize text content (except newlines for block-level content)
|
||||
|
||||
varsQueue.push(
|
||||
{ type : 'varDefBlock',
|
||||
@@ -674,7 +679,7 @@ function MarkedVariables() {
|
||||
});
|
||||
}
|
||||
if(match[6]) { // Block Call
|
||||
const label = match[7] ? match[7].trim().replace(/\s+/g, ' ') : null; // Trim edge spaces and shorten blocks of whitespace to 1 space
|
||||
const label = match[7] ? normalizeVarNames(match[7]) : null;
|
||||
|
||||
varsQueue.push(
|
||||
{ type : 'varCallBlock',
|
||||
@@ -683,7 +688,7 @@ function MarkedVariables() {
|
||||
});
|
||||
}
|
||||
if(match[8]) { // Inline Definition
|
||||
const label = match[10] ? match[10].trim().replace(/\s+/g, ' ') : null; // Trim edge spaces and shorten blocks of whitespace to 1 space
|
||||
const label = match[10] ? normalizeVarNames(match[10]) : null;
|
||||
let content = match[11] || null;
|
||||
|
||||
// In case of nested (), find the correct matching end )
|
||||
@@ -715,7 +720,7 @@ function MarkedVariables() {
|
||||
});
|
||||
}
|
||||
if(match[12]) { // Inline Call
|
||||
const label = match[13] ? match[13].trim().replace(/\s+/g, ' ') : null; // Trim edge spaces and shorten blocks of whitespace to 1 space
|
||||
const label = match[13] ? normalizeVarNames(match[13]) : null;
|
||||
|
||||
varsQueue.push(
|
||||
{ type : 'varCallInline',
|
||||
|
||||
@@ -410,4 +410,29 @@ describe('Regression Tests', ()=>{
|
||||
const rendered = Markdown.render(source).trimReturns();
|
||||
expect(rendered).toBe('<table><thead><tr><th>title 1</th><th>title 2</th><th>title 3</th><th>title 4</th></tr></thead><tbody><tr><td><a href=\"bar\">foo</a></td><td>Ipsum</td><td>)</td><td>)</td></tr></tbody></table>');
|
||||
});
|
||||
|
||||
it('Handle Extra spaces in image alt-text 1', function(){
|
||||
const source='';
|
||||
const rendered = Markdown.render(source).trimReturns();
|
||||
expect(rendered).toBe('<p><img src=\"http://i.imgur.com/hMna6G0.png\" alt=\"where is my image??\" style=\"--HB_src:url(http://i.imgur.com/hMna6G0.png);\"></p>');
|
||||
});
|
||||
|
||||
it('Handle Extra spaces in image alt-text 2', function(){
|
||||
const source='';
|
||||
const rendered = Markdown.render(source).trimReturns();
|
||||
expect(rendered).toBe('<p><img src=\"http://i.imgur.com/hMna6G0.png\" alt=\"where is my image??\" style=\"--HB_src:url(http://i.imgur.com/hMna6G0.png);\"></p>');
|
||||
});
|
||||
|
||||
it('Handle Extra spaces in image alt-text 3', function(){
|
||||
const source='';
|
||||
const rendered = Markdown.render(source).trimReturns();
|
||||
expect(rendered).toBe('<p><img src=\"http://i.imgur.com/hMna6G0.png\" alt=\"where is my image??\" style=\"--HB_src:url(http://i.imgur.com/hMna6G0.png);\"></p>');
|
||||
});
|
||||
|
||||
it('Handle Extra spaces in image alt-text 4', function(){
|
||||
const source='{height=20%,width=20%}';
|
||||
const rendered = Markdown.render(source).trimReturns();
|
||||
expect(rendered).toBe('<p><img style=\"--HB_src:url(http://i.imgur.com/hMna6G0.png);\" src=\"http://i.imgur.com/hMna6G0.png\" alt=\"where is my image??\" height=\"20%\" width=\"20%\"></p>');
|
||||
});
|
||||
|
||||
});
|
||||
@@ -13,13 +13,13 @@
|
||||
body { counter-reset : phb-page-numbers; }
|
||||
* { -webkit-print-color-adjust : exact; }
|
||||
.useSansSerif() {
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
em {
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
font-style : italic;
|
||||
}
|
||||
strong {
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
font-weight : 800;
|
||||
letter-spacing : -0.02em;
|
||||
}
|
||||
@@ -46,7 +46,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
padding : 1.0cm 1.7cm;
|
||||
padding-bottom : 1.5cm;
|
||||
overflow : hidden;
|
||||
font-family : "BookSanity";
|
||||
font-family : 'BookSanity';
|
||||
font-size : 0.317cm;
|
||||
counter-increment : phb-page-numbers;
|
||||
background-color : @background;
|
||||
@@ -106,7 +106,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
h1,h2,h3,h4 {
|
||||
margin-top : 0.2em;
|
||||
margin-bottom : 0.2em;
|
||||
font-family : "MrJeeves";
|
||||
font-family : 'MrJeeves';
|
||||
font-weight : 800;
|
||||
color : @headerText;
|
||||
}
|
||||
@@ -117,7 +117,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
-moz-column-span : all;
|
||||
& + p::first-letter {
|
||||
float : left;
|
||||
font-family : "Solberry";
|
||||
font-family : 'Solberry';
|
||||
font-size : 10em;
|
||||
line-height : 0.795em;
|
||||
color : #222222;
|
||||
@@ -134,7 +134,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
}
|
||||
h5 {
|
||||
margin-bottom : 0.2em;
|
||||
font-family : "ScalySansSmallCaps";
|
||||
font-family : 'ScalySansSmallCaps';
|
||||
font-size : 0.423cm;
|
||||
font-weight : 900;
|
||||
}
|
||||
@@ -200,7 +200,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
& + p { padding-bottom : 0px; }
|
||||
}
|
||||
h3 {
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
font-weight : normal;
|
||||
border-bottom : 1px solid @headerText;
|
||||
}
|
||||
@@ -380,7 +380,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
// ************************************/
|
||||
.phb .descriptive {
|
||||
margin-bottom : 1em;
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
background-color : #FAF7EA;
|
||||
border-style : solid;
|
||||
border-width : 7px;
|
||||
@@ -394,11 +394,11 @@ body { counter-reset : phb-page-numbers; }
|
||||
}
|
||||
p + p { padding-top : 0.8em; }
|
||||
em {
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
font-style : italic;
|
||||
}
|
||||
strong {
|
||||
font-family : "ScalySans";
|
||||
font-family : 'ScalySans';
|
||||
font-weight : 800;
|
||||
letter-spacing : -0.02em;
|
||||
}
|
||||
@@ -411,7 +411,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
.phb {
|
||||
.artist {
|
||||
position : absolute;
|
||||
font-family : "WalterTurncoat";
|
||||
font-family : 'WalterTurncoat';
|
||||
font-size : 0.27cm;
|
||||
color : @captionText;
|
||||
text-align : center;
|
||||
@@ -421,7 +421,7 @@ body { counter-reset : phb-page-numbers; }
|
||||
text-indent : unset;
|
||||
}
|
||||
h5 {
|
||||
font-family : "WalterTurncoat";
|
||||
font-family : 'WalterTurncoat';
|
||||
font-size : 1.3em;
|
||||
}
|
||||
a {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
}
|
||||
|
||||
.page {
|
||||
background-image : url("/assets/DMG_background.png");
|
||||
background-image : url('/assets/DMG_background.png');
|
||||
background-size : cover;
|
||||
|
||||
/* TABLES WITHIN NOTES */
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
&::after {
|
||||
height : 58px;
|
||||
background-image : url("/assets/DMG_footerAccent.png");
|
||||
background-image : url('/assets/DMG_footerAccent.png');
|
||||
}
|
||||
|
||||
.footnote { bottom : 40px; }
|
||||
|
||||
@@ -6,164 +6,12 @@ const MonsterBlockGen = require('./snippets/monsterblock.gen.js');
|
||||
const scriptGen = require('./snippets/script.gen.js');
|
||||
const ClassFeatureGen = require('./snippets/classfeature.gen.js');
|
||||
const CoverPageGen = require('./snippets/coverpage.gen.js');
|
||||
const TableOfContentsGen = require('./snippets/tableOfContents.gen.js');
|
||||
const indexGen = require('./snippets/index.gen.js');
|
||||
const QuoteGen = require('./snippets/quote.gen.js');
|
||||
const dedent = require('dedent-tabs').default;
|
||||
|
||||
|
||||
|
||||
module.exports = [
|
||||
|
||||
{
|
||||
groupName : 'Text Editor',
|
||||
icon : 'fas fa-pencil-alt',
|
||||
view : 'text',
|
||||
snippets : [
|
||||
{
|
||||
name : 'Table of Contents',
|
||||
icon : 'fas fa-book',
|
||||
gen : TableOfContentsGen,
|
||||
experimental : true,
|
||||
subsnippets : [
|
||||
{
|
||||
name : 'Generate Table of Contents',
|
||||
icon : 'fas fa-book',
|
||||
gen : TableOfContentsGen,
|
||||
experimental : true
|
||||
},
|
||||
{
|
||||
name : 'Table of Contents Individual Inclusion',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocInclude# CHANGE # to your header level
|
||||
}}\n`,
|
||||
subsnippets : [
|
||||
{
|
||||
name : 'Individual Inclusion H1',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocIncludeH1 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Inclusion H2',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocIncludeH2 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Inclusion H3',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocIncludeH3 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Inclusion H4',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocIncludeH4 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Inclusion H5',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocIncludeH5 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Inclusion H6',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocIncludeH6 \n
|
||||
}}\n`,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name : 'Table of Contents Range Inclusion',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocDepthH3
|
||||
}}\n`,
|
||||
subsnippets : [
|
||||
{
|
||||
name : 'Include in ToC up to H3',
|
||||
icon : 'fas fa-dice-three',
|
||||
gen : dedent `\n{{tocDepthH3
|
||||
}}\n`,
|
||||
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H4',
|
||||
icon : 'fas fa-dice-four',
|
||||
gen : dedent `\n{{tocDepthH4
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H5',
|
||||
icon : 'fas fa-dice-five',
|
||||
gen : dedent `\n{{tocDepthH5
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H6',
|
||||
icon : 'fas fa-dice-six',
|
||||
gen : dedent `\n{{tocDepthH6
|
||||
}}\n`,
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
name : 'Table of Contents Individual Exclusion',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH1 \n
|
||||
}}\n`,
|
||||
subsnippets : [
|
||||
{
|
||||
name : 'Individual Exclusion H1',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH1 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Exclusion H2',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH2 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Exclusion H3',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH3 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Exclusion H4',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH4 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Exclusion H5',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH5 \n
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Individual Exclusion H6',
|
||||
icon : 'fas fa-book',
|
||||
gen : dedent `\n{{tocExcludeH6 \n
|
||||
}}\n`,
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
name : 'Index',
|
||||
icon : 'fas fa-bars',
|
||||
gen : indexGen,
|
||||
experimental : true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
groupName : 'Style Editor',
|
||||
icon : 'fas fa-pencil-alt',
|
||||
@@ -192,70 +40,9 @@ module.exports = [
|
||||
line-height: 1em;
|
||||
}\n\n`
|
||||
},
|
||||
{
|
||||
name : 'Table of Contents Toggles',
|
||||
icon : 'fas fa-book',
|
||||
subsnippets : [
|
||||
{
|
||||
name : 'Enable H1-H4 all pages',
|
||||
icon : 'fas fa-dice-four',
|
||||
gen : `.page {\n\th4 {--TOC: include; }\n}\n\n`,
|
||||
},
|
||||
{
|
||||
name : 'Enable H1-H5 all pages',
|
||||
icon : 'fas fa-dice-five',
|
||||
gen : `.page {\n\th4, h5 {--TOC: include; }\n}\n\n`,
|
||||
},
|
||||
{
|
||||
name : 'Enable H1-H6 all pages',
|
||||
icon : 'fas fa-dice-six',
|
||||
gen : `.page {\n\th4, h5, h6 {--TOC: include; }\n}\n\n`,
|
||||
},
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/*********************** IMAGES *******************/
|
||||
{
|
||||
groupName : 'Images',
|
||||
icon : 'fas fa-images',
|
||||
view : 'text',
|
||||
snippets : [
|
||||
{
|
||||
name : 'Image',
|
||||
icon : 'fas fa-image',
|
||||
gen : dedent`
|
||||
 {width:325px,mix-blend-mode:multiply}
|
||||
|
||||
{{artist,position:relative,top:-230px,left:10px,margin-bottom:-30px
|
||||
##### Cat Warrior
|
||||
[Kyoung Hwan Kim](https://www.artstation.com/tahra)
|
||||
}}`
|
||||
},
|
||||
{
|
||||
name : 'Background Image',
|
||||
icon : 'fas fa-tree',
|
||||
gen : dedent`
|
||||
 {position:absolute,top:50px,right:30px,width:280px}
|
||||
|
||||
{{artist,top:80px,right:30px
|
||||
##### Homebrew Mug
|
||||
[naturalcrit](https://homebrew.naturalcrit.com)
|
||||
}}`
|
||||
},
|
||||
{
|
||||
name : 'Watermark',
|
||||
icon : 'fas fa-id-card',
|
||||
gen : dedent`
|
||||
{{watermark Homebrewery}}\n`
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
/************************* PHB ********************/
|
||||
|
||||
{
|
||||
groupName : 'PHB',
|
||||
icon : 'fas fa-book',
|
||||
@@ -450,9 +237,6 @@ module.exports = [
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
/**************** PAGE *************/
|
||||
|
||||
{
|
||||
|
||||
@@ -791,47 +791,8 @@
|
||||
// * TABLE OF CONTENTS
|
||||
// *****************************/
|
||||
|
||||
// Default Exclusions
|
||||
// Anything not excluded is included, default Headers are H1, H2, and H3.
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.page:has(.frontCover),
|
||||
.page:has(.backCover),
|
||||
.page:has(.insideCover),
|
||||
.monster,
|
||||
.noToC,
|
||||
.toc { --TOC : exclude; }
|
||||
|
||||
|
||||
// Brew level default inclusion changes.
|
||||
// These add Headers 'back' to inclusion.
|
||||
|
||||
//NOTE: DO NOT USE :HAS WITH .PAGES!!! EXTREMELY SLOW TO RENDER ON LARGE DOCS!
|
||||
|
||||
// Block level inclusion changes
|
||||
// These include either a single (include) or a range (depth)
|
||||
.tocIncludeH1 h1 {--TOC : include; }
|
||||
.tocIncludeH2 h2 {--TOC : include; }
|
||||
.tocIncludeH3 h3 {--TOC : include; }
|
||||
.tocIncludeH4 h4 {--TOC : include; }
|
||||
.tocIncludeH5 h5 {--TOC : include; }
|
||||
.tocIncludeH6 h6 {--TOC : include; }
|
||||
|
||||
.tocDepthH2 :is(h1, h2) {--TOC : include; }
|
||||
.tocDepthH3 :is(h1, h2, h3) {--TOC : include; }
|
||||
.tocDepthH4 :is(h1, h2, h3, h4) {--TOC : include; }
|
||||
.tocDepthH5 :is(h1, h2, h3, h4, h5) {--TOC : include; }
|
||||
.tocDepthH6 :is(h1, h2, h3, h4, h5, h6) {--TOC : include; }
|
||||
|
||||
// Block level exclusion changes
|
||||
// These exclude a single block level
|
||||
.tocExcludeH1 h1 {--TOC : exclude; }
|
||||
.tocExcludeH2 h2 {--TOC : exclude; }
|
||||
.tocExcludeH3 h3 {--TOC : exclude; }
|
||||
.tocExcludeH4 h4 {--TOC : exclude; }
|
||||
.tocExcludeH5 h5 {--TOC : exclude; }
|
||||
.tocExcludeH6 h6 {--TOC : exclude; }
|
||||
// Additional Default Exclusions
|
||||
.monster { --TOC : exclude; }
|
||||
|
||||
.page:has(.partCover) {
|
||||
--TOC : exclude;
|
||||
@@ -964,6 +925,7 @@ h6,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// *****************************
|
||||
// * INDEX
|
||||
// *****************************/
|
||||
|
||||
@@ -4,6 +4,8 @@ const WatercolorGen = require('./snippets/watercolor.gen.js');
|
||||
const ImageMaskGen = require('./snippets/imageMask.gen.js');
|
||||
const FooterGen = require('./snippets/footer.gen.js');
|
||||
const dedent = require('dedent-tabs').default;
|
||||
const TableOfContentsGen = require('./snippets/tableOfContents.gen.js');
|
||||
const indexGen = require('./snippets/index.gen.js');
|
||||
|
||||
module.exports = [
|
||||
|
||||
@@ -141,7 +143,53 @@ module.exports = [
|
||||
[Homebrewery.Naturalcrit.com](https://homebrewery.naturalcrit.com)
|
||||
}}\n\n`;
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
name : 'Table of Contents',
|
||||
icon : 'fas fa-book',
|
||||
gen : TableOfContentsGen,
|
||||
experimental : true,
|
||||
subsnippets : [
|
||||
{
|
||||
name : 'Table of Contents',
|
||||
icon : 'fas fa-book',
|
||||
gen : TableOfContentsGen,
|
||||
experimental : true
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H3',
|
||||
icon : 'fas fa-dice-three',
|
||||
gen : dedent `\n{{tocDepthH3
|
||||
}}\n`,
|
||||
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H4',
|
||||
icon : 'fas fa-dice-four',
|
||||
gen : dedent `\n{{tocDepthH4
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H5',
|
||||
icon : 'fas fa-dice-five',
|
||||
gen : dedent `\n{{tocDepthH5
|
||||
}}\n`,
|
||||
},
|
||||
{
|
||||
name : 'Include in ToC up to H6',
|
||||
icon : 'fas fa-dice-six',
|
||||
gen : dedent `\n{{tocDepthH6
|
||||
}}\n`,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name : 'Index',
|
||||
icon : 'fas fa-bars',
|
||||
gen : indexGen,
|
||||
experimental : true
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -153,7 +201,7 @@ module.exports = [
|
||||
name : 'Add Comment',
|
||||
icon : 'fas fa-code',
|
||||
gen : '/* This is a comment that will not be rendered into your brew. */'
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
@import (less) './themes/fonts/iconFonts/diceFont.less';
|
||||
@import (less) './themes/fonts/iconFonts/gameIcons.less';
|
||||
@import (less) './themes/fonts/iconFonts/fontAwesome.less';
|
||||
@import (less) './themes/fonts/Journal/fonts.less';
|
||||
|
||||
:root {
|
||||
//Colors
|
||||
@@ -496,3 +497,117 @@ body { counter-reset : page-numbers 0; }
|
||||
&:not(:has(.skipCounting)) { counter-increment : page-numbers; }
|
||||
|
||||
}
|
||||
|
||||
// *****************************
|
||||
// * INDEX
|
||||
// *****************************/
|
||||
.page {
|
||||
.index {
|
||||
|
||||
ul ul { margin : 0; }
|
||||
|
||||
ul {
|
||||
padding-left : 0;
|
||||
text-indent : 0;
|
||||
list-style-type : none;
|
||||
}
|
||||
|
||||
& > ul > li {
|
||||
padding-left : 1.5em;
|
||||
text-indent : -1.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// *****************************
|
||||
// * TABLE OF CONTENTS
|
||||
// *****************************/
|
||||
|
||||
// Default Exclusions
|
||||
// Anything not exlcuded is included, default Headers are H1, H2, and H3.
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.page:has(.frontCover),
|
||||
.page:has(.backCover),
|
||||
.page:has(.insideCover),
|
||||
.noToC,
|
||||
.toc { --TOC : exclude; }
|
||||
|
||||
.tocDepthH2 :is(h1, h2) {--TOC : include; }
|
||||
.tocDepthH3 :is(h1, h2, h3) {--TOC : include; }
|
||||
.tocDepthH4 :is(h1, h2, h3, h4) {--TOC : include; }
|
||||
.tocDepthH5 :is(h1, h2, h3, h4, h5) {--TOC : include; }
|
||||
.tocDepthH6 :is(h1, h2, h3, h4, h5, h6) {--TOC : include; }
|
||||
|
||||
.tocIncludeH1 h1 {--TOC : include; }
|
||||
.tocIncludeH2 h2 {--TOC : include; }
|
||||
.tocIncludeH3 h3 {--TOC : include; }
|
||||
.tocIncludeH4 h4 {--TOC : include; }
|
||||
.tocIncludeH5 h5 {--TOC : include; }
|
||||
.tocIncludeH6 h6 {--TOC : include; }
|
||||
|
||||
.page {
|
||||
&:has(.toc)::after { display : none; }
|
||||
.toc {
|
||||
-webkit-column-break-inside : avoid;
|
||||
page-break-inside : avoid;
|
||||
break-inside : avoid;
|
||||
h1 {
|
||||
margin-bottom : 0.3cm;
|
||||
text-align : center;
|
||||
}
|
||||
a {
|
||||
display : inline;
|
||||
color : inherit;
|
||||
text-decoration : none;
|
||||
&:hover { text-decoration : underline; }
|
||||
}
|
||||
h4 {
|
||||
margin-top : 0.2cm;
|
||||
line-height : 0.4cm;
|
||||
& + ul li { line-height : 1.2em; }
|
||||
}
|
||||
ul {
|
||||
padding-left : 0;
|
||||
margin-top : 0;
|
||||
list-style-type : none;
|
||||
a {
|
||||
display : flex;
|
||||
flex-flow : row nowrap;
|
||||
justify-content : space-between;
|
||||
width : 100%;
|
||||
}
|
||||
li + li h3 {
|
||||
margin-top : 0.26cm;
|
||||
line-height : 1em;
|
||||
}
|
||||
h3 span:first-child::after { border : none; }
|
||||
span {
|
||||
display : contents;
|
||||
&:first-child::after {
|
||||
bottom : 0.08cm;
|
||||
flex : 1;
|
||||
margin-right : 0.16cm;
|
||||
margin-bottom : 0.08cm;
|
||||
margin-left : 0.08cm; /* Spacing before dot leaders */
|
||||
content : '';
|
||||
border-bottom : 0.05cm dotted #000000;
|
||||
}
|
||||
&:last-child {
|
||||
display : inline-block;
|
||||
align-self : flex-end;
|
||||
font-size : 0.34cm;
|
||||
font-weight : normal;
|
||||
}
|
||||
}
|
||||
ul { /* List indent */
|
||||
margin-left : 1em;
|
||||
}
|
||||
}
|
||||
&.wide {
|
||||
.useColumns(0.96, @fillMode: balance);
|
||||
}
|
||||
}
|
||||
.toc.wide li { break-inside : auto; }
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
}
|
||||
|
||||
.useSansSerif() {
|
||||
font-family : "PermanentMarker";
|
||||
font-family : 'PermanentMarker';
|
||||
font-size : 0.3cm;
|
||||
line-height : 1.2em;
|
||||
color : var(--HB_Color_Text2);
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
.page {
|
||||
padding : 2.1cm 1.9cm 1.7cm 3.8cm;
|
||||
background-image : url("/assets/Journal/Background1.webp");
|
||||
background-image : url('/assets/Journal/Background1.webp');
|
||||
background-repeat : no-repeat;
|
||||
background-size : 200% 100%;
|
||||
filter : drop-shadow(1px 4px 14px black);
|
||||
@@ -39,7 +39,7 @@
|
||||
background-position : right;
|
||||
}
|
||||
&:nth-of-type(2) {
|
||||
background-image : url("/assets/Journal/Background2.webp"); //Only first page should show ribbon
|
||||
background-image : url('/assets/Journal/Background2.webp'); //Only first page should show ribbon
|
||||
}
|
||||
|
||||
& .columnWrapper {
|
||||
@@ -51,7 +51,7 @@
|
||||
// * BASE
|
||||
// *****************************/
|
||||
.page {
|
||||
font-family : "ReenieBeanie";
|
||||
font-family : 'ReenieBeanie';
|
||||
font-size : 0.53cm;
|
||||
line-height : 0.8em;
|
||||
color : var(--HB_Color_Text);
|
||||
@@ -71,7 +71,7 @@
|
||||
// * HEADERS
|
||||
// *****************************/
|
||||
h1,h2,h3,h4,h5 {
|
||||
font-family : "FrederickaTheGreat";
|
||||
font-family : 'FrederickaTheGreat';
|
||||
font-weight : unset;
|
||||
color : var(--HB_Color_HeaderText);
|
||||
}
|
||||
@@ -89,7 +89,7 @@
|
||||
margin-right : 0.1em;
|
||||
margin-bottom : -20px;
|
||||
margin-left : -40px;
|
||||
font-family : "FrederickaTheGreat";
|
||||
font-family : 'FrederickaTheGreat';
|
||||
font-size : 1.9em;
|
||||
line-height : 1em;
|
||||
}
|
||||
@@ -114,7 +114,7 @@
|
||||
&:nth-of-type(3n) { transform : rotate(-1.5deg); }
|
||||
}
|
||||
h5 {
|
||||
font-family : "PermanentMarker";
|
||||
font-family : 'PermanentMarker';
|
||||
font-size : 0.4cm;
|
||||
font-weight : bold;
|
||||
line-height : 0.951em; //Font is misaligned. Shift up slightly
|
||||
@@ -146,14 +146,14 @@
|
||||
.note {
|
||||
.useSansSerif();
|
||||
padding : 0.2cm;
|
||||
background-image : url("/assets/Journal/HashMarks.png"),
|
||||
background-image : url('/assets/Journal/HashMarks.png'),
|
||||
linear-gradient(to bottom right, #FF000000, #A36A4E14, #41212100);
|
||||
background-repeat : no-repeat;
|
||||
background-position : center;
|
||||
background-size : 120% 120%;
|
||||
border-style : solid;
|
||||
border-width : 1px;
|
||||
border-image-source : url("/assets/Journal/Border1.png");
|
||||
border-image-source : url('/assets/Journal/Border1.png');
|
||||
border-image-slice : 18 18 18 18;
|
||||
border-image-width : 6px 6px 6px 6px;
|
||||
border-image-outset : 5px 5px 5px 5px;
|
||||
@@ -173,7 +173,7 @@
|
||||
.descriptive {
|
||||
.useSansSerif();
|
||||
padding : 0.2cm;
|
||||
background-image : url("/assets/Journal/HashMarks.png"),
|
||||
background-image : url('/assets/Journal/HashMarks.png'),
|
||||
linear-gradient(to bottom right, #FF000000, #41212114, #41212100);
|
||||
background-repeat : no-repeat;
|
||||
background-position : center;
|
||||
@@ -201,7 +201,7 @@
|
||||
.artist {
|
||||
position : absolute;
|
||||
width : auto;
|
||||
font-family : "WalterTurncoat";
|
||||
font-family : 'WalterTurncoat';
|
||||
font-size : 0.27cm;
|
||||
color : var(--HB_Color_CaptionText);
|
||||
text-align : center;
|
||||
@@ -211,7 +211,7 @@
|
||||
text-indent : unset;
|
||||
}
|
||||
h5 {
|
||||
font-family : "WalterTurncoat";
|
||||
font-family : 'WalterTurncoat';
|
||||
font-size : 1.3em;
|
||||
}
|
||||
a {
|
||||
@@ -309,7 +309,7 @@
|
||||
.pageNumber {
|
||||
right : 3cm;
|
||||
bottom : 1.25cm;
|
||||
font-family : "FrederickaTheGreat";
|
||||
font-family : 'FrederickaTheGreat';
|
||||
color : var(--HB_Color_HeaderText);
|
||||
}
|
||||
.footnote {
|
||||
@@ -370,7 +370,7 @@
|
||||
|
||||
.page .spellList {
|
||||
.useSansSerif();
|
||||
font-family : "PermanentMarker";
|
||||
font-family : 'PermanentMarker';
|
||||
column-count : 2;
|
||||
ul + h5 { margin-top : 15px; }
|
||||
ul {
|
||||
@@ -439,7 +439,7 @@
|
||||
&:last-child {
|
||||
width : 1%;
|
||||
padding-left : 0.06cm; /* Spacing after dot leaders */
|
||||
font-family : "ReenieBeanie";
|
||||
font-family : 'ReenieBeanie';
|
||||
font-size : 0.34cm;
|
||||
font-weight : normal;
|
||||
vertical-align : bottom; /* Keep page number bottom-aligned */
|
||||
|
||||
Reference in New Issue
Block a user