mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-15 12:42:45 +00:00
Merge branch 'master' into page-numbers-via-JS
This commit is contained in:
15
changelog.md
15
changelog.md
@@ -33,6 +33,21 @@ pre {
|
|||||||
## changelog
|
## changelog
|
||||||
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
|
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
|
||||||
|
|
||||||
|
### Wednesday 17/11/2021 - v3.0.4
|
||||||
|
{{taskList
|
||||||
|
* [x] Fixed incorrect sorting of Google brews by page count and views on the user page.
|
||||||
|
|
||||||
|
Fixes issues: [#1793](https://github.com/naturalcrit/homebrewery/issues/1793)
|
||||||
|
|
||||||
|
* [x] Added code folding! Only on a page-level for now. Hotkeys `CTRL + [` and `CTRL + ]` to fold/unfold all pages. (Thanks jeddai, new contributor!)
|
||||||
|
|
||||||
|
Fixes issues: [#629](https://github.com/naturalcrit/homebrewery/issues/629)
|
||||||
|
|
||||||
|
* [x] Fixed rendering issues due to the latest Chrome update to version 96. (Also thanks to jeddai!)
|
||||||
|
|
||||||
|
Fixes issues: [#1828](https://github.com/naturalcrit/homebrewery/issues/1828)
|
||||||
|
}}
|
||||||
|
|
||||||
### Wednesday 27/10/2021 - v3.0.3
|
### Wednesday 27/10/2021 - v3.0.3
|
||||||
|
|
||||||
{{taskList
|
{{taskList
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ const Editor = createClass({
|
|||||||
const codeMirror = this.refs.codeEditor.codeMirror;
|
const codeMirror = this.refs.codeEditor.codeMirror;
|
||||||
|
|
||||||
//reset custom text styles
|
//reset custom text styles
|
||||||
const customHighlights = codeMirror.getAllMarks();
|
const customHighlights = codeMirror.getAllMarks().filter((mark)=>!mark.__isFold); //Don't undo code folding
|
||||||
for (let i=0;i<customHighlights.length;i++) customHighlights[i].clear();
|
for (let i=0;i<customHighlights.length;i++) customHighlights[i].clear();
|
||||||
|
|
||||||
// remove all widgets (page numbers in Editor)
|
// remove all widgets (page numbers in Editor)
|
||||||
|
|||||||
2364
package-lock.json
generated
2364
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "homebrewery",
|
"name": "homebrewery",
|
||||||
"description": "Create authentic looking D&D homebrews using only markdown",
|
"description": "Create authentic looking D&D homebrews using only markdown",
|
||||||
"version": "3.0.3",
|
"version": "3.0.4",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "16.11.x"
|
"node": "16.11.x"
|
||||||
},
|
},
|
||||||
@@ -41,27 +41,27 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.16.0",
|
"@babel/core": "^7.16.0",
|
||||||
"@babel/plugin-transform-runtime": "^7.16.0",
|
"@babel/plugin-transform-runtime": "^7.16.4",
|
||||||
"@babel/preset-env": "^7.15.8",
|
"@babel/preset-env": "^7.16.0",
|
||||||
"@babel/preset-react": "^7.16.0",
|
"@babel/preset-react": "^7.16.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"classnames": "^2.3.1",
|
"classnames": "^2.3.1",
|
||||||
"codemirror": "^5.63.3",
|
"codemirror": "^5.63.3",
|
||||||
"cookie-parser": "^1.4.5",
|
"cookie-parser": "^1.4.6",
|
||||||
"create-react-class": "^15.7.0",
|
"create-react-class": "^15.7.0",
|
||||||
"dedent-tabs": "^0.10.1",
|
"dedent-tabs": "^0.10.1",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-async-handler": "^1.1.4",
|
"express-async-handler": "^1.1.4",
|
||||||
"express-static-gzip": "2.1.1",
|
"express-static-gzip": "2.1.1",
|
||||||
"fs-extra": "10.0.0",
|
"fs-extra": "10.0.0",
|
||||||
"googleapis": "89.0.0",
|
"googleapis": "91.0.0",
|
||||||
"jwt-simple": "^0.5.6",
|
"jwt-simple": "^0.5.6",
|
||||||
"less": "^3.13.1",
|
"less": "^3.13.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"marked": "3.0.8",
|
"marked": "3.0.8",
|
||||||
"markedLegacy": "npm:marked@^0.3.19",
|
"markedLegacy": "npm:marked@^0.3.19",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
"mongoose": "^6.0.12",
|
"mongoose": "^6.0.13",
|
||||||
"nanoid": "3.1.30",
|
"nanoid": "3.1.30",
|
||||||
"nconf": "^0.11.3",
|
"nconf": "^0.11.3",
|
||||||
"prop-types": "15.7.2",
|
"prop-types": "15.7.2",
|
||||||
@@ -75,8 +75,8 @@
|
|||||||
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
|
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.1.0",
|
"eslint": "^8.2.0",
|
||||||
"eslint-plugin-react": "^7.26.1",
|
"eslint-plugin-react": "^7.27.0",
|
||||||
"pico-check": "^2.1.3"
|
"pico-check": "^2.1.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
"codemirror/mode/gfm/gfm.js",
|
"codemirror/mode/gfm/gfm.js",
|
||||||
"codemirror/mode/css/css.js",
|
"codemirror/mode/css/css.js",
|
||||||
"codemirror/mode/javascript/javascript.js",
|
"codemirror/mode/javascript/javascript.js",
|
||||||
|
"codemirror/addon/fold/foldcode.js",
|
||||||
|
"codemirror/addon/fold/foldgutter.js",
|
||||||
"moment",
|
"moment",
|
||||||
"superagent",
|
"superagent",
|
||||||
"marked"
|
"marked"
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ GoogleActions = {
|
|||||||
updatedAt : file.modifiedTime,
|
updatedAt : file.modifiedTime,
|
||||||
gDrive : true,
|
gDrive : true,
|
||||||
googleId : file.id,
|
googleId : file.id,
|
||||||
pageCount : file.properties.pageCount,
|
pageCount : parseInt(file.properties.pageCount),
|
||||||
title : file.properties.title,
|
title : file.properties.title,
|
||||||
description : file.description,
|
description : file.description,
|
||||||
views : file.properties.views,
|
views : parseInt(file.properties.views),
|
||||||
tags : '',
|
tags : '',
|
||||||
published : file.properties.published ? file.properties.published == 'true' : false,
|
published : file.properties.published ? file.properties.published == 'true' : false,
|
||||||
authors : [req.account.username], //TODO: properly save and load authors to google drive
|
authors : [req.account.username], //TODO: properly save and load authors to google drive
|
||||||
|
|||||||
@@ -13,6 +13,13 @@ if(typeof navigator !== 'undefined'){
|
|||||||
require('codemirror/mode/gfm/gfm.js'); //Github flavoured markdown
|
require('codemirror/mode/gfm/gfm.js'); //Github flavoured markdown
|
||||||
require('codemirror/mode/css/css.js');
|
require('codemirror/mode/css/css.js');
|
||||||
require('codemirror/mode/javascript/javascript.js');
|
require('codemirror/mode/javascript/javascript.js');
|
||||||
|
|
||||||
|
//Addons
|
||||||
|
require('codemirror/addon/fold/foldcode.js');
|
||||||
|
require('codemirror/addon/fold/foldgutter.js');
|
||||||
|
|
||||||
|
const foldCode = require('./fold-code');
|
||||||
|
foldCode.registerHomebreweryHelper(CodeMirror);
|
||||||
}
|
}
|
||||||
|
|
||||||
const CodeEditor = createClass({
|
const CodeEditor = createClass({
|
||||||
@@ -74,8 +81,35 @@ const CodeEditor = createClass({
|
|||||||
'Ctrl-M' : this.makeSpan,
|
'Ctrl-M' : this.makeSpan,
|
||||||
'Cmd-M' : this.makeSpan,
|
'Cmd-M' : this.makeSpan,
|
||||||
'Ctrl-/' : this.makeComment,
|
'Ctrl-/' : this.makeComment,
|
||||||
'Cmd-/' : this.makeComment
|
'Cmd-/' : this.makeComment,
|
||||||
}
|
'Ctrl-[' : this.foldAllCode,
|
||||||
|
'Cmd-[' : this.foldAllCode,
|
||||||
|
'Ctrl-]' : this.unfoldAllCode,
|
||||||
|
'Cmd-]' : this.unfoldAllCode
|
||||||
|
},
|
||||||
|
foldGutter : true,
|
||||||
|
foldOptions : {
|
||||||
|
scanUp : true,
|
||||||
|
rangeFinder : CodeMirror.fold.homebrewery,
|
||||||
|
widget : (from, to)=>{
|
||||||
|
let text = '';
|
||||||
|
let currentLine = from.line;
|
||||||
|
const maxLength = 50;
|
||||||
|
while (currentLine <= to.line && text.length <= maxLength) {
|
||||||
|
text += this.codeMirror.getLine(currentLine);
|
||||||
|
if(currentLine < to.line)
|
||||||
|
text += ' ';
|
||||||
|
currentLine += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
text = text.trim();
|
||||||
|
if(text.length > maxLength)
|
||||||
|
text = `${text.substr(0, maxLength)}...`;
|
||||||
|
|
||||||
|
return `\u21A4 ${text} \u21A6`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
gutters : ['CodeMirror-linenumbers', 'CodeMirror-foldgutter']
|
||||||
});
|
});
|
||||||
|
|
||||||
// Note: codeMirror passes a copy of itself in this callback. cm === this.codeMirror. Either one works.
|
// Note: codeMirror passes a copy of itself in this callback. cm === this.codeMirror. Either one works.
|
||||||
@@ -120,6 +154,14 @@ const CodeEditor = createClass({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
foldAllCode : function() {
|
||||||
|
this.codeMirror.execCommand('foldAll');
|
||||||
|
},
|
||||||
|
|
||||||
|
unfoldAllCode : function() {
|
||||||
|
this.codeMirror.execCommand('unfoldAll');
|
||||||
|
},
|
||||||
|
|
||||||
//=-- Externally used -==//
|
//=-- Externally used -==//
|
||||||
setCursorPosition : function(line, char){
|
setCursorPosition : function(line, char){
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
@import (less) 'codemirror/lib/codemirror.css';
|
@import (less) 'codemirror/lib/codemirror.css';
|
||||||
|
@import (less) 'codemirror/addon/fold/foldgutter.css';
|
||||||
|
|
||||||
.codeEditor{
|
.codeEditor{
|
||||||
|
.CodeMirror-foldmarker {
|
||||||
|
font-family: inherit;
|
||||||
|
text-shadow: none;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
26
shared/naturalcrit/codeEditor/fold-code.js
Normal file
26
shared/naturalcrit/codeEditor/fold-code.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
module.exports = {
|
||||||
|
registerHomebreweryHelper : function(CodeMirror) {
|
||||||
|
CodeMirror.registerHelper('fold', 'homebrewery', function(cm, start) {
|
||||||
|
const matcher = /^\\page.*/;
|
||||||
|
const prevLine = cm.getLine(start.line - 1);
|
||||||
|
|
||||||
|
if(start.line === cm.firstLine() || prevLine.match(matcher)) {
|
||||||
|
const lastLineNo = cm.lastLine();
|
||||||
|
let end = start.line;
|
||||||
|
|
||||||
|
while (end < lastLineNo) {
|
||||||
|
if(cm.getLine(end + 1).match(matcher))
|
||||||
|
break;
|
||||||
|
++end;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
from : CodeMirror.Pos(start.line, 0),
|
||||||
|
to : CodeMirror.Pos(end, cm.getLine(end).length)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -79,7 +79,7 @@ body {
|
|||||||
p{
|
p{
|
||||||
overflow-wrap : break-word; //TODO: MAKE ALL MARGINS TOP-ONLY. USE * + * STYLE SELECTORS
|
overflow-wrap : break-word; //TODO: MAKE ALL MARGINS TOP-ONLY. USE * + * STYLE SELECTORS
|
||||||
display : block;
|
display : block;
|
||||||
line-height : 1.3em;
|
line-height : 1.25em;
|
||||||
&+* {
|
&+* {
|
||||||
margin-top : 0.325cm;
|
margin-top : 0.325cm;
|
||||||
}
|
}
|
||||||
@@ -90,14 +90,14 @@ body {
|
|||||||
ul{
|
ul{
|
||||||
margin-bottom : 0.8em;
|
margin-bottom : 0.8em;
|
||||||
padding-left : 1.4em;
|
padding-left : 1.4em;
|
||||||
line-height : 1.3em;
|
line-height : 1.25em;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
list-style-type : disc;
|
list-style-type : disc;
|
||||||
}
|
}
|
||||||
ol{
|
ol{
|
||||||
margin-bottom : 0.8em;
|
margin-bottom : 0.8em;
|
||||||
padding-left : 1.4em;
|
padding-left : 1.4em;
|
||||||
line-height : 1.3em;
|
line-height : 1.25em;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
list-style-type : decimal;
|
list-style-type : decimal;
|
||||||
}
|
}
|
||||||
@@ -162,17 +162,20 @@ body {
|
|||||||
//margin-top : 0px; //Font is misaligned. Shift up slightly
|
//margin-top : 0px; //Font is misaligned. Shift up slightly
|
||||||
//margin-bottom : 0.05cm;
|
//margin-bottom : 0.05cm;
|
||||||
font-size : 0.75cm;
|
font-size : 0.75cm;
|
||||||
|
line-height : 0.988em; //Font is misaligned. Shift up slightly
|
||||||
}
|
}
|
||||||
h3{
|
h3{
|
||||||
//margin-top : -0.1cm; //Font is misaligned. Shift up slightly
|
//margin-top : -0.1cm; //Font is misaligned. Shift up slightly
|
||||||
//margin-bottom : 0.1cm;
|
//margin-bottom : 0.1cm;
|
||||||
font-size : 0.575cm;
|
font-size : 0.575cm;
|
||||||
border-bottom : 2px solid @headerUnderline;
|
border-bottom : 2px solid @headerUnderline;
|
||||||
|
line-height : 0.995em; //Font is misaligned. Shift up slightly
|
||||||
}
|
}
|
||||||
h4{
|
h4{
|
||||||
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
||||||
//margin-bottom : 0.02cm;
|
//margin-bottom : 0.02cm;
|
||||||
font-size : 0.458cm;
|
font-size : 0.458cm;
|
||||||
|
line-height : 0.971em; //Font is misaligned. Shift up slightly
|
||||||
}
|
}
|
||||||
h5{
|
h5{
|
||||||
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
||||||
@@ -180,6 +183,7 @@ body {
|
|||||||
font-family : ScalySansSmallCapsRemake;
|
font-family : ScalySansSmallCapsRemake;
|
||||||
font-size : 0.423cm;
|
font-size : 0.423cm;
|
||||||
font-weight : 900;
|
font-weight : 900;
|
||||||
|
line-height : 0.951em; //Font is misaligned. Shift up slightly
|
||||||
& + * {
|
& + * {
|
||||||
margin-top : 0.2cm;
|
margin-top : 0.2cm;
|
||||||
}
|
}
|
||||||
@@ -581,7 +585,7 @@ body {
|
|||||||
}
|
}
|
||||||
p, ul{
|
p, ul{
|
||||||
font-size : 0.352cm;
|
font-size : 0.352cm;
|
||||||
line-height : 1.3em;
|
line-height : 1.265em;
|
||||||
}
|
}
|
||||||
ul{
|
ul{
|
||||||
margin-bottom : 0.5em;
|
margin-bottom : 0.5em;
|
||||||
@@ -741,7 +745,7 @@ body {
|
|||||||
// *****************************/
|
// *****************************/
|
||||||
.page {
|
.page {
|
||||||
dl {
|
dl {
|
||||||
line-height : 1.3em;
|
line-height : 1.25em;
|
||||||
padding-left : 1em;
|
padding-left : 1em;
|
||||||
white-space : pre-line;
|
white-space : pre-line;
|
||||||
& + * {
|
& + * {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ body {
|
|||||||
// *****************************/
|
// *****************************/
|
||||||
p{
|
p{
|
||||||
padding-bottom : 0.8em;
|
padding-bottom : 0.8em;
|
||||||
line-height : 1.3em;
|
line-height : 1.269em;
|
||||||
&+p{
|
&+p{
|
||||||
margin-top : -0.8em;
|
margin-top : -0.8em;
|
||||||
}
|
}
|
||||||
@@ -71,14 +71,14 @@ body {
|
|||||||
ul{
|
ul{
|
||||||
margin-bottom : 0.8em;
|
margin-bottom : 0.8em;
|
||||||
padding-left : 1.4em;
|
padding-left : 1.4em;
|
||||||
line-height : 1.3em;
|
line-height : 1.269em;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
list-style-type : disc;
|
list-style-type : disc;
|
||||||
}
|
}
|
||||||
ol{
|
ol{
|
||||||
margin-bottom : 0.8em;
|
margin-bottom : 0.8em;
|
||||||
padding-left : 1.4em;
|
padding-left : 1.4em;
|
||||||
line-height : 1.3em;
|
line-height : 1.269em;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
list-style-type : decimal;
|
list-style-type : decimal;
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,7 @@ body {
|
|||||||
font-family : Solberry;
|
font-family : Solberry;
|
||||||
font-size : 10em;
|
font-size : 10em;
|
||||||
color : #222;
|
color : #222;
|
||||||
line-height : 0.8em;
|
line-height : 0.795em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
h2{
|
h2{
|
||||||
@@ -191,7 +191,7 @@ body {
|
|||||||
box-shadow : 1px 4px 14px #888;
|
box-shadow : 1px 4px 14px #888;
|
||||||
p, ul{
|
p, ul{
|
||||||
font-size : 0.352cm;
|
font-size : 0.352cm;
|
||||||
line-height : 1.1em;
|
line-height : 1.083em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//If a note starts a column, give it space at the top to render border
|
//If a note starts a column, give it space at the top to render border
|
||||||
@@ -371,7 +371,7 @@ body {
|
|||||||
}
|
}
|
||||||
p, ul{
|
p, ul{
|
||||||
font-size : 0.352cm;
|
font-size : 0.352cm;
|
||||||
line-height : 1.3em;
|
line-height : 1.263em;
|
||||||
}
|
}
|
||||||
ul{
|
ul{
|
||||||
margin-bottom : 0.5em;
|
margin-bottom : 0.5em;
|
||||||
@@ -425,7 +425,7 @@ body {
|
|||||||
p{
|
p{
|
||||||
display : block;
|
display : block;
|
||||||
padding-bottom : 0px;
|
padding-bottom : 0px;
|
||||||
line-height : 1.5em;
|
line-height : 1.47em;
|
||||||
}
|
}
|
||||||
p + p {
|
p + p {
|
||||||
padding-top : .8em;
|
padding-top : .8em;
|
||||||
@@ -457,7 +457,7 @@ body {
|
|||||||
p, p + p {
|
p, p + p {
|
||||||
margin : unset;
|
margin : unset;
|
||||||
text-indent : unset;
|
text-indent : unset;
|
||||||
line-height : 1em;
|
line-height : 0.941em;
|
||||||
}
|
}
|
||||||
h5 {
|
h5 {
|
||||||
font-size : 1.3em;
|
font-size : 1.3em;
|
||||||
|
|||||||
Reference in New Issue
Block a user