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.
Files changed (68) hide show
  1. package/content/themes/casper/assets/built/screen.css +1 -1
  2. package/content/themes/casper/assets/built/screen.css.map +1 -1
  3. package/content/themes/casper/assets/css/screen.css +70 -41
  4. package/content/themes/casper/package.json +1 -1
  5. package/core/boot.js +3 -5
  6. package/core/built/assets/ghost-dark-60b50b44689a4c79fd9e72356f94a844.css +1 -0
  7. package/core/built/assets/{ghost.min-0d8c819c49453b69b8fcf64d15f7e8b8.js → ghost.min-7690e7e32d3e53ec5480a234962341a6.js} +66 -66
  8. package/core/built/assets/ghost.min-e628c133ed6b5ec32a1cc3511c2b2978.css +1 -0
  9. package/core/built/assets/icons/file-upload.svg +1 -1
  10. package/core/built/assets/{vendor.min-530b041ef90eed6eaabd7c24e1e8a266.js → vendor.min-f4bc3ac0c7d33722341d0da4291aa888.js} +144 -90
  11. package/core/frontend/apps/amp/lib/views/amp.hbs +136 -7
  12. package/core/frontend/services/theme-engine/i18n/i18n.js +11 -12
  13. package/core/frontend/services/theme-engine/i18n/index.js +1 -2
  14. package/core/frontend/services/theme-engine/i18n/theme-i18n.js +5 -4
  15. package/core/frontend/src/cards/css/audio.css +13 -9
  16. package/core/frontend/src/cards/css/before-after.css +45 -11
  17. package/core/frontend/src/cards/css/bookmark.css +6 -5
  18. package/core/frontend/src/cards/css/button.css +4 -3
  19. package/core/frontend/src/cards/css/callout.css +10 -5
  20. package/core/frontend/src/cards/css/file.css +107 -48
  21. package/core/frontend/src/cards/css/header.css +167 -0
  22. package/core/frontend/src/cards/css/nft.css +1 -7
  23. package/core/frontend/src/cards/css/product.css +24 -26
  24. package/core/frontend/src/cards/css/toggle.css +32 -22
  25. package/core/frontend/src/cards/css/video.css +103 -44
  26. package/core/frontend/src/cards/js/before-after.js +10 -15
  27. package/core/frontend/src/cards/js/video.js +81 -13
  28. package/core/frontend/web/middleware/error-handler.js +2 -2
  29. package/core/frontend/web/site.js +2 -1
  30. package/core/server/api/canary/oembed.js +1 -2
  31. package/core/server/data/db/state-manager.js +5 -8
  32. package/core/server/lib/image/cached-image-size-from-url.js +3 -4
  33. package/core/server/lib/image/image-utils.js +2 -2
  34. package/core/server/lib/image/index.js +1 -2
  35. package/core/server/run-update-check.js +1 -13
  36. package/core/server/services/email-analytics/index.js +2 -4
  37. package/core/server/services/email-analytics/jobs/fetch-latest.js +2 -21
  38. package/core/server/services/integrations/integrations-service.js +2 -2
  39. package/core/server/services/invites/index.js +0 -2
  40. package/core/server/services/invites/invites.js +3 -3
  41. package/core/server/services/jobs/job-service.js +1 -1
  42. package/core/server/services/mega/template.js +110 -0
  43. package/core/server/services/members/api.js +0 -1
  44. package/core/server/services/members/config.js +4 -7
  45. package/core/server/services/members/service.js +1 -4
  46. package/core/server/services/notifications/index.js +0 -2
  47. package/core/server/services/notifications/notifications.js +4 -5
  48. package/core/server/services/stripe/index.js +0 -2
  49. package/core/server/services/twitter-embed.js +2 -1
  50. package/core/server/web/admin/app.js +4 -2
  51. package/core/server/web/admin/views/default-prod.html +4 -4
  52. package/core/server/web/admin/views/default.html +4 -4
  53. package/core/server/web/api/app.js +3 -2
  54. package/core/server/web/api/canary/admin/app.js +4 -2
  55. package/core/server/web/api/canary/content/app.js +4 -2
  56. package/core/server/web/api/v2/admin/app.js +4 -2
  57. package/core/server/web/api/v2/content/app.js +4 -2
  58. package/core/server/web/api/v3/admin/app.js +4 -2
  59. package/core/server/web/api/v3/content/app.js +4 -2
  60. package/core/server/web/members/app.js +6 -4
  61. package/core/server/web/shared/middleware/index.js +0 -4
  62. package/core/shared/config/overrides.json +11 -1
  63. package/core/shared/labs.js +7 -7
  64. package/package.json +20 -19
  65. package/yarn.lock +118 -102
  66. package/core/built/assets/ghost-dark-cd630208f909760b8e6e4ec13579b323.css +0 -1
  67. package/core/built/assets/ghost.min-4a510859440fff66c8c7b8cbdc157237.css +0 -1
  68. 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: 1001px) {
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:not(.gh-post-upgrade-cta a):not(.kg-bookmark-container):not(.kg-btn):not(.kg-nft-card-container):not(.kg-callout-card-accent a):not(a.kg-product-card-btn-accent) {
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: 2.0rem;
1037
+ font-size: 1.9rem;
1026
1038
  line-height: 1.6em;
1027
1039
  }
1028
1040
 
1029
- .gh-content .kg-callout-emoji {
1030
- font-size: 2.2rem;
1031
- line-height: 1.5em;
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.2rem;
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 blockquote::before {
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-toggle-content > * + * {
1151
- margin-top: min(2.4rem, 4vmin);
1179
+ .gh-content .kg-callout-card-accent a {
1180
+ text-decoration: underline;
1152
1181
  }
1153
1182
 
1154
1183
  .kg-blockquote-alt {
@@ -2,7 +2,7 @@
2
2
  "name": "casper",
3
3
  "description": "A clean, minimal default theme for the Ghost publishing platform",
4
4
  "demo": "https://demo.ghost.io",
5
- "version": "4.5.0",
5
+ "version": "4.6.1",
6
6
  "engines": {
7
7
  "ghost": ">=4.0.0",
8
8
  "ghost-api": "v4"
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, logging}) {
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({logging});
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, logging});
384
+ await initDatabase({config});
387
385
  bootLogger.log('database ready');
388
386
  debug('End: Get DB ready');
389
387