mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-03 19:12:41 +00:00
Merge branch 'master' into addEditorThemes-#362
This commit is contained in:
@@ -10,11 +10,11 @@ WORKDIR /usr/src/app
|
|||||||
# This improves caching so we don't have to download the dependencies every time the code changes
|
# This improves caching so we don't have to download the dependencies every time the code changes
|
||||||
COPY package.json ./
|
COPY package.json ./
|
||||||
# --ignore-scripts tells yarn not to run postbuild. We run it explicitly later
|
# --ignore-scripts tells yarn not to run postbuild. We run it explicitly later
|
||||||
RUN yarn install --ignore-scripts
|
RUN npm install --ignore-scripts
|
||||||
|
|
||||||
# Bundle app source and build application
|
# Bundle app source and build application
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN yarn build
|
RUN npm run build
|
||||||
|
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
CMD [ "yarn", "start" ]
|
CMD [ "npm", "start" ]
|
||||||
|
|||||||
@@ -19,17 +19,17 @@
|
|||||||
background-color : fade(#299, 15%);
|
background-color : fade(#299, 15%);
|
||||||
border-bottom : #299 solid 1px;
|
border-bottom : #299 solid 1px;
|
||||||
}
|
}
|
||||||
.block{
|
.block:not(.cm-comment){
|
||||||
color : purple;
|
color : purple;
|
||||||
font-weight : bold;
|
font-weight : bold;
|
||||||
//font-style: italic;
|
//font-style: italic;
|
||||||
}
|
}
|
||||||
.inline-block{
|
.inline-block:not(.cm-comment){
|
||||||
color : red;
|
color : red;
|
||||||
font-weight : bold;
|
font-weight : bold;
|
||||||
//font-style: italic;
|
//font-style: italic;
|
||||||
}
|
}
|
||||||
.injection{
|
.injection:not(.cm-comment){
|
||||||
color : green;
|
color : green;
|
||||||
font-weight : bold;
|
font-weight : bold;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,277 +1,278 @@
|
|||||||
@import 'naturalcrit/styles/colors.less';
|
@import "naturalcrit/styles/colors.less";
|
||||||
@navbarHeight : 28px;
|
@navbarHeight : 28px;
|
||||||
@keyframes pinkColoring {
|
@keyframes pinkColoring {
|
||||||
//from {color: white;}
|
0% {color : pink;}
|
||||||
//to {color: red;}
|
50% {color : pink;}
|
||||||
0% {color: pink;}
|
75% {color : red;}
|
||||||
50% {color: pink;}
|
100% {color : pink;}
|
||||||
75% {color: red;}
|
}
|
||||||
100% {color: pink;}
|
.homebrew nav {
|
||||||
}
|
.homebrewLogo {
|
||||||
.homebrew nav{
|
.animate(color);
|
||||||
.homebrewLogo{
|
font-family : CodeBold;
|
||||||
.animate(color);
|
font-size : 12px;
|
||||||
font-family : CodeBold;
|
color : white;
|
||||||
font-size : 12px;
|
div {
|
||||||
color : white;
|
margin-top : 2px;
|
||||||
div{
|
margin-bottom : -2px;
|
||||||
margin-top : 2px;
|
}
|
||||||
margin-bottom : -2px;
|
&:hover {
|
||||||
}
|
color : @blue;
|
||||||
&:hover{
|
}
|
||||||
color : @blue;
|
}
|
||||||
}
|
.editTitle.navItem {
|
||||||
}
|
padding : 2px 12px;
|
||||||
.editTitle.navItem{
|
input {
|
||||||
padding : 2px 12px;
|
font-family : "Open Sans", sans-serif;
|
||||||
input{
|
font-size : 12px;
|
||||||
width : 250px;
|
font-weight : 800;
|
||||||
margin : 0;
|
width : 250px;
|
||||||
padding : 2px;
|
margin : 0;
|
||||||
background-color : transparent;
|
padding : 2px;
|
||||||
font-family : 'Open Sans', sans-serif;
|
text-align : center;
|
||||||
font-size : 12px;
|
color : white;
|
||||||
font-weight : 800;
|
border : 1px solid @blue;
|
||||||
color : white;
|
outline : none;
|
||||||
text-align : center;
|
background-color : transparent;
|
||||||
border : 1px solid @blue;
|
}
|
||||||
outline : none;
|
.charCount {
|
||||||
}
|
display : inline-block;
|
||||||
.charCount{
|
margin-left : 8px;
|
||||||
display : inline-block;
|
text-align : right;
|
||||||
vertical-align : bottom;
|
vertical-align : bottom;
|
||||||
margin-left : 8px;
|
color : #666;
|
||||||
color : #666;
|
&.max {
|
||||||
text-align : right;
|
color : @red;
|
||||||
&.max{
|
}
|
||||||
color : @red;
|
}
|
||||||
}
|
}
|
||||||
}
|
.brewTitle.navItem {
|
||||||
}
|
font-size : 12px;
|
||||||
.brewTitle.navItem{
|
font-weight : 800;
|
||||||
height: 100%;
|
height : 100%;
|
||||||
font-size : 12px;
|
text-align : center;
|
||||||
font-weight : 800;
|
text-transform : initial;
|
||||||
color : white;
|
color : white;
|
||||||
text-align : center;
|
background-color : transparent;
|
||||||
text-transform : initial;
|
flex-grow : 1;
|
||||||
flex-grow : 1;
|
}
|
||||||
background-color: transparent;
|
.save-menu {
|
||||||
}
|
.dropdown {
|
||||||
.save-menu {
|
z-index : 1000;
|
||||||
.dropdown {
|
}
|
||||||
z-index: 1000;
|
.navItem i.fa-power-off {
|
||||||
}
|
color : red;
|
||||||
.navItem i.fa-power-off {
|
&.active {
|
||||||
color : red;
|
color : rgb(0, 182, 52);
|
||||||
&.active {
|
filter : drop-shadow(0 0 2px rgba(0, 182, 52, 0.765));
|
||||||
color : rgb(0, 182, 52);
|
}
|
||||||
filter : drop-shadow(0 0 2px rgba(0, 182, 52, 0.765))
|
}
|
||||||
}
|
}
|
||||||
}
|
.patreon.navItem {
|
||||||
}
|
border-right : 1px solid #666;
|
||||||
.patreon.navItem{
|
border-left : 1px solid #666;
|
||||||
border-left : 1px solid #666;
|
&:hover i {
|
||||||
border-right : 1px solid #666;
|
color : red;
|
||||||
&:hover i {
|
}
|
||||||
color: red;
|
i {
|
||||||
}
|
.animate(color);
|
||||||
i{
|
animation-name : pinkColoring;
|
||||||
.animate(color);
|
animation-duration : 2s;
|
||||||
animation-name: pinkColoring;
|
color : pink;
|
||||||
animation-duration: 2s;
|
}
|
||||||
color: pink;
|
}
|
||||||
}
|
.recent.navItem {
|
||||||
}
|
position : relative;
|
||||||
.recent.navItem {
|
.dropdown {
|
||||||
position : relative;
|
position : absolute;
|
||||||
.dropdown{
|
z-index : 10000;
|
||||||
position : absolute;
|
top : 28px;
|
||||||
top : 28px;
|
left : 0;
|
||||||
left : 0px;
|
overflow : hidden auto;
|
||||||
z-index : 10000;
|
width : 100%;
|
||||||
width : 100%;
|
max-height : ~"calc(100vh - 28px)";
|
||||||
overflow : hidden auto;
|
scrollbar-color : #666 #333;
|
||||||
max-height : ~"calc(100vh - 28px)";
|
scrollbar-width : thin;
|
||||||
scrollbar-color : #666 #333;
|
h4 {
|
||||||
scrollbar-width : thin;
|
font-size : 0.8em;
|
||||||
h4{
|
display : block;
|
||||||
display : block;
|
box-sizing : border-box;
|
||||||
box-sizing : border-box;
|
padding : 5px 0;
|
||||||
padding : 5px 0px;
|
text-align : center;
|
||||||
background-color : #333;
|
color : #BBB;
|
||||||
font-size : 0.8em;
|
border-top : 1px solid #888;
|
||||||
color : #bbb;
|
background-color : #333;
|
||||||
text-align : center;
|
&:nth-of-type(1) {
|
||||||
border-top : 1px solid #888;
|
background-color : darken(@teal, 20%);
|
||||||
&:nth-of-type(1){ background-color: darken(@teal, 20%); }
|
}
|
||||||
&:nth-of-type(2){ background-color: darken(@purple, 30%); }
|
&:nth-of-type(2) {
|
||||||
}
|
background-color : darken(@purple, 30%);
|
||||||
.item{
|
}
|
||||||
|
}
|
||||||
|
.item {
|
||||||
#backgroundColorsHover;
|
#backgroundColorsHover;
|
||||||
.animate(background-color);
|
.animate(background-color);
|
||||||
position : relative;
|
position : relative;
|
||||||
display : block;
|
display : block;
|
||||||
box-sizing : border-box;
|
overflow : clip;
|
||||||
padding : 8px 5px 13px;
|
box-sizing : border-box;
|
||||||
background-color : #333;
|
padding : 8px 5px 13px;
|
||||||
color : white;
|
text-decoration : none;
|
||||||
text-decoration : none;
|
color : white;
|
||||||
border-top : 1px solid #888;
|
border-top : 1px solid #888;
|
||||||
overflow : clip;
|
background-color : #333;
|
||||||
.clear{
|
.clear {
|
||||||
display : none;
|
position : absolute;
|
||||||
position : absolute;
|
top : 50%;
|
||||||
top : 50%;
|
right : 0;
|
||||||
transform : translateY(-50%);
|
display : none;
|
||||||
right : 0px;
|
width : 20px;
|
||||||
width : 20px;
|
height : 100%;
|
||||||
height : 100%;
|
transform : translateY(-50%);
|
||||||
background-color : #333;
|
opacity : 70%;
|
||||||
opacity : 70%;
|
border-radius : 3px;
|
||||||
border-radius : 3px;
|
background-color : #333;
|
||||||
&:hover {
|
&:hover {
|
||||||
opacity : 100%;
|
opacity : 100%;
|
||||||
}
|
}
|
||||||
i {
|
i {
|
||||||
text-align : center;
|
font-size : 10px;
|
||||||
font-size : 10px;
|
width : 100%;
|
||||||
margin : 0;
|
height : 100%;
|
||||||
height :100%;
|
margin : 0;
|
||||||
width :100%;
|
text-align : center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&:hover{
|
&:hover {
|
||||||
background-color : @blue;
|
background-color : @blue;
|
||||||
|
.clear {
|
||||||
.clear{
|
display : grid;
|
||||||
display : grid;
|
place-content : center;
|
||||||
place-content : center;
|
}
|
||||||
}
|
}
|
||||||
}
|
.title {
|
||||||
.title{
|
display : inline-block;
|
||||||
display : inline-block;
|
overflow : hidden;
|
||||||
overflow : hidden;
|
width : 100%;
|
||||||
width : 100%;
|
white-space : nowrap;
|
||||||
text-overflow : ellipsis;
|
text-overflow : ellipsis;
|
||||||
white-space : nowrap;
|
}
|
||||||
}
|
.time {
|
||||||
.time{
|
font-size : 0.7em;
|
||||||
position : absolute;
|
position : absolute;
|
||||||
right : 2px;
|
right : 2px;
|
||||||
bottom : 2px;
|
bottom : 2px;
|
||||||
font-size : 0.7em;
|
color : #888;
|
||||||
color : #888;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
.metadata.navItem {
|
||||||
.metadata.navItem {
|
position : relative;
|
||||||
position : relative;
|
display : flex;
|
||||||
padding: 0;
|
align-items : center;
|
||||||
align-items: center;
|
height : 100%;
|
||||||
display : flex;
|
padding : 0;
|
||||||
flex-grow: 1;
|
flex-grow : 1;
|
||||||
height: 100%;
|
i {
|
||||||
i{
|
margin-right : 10px;
|
||||||
margin-right: 10px;
|
}
|
||||||
}
|
.window {
|
||||||
.window{
|
position : absolute;
|
||||||
position : absolute;
|
z-index : -1;
|
||||||
bottom : 0;
|
bottom : 0;
|
||||||
width : 440px;
|
left : 50%;
|
||||||
left : 50%;
|
display : flex;
|
||||||
max-height : ~"calc(100vh - 28px)";
|
justify-content : flex-start;
|
||||||
background-color : #333;
|
width : 440px;
|
||||||
border : 3px solid #444;
|
max-height : ~"calc(100vh - 28px)";
|
||||||
border-top : unset;
|
margin : 0 auto;
|
||||||
border-radius : 0 0 5px 5px;
|
padding : 0 10px 5px;
|
||||||
box-shadow : inset 0 7px 9px -7px #111;
|
transition : transform 0.4s, opacity 0.4s;
|
||||||
display : flex;
|
border : 3px solid #444;
|
||||||
flex-flow : row wrap;
|
border-top : unset;
|
||||||
justify-content : flex-start;
|
border-radius : 0 0 5px 5px;
|
||||||
align-content : baseline;
|
background-color : #333;
|
||||||
padding : 0px 10px 5px;
|
box-shadow : inset 0 7px 9px -7px #111;
|
||||||
margin : 0 auto;
|
flex-flow : row wrap;
|
||||||
z-index : -1;
|
align-content : baseline;
|
||||||
transition : transform 0.4s, opacity 0.4s;
|
&.active {
|
||||||
&.active{
|
transform : translateX(-50%) translateY(100%);
|
||||||
transform: translateX(-50%) translateY(100%);
|
opacity : 1;
|
||||||
opacity: 1;
|
}
|
||||||
}
|
&.inactive {
|
||||||
&.inactive{
|
transform : translateX(-50%) translateY(0%);
|
||||||
transform: translateX(-50%) translateY(0%);
|
opacity : 0;
|
||||||
opacity: 0;
|
}
|
||||||
}
|
.row {
|
||||||
.row{
|
display : flex;
|
||||||
display : flex;
|
width : 100%;
|
||||||
flex-flow : row wrap;
|
flex-flow : row wrap;
|
||||||
width : 100%;
|
h4 {
|
||||||
h4{
|
display : block;
|
||||||
display : block;
|
box-sizing : border-box;
|
||||||
box-sizing : border-box;
|
min-width : 76px;
|
||||||
padding : 5px 0px;
|
padding : 5px 0;
|
||||||
color : #bbb;
|
text-align : center;
|
||||||
text-align : center;
|
color : #BBB;
|
||||||
flex-basis : 20%;
|
flex-basis : 20%;
|
||||||
flex-grow : 1;
|
flex-grow : 1;
|
||||||
min-width : 76px;
|
}
|
||||||
}
|
p {
|
||||||
p{
|
font-family : "Open Sans", sans-serif;
|
||||||
font-family : 'Open Sans', sans-serif;
|
font-size : 10px;
|
||||||
font-size : 10px;
|
font-weight : normal;
|
||||||
font-weight : normal;
|
padding : 5px 0;
|
||||||
text-transform : initial;
|
text-transform : initial;
|
||||||
padding : 5px 0;
|
flex-basis : 80%;
|
||||||
flex-basis : 80%;
|
flex-grow : 1;
|
||||||
flex-grow : 1;
|
.tag {
|
||||||
.tag{
|
display : inline-block;
|
||||||
border : 2px solid grey;
|
margin : 2px 2px;
|
||||||
padding : 2px;
|
padding : 2px;
|
||||||
margin : 2px 2px;
|
border : 2px solid grey;
|
||||||
display : inline-block;
|
border-radius : 5px;
|
||||||
border-radius : 5px;
|
background-color : #444;
|
||||||
background-color : #444;
|
}
|
||||||
}
|
a.userPageLink {
|
||||||
a.userPageLink{
|
text-decoration : none;
|
||||||
text-decoration: none;
|
color : white;
|
||||||
color: white;
|
&:hover {
|
||||||
&:hover{
|
text-decoration : underline;
|
||||||
text-decoration: underline;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
&:nth-of-type(even) {
|
||||||
&:nth-of-type(even){
|
background-color : #555;
|
||||||
background-color: #555;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
.warning.navItem {
|
||||||
.warning.navItem{
|
position : relative;
|
||||||
position : relative;
|
color : white;
|
||||||
background-color : @orange;
|
background-color : @orange;
|
||||||
color : white;
|
&:hover > .dropdown {
|
||||||
&:hover>.dropdown{
|
visibility : visible;
|
||||||
visibility : visible;
|
}
|
||||||
}
|
.dropdown {
|
||||||
.dropdown{
|
position : absolute;
|
||||||
position : absolute;
|
z-index : 10000;
|
||||||
display : block;
|
top : 28px;
|
||||||
top : 28px;
|
left : 0;
|
||||||
left : 0px;
|
display : block;
|
||||||
visibility : hidden;
|
visibility : hidden;
|
||||||
z-index : 10000;
|
box-sizing : border-box;
|
||||||
box-sizing : border-box;
|
width : 100%;
|
||||||
width : 100%;
|
padding : 13px 5px;
|
||||||
padding : 13px 5px;
|
text-align : center;
|
||||||
background-color : #333;
|
background-color : #333;
|
||||||
text-align : center;
|
}
|
||||||
}
|
}
|
||||||
}
|
.account.navItem {
|
||||||
.account.navItem{
|
min-width : 100px;
|
||||||
min-width: 100px;
|
}
|
||||||
}
|
.account.username.navItem {
|
||||||
.account.username.navItem{
|
text-transform : none;
|
||||||
text-transform: none;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
54
client/icons/book-part-cover.svg
Normal file
54
client/icons/book-part-cover.svg
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 704.00001 512"
|
||||||
|
version="1.1"
|
||||||
|
id="svg22127"
|
||||||
|
sodipodi:docname="book-part-cover.svg"
|
||||||
|
width="704"
|
||||||
|
height="512"
|
||||||
|
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||||
|
inkscape:export-filename="InsideCover3.png"
|
||||||
|
inkscape:export-xdpi="300"
|
||||||
|
inkscape:export-ydpi="300"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs22131" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview22129"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#111111"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="1"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.6685671"
|
||||||
|
inkscape:cx="299.8951"
|
||||||
|
inkscape:cy="80.021886"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="991"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg22127" />
|
||||||
|
<!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
|
||||||
|
<path
|
||||||
|
id="path2161-6"
|
||||||
|
style="color:#000000;fill:#000000;stroke-width:1;-inkscape-stroke:none;paint-order:stroke fill markers"
|
||||||
|
d="M 208,0 C 147.0078,0 94.429433,14.25071 60.367188,26.66992 23.520854,39.96036 0,76.16076 0,112.95896 v 317.8321 c 0,59.8499 56.949847,92.6546 107.47266,76.6035 l -0.1543,0.049 c 26.46715,-8.335 74.84649,-18.3965 100.68164,-18.3965 17.25807,0 61.31688,10.6183 85.14453,18.8438 l 0.0508,0.018 0.0527,0.018 c 19.82627,6.5858 40.84117,4.9222 58.99804,-3.0762 18.04267,7.8799 38.84257,9.6126 58.33594,3.1328 l 0.13672,-0.045 0.13672,-0.047 c 23.88445,-8.0588 67.88646,-18.8437 85.14453,-18.8437 25.83515,0 74.22549,10.0266 100.68164,18.3964 l 0.1543,0.049 0.15625,0.049 C 647.13371,523.05316 704,490.64216 704,430.79226 v -317.8321 c 0,-36.8274 -23.49583,-72.8235 -60.00977,-86.25583 l -0.16015,-0.0606 -0.16211,-0.0566 C 609.79193,14.33005 557.11269,0.0012 496,0.0012 434.5671,0.0012 387.12553,14.01354 352,34.94261 316.87446,14.01344 269.4331,0.0012 208,0.0012 Z m 0,32.00977 c 58.3999,0 103.40004,18.89469 123,33.63279 3.3,2.4564 5,6.4246 5,10.3926 v 356.5508 c 0,10.7702 -11.70041,18.2326 -22.40039,14.6426 -26.59996,-8.9751 -71.69966,-22.2012 -105.59961,-22.2012 -38.49993,0 -88.40045,11.4317 -119.900391,21.3516 C 76.799621,449.96896 64,442.03166 64,430.78906 V 80.94726 C 64,69.51586 70.799631,58.93546 82.099609,54.87306 110.29956,44.57516 157.50009,32.00977 208,32.00977 Z m 288,0 c 50.49991,0 97.70044,12.56619 125.90039,22.76949 C 633.20037,58.93616 640,69.51586 640,80.94726 v 349.8418 c 0,11.2426 -12.79963,19.0854 -24.09961,15.5899 -31.49995,-9.9199 -81.40046,-21.3516 -119.90039,-21.3516 -33.89995,0 -78.99966,13.2261 -105.59961,22.2012 C 379.60041,450.81856 368,443.35616 368,432.58596 V 76.03516 c 0,-3.968 1.60001,-7.9362 5,-10.3926 19.59997,-14.7381 64.6001,-33.63279 123,-33.63279 z M 335.52734,45.75386 c -0.1289,0.093 -0.23137,0.2032 -0.35937,0.2969 -0.198,0.1477 -0.428,0.2796 -0.625,0.4278 z m 33.67969,0.5372 0.24805,0.1875 c -0.0427,-0.033 -0.0937,-0.061 -0.13672,-0.094 -0.0393,-0.03 -0.0713,-0.064 -0.11133,-0.094 z" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:64;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 417.64553,213.53304 c 88.71546,-18.9285 95.50522,-18.6158 172.79707,0.054"
|
||||||
|
id="path2371-8"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
id="path2315"
|
||||||
|
style="stroke-width:67.6532;stroke-linejoin:bevel;paint-order:stroke markers fill;stop-color:#000000"
|
||||||
|
inkscape:transform-center-x="-3.4164388e-06"
|
||||||
|
inkscape:transform-center-y="-8.443352"
|
||||||
|
d="m 505.27489,52.89544 25.98603,52.6535 58.10652,8.4434 -42.04628,40.985 9.92578,57.8717 -51.97205,-27.3234 -51.97204,27.3234 9.92578,-57.8717 -42.04627,-40.985 58.10651,-8.4434 z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.1 KiB |
@@ -43,6 +43,9 @@
|
|||||||
.book-inside-cover {
|
.book-inside-cover {
|
||||||
content: url('../icons/book-inside-cover.svg');
|
content: url('../icons/book-inside-cover.svg');
|
||||||
}
|
}
|
||||||
|
.book-part-cover {
|
||||||
|
content: url('../icons/book-part-cover.svg');
|
||||||
|
}
|
||||||
.davek {
|
.davek {
|
||||||
content: url('../icons/Davek.svg');
|
content: url('../icons/Davek.svg');
|
||||||
}
|
}
|
||||||
|
|||||||
32448
package-lock.json
generated
32448
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@@ -76,11 +76,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.21.4",
|
"@babel/core": "^7.21.8",
|
||||||
"@babel/plugin-transform-runtime": "^7.21.4",
|
"@babel/plugin-transform-runtime": "^7.21.4",
|
||||||
"@babel/preset-env": "^7.21.4",
|
"@babel/preset-env": "^7.21.5",
|
||||||
"@babel/preset-react": "^7.18.6",
|
"@babel/preset-react": "^7.18.6",
|
||||||
"@googleapis/drive": "^5.0.2",
|
"@googleapis/drive": "^5.1.0",
|
||||||
"body-parser": "^1.20.2",
|
"body-parser": "^1.20.2",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"codemirror": "^5.65.6",
|
"codemirror": "^5.65.6",
|
||||||
@@ -96,23 +96,23 @@
|
|||||||
"less": "^3.13.1",
|
"less": "^3.13.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"marked": "4.3.0",
|
"marked": "4.3.0",
|
||||||
"marked-extended-tables": "^1.0.5",
|
"marked-extended-tables": "^1.0.6",
|
||||||
"markedLegacy": "npm:marked@^0.3.19",
|
"markedLegacy": "npm:marked@^0.3.19",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"mongoose": "^7.0.3",
|
"mongoose": "^7.1.0",
|
||||||
"nanoid": "3.3.4",
|
"nanoid": "3.3.4",
|
||||||
"nconf": "^0.12.0",
|
"nconf": "^0.12.0",
|
||||||
"npm": "^9.6.4",
|
"npm": "^9.6.6",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
"react-frame-component": "^4.1.3",
|
"react-frame-component": "^4.1.3",
|
||||||
"react-router-dom": "6.10.0",
|
"react-router-dom": "6.11.1",
|
||||||
"sanitize-filename": "1.6.3",
|
"sanitize-filename": "1.6.3",
|
||||||
"superagent": "^6.1.0",
|
"superagent": "^6.1.0",
|
||||||
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
|
"vitreum": "git+https://git@github.com/calculuschild/vitreum.git"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.38.0",
|
"eslint": "^8.40.0",
|
||||||
"eslint-plugin-react": "^7.32.2",
|
"eslint-plugin-react": "^7.32.2",
|
||||||
"eslint-plugin-jest": "^27.2.1",
|
"eslint-plugin-jest": "^27.2.1",
|
||||||
"jest": "^29.5.0",
|
"jest": "^29.5.0",
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
@import (less) './themes/assets/assets.less';
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
//Colors
|
//Colors
|
||||||
--HB_Color_Accent : #EBCEC3; // Salmon
|
--HB_Color_Accent : #EBCEC3; // Salmon
|
||||||
@@ -17,3 +19,10 @@
|
|||||||
bottom : 40px;
|
bottom : 40px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page:has(.partCover) {
|
||||||
|
|
||||||
|
.partCover {
|
||||||
|
background-image: @partCoverHeaderDMG;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ const MonsterBlockGen = require('./snippets/monsterblock.gen.js');
|
|||||||
const scriptGen = require('./snippets/script.gen.js');
|
const scriptGen = require('./snippets/script.gen.js');
|
||||||
const ClassFeatureGen = require('./snippets/classfeature.gen.js');
|
const ClassFeatureGen = require('./snippets/classfeature.gen.js');
|
||||||
const CoverPageGen = require('./snippets/coverpage.gen.js');
|
const CoverPageGen = require('./snippets/coverpage.gen.js');
|
||||||
|
const PartCoverPageGen = require('./snippets/partcoverpage.gen.js');
|
||||||
const TableOfContentsGen = require('./snippets/tableOfContents.gen.js');
|
const TableOfContentsGen = require('./snippets/tableOfContents.gen.js');
|
||||||
const dedent = require('dedent-tabs').default;
|
const dedent = require('dedent-tabs').default;
|
||||||
|
|
||||||
@@ -181,6 +182,12 @@ module.exports = [
|
|||||||
gen : CoverPageGen.inside,
|
gen : CoverPageGen.inside,
|
||||||
experimental : true
|
experimental : true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name : 'Part Cover Page',
|
||||||
|
icon : 'fac book-part-cover',
|
||||||
|
gen : CoverPageGen.part,
|
||||||
|
experimental : true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name : 'Magic Item',
|
name : 'Magic Item',
|
||||||
icon : 'fas fa-hat-wizard',
|
icon : 'fas fa-hat-wizard',
|
||||||
|
|||||||
@@ -100,11 +100,25 @@ module.exports = {
|
|||||||
___
|
___
|
||||||
|
|
||||||
{{imageMaskCenter${_.random(1, 16)},--offsetX:0%,--offsetY:0%,--rotation:0
|
{{imageMaskCenter${_.random(1, 16)},--offsetX:0%,--offsetY:0%,--rotation:0
|
||||||
{height:100%}
|
{position:absolute,bottom:0,left:0,height:100%}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
{{logo }}
|
{{logo }}
|
||||||
|
|
||||||
|
\page`;
|
||||||
|
},
|
||||||
|
|
||||||
|
part : function() {
|
||||||
|
return dedent`
|
||||||
|
{{partCover}}
|
||||||
|
|
||||||
|
# PART X
|
||||||
|
## ${_.sample(subtitles)}
|
||||||
|
|
||||||
|
{{imageMaskEdge${_.random(1, 8)},--offset:10cm,--rotation:180
|
||||||
|
{position:absolute,bottom:0,left:0,height:100%}
|
||||||
|
}}
|
||||||
|
|
||||||
\page`;
|
\page`;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
50
themes/V3/5ePHB/snippets/partcoverpage.gen.js
Normal file
50
themes/V3/5ePHB/snippets/partcoverpage.gen.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
const _ = require('lodash');
|
||||||
|
|
||||||
|
var titles = [
|
||||||
|
'Introduction to the World of DnD',
|
||||||
|
'Creating Your Character',
|
||||||
|
'The Rules of the Game',
|
||||||
|
'Combat and Combat Strategies',
|
||||||
|
'Magic and Spellcasting',
|
||||||
|
'Adventuring and Exploration',
|
||||||
|
'Dungeon Delving',
|
||||||
|
'Campaign Building and World Building',
|
||||||
|
'DM Techniques and Tips',
|
||||||
|
'Appendix: Reference Material',
|
||||||
|
'Monsters and Creatures',
|
||||||
|
'Equipment and Treasure',
|
||||||
|
'Non-Player Characters (NPCs)',
|
||||||
|
'Experience and Leveling',
|
||||||
|
'Races and Classes',
|
||||||
|
'Skills and Abilities',
|
||||||
|
'Alignment and Moral Choices',
|
||||||
|
'Player-vs-Player Conflict',
|
||||||
|
'Game Mastering 101',
|
||||||
|
'Running a Successful Campaign',
|
||||||
|
'Worldbuilding and Lore',
|
||||||
|
'Designing Encounters and Adventures',
|
||||||
|
'Managing Players and their Expectations',
|
||||||
|
'Factions and Political Intrigue',
|
||||||
|
'Adventure Hooks and Plot Ideas',
|
||||||
|
'Building a Campaign Setting',
|
||||||
|
'Handling Rules Disputes',
|
||||||
|
'Running Large-Scale Battles',
|
||||||
|
'Designing Unique Magic Systems',
|
||||||
|
'Developing and Using NPCs',
|
||||||
|
'Crafting Memorable Quests',
|
||||||
|
'Improvising When Things Don\'t Go as Planned',
|
||||||
|
'Managing Session Flow and Pacing',
|
||||||
|
'Building a World That Feels Alive'
|
||||||
|
];
|
||||||
|
|
||||||
|
module.exports = ()=>{
|
||||||
|
return `{{partCover}}
|
||||||
|
|
||||||
|
# PART X
|
||||||
|
## ${_.sample(titles)}
|
||||||
|
|
||||||
|
{{imageMaskEdge5,--offset:10cm,--rotation:180
|
||||||
|
{height:100%}
|
||||||
|
}}
|
||||||
|
\\page`;
|
||||||
|
};
|
||||||
@@ -821,6 +821,45 @@ h5 + table{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//*****************************
|
||||||
|
// * PART COVER
|
||||||
|
// *****************************/
|
||||||
|
.page:has(.partCover) {
|
||||||
|
columns : 1;
|
||||||
|
text-align : center;
|
||||||
|
padding-top: 0;
|
||||||
|
|
||||||
|
.partCover {
|
||||||
|
background-image: @partCoverHeaderPHB;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
position: absolute;
|
||||||
|
background-size: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 6cm;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 2.3cm;
|
||||||
|
font-family: NodestoCapsCondensed;
|
||||||
|
margin-top: .4cm;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-family: Overpass;
|
||||||
|
font-size: 0.45cm;
|
||||||
|
position: relative;
|
||||||
|
margin-top: -0.7em;
|
||||||
|
line-height: 1.1em;
|
||||||
|
margin-left : auto;
|
||||||
|
margin-right : auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//*****************************
|
//*****************************
|
||||||
// * TABLE OF CONTENTS
|
// * TABLE OF CONTENTS
|
||||||
// *****************************/
|
// *****************************/
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ body {
|
|||||||
break-inside : avoid;
|
break-inside : avoid;
|
||||||
display : inline-block;
|
display : inline-block;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
|
img {
|
||||||
|
z-index : 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.inline-block {
|
.inline-block {
|
||||||
display : inline-block;
|
display : inline-block;
|
||||||
@@ -251,7 +254,6 @@ body {
|
|||||||
background-size : 20px;
|
background-size : 20px;
|
||||||
z-index : -1;
|
z-index : -1;
|
||||||
transform : translateY(50%) translateX(-50%) rotate(calc(1deg * var(--rotation))) scaleX(var(--scaleX)) scaleY(var(--scaleY));
|
transform : translateY(50%) translateX(-50%) rotate(calc(1deg * var(--rotation))) scaleX(var(--scaleX)) scaleY(var(--scaleY));
|
||||||
transition : transform 2s;
|
|
||||||
& > p:has(img) {
|
& > p:has(img) {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
width : 50%;
|
width : 50%;
|
||||||
@@ -259,7 +261,6 @@ body {
|
|||||||
bottom : 50%;
|
bottom : 50%;
|
||||||
left : 50%;
|
left : 50%;
|
||||||
transform : translateX(-50%) translateY(50%) rotate(calc(-1deg * var(--rotation))) scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY)));
|
transform : translateX(-50%) translateY(50%) rotate(calc(-1deg * var(--rotation))) scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY)));
|
||||||
transition : transform 2s;
|
|
||||||
}
|
}
|
||||||
& img {
|
& img {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
@naturalCritLogo : url('/assets/naturalCritLogo.svg');
|
@naturalCritLogo : url('/assets/naturalCritLogo.svg');
|
||||||
@coverPageBanner : url('/assets/coverPageBanner.svg');
|
@coverPageBanner : url('/assets/coverPageBanner.svg');
|
||||||
@horizontalRule : url('/assets/horizontalRule.svg');
|
@horizontalRule : url('/assets/horizontalRule.svg');
|
||||||
|
@partCoverHeaderPHB : url('/assets/partCoverHeaderPHB.png');
|
||||||
|
@partCoverHeaderDMG : url('/assets/partCoverHeaderDMG.svg');
|
||||||
@insideCoverMask : url('/assets/insideCoverMask.png');
|
@insideCoverMask : url('/assets/insideCoverMask.png');
|
||||||
@scriptBorder : url('/assets/scriptBorder.png');
|
@scriptBorder : url('/assets/scriptBorder.png');
|
||||||
|
|
||||||
|
|||||||
1
themes/assets/partCoverHeaderDMG.svg
Normal file
1
themes/assets/partCoverHeaderDMG.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 611.99 154.72"><defs><style>.cls-1{fill:#f4f0f1;}.cls-2{fill:#d0d4d0;stroke:#888;stroke-linecap:round;stroke-miterlimit:35;stroke-width:0.5px;}</style></defs><title>Asset 2</title><g id="Layer_2" data-name="Layer 2"><g id="svg"><polygon id="background" class="cls-1" points="221.58 0 221.58 86.65 305.82 136.18 389.8 86.91 389.8 0 221.58 0"/><path id="right_triangle_compound_path" data-name="right triangle compound path" class="cls-2" d="M526.31.25c0,14.18-.08,26.67-.12,40.85,0,4.47-2.72,11-11.77,11-3.25.16-13.9-1.11-23.74-6.57L410.79.25h-2.53L527.82,69.38V.25Zm-.06,66.27L498.44,50.67c1,.39,14.21,4,19.29,2.81a13.9,13.9,0,0,0,8.52-6Z"/><path id="main_shape" data-name="main shape" class="cls-2" d="M598.88,123.48l-.13-65.27a81.69,81.69,0,0,1-24,20.31,79.73,79.73,0,0,1-26.8,9L544.82,86a78.57,78.57,0,0,0,42.52-18.09c15.33-13,22.12-30.25,24.4-37.06v-7a80.45,80.45,0,0,1-15.39,31.7c.63-1,16.49-26.4-2.42-55.2h-2.37c3.37,5,12.23,19.65,9.21,37.64-4,24-27.74,43.84-58.54,46.25L471.67,43.29a3.24,3.24,0,0,0-1.37-3,3.2,3.2,0,0,0-3.55,0L447.21,29a7,7,0,0,0-2.25-2.7,7,7,0,0,0-4.73-1.19l-16.59-9.57C414.47,10.29,404,4.25,397.06.25h-3.32L436.1,25.46s-36.92.06-40.94.11c-2.79-1.71-2.7,3.24,0,1.62h41.71l-46.4.37L390.3.26h-1.57L388.79,86l-41.1,24.5c-6.35,3.73-24.5,13.91-42.86,14.1s-36.47-11.3-44-15.49C248,101.8,235.15,93.85,222.33,86.52L222.46.25h-2V28l-46.09-.37h41.7c2.71,1.62,2.79-3.33,0-1.62-4-.05-40.93-.11-40.93-.11L218.32.25H215c-7,4-18.25,10.52-27.42,15.8L171,25.62a7,7,0,0,0-4.73,1.19,7,7,0,0,0-2.25,2.7L144.46,40.72a3.19,3.19,0,0,0-3.54.05,3.24,3.24,0,0,0-1.37,3L69,84.62c-30.8-2.41-54.53-22.3-58.54-46.25-3-18,5.84-32.62,9.2-37.64H17.29c-18.91,28.8-3,54.19-2.42,55.2C2.75,41,.27,26.28.27,26.28l0,7.08a78.31,78.31,0,0,0,23.63,35A78.57,78.57,0,0,0,66.4,86.43L63.22,88a79.66,79.66,0,0,1-26.8-9,81.76,81.76,0,0,1-24-20.31L12.34,124C12.46,141,.25,147.51.25,147.51v1.72a27.5,27.5,0,0,0,8.43-8A29,29,0,0,0,13,131.51v10.41L.25,152v2.1L26,133.61v-22l20.48-12c62.61,1.71,93.58-40,99.08-46.72,21.86-20.39,70.66-22.25,74.93-22.37V87.7l85.25,49.11,85.12-49.4-.33-57.36s52.35,1.05,75.23,22.38c5.49,6.67,36.47,48.43,99.08,46.72l20.48,12v22l26.47,21.07v-2.1l-13.55-10.66V131a29,29,0,0,0,4.35,9.72,32.12,32.12,0,0,0,9.2,8.6v-1.72A27.69,27.69,0,0,1,598.88,123.48ZM139.64,46.06c-.25.47-8.48,15.47-26.11,27.94-17.91,12.67-40,10.81-40,10.81ZM24.06,110.34l.1,22.47-7.09,6.1V93.77a99.79,99.79,0,0,0,12.3,3.52,99.74,99.74,0,0,0,13.8,2ZM48.19,97A102.43,102.43,0,0,1,30,95.38a103,103,0,0,1-15-3.87l-.09,48.35L13.76,141q.22-39,.47-77.9A83.48,83.48,0,0,0,36.08,80.34a82.84,82.84,0,0,0,25.15,8.85Zm30.54-3a121.63,121.63,0,0,1-26.57,3l12-7.14a96,96,0,0,0,15.51.29A97,97,0,0,0,102.19,86,122.56,122.56,0,0,1,78.73,94ZM140,55.86C135.3,61.42,126.49,71.79,114.11,79,96,89.52,77.09,89.38,66.63,88.34l2.65-1.62A77.74,77.74,0,0,0,112,77.14c17.82-9.9,26.42-24.69,29.83-30.8.2,0,2.07.45,3.05-.86a3.75,3.75,0,0,0,.64-2.86l6.71-3.76A128.27,128.27,0,0,1,140,55.86ZM164.8,39.57a119.38,119.38,0,0,0-15.51,8.29l7-11.33,11-6.29,36.42-.38C190.52,32.15,179.34,33.15,164.8,39.57Zm140.83,95.27-23.08-13.27c3.87,1.5,15.25,4.45,22.63,4.45s18.72-2.93,23.34-4.45Zm232.1-50.51s-22.14,1.87-40-10.81c-17.63-12.47-25.85-27.47-26.1-27.94ZM446.43,39.1c-14.55-6.43-25.73-7.43-38.88-9.72l36.41.38,11,6.29,7,11.33A118,118,0,0,0,446.43,39.1ZM471.2,55.38a128.27,128.27,0,0,1-12.2-17l6.71,3.76a3.73,3.73,0,0,0,.65,2.86c1,1.31,2.84.85,3.05.86,3.4,6.11,12,20.9,29.83,30.8A77.73,77.73,0,0,0,542,86.24l2.64,1.62c-10.47,1-29.4,1.18-47.48-9.34C484.73,71.32,475.92,60.94,471.2,55.38Zm61.29,38.1A123,123,0,0,1,509,85.54a96.54,96.54,0,0,0,22.51,4.13,96,96,0,0,0,15.51-.29l12,7.14A121.63,121.63,0,0,1,532.49,93.48Zm61.67,45-7.1-6.1.09-22.47-19.1-11a99.66,99.66,0,0,0,13.81-2,100.3,100.3,0,0,0,12.3-3.52Zm2.17.95L596.23,91a102.68,102.68,0,0,1-15,3.87A102.43,102.43,0,0,1,563,96.52l-13-7.81a82.61,82.61,0,0,0,25.16-8.85A83.14,83.14,0,0,0,597,62.62q.22,39,.47,77.9Z"/><path id="left_triangle_compound_path" data-name="left triangle compound path" class="cls-2" d="M83.4.73V69.86L203.77.25h-2.53l-80.7,45.8c-9.84,5.46-20.49,6.73-23.74,6.57-9,0-11.77-6.57-11.77-11C85,27.4,85,14.91,84.91.73ZM85,48a13.87,13.87,0,0,0,8.51,6c5.08,1.18,18.26-2.42,19.29-2.81L85,67Z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 4.2 KiB |
BIN
themes/assets/partCoverHeaderPHB.png
Normal file
BIN
themes/assets/partCoverHeaderPHB.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 164 KiB |
BIN
themes/fonts/5e/Martel Sans Black.woff2
Normal file
BIN
themes/fonts/5e/Martel Sans Black.woff2
Normal file
Binary file not shown.
Reference in New Issue
Block a user