Ghost/core/server/services/mega/template.js

925 lines
19 KiB
JavaScript
Raw Normal View History

/* eslint indent: warn, no-irregular-whitespace: warn */
2019-11-06 12:16:50 +03:00
module.exports = ({post, site}) => {
const date = new Date();
2019-11-06 12:16:50 +03:00
return `<!doctype html>
<html>
2019-11-05 12:36:40 +03:00
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>${post.title}</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
/*All the styling goes here*/
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #fff;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
-webkit-font-smoothing: antialiased;
font-size: 18px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
color: #15212A;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
width: 100%;
}
table td {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
font-size: 18px;
vertical-align: top;
color: #15212A;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #fff;
width: 100%;
}
/* 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 */
.container {
display: block;
margin: 0 auto !important;
/* makes it centered */
max-width: 600px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 600px;
}
/* -------------------------------------
POST CONTENT
------------------------------------- */
hr {
position: relative;
display: block;
width: 100%;
margin: 3em 0;
padding: 0;
height: 1px;
border: 0;
border-top: 1px solid #e5eff5;
}
p,
ul,
ol,
dl,
blockquote {
margin: 0 0 1.5em 0;
2019-11-22 13:40:56 +03:00
line-height: 1.6em;
2019-11-05 12:36:40 +03:00
}
ol,
ul {
padding-left: 1.3em;
padding-right: 1.5em;
}
ol ol,
ul ul,
ul ol,
ol ul {
margin: 0.5em 0 1em;
}
ul {
list-style: disc;
}
ol {
list-style: decimal;
}
ul,
ol {
max-width: 100%;
}
li {
margin: 0.5em 0;
padding-left: 0.3em;
line-height: 1.6em;
}
dt {
float: left;
margin: 0 20px 0 0;
width: 120px;
2019-11-06 06:21:35 +03:00
color: #15212A;
2019-11-05 12:36:40 +03:00
font-weight: 500;
text-align: right;
}
dd {
margin: 0 0 5px 0;
text-align: left;
}
blockquote {
2019-11-06 06:21:35 +03:00
margin: 2em 0;
2019-11-22 13:40:56 +03:00
padding: 0 25px 0 25px;
2019-11-06 06:21:35 +03:00
border-left: #15212A 2px solid;
2019-11-05 12:36:40 +03:00
font-style: italic;
2019-11-22 13:40:56 +03:00
font-size: 20px;
2019-11-06 06:21:35 +03:00
line-height: 1.75em;
2019-11-05 12:36:40 +03:00
letter-spacing: -0.2px;
}
blockquote p {
margin: 0.8em 0;
font-size: 1.2em;
font-weight: 300;
}
blockquote small {
display: inline-block;
margin: 0.8em 0 0.8em 1.5em;
font-size: 0.9em;
opacity: 0.8;
}
blockquote cite {
font-weight: bold;
}
blockquote cite a {
font-weight: normal;
}
a {
2019-11-06 06:21:35 +03:00
color: #15212A;
2019-11-05 12:36:40 +03:00
text-decoration: none;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin-top: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
2019-11-06 06:21:35 +03:00
line-height: 1.15em;
2019-11-05 12:36:40 +03:00
font-weight: 600;
text-rendering: optimizeLegibility;
}
h1 {
margin: 1.5em 0 0.5em 0;
2019-11-13 16:11:54 +03:00
font-size: 42px;
2019-11-05 12:36:40 +03:00
font-weight: 600;
}
h2 {
margin: 1.5em 0 0.5em 0;
2019-11-06 06:21:35 +03:00
font-size: 32px;
2019-11-05 12:36:40 +03:00
line-height: 1.22em;
}
h3 {
margin: 1.5em 0 0.5em 0;
2019-11-06 06:21:35 +03:00
font-size: 26px;
2019-11-05 12:36:40 +03:00
line-height: 1.25em;
}
h4 {
2019-11-06 06:21:35 +03:00
margin: 1.8em 0 0.5em 0;
2019-11-05 12:36:40 +03:00
font-size: 21px;
line-height: 1.3em;
}
h5 {
2019-11-06 06:21:35 +03:00
margin: 2em 0 0.5em 0;
2019-11-05 12:36:40 +03:00
font-size: 19px;
2019-11-06 06:21:35 +03:00
line-height: 1.4em;
2019-11-05 12:36:40 +03:00
}
h6 {
2019-11-06 06:21:35 +03:00
margin: 2em 0 0.5em 0;
2019-11-05 12:36:40 +03:00
font-size: 19px;
2019-11-06 06:21:35 +03:00
line-height: 1.4em;
2019-11-05 12:36:40 +03:00
font-weight: 700;
}
strong {
font-weight: 700;
}
figure {
margin: 0 0 1.5em;
padding: 0;
}
figcaption {
text-align: center;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
font-size: 14px;
2019-11-20 20:27:52 +03:00
padding-top: 5px;
line-height: 1.5em;
2019-11-05 12:36:40 +03:00
}
2019-11-06 06:21:35 +03:00
code {
font-size: 0.9em;
}
2019-11-05 12:36:40 +03:00
pre {
white-space: pre-wrap;
2019-11-06 06:21:35 +03:00
background: #15212A;
padding: 15px;
border-radius: 3px;
line-height: 1.2em;
color: #ffffff;
}
p code {
background: #F2F7FA;
word-break: break-all;
padding: 1px 7px;
border-radius: 3px;
2019-11-05 12:36:40 +03:00
}
figure blockquote p {
font-size: 1em;
}
2019-11-06 06:21:35 +03:00
.site-icon {
2019-11-13 16:11:54 +03:00
padding-bottom: 10px;
2019-11-05 12:36:40 +03:00
padding-top: 20px;
2019-11-06 06:21:35 +03:00
text-align: center;
border-radius: 3px;
}
.site-icon img {
width: 48px;
height: 48px;
border-radius: 3px;
}
.site-info {
2019-11-13 16:11:54 +03:00
padding-top: 50px;
2019-11-22 13:40:56 +03:00
border-bottom: 1px solid #e5eff5;
2019-11-05 12:36:40 +03:00
}
.site-url {
2019-11-06 06:21:35 +03:00
color: #15212A;
font-size: 16px;
letter-spacing: -0.1px;
font-weight: 700;
text-transform: uppercase;
text-align: center;
2019-11-13 16:11:54 +03:00
padding-bottom: 50px;
2019-11-05 12:36:40 +03:00
}
.post-title {
2019-11-20 20:27:52 +03:00
padding-bottom: 10px;
2019-11-13 16:11:54 +03:00
font-size: 42px;
line-height: 1.1em;
2019-11-05 12:36:40 +03:00
font-weight: 600;
2019-11-06 06:21:35 +03:00
text-align: center;
2019-11-05 12:36:40 +03:00
}
.post-title-link {
2019-11-06 06:21:35 +03:00
color: #15212A;
2019-11-22 13:40:56 +03:00
display: block;
text-align: center;
margin-top: 50px;
2019-11-05 12:36:40 +03:00
}
2019-11-06 06:21:35 +03:00
.post-meta,
.view-online {
2019-11-13 16:11:54 +03:00
padding-bottom: 50px;
2019-11-05 12:36:40 +03:00
white-space: nowrap;
color: #738a94;
font-size: 13px;
letter-spacing: 0.2px;
text-transform: uppercase;
2019-11-06 06:21:35 +03:00
text-align: center;
2019-11-05 12:36:40 +03:00
}
.view-online {
text-align: right;
}
.view-online-link {
word-wrap: none;
white-space: nowrap;
2019-11-06 11:39:10 +03:00
color: #15212A;
2019-11-05 12:36:40 +03:00
}
2019-11-06 06:21:35 +03:00
.feature-image {
padding-bottom: 30px;
width: 100%;
}
2019-11-05 12:36:40 +03:00
.post-content {
max-width: 600px !important;
font-family: Georgia, serif;
font-size: 18px;
line-height: 1.5em;
2019-11-06 06:21:35 +03:00
color: #23323D;
2019-11-20 20:27:52 +03:00
padding-bottom: 20px;
2019-11-22 13:40:56 +03:00
border-bottom: 1px solid #e5eff5;
2019-11-06 06:21:35 +03:00
}
.post-content a {
color: #08121A;
text-decoration: underline;
2019-11-05 12:36:40 +03:00
}
.kg-bookmark-card {
width: 100%;
background: #ffffff;
}
2019-11-06 06:21:35 +03:00
.kg-bookmark-card a {
text-decoration: none;
}
2019-11-05 12:36:40 +03:00
.kg-card + .kg-bookmark-card {
margin-top: 0;
}
.kg-image-card img {
display: block;
margin: 0 auto;
}
2019-11-05 12:36:40 +03:00
.kg-bookmark-container {
display: flex;
min-height: 148px;
color: #15212A;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
text-decoration: none;
border-radius: 3px;
border: 1px solid #e5eff5;
}
.kg-bookmark-content {
flex-grow: 1;
padding: 20px;
}
.kg-bookmark-title {
color: #15212A;
font-size: 15px;
line-height: 1.5em;
font-weight: 600;
}
.kg-bookmark-description {
display: -webkit-box;
overflow-y: hidden;
margin-top: 12px;
max-height: 40px;
color: #738a94;
font-size: 13px;
line-height: 1.5em;
font-weight: 400;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.kg-bookmark-thumbnail {
position: relative;
min-width: 140px;
max-width: 180px;
max-height: 100%;
}
.kg-bookmark-thumbnail img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 0 3px 3px 0;
object-fit: cover;
}
.kg-bookmark-metadata {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: 14px;
color: #15212A;
font-size: 13px;
font-weight: 400;
}
.kg-bookmark-icon {
margin-right: 8px;
width: 22px;
height: 22px;
}
.kg-bookmark-author {
line-height: 1.5em;
}
.kg-bookmark-author:after {
content: "•";
margin: 0 6px;
}
.kg-bookmark-publisher {
overflow: hidden;
max-width: 240px;
line-height: 1.5em;
text-overflow: ellipsis;
white-space: nowrap;
}
2019-11-20 20:27:52 +03:00
.kg-gallery-container {
margin-top: -20px;
}
2019-11-05 12:36:40 +03:00
.kg-gallery-image img {
width: 100% !important;
2019-11-07 13:17:20 +03:00
height: auto !important;
2019-11-20 20:27:52 +03:00
padding-top: 20px;
2019-11-05 12:36:40 +03:00
}
.kg-video-preview {
background-color: #1d1f21;
background-image: radial-gradient(circle at center, #5b5f66, #1d1f21);
display: block;
text-decoration: none !important;
}
.kg-video-preview table {
background-size: cover;
min-height: 200px; /* for when images aren't loaded */
}
.kg-video-play-button {
height: 2em;
width: 3em;
margin: 0 auto;
border-radius: 10px;
padding: 1em 0.8em 0.6em 1em;
font-size: 1em; /* change this to resize */
background-color: rgba(0,0,0,0.85);
}
.kg-video-play-button div {
display: block;
width: 0;
height: 0;
margin: 0 auto;
line-height: 0px; /* fix for Yahoo Mail */
border-color: transparent transparent transparent white;
border-style: solid;
border-width: 0.8em 0 0.8em 1.5em;
}
2019-11-05 12:36:40 +03:00
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
2019-11-13 16:11:54 +03:00
padding: 0 20px;
2019-11-05 12:36:40 +03:00
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
2019-11-06 11:39:10 +03:00
color: #738a94;
2019-11-05 12:36:40 +03:00
margin-top: 20px;
text-align: center;
font-size: 13px;
padding-bottom: 40px;
2019-11-20 20:27:52 +03:00
padding-top: 50px;
2019-11-05 12:36:40 +03:00
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn>tbody>tr>td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #3498db;
}
.btn-primary a {
background-color: #3498db;
border-color: #3498db;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
mso-hide: all;
visibility: hidden;
width: 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table.body {
2019-11-22 13:40:56 +03:00
width: 100%;
min-width: 100%;
}
table.body p,
table.body ul,
table.body ol,
table.body td,
table.body span {
font-size: 16px !important;
2019-11-05 12:36:40 +03:00
}
table.body pre {
2019-11-06 10:53:29 +03:00
white-space: pre-wrap !important;
word-break: break-word !important;
}
table.body .wrapper,
table.body .article {
2019-11-13 16:11:54 +03:00
padding: 0 10px !important;
2019-11-05 12:36:40 +03:00
}
table.body .content {
padding: 0 !important;
2019-11-05 12:36:40 +03:00
}
table.body .container {
padding: 0 !important;
width: 100% !important;
2019-11-05 12:36:40 +03:00
}
table.body .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
2019-11-05 12:36:40 +03:00
}
table.body .btn table {
width: 100% !important;
2019-11-05 12:36:40 +03:00
}
table.body .btn a {
width: 100% !important;
2019-11-05 12:36:40 +03:00
}
table.body .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
2019-11-06 10:53:29 +03:00
table.body .site-icon img {
2019-11-06 10:53:29 +03:00
width: 40px !important;
height: 40px !important;
}
table.body .site-url a {
2019-11-06 10:53:29 +03:00
font-size: 14px !important;
padding-bottom: 15px !important;
}
table.body .post-meta {
2019-11-06 10:53:29 +03:00
white-space: normal !important;
font-size: 12px !important;
line-height: 1.5em;
}
table.body .view-online-link,
table.body .footer,
table.body .footer a {
2019-11-06 10:53:29 +03:00
font-size: 12px !important;
}
table.body .post-title a {
2019-11-06 10:53:29 +03:00
font-size: 32px !important;
2019-11-13 16:11:54 +03:00
line-height: 1.15em !important;
2019-11-06 10:53:29 +03:00
}
table.body .kg-bookmark-card {
2019-11-06 10:53:29 +03:00
width: 90vw !important;
}
table.body .kg-bookmark-thumbnail {
2019-11-06 10:53:29 +03:00
display: none !important;
}
table.body .kg-bookmark-metadata span {
2019-11-06 10:53:29 +03:00
font-size: 13px !important;
}
table.body .kg-embed-card {
2019-11-06 10:53:29 +03:00
max-width: 90vw !important;
}
table.body h1 {
2019-11-06 10:53:29 +03:00
font-size: 32px !important;
line-height: 1.3em !important;
}
table.body h2 {
2019-11-06 10:53:29 +03:00
font-size: 26px !important;
line-height: 1.22em !important;
}
table.body h3 {
2019-11-06 10:53:29 +03:00
font-size: 21px !important;
line-height: 1.25em !important;
}
table.body h4 {
2019-11-06 10:53:29 +03:00
font-size: 19px !important;
line-height: 1.3em !important;
}
table.body h5 {
2019-11-06 10:53:29 +03:00
font-size: 16px !important;
line-height: 1.4em !important;
}
table.body h6 {
2019-11-06 10:53:29 +03:00
font-size: 16px !important;
line-height: 1.4em !important;
}
table.body blockquote {
2019-11-22 13:40:56 +03:00
font-size: 17px !important;
2019-11-06 10:53:29 +03:00
line-height: 1.6em !important;
2019-11-22 13:40:56 +03:00
margin-bottom: 0 !important;
padding-left: 15px !important;
}
table.body blockquote + * {
2019-11-22 13:40:56 +03:00
margin-top: 1.5em !important;
2019-11-06 10:53:29 +03:00
}
table.body hr {
2019-11-06 10:53:29 +03:00
margin: 2em 0 !important;
}
table.body figcaption,
table.body figcaption a {
2019-11-06 14:35:03 +03:00
font-size: 13px !important;
}
2019-11-05 12:36:40 +03:00
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
2019-11-05 12:36:40 +03:00
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
2019-11-05 12:36:40 +03:00
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
2019-11-05 12:36:40 +03:00
}
#MessageViewBody a {
color: inherit;
text-decoration: none;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
line-height: inherit;
}
2019-11-05 12:36:40 +03:00
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
2019-11-05 12:36:40 +03:00
}
</style>
</head>
<body class="">
2019-11-06 06:21:35 +03:00
<span class="preheader">${ post.excerpt ? post.excerpt : `${post.title} ` }</span>
2019-11-22 13:40:56 +03:00
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body" width="100%">
<!-- Outlook doesn't respect max-width so we need an extra centered table -->
<!--[if mso]>
<tr>
<td>
<center>
<table border="0" cellpadding="0" cellspacing="0" width="600">
<![endif]-->
2019-11-05 12:36:40 +03:00
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<!-- START CENTERED WHITE CONTAINER -->
2019-11-22 13:40:56 +03:00
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main" width="100%">
2019-11-05 12:36:40 +03:00
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
2019-11-22 13:40:56 +03:00
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
2019-11-05 12:36:40 +03:00
<tr>
2019-11-22 13:40:56 +03:00
<td class="site-info" width="100%" align="center">
2019-11-06 06:21:35 +03:00
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
${ site.iconUrl ? `
2019-11-06 06:21:35 +03:00
<tr>
<td class="site-icon"><a href="${site.url}"><img src="${site.iconUrl}" border="0"></a></td>
2019-11-06 06:21:35 +03:00
</tr>
` : ``}
<tr>
2019-11-22 13:40:56 +03:00
<td class="site-url"><div style="width: 100% !important;"><a href="${site.url}">${site.title}</a></div></td>
2019-11-06 06:21:35 +03:00
</tr>
</table>
</td>
2019-11-05 12:36:40 +03:00
</tr>
<tr>
<td class="post-title"><a href="${post.url}" class="post-title-link">${post.title}</a></td>
</tr>
<tr>
2019-11-22 13:40:56 +03:00
<td align="center">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
2019-11-05 12:36:40 +03:00
<tr>
<td class="post-meta">
By ${post.authors}
${post.published_at}
2019-11-06 06:21:35 +03:00
<a href="${post.url}" class="view-online-link">View online </a>
2019-11-05 12:36:40 +03:00
</td>
</tr>
</table>
</td>
</tr>
${post.feature_image ? `
<tr>
<td class="feature-image"><img src="${post.feature_image}"></td>
</tr>
` : ``}
2019-11-05 12:36:40 +03:00
<tr>
<td class="post-content">
<!-- POST CONTENT START -->
${post.html}
<!-- POST CONTENT END -->
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
2019-11-06 06:21:35 +03:00
<tr>
2019-11-22 13:40:56 +03:00
<td class="wrapper" align="center">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
2019-11-06 06:21:35 +03:00
<tr>
<td class="footer">${site.title} &copy; ${date.getFullYear()} <a href="%recipient.unsubscribe_url%">Unsubscribe</a></td>
2019-11-06 06:21:35 +03:00
</tr>
</table>
</td>
</tr>
2019-11-05 12:36:40 +03:00
</table>
<!-- END CENTERED WHITE CONTAINER -->
</div>
</td>
<td>&nbsp;</td>
</tr>
<!--[if mso]>
</table>
</center>
</td>
</tr>
<![endif]-->
</table>
2019-11-05 12:36:40 +03:00
</body>
2019-11-06 12:16:50 +03:00
</html>`;
};