ghost 4.28.0 → 4.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/built/screen.css.map +1 -1
- package/content/themes/casper/assets/css/screen.css +70 -41
- package/content/themes/casper/package.json +1 -1
- package/core/boot.js +3 -5
- package/core/built/assets/ghost-dark-60b50b44689a4c79fd9e72356f94a844.css +1 -0
- package/core/built/assets/{ghost.min-0d8c819c49453b69b8fcf64d15f7e8b8.js → ghost.min-7690e7e32d3e53ec5480a234962341a6.js} +66 -66
- package/core/built/assets/ghost.min-e628c133ed6b5ec32a1cc3511c2b2978.css +1 -0
- package/core/built/assets/icons/file-upload.svg +1 -1
- package/core/built/assets/{vendor.min-530b041ef90eed6eaabd7c24e1e8a266.js → vendor.min-f4bc3ac0c7d33722341d0da4291aa888.js} +144 -90
- package/core/frontend/apps/amp/lib/views/amp.hbs +136 -7
- package/core/frontend/services/theme-engine/i18n/i18n.js +11 -12
- package/core/frontend/services/theme-engine/i18n/index.js +1 -2
- package/core/frontend/services/theme-engine/i18n/theme-i18n.js +5 -4
- package/core/frontend/src/cards/css/audio.css +13 -9
- package/core/frontend/src/cards/css/before-after.css +45 -11
- package/core/frontend/src/cards/css/bookmark.css +6 -5
- package/core/frontend/src/cards/css/button.css +4 -3
- package/core/frontend/src/cards/css/callout.css +10 -5
- package/core/frontend/src/cards/css/file.css +107 -48
- package/core/frontend/src/cards/css/header.css +167 -0
- package/core/frontend/src/cards/css/nft.css +1 -7
- package/core/frontend/src/cards/css/product.css +24 -26
- package/core/frontend/src/cards/css/toggle.css +32 -22
- package/core/frontend/src/cards/css/video.css +103 -44
- package/core/frontend/src/cards/js/before-after.js +10 -15
- package/core/frontend/src/cards/js/video.js +81 -13
- package/core/frontend/web/middleware/error-handler.js +2 -2
- package/core/frontend/web/site.js +2 -1
- package/core/server/api/canary/oembed.js +1 -2
- package/core/server/data/db/state-manager.js +5 -8
- package/core/server/lib/image/cached-image-size-from-url.js +3 -4
- package/core/server/lib/image/image-utils.js +2 -2
- package/core/server/lib/image/index.js +1 -2
- package/core/server/run-update-check.js +1 -13
- package/core/server/services/email-analytics/index.js +2 -4
- package/core/server/services/email-analytics/jobs/fetch-latest.js +2 -21
- package/core/server/services/integrations/integrations-service.js +2 -2
- package/core/server/services/invites/index.js +0 -2
- package/core/server/services/invites/invites.js +3 -3
- package/core/server/services/jobs/job-service.js +1 -1
- package/core/server/services/mega/template.js +110 -0
- package/core/server/services/members/api.js +0 -1
- package/core/server/services/members/config.js +4 -7
- package/core/server/services/members/service.js +1 -4
- package/core/server/services/notifications/index.js +0 -2
- package/core/server/services/notifications/notifications.js +4 -5
- package/core/server/services/stripe/index.js +0 -2
- package/core/server/services/twitter-embed.js +2 -1
- package/core/server/web/admin/app.js +4 -2
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/server/web/api/app.js +3 -2
- package/core/server/web/api/canary/admin/app.js +4 -2
- package/core/server/web/api/canary/content/app.js +4 -2
- package/core/server/web/api/v2/admin/app.js +4 -2
- package/core/server/web/api/v2/content/app.js +4 -2
- package/core/server/web/api/v3/admin/app.js +4 -2
- package/core/server/web/api/v3/content/app.js +4 -2
- package/core/server/web/members/app.js +6 -4
- package/core/server/web/shared/middleware/index.js +0 -4
- package/core/shared/config/overrides.json +11 -1
- package/core/shared/labs.js +7 -7
- package/package.json +20 -19
- package/yarn.lock +118 -102
- package/core/built/assets/ghost-dark-cd630208f909760b8e6e4ec13579b323.css +0 -1
- package/core/built/assets/ghost.min-4a510859440fff66c8c7b8cbdc157237.css +0 -1
- package/core/server/web/shared/middleware/error-handler.js +0 -224
|
@@ -556,6 +556,12 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
|
|
|
556
556
|
word-break: break-word;
|
|
557
557
|
}
|
|
558
558
|
|
|
559
|
+
@media (max-width: 700px) {
|
|
560
|
+
.post-card {
|
|
561
|
+
min-height: auto;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
559
565
|
.post-card-image-link {
|
|
560
566
|
position: relative;
|
|
561
567
|
display: block;
|
|
@@ -750,25 +756,40 @@ make sure this only happens on large viewports / desktop-ish devices.
|
|
|
750
756
|
|
|
751
757
|
*/
|
|
752
758
|
|
|
753
|
-
@media (min-width:
|
|
754
|
-
.post-card-large {
|
|
759
|
+
@media (min-width: 701px) {
|
|
760
|
+
.post-feed.list .post-card-large {
|
|
755
761
|
grid-column: 1 / span 3;
|
|
756
762
|
display: grid;
|
|
757
763
|
grid-gap: 4vmin;
|
|
758
|
-
grid-template-columns: 1fr 1fr 1fr;
|
|
759
|
-
min-height: 280px;
|
|
760
|
-
border-top: 0;
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
.post-feed.list .post-card-large {
|
|
764
764
|
grid-template-columns: 3fr 5fr;
|
|
765
765
|
min-height: auto;
|
|
766
|
+
border-top: 0;
|
|
766
767
|
}
|
|
767
768
|
|
|
768
769
|
.post-feed.list .post-card-large.no-image {
|
|
769
770
|
grid-template-columns: 1fr;
|
|
770
771
|
}
|
|
771
772
|
|
|
773
|
+
.post-feed.list .post-card-large:not(.no-image) .post-card-header {
|
|
774
|
+
margin-top: 0;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
.post-feed.list .post-card-large .post-card-content {
|
|
778
|
+
justify-content: flex-start;
|
|
779
|
+
margin-top: -6px;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
@media (min-width: 1001px) {
|
|
784
|
+
.post-card-large {
|
|
785
|
+
grid-column: 1 / span 3;
|
|
786
|
+
display: grid;
|
|
787
|
+
grid-gap: 4vmin;
|
|
788
|
+
grid-template-columns: 1fr 1fr 1fr;
|
|
789
|
+
min-height: 280px;
|
|
790
|
+
border-top: 0;
|
|
791
|
+
}
|
|
792
|
+
|
|
772
793
|
.post-card-large:not(.no-image) .post-card-header {
|
|
773
794
|
margin-top: 0;
|
|
774
795
|
}
|
|
@@ -802,11 +823,6 @@ make sure this only happens on large viewports / desktop-ish devices.
|
|
|
802
823
|
justify-content: center;
|
|
803
824
|
}
|
|
804
825
|
|
|
805
|
-
.post-feed.list .post-card-large .post-card-content {
|
|
806
|
-
justify-content: flex-start;
|
|
807
|
-
margin-top: -6px;
|
|
808
|
-
}
|
|
809
|
-
|
|
810
826
|
.post-card-large .post-card-title {
|
|
811
827
|
margin-top: 0;
|
|
812
828
|
font-size: 3.2rem;
|
|
@@ -995,16 +1011,12 @@ is the very first element in the post content */
|
|
|
995
1011
|
}
|
|
996
1012
|
|
|
997
1013
|
/* Now the content typography styles */
|
|
998
|
-
.gh-content a
|
|
1014
|
+
.gh-content a {
|
|
999
1015
|
color: var(--ghost-accent-color);
|
|
1000
1016
|
text-decoration: underline;
|
|
1001
1017
|
word-break: break-word;
|
|
1002
1018
|
}
|
|
1003
1019
|
|
|
1004
|
-
.gh-content .kg-callout-card-accent a {
|
|
1005
|
-
text-decoration: underline;
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
1020
|
.gh-content > blockquote:not([class]),
|
|
1009
1021
|
.gh-content > ol,
|
|
1010
1022
|
.gh-content > ul,
|
|
@@ -1016,23 +1028,30 @@ is the very first element in the post content */
|
|
|
1016
1028
|
line-height: 1.6em;
|
|
1017
1029
|
}
|
|
1018
1030
|
|
|
1019
|
-
.gh-content .kg-callout-text,
|
|
1020
|
-
.gh-content .kg-toggle-content > ol,
|
|
1021
|
-
.gh-content .kg-toggle-content > ul,
|
|
1022
|
-
.gh-content .kg-toggle-content > p {
|
|
1031
|
+
.gh-content .kg-callout-card .kg-callout-text,
|
|
1032
|
+
.gh-content .kg-toggle-card .kg-toggle-content > ol,
|
|
1033
|
+
.gh-content .kg-toggle-card .kg-toggle-content > ul,
|
|
1034
|
+
.gh-content .kg-toggle-card .kg-toggle-content > p {
|
|
1023
1035
|
font-family: var(--font-serif);
|
|
1024
1036
|
font-weight: 400;
|
|
1025
|
-
font-size:
|
|
1037
|
+
font-size: 1.9rem;
|
|
1026
1038
|
line-height: 1.6em;
|
|
1027
1039
|
}
|
|
1028
1040
|
|
|
1029
|
-
.gh-content .kg-
|
|
1030
|
-
|
|
1031
|
-
|
|
1041
|
+
.gh-content .kg-product-card .kg-product-card-description > p,
|
|
1042
|
+
.gh-content .kg-product-card .kg-product-card-description > ol,
|
|
1043
|
+
.gh-content .kg-product-card .kg-product-card-description > ul {
|
|
1044
|
+
font-size: 1.7rem;
|
|
1045
|
+
line-height: 1.6em;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.gh-content .kg-callout-card .kg-callout-emoji {
|
|
1049
|
+
font-size: 2.1rem;
|
|
1050
|
+
line-height: 1.4em;
|
|
1032
1051
|
}
|
|
1033
1052
|
|
|
1034
|
-
.gh-content .kg-toggle-heading-text {
|
|
1035
|
-
font-size: 2.
|
|
1053
|
+
.gh-content .kg-toggle-card .kg-toggle-heading-text {
|
|
1054
|
+
font-size: 2.0rem;
|
|
1036
1055
|
}
|
|
1037
1056
|
|
|
1038
1057
|
.has-sans-body .gh-content > blockquote,
|
|
@@ -1040,16 +1059,20 @@ is the very first element in the post content */
|
|
|
1040
1059
|
.has-sans-body .gh-content > ul,
|
|
1041
1060
|
.has-sans-body .gh-content > dl,
|
|
1042
1061
|
.has-sans-body .gh-content > p,
|
|
1043
|
-
.has-sans-body .kg-callout-text,
|
|
1044
|
-
.has-sans-body .kg-toggle-content > ol,
|
|
1045
|
-
.has-sans-body .kg-toggle-content > ul,
|
|
1046
|
-
.has-sans-body .kg-toggle-content > p {
|
|
1062
|
+
.has-sans-body .gh-content .kg-callout-card .kg-callout-text,
|
|
1063
|
+
.has-sans-body .gh-content .kg-toggle-card .kg-toggle-content > ol,
|
|
1064
|
+
.has-sans-body .gh-content .kg-toggle-card .kg-toggle-content > ul,
|
|
1065
|
+
.has-sans-body .gh-content .kg-toggle-card .kg-toggle-content > p {
|
|
1047
1066
|
font-family: var(--font-sans);
|
|
1048
1067
|
}
|
|
1049
1068
|
|
|
1050
1069
|
.gh-content > ul,
|
|
1051
1070
|
.gh-content > ol,
|
|
1052
|
-
.gh-content > dl
|
|
1071
|
+
.gh-content > dl,
|
|
1072
|
+
.gh-content .kg-toggle-card .kg-toggle-content > ol,
|
|
1073
|
+
.gh-content .kg-toggle-card .kg-toggle-content > ul,
|
|
1074
|
+
.gh-content .kg-product-card .kg-product-card-description > ol,
|
|
1075
|
+
.gh-content .kg-product-card .kg-product-card-description > ul {
|
|
1053
1076
|
padding-left: 1.9em;
|
|
1054
1077
|
}
|
|
1055
1078
|
|
|
@@ -1098,14 +1121,20 @@ is the very first element in the post content */
|
|
|
1098
1121
|
.gh-content > ul,
|
|
1099
1122
|
.gh-content > dl,
|
|
1100
1123
|
.gh-content > p,
|
|
1101
|
-
.kg-callout-text,
|
|
1102
|
-
.kg-toggle-content > ol,
|
|
1103
|
-
.kg-toggle-content > ul,
|
|
1104
|
-
.kg-toggle-content > p {
|
|
1124
|
+
.gh-content .kg-callout-card .kg-callout-text,
|
|
1125
|
+
.gh-content .kg-toggle-card .kg-toggle-content > ol,
|
|
1126
|
+
.gh-content .kg-toggle-card .kg-toggle-content > ul,
|
|
1127
|
+
.gh-content .kg-toggle-card .kg-toggle-content > p {
|
|
1105
1128
|
font-size: 1.7rem;
|
|
1106
1129
|
}
|
|
1107
1130
|
|
|
1108
|
-
.gh-content
|
|
1131
|
+
.gh-content .kg-product-card .kg-product-card-description > p,
|
|
1132
|
+
.gh-content .kg-product-card .kg-product-card-description > ol,
|
|
1133
|
+
.gh-content .kg-product-card .kg-product-card-description > ul {
|
|
1134
|
+
font-size: 1.5rem;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
.gh-content blockquote:not([class])::before {
|
|
1109
1138
|
left: -4vmin;
|
|
1110
1139
|
}
|
|
1111
1140
|
}
|
|
@@ -1143,12 +1172,12 @@ except for when immediately preceeded by a heading */
|
|
|
1143
1172
|
margin: auto;
|
|
1144
1173
|
}
|
|
1145
1174
|
|
|
1146
|
-
.has-serif-title .kg-toggle-heading-text {
|
|
1175
|
+
.has-serif-title .kg-toggle-card .kg-toggle-heading-text {
|
|
1147
1176
|
font-family: var(--font-serif);
|
|
1148
1177
|
}
|
|
1149
1178
|
|
|
1150
|
-
.kg-
|
|
1151
|
-
|
|
1179
|
+
.gh-content .kg-callout-card-accent a {
|
|
1180
|
+
text-decoration: underline;
|
|
1152
1181
|
}
|
|
1153
1182
|
|
|
1154
1183
|
.kg-blockquote-alt {
|
package/core/boot.js
CHANGED
|
@@ -50,16 +50,14 @@ function notifyServerReady(error) {
|
|
|
50
50
|
/**
|
|
51
51
|
* Get the Database into a ready state
|
|
52
52
|
* - DatabaseStateManager handles doing all this for us
|
|
53
|
-
* - Passing logging makes it output state messages
|
|
54
53
|
*
|
|
55
54
|
* @param {object} options
|
|
56
55
|
* @param {object} options.config
|
|
57
|
-
* @param {object} options.logging
|
|
58
56
|
*/
|
|
59
|
-
async function initDatabase({config
|
|
57
|
+
async function initDatabase({config}) {
|
|
60
58
|
const DatabaseStateManager = require('./server/data/db/state-manager');
|
|
61
59
|
const dbStateManager = new DatabaseStateManager({knexMigratorFilePath: config.get('paths:appRoot')});
|
|
62
|
-
await dbStateManager.makeReady(
|
|
60
|
+
await dbStateManager.makeReady();
|
|
63
61
|
}
|
|
64
62
|
|
|
65
63
|
/**
|
|
@@ -383,7 +381,7 @@ async function bootGhost({backend = true, frontend = true, server = true} = {})
|
|
|
383
381
|
|
|
384
382
|
// Step 3 - Get the DB ready
|
|
385
383
|
debug('Begin: Get DB ready');
|
|
386
|
-
await initDatabase({config
|
|
384
|
+
await initDatabase({config});
|
|
387
385
|
bootLogger.log('database ready');
|
|
388
386
|
debug('End: Get DB ready');
|
|
389
387
|
|