ghost 4.13.0 → 4.16.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 (112) 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 +1 -1
  4. package/content/themes/casper/default.hbs +2 -2
  5. package/content/themes/casper/package.json +1 -1
  6. package/content/themes/casper/page.hbs +28 -26
  7. package/content/themes/casper/partials/post-card.hbs +2 -2
  8. package/content/themes/casper/post.hbs +67 -65
  9. package/content/themes/casper/tag.hbs +2 -2
  10. package/core/built/assets/{chunk.3.f80c7fbb7573ce508a05.js → chunk.3.4b1d9e20e57164ac9c29.js} +31 -29
  11. package/core/built/assets/ghost-dark-bb2831fc27fcb02893ed0a761207dc63.css +1 -0
  12. package/core/built/assets/{ghost.min-ba7f03a78d7d98444af386b8ae9347a7.js → ghost.min-d1d99f3ed6e0f427874b2a11e7078475.js} +1777 -1685
  13. package/core/built/assets/ghost.min-e7612edfa72b0fe2c201b387923e6fc7.css +1 -0
  14. package/core/built/assets/icons/check-2.svg +1 -0
  15. package/core/built/assets/icons/discount-bubble.svg +1 -0
  16. package/core/built/assets/icons/no-data-line-chart.svg +1 -0
  17. package/core/built/assets/icons/no-data-list.svg +9 -8
  18. package/core/built/assets/icons/no-data-subscription.svg +1 -0
  19. package/core/built/assets/{vendor.min-29784d514390cb5abc74ae660cb2fbc7.js → vendor.min-3660ec7864887f1496fe7a27fd23ab76.js} +1570 -1289
  20. package/core/frontend/helpers/ghost_head.js +7 -1
  21. package/core/frontend/helpers/match.js +19 -4
  22. package/core/frontend/helpers/products.js +68 -0
  23. package/core/frontend/helpers/tpl/content-cta.hbs +1 -1
  24. package/core/frontend/services/routing/controllers/email-post.js +3 -2
  25. package/core/frontend/services/settings/loader.js +2 -2
  26. package/core/frontend/services/sitemap/base-generator.js +12 -8
  27. package/core/frontend/services/sitemap/manager.js +1 -1
  28. package/core/frontend/services/theme-engine/handlebars/helpers.js +1 -0
  29. package/core/frontend/services/theme-engine/middleware.js +4 -1
  30. package/core/server/api/canary/email-preview.js +15 -33
  31. package/core/server/api/canary/integrations.js +7 -30
  32. package/core/server/api/canary/labels.js +8 -9
  33. package/core/server/api/canary/members.js +13 -9
  34. package/core/server/api/canary/schedules.js +9 -57
  35. package/core/server/api/canary/settings.js +20 -158
  36. package/core/server/api/canary/themes.js +5 -59
  37. package/core/server/api/canary/utils/serializers/output/members.js +2 -14
  38. package/core/server/api/canary/utils/validators/input/settings.js +23 -1
  39. package/core/server/api/canary/webhooks.js +6 -24
  40. package/core/server/api/v2/schedules.js +9 -57
  41. package/core/server/api/v3/email-preview.js +15 -28
  42. package/core/server/api/v3/integrations.js +7 -30
  43. package/core/server/api/v3/labels.js +8 -9
  44. package/core/server/api/v3/members.js +4 -1
  45. package/core/server/api/v3/schedules.js +9 -57
  46. package/core/server/api/v3/settings.js +13 -132
  47. package/core/server/api/v3/utils/validators/input/settings.js +23 -1
  48. package/core/server/api/v3/webhooks.js +6 -28
  49. package/core/server/data/exporter/table-lists.js +1 -0
  50. package/core/server/data/importer/import-manager.js +398 -0
  51. package/core/server/data/importer/importers/data/data-importer.js +162 -0
  52. package/core/server/data/importer/importers/data/index.js +1 -162
  53. package/core/server/data/importer/index.js +1 -379
  54. package/core/server/data/migrations/versions/4.14/01-fix-comped-member-statuses.js +70 -0
  55. package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +60 -0
  56. package/core/server/data/migrations/versions/4.15/01-add-temp-members-analytic-events-table.js +12 -0
  57. package/core/server/data/migrations/versions/4.16/01-add-custom-theme-settings-table.js +9 -0
  58. package/core/server/data/schema/fixtures/utils.js +6 -1
  59. package/core/server/data/schema/schema.js +26 -0
  60. package/core/server/lib/request-external.js +3 -2
  61. package/core/server/models/action.js +1 -1
  62. package/core/server/models/api-key.js +1 -1
  63. package/core/server/models/base/bookshelf.js +0 -3
  64. package/core/server/models/base/index.js +2 -0
  65. package/core/server/models/base/plugins/events.js +2 -2
  66. package/core/server/models/base/plugins/raw-knex.js +10 -10
  67. package/core/server/models/custom-theme-setting.js +9 -0
  68. package/core/server/models/email.js +2 -2
  69. package/core/server/models/index.js +2 -0
  70. package/core/server/models/integration.js +1 -1
  71. package/core/server/models/label.js +2 -2
  72. package/core/server/models/member-analytic-event.js +9 -0
  73. package/core/server/models/member.js +2 -2
  74. package/core/server/models/post.js +2 -2
  75. package/core/server/models/settings.js +2 -2
  76. package/core/server/models/tag.js +2 -2
  77. package/core/server/models/user.js +2 -2
  78. package/core/server/models/webhook.js +2 -2
  79. package/core/server/services/bulk-email/bulk-email-processor.js +1 -4
  80. package/core/server/services/custom-theme-settings.js +8 -0
  81. package/core/server/services/integrations/integrations-service.js +61 -0
  82. package/core/server/services/mail/GhostMailer.js +29 -37
  83. package/core/server/services/mega/email-preview.js +41 -0
  84. package/core/server/services/mega/index.js +4 -0
  85. package/core/server/services/mega/mega.js +27 -23
  86. package/core/server/services/mega/post-email-serializer.js +28 -21
  87. package/core/server/services/mega/template.js +11 -0
  88. package/core/server/services/members/api.js +1 -0
  89. package/core/server/services/members/emails/signup.js +1 -1
  90. package/core/server/services/oembed.js +7 -2
  91. package/core/server/services/posts/post-scheduling-service.js +100 -0
  92. package/core/server/services/settings/index.js +13 -16
  93. package/core/server/services/settings/settings-bread-service.js +188 -0
  94. package/core/server/services/settings/settings-utils.js +32 -0
  95. package/core/server/services/themes/ThemeStorage.js +5 -4
  96. package/core/server/services/themes/activation-bridge.js +14 -0
  97. package/core/server/services/themes/index.js +2 -0
  98. package/core/server/services/themes/installer.js +72 -0
  99. package/core/server/services/themes/validate.js +5 -2
  100. package/core/server/services/webhooks/webhooks-service.js +55 -0
  101. package/core/server/web/admin/views/default-prod.html +4 -4
  102. package/core/server/web/admin/views/default.html +4 -4
  103. package/core/server/web/members/app.js +3 -0
  104. package/core/shared/config/defaults.json +2 -2
  105. package/core/shared/custom-theme-settings-cache.js +3 -0
  106. package/core/shared/i18n/translations/en.json +1 -6
  107. package/core/shared/labs.js +5 -7
  108. package/package.json +64 -62
  109. package/yarn.lock +1490 -1055
  110. package/core/built/assets/ghost-dark-98d56e4973a502750748090f9dbc8280.css +0 -1
  111. package/core/built/assets/ghost.min-6932a664a1cb92a8e4a15f540cae3ad8.css +0 -1
  112. package/core/server/services/mega/template-labs.js +0 -1024
@@ -1,1024 +0,0 @@
1
- /* eslint indent: warn, no-irregular-whitespace: warn */
2
- const iff = (cond, yes, no) => (cond ? yes : no);
3
- module.exports = ({post, site, templateSettings}) => {
4
- const date = new Date();
5
- const hasFeatureImageCaption = templateSettings.showFeatureImage && post.feature_image && post.feature_image_caption;
6
- return `<!doctype html>
7
- <html>
8
-
9
- <head>
10
- <meta name="viewport" content="width=device-width" />
11
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
12
- <title>${post.title}</title>
13
- <style>
14
- /* -------------------------------------
15
- GLOBAL RESETS
16
- ------------------------------------- */
17
-
18
- /*All the styling goes here*/
19
-
20
- img {
21
- border: none;
22
- -ms-interpolation-mode: bicubic;
23
- max-width: 100%;
24
- }
25
-
26
- body {
27
- background-color: #fff;
28
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
29
- -webkit-font-smoothing: antialiased;
30
- font-size: 18px;
31
- line-height: 1.4;
32
- margin: 0;
33
- padding: 0;
34
- -ms-text-size-adjust: 100%;
35
- -webkit-text-size-adjust: 100%;
36
- color: #15212A;
37
- }
38
-
39
- table {
40
- border-collapse: separate;
41
- mso-table-lspace: 0pt;
42
- mso-table-rspace: 0pt;
43
- width: 100%;
44
- }
45
-
46
- table td {
47
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
48
- font-size: 18px;
49
- vertical-align: top;
50
- color: #15212A;
51
- }
52
-
53
- /* -------------------------------------
54
- BODY & CONTAINER
55
- ------------------------------------- */
56
- .body {
57
- background-color: #fff;
58
- width: 100%;
59
- }
60
-
61
- /* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */
62
- .container {
63
- display: block;
64
- margin: 0 auto !important;
65
- /* makes it centered */
66
- max-width: 600px;
67
- }
68
-
69
- /* This should also be a block element, so that it will fill 100% of the .container */
70
- .content {
71
- box-sizing: border-box;
72
- display: block;
73
- margin: 0 auto;
74
- max-width: 600px;
75
- }
76
-
77
- /* -------------------------------------
78
- POST CONTENT
79
- ------------------------------------- */
80
- hr {
81
- position: relative;
82
- display: block;
83
- width: 100%;
84
- margin: 3em 0;
85
- padding: 0;
86
- height: 1px;
87
- border: 0;
88
- border-top: 1px solid #e5eff5;
89
- }
90
-
91
- p,
92
- ul,
93
- ol,
94
- dl,
95
- blockquote {
96
- margin: 0 0 1.5em 0;
97
- line-height: 1.6em;
98
- }
99
-
100
- ol,
101
- ul {
102
- padding-left: 1.3em;
103
- padding-right: 1.5em;
104
- }
105
-
106
- ol ol,
107
- ul ul,
108
- ul ol,
109
- ol ul {
110
- margin: 0.5em 0 1em;
111
- }
112
-
113
- ul {
114
- list-style: disc;
115
- }
116
-
117
- ol {
118
- list-style: decimal;
119
- }
120
-
121
- ul,
122
- ol {
123
- max-width: 100%;
124
- }
125
-
126
- li {
127
- margin: 0.5em 0;
128
- padding-left: 0.3em;
129
- line-height: 1.6em;
130
- }
131
-
132
- dt {
133
- float: left;
134
- margin: 0 20px 0 0;
135
- width: 120px;
136
- color: #15212A;
137
- font-weight: 500;
138
- text-align: right;
139
- }
140
-
141
- dd {
142
- margin: 0 0 5px 0;
143
- text-align: left;
144
- }
145
-
146
- blockquote {
147
- margin: 2em 0;
148
- padding: 0 25px 0 25px;
149
- border-left: ${templateSettings.accentColor || '#15212A'} 2px solid;
150
- font-size: 17px;
151
- font-weight: 500;
152
- line-height: 1.6em;
153
- letter-spacing: -0.2px;
154
- }
155
-
156
- blockquote p {
157
- margin: 0.8em 0;
158
- font-size: 1em;
159
- }
160
-
161
- blockquote small {
162
- display: inline-block;
163
- margin: 0.8em 0 0.8em 1.5em;
164
- font-size: 0.9em;
165
- opacity: 0.8;
166
- }
167
-
168
- blockquote cite {
169
- font-weight: bold;
170
- }
171
- blockquote cite a {
172
- font-weight: normal;
173
- }
174
-
175
- a {
176
- color: #15212A;
177
- text-decoration: none;
178
- }
179
-
180
- h1,
181
- h2,
182
- h3,
183
- h4,
184
- h5,
185
- h6 {
186
- margin-top: 0;
187
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
188
- line-height: 1.15em;
189
- font-weight: 600;
190
- text-rendering: optimizeLegibility;
191
- }
192
-
193
- h1 {
194
- margin: 1.5em 0 0.5em 0;
195
- font-size: 42px;
196
- font-weight: 600;
197
- }
198
-
199
- h2 {
200
- margin: 1.5em 0 0.5em 0;
201
- font-size: 32px;
202
- line-height: 1.22em;
203
- }
204
-
205
- h3 {
206
- margin: 1.5em 0 0.5em 0;
207
- font-size: 26px;
208
- line-height: 1.25em;
209
- }
210
-
211
- h4 {
212
- margin: 1.8em 0 0.5em 0;
213
- font-size: 21px;
214
- line-height: 1.3em;
215
- }
216
-
217
- h5 {
218
- margin: 2em 0 0.5em 0;
219
- font-size: 19px;
220
- line-height: 1.4em;
221
- }
222
-
223
- h6 {
224
- margin: 2em 0 0.5em 0;
225
- font-size: 19px;
226
- line-height: 1.4em;
227
- font-weight: 700;
228
- }
229
-
230
- strong {
231
- font-weight: 700;
232
- }
233
-
234
- figure {
235
- margin: 0 0 1.5em;
236
- padding: 0;
237
- }
238
-
239
- figcaption {
240
- text-align: center;
241
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
242
- font-size: 14px;
243
- padding-top: 5px;
244
- line-height: 1.5em;
245
- }
246
-
247
- code {
248
- font-size: 0.9em;
249
- }
250
-
251
- pre {
252
- white-space: pre-wrap;
253
- background: #15212A;
254
- padding: 15px;
255
- border-radius: 3px;
256
- line-height: 1.2em;
257
- color: #ffffff;
258
- }
259
-
260
- p code {
261
- background: #F2F7FA;
262
- word-break: break-all;
263
- padding: 1px 7px;
264
- border-radius: 3px;
265
- }
266
-
267
- figure blockquote p {
268
- font-size: 1em;
269
- }
270
-
271
- .header-image {
272
- padding-top: 16px;
273
- }
274
-
275
- .site-icon {
276
- padding-bottom: 10px;
277
- padding-top: 20px;
278
- text-align: center;
279
- border-radius: 3px;
280
- }
281
-
282
- .site-icon img {
283
- width: 48px;
284
- height: 48px;
285
- border-radius: 3px;
286
- }
287
-
288
- .site-info {
289
- padding-top: 50px;
290
- border-bottom: 1px solid #e5eff5;
291
- }
292
-
293
- .site-url {
294
- color: #15212A;
295
- font-size: 16px;
296
- letter-spacing: -0.1px;
297
- font-weight: 700;
298
- text-transform: uppercase;
299
- text-align: center;
300
- padding-bottom: 50px;
301
- }
302
-
303
- .post-title {
304
- padding-bottom: 10px;
305
- font-size: 42px;
306
- line-height: 1.1em;
307
- font-weight: 600;
308
- text-align: center;
309
- }
310
- .post-title-serif {
311
- font-family: Georgia, serif;
312
- }
313
- .post-title-left {
314
- text-align: left;
315
- }
316
-
317
- .post-title-link {
318
- color: #15212A;
319
- display: block;
320
- text-align: center;
321
- margin-top: 50px;
322
- }
323
- .post-title-link-left {
324
- text-align: left;
325
- }
326
-
327
- .post-meta,
328
- .view-online {
329
- padding-bottom: 50px;
330
- white-space: nowrap;
331
- color: #738a94;
332
- font-size: 13px;
333
- letter-spacing: 0.2px;
334
- text-transform: uppercase;
335
- text-align: center;
336
- }
337
- .post-meta-left {
338
- text-align: left;
339
- }
340
-
341
- .view-online {
342
- text-align: right;
343
- }
344
-
345
- .view-online-link {
346
- word-wrap: none;
347
- white-space: nowrap;
348
- color: #15212A;
349
- }
350
-
351
- .feature-image {
352
- padding-bottom: 30px;
353
- width: 100%;
354
- }
355
-
356
- .feature-image-with-caption {
357
- padding-bottom: 10px;
358
- }
359
-
360
- .feature-image-caption {
361
- width: 100%;
362
- padding-bottom: 30px;
363
- text-align: center;
364
- font-size: 13px;
365
- color: #738a94;
366
- }
367
-
368
- .post-content {
369
- max-width: 600px !important;
370
- font-family: Georgia, serif;
371
- font-size: 18px;
372
- line-height: 1.5em;
373
- color: #23323D;
374
- padding-bottom: 20px;
375
- border-bottom: 1px solid #e5eff5;
376
- }
377
-
378
- .post-content-sans-serif {
379
- max-width: 600px !important;
380
- font-size: 17px;
381
- line-height: 1.5em;
382
- color: #23323D;
383
- padding-bottom: 20px;
384
- border-bottom: 1px solid #e5eff5;
385
- }
386
-
387
- .post-content a,
388
- .post-content-sans-serif a {
389
- color: #08121A;
390
- text-decoration: underline;
391
- }
392
-
393
- .kg-bookmark-card {
394
- width: 100%;
395
- background: #ffffff;
396
- }
397
-
398
- .kg-bookmark-card a {
399
- text-decoration: none;
400
- }
401
-
402
- .kg-card + .kg-bookmark-card {
403
- margin-top: 0;
404
- }
405
-
406
- .kg-image-card img {
407
- display: block;
408
- margin: 0 auto;
409
- width: auto;
410
- height: auto !important;
411
- }
412
-
413
- .kg-bookmark-container {
414
- display: flex;
415
- min-height: 148px;
416
- color: #15212A;
417
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
418
- text-decoration: none;
419
- border-radius: 3px;
420
- border: 1px solid #e5eff5;
421
- }
422
-
423
- .kg-bookmark-content {
424
- display: inline-block;
425
- width: 100%;
426
- padding: 20px;
427
- }
428
-
429
- .kg-bookmark-title {
430
- color: #15212A;
431
- font-size: 15px;
432
- line-height: 1.5em;
433
- font-weight: 600;
434
- }
435
-
436
- .kg-bookmark-description {
437
- display: -webkit-box;
438
- overflow-y: hidden;
439
- margin-top: 12px;
440
- max-height: 40px;
441
- color: #738a94;
442
- font-size: 13px;
443
- line-height: 1.5em;
444
- font-weight: 400;
445
-
446
- -webkit-line-clamp: 2;
447
- -webkit-box-orient: vertical;
448
- }
449
-
450
- .kg-bookmark-thumbnail {
451
- min-width: 140px;
452
- max-width: 180px;
453
- background-repeat: no-repeat;
454
- background-size: cover;
455
- background-position: center;
456
- border-radius: 0 2px 2px 0;
457
- }
458
-
459
- .kg-bookmark-thumbnail img {
460
- display: none;
461
- }
462
-
463
- .kg-bookmark-metadata {
464
- display: flex;
465
- flex-wrap: wrap;
466
- align-items: center;
467
- margin-top: 14px;
468
- color: #15212A;
469
- font-size: 13px;
470
- font-weight: 400;
471
- }
472
-
473
- .kg-bookmark-icon {
474
- margin-right: 8px;
475
- width: 22px;
476
- height: 22px;
477
- }
478
-
479
- .kg-bookmark-author {
480
- line-height: 1.5em;
481
- }
482
-
483
- .kg-bookmark-publisher {
484
- overflow: hidden;
485
- max-width: 240px;
486
- line-height: 1.5em;
487
- text-overflow: ellipsis;
488
- white-space: nowrap;
489
- }
490
-
491
- .kg-bookmark-publisher:before {
492
- content: "•";
493
- margin: 0 6px;
494
- }
495
-
496
- .kg-gallery-container {
497
- margin-top: -20px;
498
- }
499
-
500
- .kg-gallery-image img {
501
- width: 100% !important;
502
- height: auto !important;
503
- padding-top: 20px;
504
- }
505
-
506
- .kg-video-preview {
507
- background-color: #1d1f21;
508
- background-image: radial-gradient(circle at center, #5b5f66, #1d1f21);
509
- display: block;
510
- text-decoration: none !important;
511
- }
512
- .kg-video-preview table {
513
- background-size: cover;
514
- min-height: 200px; /* for when images aren't loaded */
515
- }
516
- .kg-video-play-button {
517
- height: 2em;
518
- width: 3em;
519
- margin: 0 auto;
520
- border-radius: 10px;
521
- padding: 1em 0.8em 0.6em 1em;
522
- font-size: 1em; /* change this to resize */
523
- background-color: rgba(0,0,0,0.85);
524
- }
525
- .kg-video-play-button div {
526
- display: block;
527
- width: 0;
528
- height: 0;
529
- margin: 0 auto;
530
- line-height: 0px; /* fix for Yahoo Mail */
531
- border-color: transparent transparent transparent white;
532
- border-style: solid;
533
- border-width: 0.8em 0 0.8em 1.5em;
534
- }
535
-
536
-
537
- /* -------------------------------------
538
- HEADER, FOOTER, MAIN
539
- ------------------------------------- */
540
- .main {
541
- background: #ffffff;
542
- border-radius: 3px;
543
- width: 100%;
544
- }
545
-
546
- .wrapper {
547
- box-sizing: border-box;
548
- padding: 0 20px;
549
- }
550
-
551
- .content-block {
552
- padding-bottom: 10px;
553
- padding-top: 10px;
554
- }
555
-
556
- .footer {
557
- color: #738a94;
558
- margin-top: 20px;
559
- text-align: center;
560
- font-size: 13px;
561
- padding-bottom: 10px;
562
- padding-top: 10px;
563
- padding-left: 30px;
564
- padding-right: 30px;
565
- line-height: 1.5em;
566
- }
567
-
568
- .footer a {
569
- color: #738a94;
570
- text-decoration: underline;
571
- }
572
-
573
- /* -------------------------------------
574
- BUTTONS
575
- ------------------------------------- */
576
- .btn {
577
- box-sizing: border-box;
578
- width: 100%;
579
- display: table;
580
- }
581
-
582
- .btn>tbody>tr>td {
583
- padding-bottom: 15px;
584
- }
585
-
586
- .btn table {
587
- width: auto;
588
- }
589
-
590
- .btn table td {
591
- background-color: #ffffff;
592
- border-radius: 5px;
593
- text-align: center;
594
- }
595
-
596
- .btn a {
597
- background-color: #ffffff;
598
- border: solid 1px #3498db;
599
- border-radius: 5px;
600
- box-sizing: border-box;
601
- color: #3498db;
602
- cursor: pointer;
603
- display: inline-block;
604
- font-size: 14px;
605
- font-weight: bold;
606
- margin: 0;
607
- padding: 12px 25px;
608
- text-decoration: none;
609
- text-transform: capitalize;
610
- }
611
-
612
- .btn-primary table td {
613
- background-color: #3498db;
614
- }
615
-
616
- .btn-primary a {
617
- background-color: #3498db;
618
- border-color: #3498db;
619
- color: #ffffff;
620
- }
621
-
622
- .btn-accent table td {
623
- background-color: ${templateSettings.adjustedAccentColor || '#3498db'};
624
- }
625
-
626
- .btn-accent a {
627
- background-color: ${templateSettings.adjustedAccentColor || '#3498db'};
628
- border-color: ${templateSettings.adjustedAccentColor || '#3498db'};
629
- color: ${templateSettings.adjustedAccentContrastColor || '#ffffff'};
630
- }
631
-
632
- /* -------------------------------------
633
- OTHER STYLES THAT MIGHT BE USEFUL
634
- ------------------------------------- */
635
- .last {
636
- margin-bottom: 0;
637
- }
638
-
639
- .first {
640
- margin-top: 0;
641
- }
642
-
643
- .align-center {
644
- text-align: center;
645
- }
646
-
647
- .align-right {
648
- text-align: right;
649
- }
650
-
651
- .align-left {
652
- text-align: left;
653
- }
654
-
655
- .clear {
656
- clear: both;
657
- }
658
-
659
- .mt0 {
660
- margin-top: 0;
661
- }
662
-
663
- .mb0 {
664
- margin-bottom: 0;
665
- }
666
-
667
- .preheader {
668
- color: transparent;
669
- display: none;
670
- height: 0;
671
- max-height: 0;
672
- max-width: 0;
673
- opacity: 0;
674
- overflow: hidden;
675
- mso-hide: all;
676
- visibility: hidden;
677
- width: 0;
678
- }
679
-
680
- /* -------------------------------------
681
- RESPONSIVE AND MOBILE FRIENDLY STYLES
682
- ------------------------------------- */
683
- @media only screen and (max-width: 620px) {
684
-
685
- table.body {
686
- width: 100%;
687
- min-width: 100%;
688
- }
689
-
690
- table.body p,
691
- table.body ul,
692
- table.body ol,
693
- table.body td,
694
- table.body span {
695
- font-size: 16px !important;
696
- }
697
-
698
- table.body pre {
699
- white-space: pre-wrap !important;
700
- word-break: break-word !important;
701
- }
702
-
703
- table.body .wrapper,
704
- table.body .article {
705
- padding: 0 10px !important;
706
- }
707
-
708
- table.body .content {
709
- padding: 0 !important;
710
- }
711
-
712
- table.body .container {
713
- padding: 0 !important;
714
- width: 100% !important;
715
- }
716
-
717
- table.body .main {
718
- border-left-width: 0 !important;
719
- border-radius: 0 !important;
720
- border-right-width: 0 !important;
721
- }
722
-
723
- table.body .btn table {
724
- width: 100% !important;
725
- }
726
-
727
- table.body .btn a {
728
- width: 100% !important;
729
- }
730
-
731
- table.body .img-responsive {
732
- height: auto !important;
733
- max-width: 100% !important;
734
- width: auto !important;
735
- }
736
-
737
- table.body .site-icon img {
738
- width: 40px !important;
739
- height: 40px !important;
740
- }
741
-
742
- table.body .site-url a {
743
- font-size: 14px !important;
744
- padding-bottom: 15px !important;
745
- }
746
-
747
- table.body .post-meta {
748
- white-space: normal !important;
749
- font-size: 12px !important;
750
- line-height: 1.5em;
751
- }
752
-
753
- table.body .view-online-link,
754
- table.body .footer,
755
- table.body .footer a {
756
- font-size: 12px !important;
757
- }
758
-
759
- table.body .post-title a {
760
- font-size: 32px !important;
761
- line-height: 1.15em !important;
762
- }
763
-
764
- table.body .kg-bookmark-card {
765
- width: 90vw !important;
766
- }
767
-
768
- table.body .kg-bookmark-thumbnail {
769
- display: none !important;
770
- }
771
-
772
- table.body .kg-bookmark-metadata span {
773
- font-size: 13px !important;
774
- }
775
-
776
- table.body .kg-embed-card {
777
- max-width: 90vw !important;
778
- }
779
-
780
- table.body h1 {
781
- font-size: 32px !important;
782
- line-height: 1.3em !important;
783
- }
784
-
785
- table.body h2 {
786
- font-size: 26px !important;
787
- line-height: 1.22em !important;
788
- }
789
-
790
- table.body h3 {
791
- font-size: 21px !important;
792
- line-height: 1.25em !important;
793
- }
794
-
795
- table.body h4 {
796
- font-size: 19px !important;
797
- line-height: 1.3em !important;
798
- }
799
-
800
- table.body h5 {
801
- font-size: 16px !important;
802
- line-height: 1.4em !important;
803
- }
804
-
805
- table.body h6 {
806
- font-size: 16px !important;
807
- line-height: 1.4em !important;
808
- }
809
-
810
- table.body blockquote {
811
- font-size: 17px !important;
812
- line-height: 1.6em !important;
813
- margin-bottom: 0 !important;
814
- padding-left: 15px !important;
815
- }
816
-
817
- table.body blockquote + * {
818
- margin-top: 1.5em !important;
819
- }
820
-
821
- table.body hr {
822
- margin: 2em 0 !important;
823
- }
824
-
825
- table.body figcaption,
826
- table.body figcaption a {
827
- font-size: 13px !important;
828
- }
829
-
830
- }
831
-
832
- /* -------------------------------------
833
- PRESERVE THESE STYLES IN THE HEAD
834
- ------------------------------------- */
835
- @media all {
836
- .ExternalClass {
837
- width: 100%;
838
- }
839
-
840
- .ExternalClass,
841
- .ExternalClass p,
842
- .ExternalClass span,
843
- .ExternalClass font,
844
- .ExternalClass td,
845
- .ExternalClass div {
846
- line-height: 100%;
847
- }
848
-
849
- .apple-link a {
850
- color: inherit !important;
851
- font-family: inherit !important;
852
- font-size: inherit !important;
853
- font-weight: inherit !important;
854
- line-height: inherit !important;
855
- text-decoration: none !important;
856
- }
857
-
858
- #MessageViewBody a {
859
- color: inherit;
860
- text-decoration: none;
861
- font-size: inherit;
862
- font-family: inherit;
863
- font-weight: inherit;
864
- line-height: inherit;
865
- }
866
-
867
- .btn-primary table td:hover {
868
- background-color: #34495e !important;
869
- }
870
-
871
- .btn-primary a:hover {
872
- background-color: #34495e !important;
873
- border-color: #34495e !important;
874
- }
875
- }
876
-
877
-
878
- ${ templateSettings.showBadge ? `
879
- .footer-powered {
880
- text-align: center;
881
- padding-top: 70px;
882
- padding-bottom: 40px;
883
- }
884
-
885
- .gh-powered {
886
- width: 142px;
887
- height: 30px;
888
- }
889
- ` : ''}
890
-
891
- /* ----- ENDIF THE BROWSER ----- */
892
-
893
- </style>
894
- </head>
895
-
896
- <body class="">
897
- <span class="preheader">${ post.excerpt ? post.excerpt : `${post.title} – ` }</span>
898
- <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body" width="100%">
899
-
900
- <!-- Outlook doesn't respect max-width so we need an extra centered table -->
901
- <!--[if mso]>
902
- <tr>
903
- <td>
904
- <center>
905
- <table border="0" cellpadding="0" cellspacing="0" width="600">
906
- <![endif]-->
907
-
908
- <tr>
909
- <td>&nbsp;</td>
910
- <td class="container">
911
- <div class="content">
912
-
913
- <!-- START CENTERED WHITE CONTAINER -->
914
- <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main" width="100%">
915
-
916
- <!-- START MAIN CONTENT AREA -->
917
- <tr>
918
- <td class="wrapper">
919
- <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
920
-
921
- ${ templateSettings.headerImage ? `
922
- <tr>
923
- <td class="header-image" width="100%" align="center"><img src="${templateSettings.headerImage}"${templateSettings.headerImageWidth ? ` width="${templateSettings.headerImageWidth}"` : ''}></td>
924
- </tr>
925
- ` : ''}
926
-
927
-
928
- ${ templateSettings.showHeaderIcon || templateSettings.showHeaderTitle ? `
929
- <tr>
930
- <td class="site-info" width="100%" align="center">
931
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
932
- ${ templateSettings.showHeaderIcon && site.iconUrl ? `
933
- <tr>
934
- <td class="site-icon"><a href="${site.url}"><img src="${site.iconUrl}" border="0"></a></td>
935
- </tr>
936
- ` : ``}
937
- ${ templateSettings.showHeaderTitle ? `
938
- <tr>
939
- <td class="site-url"><div style="width: 100% !important;"><a href="${site.url}">${site.title}</a></div></td>
940
- </tr>
941
- ` : ``}
942
- </table>
943
- </td>
944
- </tr>
945
- ` : ''}
946
-
947
-
948
- <tr>
949
- <td class="post-title ${templateSettings.titleFontCategory === 'serif' ? `post-title-serif` : `` } ${templateSettings.titleAlignment === 'left' ? `post-title-left` : ``}">
950
- <a href="${post.url}" class="post-title-link ${templateSettings.titleAlignment === 'left' ? `post-title-link-left` : ``}">${post.title}</a>
951
- </td>
952
- </tr>
953
- <tr>
954
- <td>
955
- <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
956
- <tr>
957
- <td class="post-meta ${templateSettings.titleAlignment === 'left' ? `post-meta-left` : ``}">
958
- By ${post.authors} –
959
- ${post.published_at} –
960
- <a href="${post.url}" class="view-online-link">View online →</a>
961
- </td>
962
- </tr>
963
- </table>
964
- </td>
965
- </tr>
966
- ${ templateSettings.showFeatureImage && post.feature_image ? `
967
- <tr>
968
- <td class="feature-image ${hasFeatureImageCaption ? 'feature-image-with-caption' : ''}"><img src="${post.feature_image}"${post.feature_image_width ? ` width="${post.feature_image_width}"` : ''}${post.feature_image_alt ? ` alt="${post.feature_image_alt}"` : ''}></td>
969
- </tr>
970
- ` : ``}
971
- ${ hasFeatureImageCaption ? `
972
- <tr>
973
- <td class="feature-image-caption" align="center">${post.feature_image_caption}</td>
974
- </tr>
975
- ` : ``}
976
- <tr>
977
- <td class="${(templateSettings.bodyFontCategory === 'sans_serif') ? `post-content-sans-serif` : `post-content` }">
978
- <!-- POST CONTENT START -->
979
- ${post.html}
980
- <!-- POST CONTENT END -->
981
- </td>
982
- </tr>
983
- </table>
984
- </td>
985
- </tr>
986
-
987
- <!-- END MAIN CONTENT AREA -->
988
-
989
- <tr>
990
- <td class="wrapper" align="center">
991
- <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" style="padding-top: 40px; padding-bottom: 30px;">
992
- ${iff(!!templateSettings.footerContent, `<tr><td class="footer">${templateSettings.footerContent}</td></tr>`, '')}
993
- <tr>
994
- <td class="footer">${site.title} &copy; ${date.getFullYear()} – <a href="%recipient.unsubscribe_url%">Unsubscribe</a></td>
995
- </tr>
996
-
997
- ${ templateSettings.showBadge ? `
998
- <tr>
999
- <td class="footer-powered"><a href="https://ghost.org/"><img src="https://static.ghost.org/v4.0.0/images/powered.png" border="0" width="142" height="30" class="gh-powered" alt="Publish with Ghost"></a></td>
1000
- </tr>
1001
- ` : '' }
1002
- </table>
1003
- </td>
1004
- </tr>
1005
-
1006
- </table>
1007
- <!-- END CENTERED WHITE CONTAINER -->
1008
- </div>
1009
- </td>
1010
- <td>&nbsp;</td>
1011
- </tr>
1012
-
1013
- <!--[if mso]>
1014
- </table>
1015
- </center>
1016
- </td>
1017
- </tr>
1018
- <![endif]-->
1019
-
1020
- </table>
1021
- </body>
1022
-
1023
- </html>`;
1024
- };