ghost 4.25.1 → 4.27.1

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 (34) 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 +54 -10
  4. package/content/themes/casper/package.json +1 -1
  5. package/core/app.js +8 -4
  6. package/core/boot.js +50 -23
  7. package/core/built/assets/{chunk.3.8f95b516d88ff4eec64c.js → chunk.3.e54be01b5124e4e27958.js} +7 -7
  8. package/core/built/assets/ghost-dark-ae67fe157509b6e82c607ba560fc52e9.css +1 -0
  9. package/core/built/assets/{ghost.min-3441c3282e390002626a2dc1d7586185.js → ghost.min-2d534cce15c43c646814b26f4beefb78.js} +131 -128
  10. package/core/built/assets/ghost.min-b1e58e098721e467388682a85a7c187d.css +1 -0
  11. package/core/built/assets/{vendor.min-6fc912d1248c906f95efad2cb3eebb7d.js → vendor.min-e433aa7d5620e7837f30e170cd43f84e.js} +569 -539
  12. package/core/frontend/apps/amp/lib/views/amp.hbs +8 -3
  13. package/core/frontend/helpers/ghost_head.js +1 -1
  14. package/core/frontend/src/cards/css/audio.css +258 -0
  15. package/core/frontend/src/cards/css/blockquote.css +13 -19
  16. package/core/frontend/src/cards/css/product.css +101 -0
  17. package/core/frontend/src/cards/css/toggle.css +20 -7
  18. package/core/frontend/src/cards/js/audio.js +147 -0
  19. package/core/server/notify.js +1 -2
  20. package/core/server/services/mega/template.js +21 -10
  21. package/core/server/services/members/api.js +2 -2
  22. package/core/server/services/members/emails/signup-paid.js +4 -4
  23. package/core/server/services/nft-oembed.js +1 -1
  24. package/core/server/services/twitter-embed.js +3 -1
  25. package/core/server/web/admin/views/default-prod.html +4 -4
  26. package/core/server/web/admin/views/default.html +4 -4
  27. package/core/server/web/parent/app.js +2 -22
  28. package/core/server/web/parent/backend.js +2 -0
  29. package/core/shared/express.js +1 -1
  30. package/core/shared/labs.js +6 -5
  31. package/package.json +16 -16
  32. package/yarn.lock +229 -326
  33. package/core/built/assets/ghost-dark-f67240a9636407594be38571c615629c.css +0 -1
  34. package/core/built/assets/ghost.min-ee5bd95a831378b4c8ccefb37d26eac0.css +0 -1
@@ -282,11 +282,12 @@
282
282
  }
283
283
 
284
284
  .post-content blockquote.kg-blockquote-alt {
285
- font-size: 2rem;
286
- line-height: 1.7;
285
+ font-size: 1.2em;
286
+ font-style: italic;
287
+ line-height: 1.6em;
287
288
  text-align: center;
288
289
  color: #738a94;
289
- padding: 1rem 6rem 1.5rem;
290
+ padding: 0.75em 3em 1.25em;
290
291
  }
291
292
 
292
293
  .post-content blockquote.kg-blockquote-alt::before {
@@ -625,6 +626,10 @@
625
626
  color: #fff;
626
627
  }
627
628
 
629
+ .kg-callout-card-accent a {
630
+ color: #fff;
631
+ }
632
+
628
633
  .kg-callout-emoji {
629
634
  padding-right: 16px;
630
635
  line-height: 1.3;
@@ -199,7 +199,7 @@ module.exports = function ghost_head(options) { // eslint-disable-line camelcase
199
199
 
200
200
  // @TODO do this in a more "frameworky" way
201
201
  if (cardAssetService.hasFile('js')) {
202
- head.push(`<script async src="${getAssetUrl('public/cards.min.js')}"></script>`);
202
+ head.push(`<script defer src="${getAssetUrl('public/cards.min.js')}"></script>`);
203
203
  }
204
204
  if (cardAssetService.hasFile('css')) {
205
205
  head.push(`<link rel="stylesheet" type="text/css" href="${getAssetUrl('public/cards.min.css')}">`);
@@ -0,0 +1,258 @@
1
+ .kg-audio-card {
2
+ display: flex;
3
+ width: 100%;
4
+ min-height: 96px;
5
+ box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);
6
+ }
7
+
8
+ .kg-audio-thumbnail {
9
+ width: 80px;
10
+ margin: 8px;
11
+ object-fit: cover;
12
+ aspect-ratio: 1/1;
13
+ border-radius: 3px;
14
+ }
15
+
16
+ .kg-player-container {
17
+ position: relative;
18
+ display: flex;
19
+ flex-direction: column;
20
+ justify-content: space-between;
21
+ width: 100%;
22
+ --seek-before-width: 0%;
23
+ --volume-before-width: 100%;
24
+ --buffered-width: 0%;
25
+ }
26
+
27
+ .kg-audio-title {
28
+ width: 100%;
29
+ margin: 8px 0 0 0;
30
+ padding: 8px 12px 0;
31
+ border: none;
32
+ font-family: inherit;
33
+ font-size: 1em;
34
+ font-weight: 700;
35
+ background: transparent;
36
+ }
37
+
38
+ .kg-player {
39
+ display: flex;
40
+ flex-grow: 1;
41
+ align-items: center;
42
+ padding: 8px 12px;
43
+ }
44
+
45
+ .kg-audio-current-time {
46
+ min-width: 38px;
47
+ padding: 0 4px;
48
+ font-family: inherit;
49
+ font-size: .85em;
50
+ font-weight: 500;
51
+ line-height: 1.4em;
52
+ }
53
+
54
+ .kg-audio-time {
55
+ color: #ababab;
56
+ font-family: inherit;
57
+ font-size: .85em;
58
+ font-weight: 500;
59
+ line-height: 1.4em;
60
+ }
61
+
62
+ .kg-audio-duration {
63
+ padding: 0 4px;
64
+ }
65
+
66
+ .kg-audio-play-icon,
67
+ .kg-audio-pause-icon {
68
+ position: relative;
69
+ bottom: 1px;
70
+ padding: 0px 4px 0 0;
71
+ background: transparent;
72
+ }
73
+
74
+ .kg-audio-hide {
75
+ display: none;
76
+ }
77
+
78
+ .kg-audio-play-icon svg,
79
+ .kg-audio-pause-icon svg {
80
+ width: 14px;
81
+ height: 14px;
82
+ fill: currentColor;
83
+ }
84
+
85
+ .kg-audio-seek-slider {
86
+ flex-grow: 1;
87
+ margin: 0 4px;
88
+ }
89
+
90
+ .kg-audio-playback-rate {
91
+ width: 37px;
92
+ padding: 0 4px;
93
+ font-family: inherit;
94
+ font-size: .85em;
95
+ font-weight: 600;
96
+ line-height: 1.4em;
97
+ text-align: left;
98
+ background: transparent;
99
+ }
100
+
101
+ .kg-audio-mute-icon,
102
+ .kg-audio-unmute-icon {
103
+ position: relative;
104
+ bottom: 1px;
105
+ padding: 0 4px;
106
+ background: transparent;
107
+ }
108
+
109
+ .kg-audio-mute-icon svg,
110
+ .kg-audio-unmute-icon svg {
111
+ width: 16px;
112
+ height: 16px;
113
+ fill: currentColor;
114
+ }
115
+
116
+ .kg-audio-volume-slider {
117
+ width: 80px;
118
+ }
119
+
120
+ .kg-audio-seek-slider::before {
121
+ content: "";
122
+ position: absolute;
123
+ left: 0;
124
+ width: var(--seek-before-width) !important;
125
+ height: 4px;
126
+ cursor: pointer;
127
+ background-color: currentColor;
128
+ border-radius: 2px;
129
+ }
130
+
131
+ .kg-audio-volume-slider::before {
132
+ content: "";
133
+ position: absolute;
134
+ left: 0;
135
+ width: var(--volume-before-width) !important;
136
+ height: 4px;
137
+ cursor: pointer;
138
+ background-color: currentColor;
139
+ border-radius: 2px;
140
+ }
141
+
142
+ /* Resetting browser styles
143
+ /* --------------------------------------------------------------- */
144
+
145
+ .kg-player-container input[type=range] {
146
+ position: relative;
147
+ -webkit-appearance: none;
148
+ background: transparent;
149
+ }
150
+
151
+ .kg-player-container input[type=range]:focus {
152
+ outline: none;
153
+ }
154
+
155
+ .kg-player-container input[type=range]::-webkit-slider-thumb {
156
+ -webkit-appearance: none;
157
+ }
158
+
159
+ .kg-player-container input[type=range]::-ms-track {
160
+ cursor: pointer;
161
+ border-color: transparent;
162
+ color: transparent;
163
+ background: transparent;
164
+ }
165
+
166
+ /* Chrome & Safari styles
167
+ /* --------------------------------------------------------------- */
168
+
169
+ .kg-player-container input[type="range"]::-webkit-slider-runnable-track {
170
+ width: 100%;
171
+ height: 4px;
172
+ cursor: pointer;
173
+ background: rgba(124, 139, 154, 0.25);
174
+ border-radius: 2px;
175
+ }
176
+
177
+ .kg-player-container input[type="range"]::-webkit-slider-thumb {
178
+ position: relative;
179
+ box-sizing: content-box;
180
+ width: 12px;
181
+ height: 12px;
182
+ margin: -5px 0 0 0;
183
+ border: 0;
184
+ cursor: pointer;
185
+ background: #fff;
186
+ border-radius: 50%;
187
+ box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
188
+ }
189
+
190
+ .kg-player-container input[type="range"]:active::-webkit-slider-thumb {
191
+ transform: scale(1.2);
192
+ }
193
+
194
+ /* Firefox styles
195
+ /* --------------------------------------------------------------- */
196
+
197
+ .kg-player-container input[type="range"]::-moz-range-track {
198
+ width: 100%;
199
+ height: 4px;
200
+ cursor: pointer;
201
+ background: rgba(124, 139, 154, 0.25);
202
+ border-radius: 2px;
203
+ }
204
+
205
+ .kg-player-container input[type="range"]::-moz-range-progress {
206
+ background: currentColor;
207
+ border-radius: 2px;
208
+ }
209
+
210
+ .kg-player-container input[type="range"]::-moz-range-thumb {
211
+ box-sizing: content-box;
212
+ width: 12px;
213
+ height: 12px;
214
+ border: 0;
215
+ cursor: pointer;
216
+ background: #fff;
217
+ border-radius: 50%;
218
+ box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
219
+ }
220
+
221
+ .kg-player-container input[type="range"]:active::-moz-range-thumb {
222
+ transform: scale(1.2);
223
+ }
224
+
225
+ /* Edge & IE styles
226
+ /* --------------------------------------------------------------- */
227
+
228
+ .kg-player-container input[type="range"]::-ms-track {
229
+ width: 100%;
230
+ height: 3px;
231
+ border: solid transparent;
232
+ color: transparent;
233
+ cursor: pointer;
234
+ background: transparent;
235
+ }
236
+
237
+ .kg-player-container input[type="range"]::-ms-fill-lower {
238
+ background: #fff;
239
+ }
240
+
241
+ .kg-player-container input[type="range"]::-ms-fill-upper {
242
+ background: currentColor;
243
+ }
244
+
245
+ .kg-player-container input[type="range"]::-ms-thumb {
246
+ box-sizing: content-box;
247
+ width: 12px;
248
+ height: 12px;
249
+ border: 0;
250
+ cursor: pointer;
251
+ background: #fff;
252
+ border-radius: 50%;
253
+ box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
254
+ }
255
+
256
+ .kg-player-container input[type="range"]:active::-ms-thumb {
257
+ transform: scale(1.2);
258
+ }
@@ -1,29 +1,23 @@
1
- blockquote.kg-blockquote-alt {
2
- background: none;
3
- font-size: 2.4rem;
4
- line-height: 1.7;
1
+ .kg-blockquote-alt {
2
+ font-size: 1.5em;
3
+ font-style: italic;
4
+ line-height: 1.7em;
5
5
  text-align: center;
6
- color: var(--color-midgrey);
7
- padding: 1rem 8rem 1.5rem;
8
- border: 0 none;
9
- }
10
-
11
- blockquote.kg-blockquote-alt::before {
12
- display: none;
6
+ padding: 0 2.5em;
13
7
  }
14
8
 
15
9
  @media (max-width: 800px) {
16
- blockquote.kg-blockquote-alt {
17
- font-size: 2.2rem;
18
- padding-left: 6rem;
19
- padding-right: 6rem;
10
+ .kg-blockquote-alt {
11
+ font-size: 1.4em;
12
+ padding-left: 2em;
13
+ padding-right: 2em;
20
14
  }
21
15
  }
22
16
 
23
17
  @media (max-width: 600px) {
24
- blockquote.kg-blockquote-alt {
25
- font-size: 2rem;
26
- padding-left: 3rem;
27
- padding-right: 3rem;
18
+ .kg-blockquote-alt {
19
+ font-size: 1.2em;
20
+ padding-left: 1.75em;
21
+ padding-right: 1.75em;
28
22
  }
29
23
  }
@@ -0,0 +1,101 @@
1
+ .kg-product-card-container {
2
+ display: flex;
3
+ background: transparent;
4
+ box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);
5
+ border-radius: 5px;
6
+ flex-direction: column;
7
+ text-decoration: none;
8
+ max-width: 550px;
9
+ padding: 20px;
10
+ width: 100%;
11
+ }
12
+
13
+ .kg-product-card {
14
+ align-items: center;
15
+ display: flex;
16
+ flex-direction: column;
17
+ width: 100%;
18
+ }
19
+
20
+ .kg-product-card-image {
21
+ margin-bottom: 1.6rem;
22
+ }
23
+
24
+ .kg-product-card-header {
25
+ display: flex;
26
+ align-items: flex-start;
27
+ gap: 8px;
28
+ flex-wrap: wrap;
29
+ justify-content: space-between;
30
+ }
31
+
32
+ .kg-product-card-title-container {
33
+ flex: 2 1 250px;
34
+ }
35
+
36
+ .kg-product-card-title {
37
+ text-decoration: none;
38
+ font-weight: 700;
39
+ font-size: 1.4em;
40
+ margin-top: 0;
41
+ margin-bottom: 0;
42
+ line-height: 1.4em;
43
+ }
44
+
45
+ .kg-product-card-description {
46
+ font-size: 1em;
47
+ line-height: 1.6em;
48
+ opacity: .7;
49
+ margin-top: 8px;
50
+ }
51
+
52
+ .kg-product-card-button {
53
+ width: 100%;
54
+ margin-top: 16px;
55
+ }
56
+
57
+ .kg-product-card-rating {
58
+ display: flex;
59
+ align-items: center;
60
+ flex: 0 0 100px;
61
+ }
62
+
63
+ .kg-product-card-rating-star {
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ height: 32px;
68
+ width: 20px;
69
+ }
70
+
71
+ .kg-product-card-rating-star svg {
72
+ width: 16px;
73
+ height: 16px;
74
+ fill: #fff;
75
+ }
76
+
77
+ .kg-product-card-rating-edit .kg-product-card-rating-star:hover {
78
+ opacity: 0.7;
79
+ }
80
+
81
+ .kg-product-card-rating-edit {
82
+ background: none;
83
+ display: flex;
84
+ align-items: center;
85
+ }
86
+
87
+ .kg-product-card-rating-preview {
88
+ display: flex;
89
+ }
90
+
91
+ .kg-product-card-rating-star svg {
92
+ fill: #ebeef0;
93
+ }
94
+
95
+ .kg-product-card-rating-active.kg-product-card-rating-star svg {
96
+ fill: #394047;
97
+ }
98
+
99
+ .kg-product-card-button {
100
+ justify-content: center;
101
+ }
@@ -1,12 +1,8 @@
1
- .kg-toggle-card[data-kg-toggle-state="close"] .kg-toggle-content{
2
- height: auto;
3
- opacity: 1;
4
- transition: opacity 1s ease, top .35s ease;
5
- top: 0;
6
- position: relative;
1
+ .kg-toggle-card+.kg-toggle-card {
2
+ margin-top: 1em;
7
3
  }
8
4
 
9
- .kg-toggle-content {
5
+ .kg-toggle-card[data-kg-toggle-state="close"] .kg-toggle-content{
10
6
  height: 0;
11
7
  overflow: hidden;
12
8
  transition: opacity .5s ease, top .35s ease;
@@ -15,6 +11,14 @@
15
11
  position: relative;
16
12
  }
17
13
 
14
+ .kg-toggle-content {
15
+ height: auto;
16
+ opacity: 1;
17
+ transition: opacity 1s ease, top .35s ease;
18
+ top: 0;
19
+ position: relative;
20
+ }
21
+
18
22
  .kg-toggle-content p:first-of-type {
19
23
  margin-top: 0.5em;
20
24
  }
@@ -59,6 +63,15 @@
59
63
  transform: rotate(-180deg);
60
64
  }
61
65
 
66
+ .kg-toggle-heading path {
67
+ fill: none;
68
+ stroke: currentcolor;
69
+ stroke-linecap: round;
70
+ stroke-linejoin: round;
71
+ stroke-width: 1.5;
72
+ fill-rule: evenodd;
73
+ }
74
+
62
75
  .kg-toggle-heading-text {
63
76
  margin-top: 0;
64
77
  margin-bottom: 0;
@@ -0,0 +1,147 @@
1
+ const handleAudioPlayer = function (audioElementContainer) {
2
+ const audioPlayerContainer = audioElementContainer.querySelector('.kg-player-container');
3
+ const playIconContainer = audioElementContainer.querySelector('.kg-audio-play-icon');
4
+ const pauseIconContainer = audioElementContainer.querySelector('.kg-audio-pause-icon');
5
+ const seekSlider = audioElementContainer.querySelector('.kg-audio-seek-slider');
6
+ const playbackRateContainer = audioElementContainer.querySelector('.kg-audio-playback-rate');
7
+ const muteIconContainer = audioElementContainer.querySelector('.kg-audio-mute-icon');
8
+ const unmuteIconContainer = audioElementContainer.querySelector('.kg-audio-unmute-icon');
9
+ const volumeSlider = audioElementContainer.querySelector('.kg-audio-volume-slider');
10
+ const audio = audioElementContainer.querySelector('audio');
11
+ const durationContainer = audioElementContainer.querySelector('.kg-audio-duration');
12
+ const currentTimeContainer = audioElementContainer.querySelector('.kg-audio-current-time');
13
+ let playbackRates = [{
14
+ rate: 0.75,
15
+ label: '0.7×'
16
+ }, {
17
+ rate: 1.0,
18
+ label: '1×'
19
+ }, {
20
+ rate: 1.25,
21
+ label: '1.2×'
22
+ }, {
23
+ rate: 1.75,
24
+ label: '1.7×'
25
+ }, {
26
+ rate: 2.0,
27
+ label: '2×'
28
+ }];
29
+
30
+ let raf = null;
31
+ let currentPlaybackRateIdx = 1;
32
+
33
+ audio.src = audioElementContainer.getAttribute('data-kg-audio-src');
34
+
35
+ const whilePlaying = () => {
36
+ seekSlider.value = Math.floor(audio.currentTime);
37
+ currentTimeContainer.textContent = calculateTime(seekSlider.value);
38
+ audioPlayerContainer.style.setProperty('--seek-before-width', `${seekSlider.value / seekSlider.max * 100}%`);
39
+ raf = requestAnimationFrame(whilePlaying);
40
+ }
41
+
42
+ const showRangeProgress = (rangeInput) => {
43
+ if (rangeInput === seekSlider) {
44
+ audioPlayerContainer.style.setProperty('--seek-before-width', rangeInput.value / rangeInput.max * 100 + '%');
45
+ }
46
+ else {
47
+ audioPlayerContainer.style.setProperty('--volume-before-width', rangeInput.value / rangeInput.max * 100 + '%');
48
+ }
49
+ }
50
+
51
+ const calculateTime = (secs) => {
52
+ const minutes = Math.floor(secs / 60);
53
+ const seconds = Math.floor(secs % 60);
54
+ const returnedSeconds = seconds < 10 ? `0${seconds}` : `${seconds}`;
55
+ return `${minutes}:${returnedSeconds}`;
56
+ }
57
+
58
+ const displayDuration = () => {
59
+ durationContainer.textContent = calculateTime(audio.duration);
60
+ }
61
+
62
+ const setSliderMax = () => {
63
+ seekSlider.max = Math.floor(audio.duration);
64
+ }
65
+
66
+ const displayBufferedAmount = () => {
67
+ if (audio.buffered.length > 0) {
68
+ const bufferedAmount = Math.floor(audio.buffered.end(audio.buffered.length - 1));
69
+ audioPlayerContainer.style.setProperty('--buffered-width', `${(bufferedAmount / seekSlider.max) * 100}%`);
70
+ }
71
+ }
72
+
73
+ if (audio.readyState > 0) {
74
+ displayDuration();
75
+ setSliderMax();
76
+ displayBufferedAmount();
77
+ } else {
78
+ audio.addEventListener('loadedmetadata', () => {
79
+ displayDuration();
80
+ setSliderMax();
81
+ displayBufferedAmount();
82
+ });
83
+ }
84
+
85
+ playIconContainer.addEventListener('click', () => {
86
+ playIconContainer.classList.add("kg-audio-hide");
87
+ pauseIconContainer.classList.remove("kg-audio-hide");
88
+ audio.play();
89
+ requestAnimationFrame(whilePlaying);
90
+ });
91
+
92
+ pauseIconContainer.addEventListener('click', () => {
93
+ pauseIconContainer.classList.add("kg-audio-hide");
94
+ playIconContainer.classList.remove("kg-audio-hide");
95
+ audio.pause();
96
+ cancelAnimationFrame(raf);
97
+ });
98
+
99
+ muteIconContainer.addEventListener('click', () => {
100
+ muteIconContainer.classList.add("kg-audio-hide");
101
+ unmuteIconContainer.classList.remove("kg-audio-hide");
102
+ audio.muted = false;
103
+ });
104
+
105
+ unmuteIconContainer.addEventListener('click', () => {
106
+ unmuteIconContainer.classList.add("kg-audio-hide");
107
+ muteIconContainer.classList.remove("kg-audio-hide");
108
+ audio.muted = true;
109
+ });
110
+
111
+ playbackRateContainer.addEventListener('click', () => {
112
+ let nextPlaybackRate = playbackRates[(currentPlaybackRateIdx + 1) % 5];
113
+ currentPlaybackRateIdx = currentPlaybackRateIdx + 1;
114
+ audio.playbackRate = nextPlaybackRate.rate;
115
+ playbackRateContainer.textContent = nextPlaybackRate.label;
116
+ });
117
+
118
+ audio.addEventListener('progress', displayBufferedAmount);
119
+
120
+ seekSlider.addEventListener('input', (e) => {
121
+ showRangeProgress(e.target);
122
+ currentTimeContainer.textContent = calculateTime(seekSlider.value);
123
+ if (!audio.paused) {
124
+ cancelAnimationFrame(raf);
125
+ }
126
+ });
127
+
128
+ seekSlider.addEventListener('change', () => {
129
+ audio.currentTime = seekSlider.value;
130
+ if (!audio.paused) {
131
+ requestAnimationFrame(whilePlaying);
132
+ }
133
+ });
134
+
135
+ volumeSlider.addEventListener('input', (e) => {
136
+ const value = e.target.value;
137
+ showRangeProgress(e.target);
138
+ audio.volume = value / 100;
139
+ });
140
+ }
141
+
142
+ const audioCardElements = document.querySelectorAll('.kg-audio-card');
143
+
144
+ for (let i = 0; i < audioCardElements.length; i++) {
145
+ handleAudioPlayer(audioCardElements[i]);
146
+ }
147
+
@@ -8,7 +8,6 @@
8
8
 
9
9
  // Required Ghost internals
10
10
  const config = require('../shared/config');
11
- const logging = require('@tryghost/logging');
12
11
 
13
12
  let notified = {
14
13
  started: false,
@@ -53,7 +52,7 @@ async function notify(type, error = null) {
53
52
  let socketAddress = config.get('bootstrap-socket');
54
53
  if (socketAddress) {
55
54
  const bootstrapSocket = require('@tryghost/bootstrap-socket');
56
- return bootstrapSocket.connectAndSend(socketAddress, logging, message);
55
+ return bootstrapSocket.connectAndSend(socketAddress, message);
57
56
  }
58
57
 
59
58
  return Promise.resolve();
@@ -148,7 +148,7 @@ dd {
148
148
  }
149
149
 
150
150
  blockquote {
151
- margin: 2em 0;
151
+ margin: 2em 0 2em 0;
152
152
  padding: 0 25px 0 25px;
153
153
  border-left: ${templateSettings.accentColor || '#15212A'} 2px solid;
154
154
  font-size: 17px;
@@ -159,11 +159,10 @@ blockquote {
159
159
 
160
160
  blockquote.kg-blockquote-alt {
161
161
  border-left: 0 none;
162
- padding-left: 50px;
163
- padding-right: 50px;
164
- margin-bottom: 2.5em;
162
+ padding: 0 50px 0 50px;
165
163
  text-align: center;
166
164
  font-size: 1.2em;
165
+ font-style: italic;
167
166
  color: #999999;
168
167
  }
169
168
 
@@ -567,6 +566,16 @@ figure blockquote p {
567
566
  padding-bottom: 4px;
568
567
  }
569
568
 
569
+ .kg-twitter-link {
570
+ display: block;
571
+ text-decoration: none !important;
572
+ color: #15212A !important;
573
+ font-family: inherit !important;
574
+ font-size: 15px;
575
+ padding: 8px;
576
+ line-height: 1.3em;
577
+ }
578
+
570
579
  .kg-callout-card {
571
580
  display: flex;
572
581
  margin: 0 0 1.5em 0;
@@ -898,15 +907,17 @@ figure blockquote p {
898
907
  }
899
908
 
900
909
  table.body blockquote {
901
- font-size: 17px !important;
902
- line-height: 1.6em !important;
903
- margin-bottom: 0 !important;
904
- padding-left: 15px !important;
910
+ font-size: 17px;
911
+ line-height: 1.6em;
912
+ margin-bottom: 0;
913
+ padding-left: 15px;
905
914
  }
906
915
 
907
916
  table.body blockquote.kg-blockquote-alt {
908
- padding-left: 50px !important;
909
- margin-bottom: 2.5em !important;
917
+ border-left: 0 none !important;
918
+ margin: 0 0 2.5em 0 !important;
919
+ padding: 0 50px 0 50px !important;
920
+ font-size: 1.2em;
910
921
  }
911
922
 
912
923
  table.body blockquote + * {