diff --git a/server/app.js b/server/app.js
index 079f5e03c..6bd0c7c9a 100644
--- a/server/app.js
+++ b/server/app.js
@@ -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');
diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js
index a8b877f4b..0b90c051c 100644
--- a/shared/naturalcrit/markdown.js
+++ b/shared/naturalcrit/markdown.js
@@ -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',
diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js
index 41259da7e..4c91d7d00 100644
--- a/tests/markdown/variables.test.js
+++ b/tests/markdown/variables.test.js
@@ -410,4 +410,29 @@ describe('Regression Tests', ()=>{
const rendered = Markdown.render(source).trimReturns();
expect(rendered).toBe('
| title 1 | title 2 | title 3 | title 4 |
|---|
| foo | Ipsum | ) | ) |
');
});
+
+ it('Handle Extra spaces in image alt-text 1', function(){
+ const source='';
+ const rendered = Markdown.render(source).trimReturns();
+ expect(rendered).toBe('
');
+ });
+
+ it('Handle Extra spaces in image alt-text 2', function(){
+ const source='';
+ const rendered = Markdown.render(source).trimReturns();
+ expect(rendered).toBe('
');
+ });
+
+ it('Handle Extra spaces in image alt-text 3', function(){
+ const source='';
+ const rendered = Markdown.render(source).trimReturns();
+ expect(rendered).toBe('
');
+ });
+
+ 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('
');
+ });
+
});
\ No newline at end of file
diff --git a/themes/Legacy/5ePHB/style.less b/themes/Legacy/5ePHB/style.less
index 56d1bed94..41524c74c 100644
--- a/themes/Legacy/5ePHB/style.less
+++ b/themes/Legacy/5ePHB/style.less
@@ -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 {
diff --git a/themes/V3/5eDMG/style.less b/themes/V3/5eDMG/style.less
index cbc3fa890..d79533c2c 100644
--- a/themes/V3/5eDMG/style.less
+++ b/themes/V3/5eDMG/style.less
@@ -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; }
diff --git a/themes/V3/5ePHB/snippets.js b/themes/V3/5ePHB/snippets.js
index dbcdc6f2a..27ea62bea 100644
--- a/themes/V3/5ePHB/snippets.js
+++ b/themes/V3/5ePHB/snippets.js
@@ -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 *************/
{
diff --git a/themes/V3/5ePHB/style.less b/themes/V3/5ePHB/style.less
index 93cfdf719..555866ba4 100644
--- a/themes/V3/5ePHB/style.less
+++ b/themes/V3/5ePHB/style.less
@@ -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
// *****************************/
diff --git a/themes/V3/Blank/snippets.js b/themes/V3/Blank/snippets.js
index 380daa37a..1b347dd07 100644
--- a/themes/V3/Blank/snippets.js
+++ b/themes/V3/Blank/snippets.js
@@ -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. */'
- },
+ }
]
},
diff --git a/themes/V3/5ePHB/snippets/index.gen.js b/themes/V3/Blank/snippets/index.gen.js
similarity index 100%
rename from themes/V3/5ePHB/snippets/index.gen.js
rename to themes/V3/Blank/snippets/index.gen.js
diff --git a/themes/V3/5ePHB/snippets/tableOfContents.gen.js b/themes/V3/Blank/snippets/tableOfContents.gen.js
similarity index 100%
rename from themes/V3/5ePHB/snippets/tableOfContents.gen.js
rename to themes/V3/Blank/snippets/tableOfContents.gen.js
diff --git a/themes/V3/Blank/style.less b/themes/V3/Blank/style.less
index 9f2bd498e..01b85326f 100644
--- a/themes/V3/Blank/style.less
+++ b/themes/V3/Blank/style.less
@@ -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; }
+}
diff --git a/themes/V3/Journal/style.less b/themes/V3/Journal/style.less
index bddefb749..74c976f47 100644
--- a/themes/V3/Journal/style.less
+++ b/themes/V3/Journal/style.less
@@ -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 */