Merge branch 'master' into hbfm

This commit is contained in:
David Bolack
2026-08-25 13:14:53 -05:00
7 changed files with 581 additions and 369 deletions
+26 -20
View File
@@ -2,26 +2,32 @@ import _ from 'lodash';
// Default properties for newly-created brews
const DEFAULT_BREW = {
title : '',
text : '',
style : undefined,
description : '',
editId : undefined,
shareId : undefined,
createdAt : undefined,
updatedAt : undefined,
renderer : 'V3',
theme : '5ePHB',
authors : [],
tags : [],
lang : 'en',
thumbnail : '',
views : 0,
published : false,
pageCount : 1,
gDrive : false,
trashed : false
title : '',
text : '',
style : undefined,
description : '',
editId : undefined,
shareId : undefined,
createdAt : undefined,
updatedAt : undefined,
renderer : 'V3',
theme : '5ePHB',
authors : [],
tags : [],
lang : 'en',
thumbnail : '',
views : 0,
published : false,
pageCount : 1,
gDrive : false,
trashed : false,
bleedSize : { top: '.125in', bottom: '.125in', inner: '.125in', outer: '.125in' },
safetySpace : { top: '.25in', bottom: '.25in', outer: '.25in', inner: '.5in' },
trimSize : { width: '8.5in', height: '11in' },
columns : '2',
columnGutter : '.125in',
license : 'None',
legalAuthors : ''
};
// Default values for older brews with missing properties
// e.g., missing "renderer" is assumed to be "legacy"
+8
View File
@@ -218,6 +218,14 @@ const api = {
const metadata = _.pick(brew, ['title', 'description', 'tags', 'renderer', 'theme']);
const snippetsArray = brewSnippetsToJSON('brew_snippets', brew.snippets, null, false).snippets;
metadata.snippets = snippetsArray.length > 0 ? snippetsArray : undefined;
metadata.bleedSize = { top: brew?.bleedSize?.top, bottom: brew?.bleedSize?.bottom, inner: brew?.bleedSize?.inner, outer: brew?.bleedSize?.outer };
metadata.safetySpace = { top: brew?.safetySpace?.top, bottom: brew?.safetySpace?.bottom, outer: brew?.safetySpace?.outer, inner: brew?.safetySpace?.inner };
metadata.trimSize = { width: brew?.trimSize?.width, height: brew?.trimSize?.height };
metadata.columns = brew?.columns;
metadata.columnGutter = brew?.columnGutter;
metadata.license = brew?.license;
metadata.legalAuthors = brew?.legalAuthors;
text = `\`\`\`metadata\n` +
`${yaml.dump(metadata)}\n` +
`\`\`\`\n\n` +
+243 -36
View File
@@ -359,7 +359,27 @@ describe('Tests for api', ()=>{
style : undefined,
trashed : false,
updatedAt : undefined,
views : 0
views : 0,
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
});
expect(next).toHaveBeenCalled();
expect(api.getId).toHaveBeenCalledWith(req);
@@ -450,7 +470,27 @@ describe('Tests for api', ()=>{
tags : ['something', 'fun'],
renderer : 'v3',
theme : 'phb',
googleId : '12345'
googleId : '12345',
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
});
expect(result).toEqual(`\`\`\`metadata
@@ -461,6 +501,23 @@ tags:
- fun
renderer: v3
theme: phb
bleedSize:
top: .125in
bottom: .125in
inner: .125in
outer: .125in
safetySpace:
top: .25in
bottom: .25in
outer: .25in
inner: .5in
trimSize:
width: 8.5in
height: 11in
columns: '2'
columnGutter: .125in
license: None
legalAuthors: ''
\`\`\`
@@ -476,7 +533,27 @@ brew`);
tags : ['something', 'fun'],
renderer : 'v3',
theme : 'phb',
googleId : '12345'
googleId : '12345',
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
});
expect(result).toEqual(`\`\`\`metadata
@@ -487,6 +564,23 @@ tags:
- fun
renderer: v3
theme: phb
bleedSize:
top: .125in
bottom: .125in
inner: .125in
outer: .125in
safetySpace:
top: .25in
bottom: .25in
outer: .25in
inner: .5in
trimSize:
width: 8.5in
height: 11in
columns: '2'
columnGutter: .125in
license: None
legalAuthors: ''
\`\`\`
@@ -593,16 +687,16 @@ brew`);
expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({
_id : '1',
authors : ['test user'],
createdAt : undefined,
description : '',
editId : expect.any(String),
gDrive : false,
pageCount : 1,
published : false,
renderer : 'V3',
lang : 'en',
_id : '1',
authors : ['test user'],
createdAt : undefined,
description : '',
editId : expect.any(String),
gDrive : false,
pageCount : 1,
published : false,
renderer : 'V3',
lang : 'en',
shareId : expect.any(String),
style : undefined,
tags : [],
@@ -613,7 +707,27 @@ brew`);
title : 'asdf',
trashed : false,
updatedAt : undefined,
views : 0
views : 0,
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
});
});
@@ -651,28 +765,48 @@ brew`);
expect(google.newGoogleBrew).toHaveBeenCalled();
expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({
_id : '1',
authors : ['test user'],
createdAt : undefined,
description : '',
editId : expect.any(String),
gDrive : false,
pageCount : 1,
published : false,
renderer : 'V3',
lang : 'en',
shareId : expect.any(String),
googleId : expect.any(String),
style : undefined,
tags : [],
text : undefined,
textBin : undefined,
theme : '5ePHB',
thumbnail : '',
title : 'asdf',
trashed : false,
updatedAt : undefined,
views : 0
_id : '1',
authors : ['test user'],
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
createdAt : undefined,
description : '',
editId : expect.any(String),
gDrive : false,
pageCount : 1,
published : false,
renderer : 'V3',
lang : 'en',
shareId : expect.any(String),
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
googleId : expect.any(String),
style : undefined,
tags : [],
text : undefined,
textBin : undefined,
theme : '5ePHB',
thumbnail : '',
title : 'asdf',
trashed : false,
trimSize: {
width: '8.5in',
height: '11in',
},
updatedAt : undefined,
views : 0
});
});
});
@@ -1164,6 +1298,79 @@ brew`);
// Text
expect(testBrew.text).toEqual('text\n');
});
it('extended metadata', async ()=>{
const testBrew = {
text : '```metadata\n' +
'title: title\n' +
'description: description\n' +
'tags: [ \'tag a\' , \'tag b\' ]\n' +
'renderer: legacy\n' +
'theme: 5ePHB\n' +
'lang: en\n' +
'bleedSize:\n' +
' top: 1.5in\n' +
' bottom: 1.5in\n' +
' outer: 1.5in\n' +
' inner: 1.5in\n' +
'safetySpace:\n' +
' top: 1.25in\n' +
' bottom: 1.25in\n' +
' outer: 1.25in\n' +
' inner: 1.5in\n' +
'trimSize:\n' +
' width: 18.5in\n' +
' height: 111in\n' +
'columns: 12\n' +
'columnGutter: 1.125in\n' +
'license: AELF\n' +
'legalAuthors: Tom Bombadil\n' +
'\n' +
'```\n' +
'\n' +
'```css\n' +
'style\n' +
'style\n' +
'style\n' +
'```\n' +
'\n' +
'text\n'
};
splitTextStyleAndMetadata(testBrew);
// Metadata
expect(testBrew.title).toEqual('title');
expect(testBrew.description).toEqual('description');
expect(testBrew.renderer).toEqual('legacy');
expect(testBrew.theme).toEqual('5ePHB');
expect(testBrew.lang).toEqual('en');
// Paper Specfications
expect(testBrew.bleedSize.top).toEqual('1.5in');
expect(testBrew.bleedSize.bottom).toEqual('1.5in');
expect(testBrew.bleedSize.inner).toEqual('1.5in');
expect(testBrew.bleedSize.outer).toEqual('1.5in');
expect(testBrew.safetySpace.top).toEqual('1.25in');
expect(testBrew.safetySpace.bottom).toEqual('1.25in');
expect(testBrew.safetySpace.inner).toEqual('1.5in');
expect(testBrew.safetySpace.outer).toEqual('1.25in');
expect(testBrew.trimSize.width).toEqual('18.5in');
expect(testBrew.trimSize.height).toEqual('111in');
expect(testBrew.columns).toEqual(12);
expect(testBrew.columnGutter).toEqual('1.125in');
// Extended Metadata
expect(testBrew.license).toEqual('AELF');
expect(testBrew.legalAuthors).toEqual('Tom Bombadil');
// Style
expect(testBrew.style).toEqual('style\nstyle\nstyle\n');
// Text
expect(testBrew.text).toEqual('text\n');
});
});
});