Last active
May 22, 2018 03:49
-
-
Save jordandrako/9f532769b429a170880e10f02b7cda4f to your computer and use it in GitHub Desktop.
Tautulli newsletters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% if data: | |
<% | |
import plexpy | |
from plexpy.helpers import grouper, get_img_service | |
recently_added = data['recently_added'] | |
if plexpy.CONFIG.NEWSLETTER_SELF_HOSTED and plexpy.CONFIG.HTTP_BASE_URL: | |
base_url = plexpy.CONFIG.HTTP_BASE_URL + plexpy.HTTP_ROOT + 'newsletter/' | |
elif preview: | |
base_url = 'newsletter/' | |
else: | |
base_url = '' | |
service = get_img_service(include_self=True) | |
if service == 'self-hosted' and plexpy.CONFIG.HTTP_BASE_URL: | |
base_url_image = plexpy.CONFIG.HTTP_BASE_URL + plexpy.HTTP_ROOT + 'image/' | |
elif preview and service and service != 'self-hosted': | |
base_url_image = 'image/' | |
else: | |
base_url_image = '' | |
%> | |
<!doctype html> | |
<html> | |
<head> | |
<meta name="viewport" content="width=device-width"> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<title>Tautulli Newsletter - ${subject}</title> | |
<style> | |
/* ------------------------------------- | |
GLOBAL RESETS | |
------------------------------------- */ | |
img { | |
border: none; | |
-ms-interpolation-mode: bicubic; | |
max-width: 100%; | |
} | |
body { | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
-webkit-font-smoothing: antialiased; | |
font-size: 14px; | |
line-height: 1.4; | |
margin: 0; | |
padding: 0; | |
-ms-text-size-adjust: 100%; | |
-webkit-text-size-adjust: 100%; | |
} | |
table { | |
border-collapse: separate; | |
mso-table-lspace: 0pt; | |
mso-table-rspace: 0pt; | |
width: 100%; | |
} | |
table td { | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
font-size: 14px; | |
vertical-align: top; | |
} | |
/* ------------------------------------- | |
BODY & CONTAINER | |
------------------------------------- */ | |
.body { | |
width: 100%; | |
} | |
.container { | |
display: block; | |
margin: 0 auto !important; | |
max-width: 1042px; | |
padding: 10px; | |
width: 1042px; | |
} | |
.content { | |
box-sizing: border-box; | |
display: block; | |
margin: 0 auto; | |
max-width: 1037px; | |
padding: 10px; | |
} | |
/* ------------------------------------- | |
HEADER, FOOTER, MAIN | |
------------------------------------- */ | |
.local-preview-note { | |
text-align: center; | |
padding-top: 10px; | |
} | |
.local-preview-note p { | |
color: #282A2D; | |
font-size: 12px; | |
} | |
.main { | |
background: #282A2D; | |
border-radius: 3px; | |
width: 100%; | |
color: #ffffff; | |
} | |
.wrapper { | |
box-sizing: border-box; | |
padding: 5px; | |
overflow: auto; | |
} | |
.content-block { | |
padding-bottom: 10px; | |
padding-top: 10px; | |
} | |
.footer { | |
clear: both; | |
margin-top: 10px; | |
text-align: center; | |
width: 100%; | |
font-size: 12px; | |
} | |
.footer-bar { | |
margin-left: auto; | |
margin-right: auto; | |
width: 200px; | |
border-top: 1px solid #E5A00D; | |
margin-top: 25px; | |
} | |
.footer td, | |
.footer p, | |
.footer span, | |
.footer a { | |
color: #fff; | |
font-size: 12px; | |
text-align: center; | |
} | |
/* ------------------------------------- | |
TYPOGRAPHY | |
------------------------------------- */ | |
h1, | |
h2, | |
h3, | |
h4 { | |
color: #ffffff; | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
font-weight: 400; | |
margin: 0; | |
} | |
p, | |
ul, | |
ol { | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
font-weight: 400; | |
margin: 0; | |
} | |
p li, | |
ul li, | |
ol li { | |
list-style-position: inside; | |
margin-left: 5px; | |
} | |
a { | |
text-decoration: underline; | |
} | |
/* ------------------------------------- | |
OTHER STYLES THAT MIGHT BE USEFUL | |
------------------------------------- */ | |
.mb5 { | |
margin-bottom: 5px; | |
} | |
.nowrap { | |
white-space: nowrap; | |
text-overflow: ellipsis; | |
overflow: hidden; | |
} | |
.preheader { | |
color: transparent; | |
display: none; | |
height: 0; | |
max-height: 0; | |
max-width: 0; | |
opacity: 0; | |
overflow: hidden; | |
mso-hide: all; | |
visibility: hidden; | |
width: 0; | |
} | |
.view-full { | |
clear: both; | |
color: #282A2D; | |
font-size: 12px; | |
margin-bottom: 10px; | |
text-align: center; | |
width: 100%; | |
} | |
.view-full a { | |
color: #282A2D; | |
} | |
.powered-by a { | |
text-decoration: underline; | |
} | |
/* ------------------------------------- | |
HEADER | |
------------------------------------- */ | |
.header { | |
width: 100%; | |
height: 149px; | |
text-align: center; | |
padding-top: 20px; | |
} | |
.header-img { | |
width: 492px; | |
height: 149px; | |
margin-left: -35px; | |
} | |
.server-name { | |
font-size: 30px; | |
text-align: center; | |
} | |
.dates { | |
color: #aaaaaa; | |
font-size: 20px; | |
text-align: center; | |
} | |
.body-message { | |
font-size: 20px; | |
text-align: center; | |
width: 80%; | |
margin-left: auto; | |
margin-right: auto; | |
} | |
/* ------------------------------------- | |
MEDIA SECTIONS | |
------------------------------------- */ | |
h2 { | |
font-size: 30px; | |
font-weight: 300; | |
margin: 20px 10px 0 10px; | |
text-align: center; | |
} | |
h3 { | |
font-size: 25px; | |
font-weight: 300; | |
margin: 0 0 10px 0; | |
} | |
.sub-header-icon { | |
height: 30px; | |
width: 30px; | |
vertical-align: middle; | |
margin-right: 5px; | |
margin-bottom: 5px; | |
} | |
.sub-header-bar { | |
margin-left: auto; | |
margin-right: auto; | |
font-size: 30px; | |
text-align: center; | |
width: 200px; | |
border-top: 1px solid #E5A00D; | |
margin-top: 15px; | |
margin-bottom: 25px; | |
} | |
.sub-header-title { | |
margin-left: auto; | |
margin-right: auto; | |
font-size: 30px; | |
text-align: center; | |
font-weight: lighter; | |
} | |
.sub-header-count { | |
margin-left: auto; | |
margin-right: auto; | |
font-size: 30px; | |
text-align: center; | |
} | |
.sub-header-count .count { | |
color: #E5A00D; | |
} | |
.sub-header-count .count-units { | |
color: #aaaaaa; | |
font-size: 20px; | |
text-transform: uppercase; | |
} | |
/* ------------------------------------- | |
MEDIA CARDS | |
------------------------------------- */ | |
.card-instance { | |
font-size: 12px; | |
overflow: hidden; | |
padding: 3px; | |
width: 502px; | |
min-width: 502px; | |
max-width: 502px; | |
} | |
.card-instance.pad { | |
padding: 0 !important; | |
width: 251px !important; | |
min-width: 251px !important; | |
max-width: 251px !important; | |
} | |
.card-instance.movie, | |
.card-instance.show { | |
height: 233px; | |
} | |
.card-instance.album { | |
height: 158px; | |
} | |
.card-background { | |
background-color: #282828; | |
background-position: center; | |
background-size: cover; | |
background-repeat: no-repeat; | |
background-clip: padding-box; | |
border: 1px solid rgba(255,255,255,.1); | |
} | |
.card-poster-container { | |
width: 152px; | |
min-width: 152px; | |
} | |
.card-instance.movie .card-poster-container, | |
.card-instance.show .card-poster-container{ | |
height: 227px; | |
} | |
.card-instance.album .card-poster-container { | |
height: 152px; | |
} | |
.card-poster { | |
background-color: #3F4245; | |
background-position: center; | |
background-size: cover; | |
background-repeat: no-repeat; | |
background-clip: padding-box; | |
border: 1px solid rgba(255,255,255,.1); | |
} | |
.card-poster-overlay { | |
display: block; | |
} | |
.card-info-container { | |
padding-left: 4px; | |
text-align: left; | |
} | |
.card-instance.movie .card-info-container, | |
.card-instance.show .card-info-container{ | |
height: 227px; | |
} | |
.card-instance.album .card-info-container { | |
height: 152px; | |
} | |
.card-info-container .card-info-container-table { | |
height: 100%; | |
} | |
.card-info-title { | |
border-bottom: 1px solid rgba(255, 255, 255, .1); | |
line-height: 1.2rem; | |
font-size: 0.9rem; | |
padding: 5px; | |
} | |
.card-info-title a { | |
text-decoration: none; | |
color: #ffffff; | |
} | |
.card-info-body { | |
font-size: 0.75rem; | |
padding: 5px; | |
height: 100%; | |
} | |
.card-info-body > p { | |
max-width: 325px; | |
color: #ffffff; | |
} | |
.card-instance.movie .card-info-body, | |
.card-instance.show .card-info-body { | |
} | |
.card-instance.album .card-info-body { | |
height: 82px; | |
min-height: 82px; | |
} | |
.card-info-footer { | |
font-size: 0.6rem; | |
padding-top: 0px; | |
padding-right: 5px; | |
padding-bottom: 5px; | |
padding-left: 5px; | |
} | |
.card-info-footer .badge-container { | |
max-width: 260px; | |
white-space: nowrap; | |
overflow: hidden; | |
text-overflow: ellipsis; | |
} | |
.card-info-footer .star-rating-container { | |
width: 65px; | |
} | |
.card-info-footer .star-rating { | |
margin-left: 4px; | |
font-size: 0.8rem; | |
line-height: 1rem; | |
width: 0.5rem; | |
display: inline-block; | |
vertical-align: bottom; | |
} | |
.star-rating.full { | |
color: #E5A00D; | |
} | |
.star-rating.empty { | |
color: #aaaaaa; | |
} | |
.badge { | |
display: inline-block; | |
min-width: 10px; | |
margin-right: 4px; | |
padding: 3px 7px; | |
font-size: 11px; | |
line-height: 1; | |
text-align: center; | |
white-space: nowrap; | |
vertical-align: middle; | |
background-color: rgba(0, 0, 0, .25); | |
border-radius: 2px; | |
text-overflow: ellipsis; | |
overflow: hidden; | |
color: #ffffff; | |
} | |
/* ------------------------------------- | |
RESPONSIVE AND MOBILE FRIENDLY STYLES | |
------------------------------------- */ | |
@media only screen and (max-width: 1040px) { | |
.card-instance { | |
display: block !important; | |
margin-top: 0 !important; | |
margin-right: auto !important; | |
margin-bottom: 0 !important; | |
margin-left: auto !important; | |
} | |
table[class=body] .header { | |
height: 124px !important; | |
} | |
table[class=body] .header-img { | |
width: 410px; | |
height: 124px; | |
margin-left: -30px; | |
} | |
table[class=body] h1 { | |
font-size: 28px !important; | |
margin-bottom: 10px !important; | |
} | |
table[class=body] .server-name { | |
font-size: 20px !important; | |
} | |
table[class=body] .dates, | |
table[class=body] .body-message { | |
font-size: 14px !important; | |
} | |
table[class=body] .sub-header > div { | |
font-size: 20px !important; | |
} | |
table[class=body] .sub-header-title { | |
font-size: 20px !important; | |
} | |
table[class=body] .sub-header-icon { | |
height: 20px !important; | |
width: 20px !important; | |
} | |
table[class=body] .count { | |
font-size: 20px !important; | |
} | |
table[class=body] .count-units { | |
font-size: 14px !important; | |
} | |
table[class=body] .content { | |
padding: 0 !important; | |
} | |
table[class=body] .container { | |
padding: 0 !important; | |
width: 100% !important; | |
} | |
table[class=body] .main { | |
border-left-width: 0 !important; | |
border-radius: 0 !important; | |
border-right-width: 0 !important; | |
} | |
} | |
/* ------------------------------------- | |
PRESERVE THESE STYLES IN THE HEAD | |
------------------------------------- */ | |
@media all { | |
.ExternalClass { | |
width: 100%; | |
} | |
.ExternalClass, | |
.ExternalClass p, | |
.ExternalClass span, | |
.ExternalClass font, | |
.ExternalClass td, | |
.ExternalClass div { | |
line-height: 100%; | |
} | |
.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; | |
} | |
} | |
</style> | |
</head> | |
<body style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;font-size: 14px;line-height: 1.4;margin: 0;padding: 0;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;"> | |
% if preview and service and service != 'self-hosted': | |
<div class="local-preview-note" style="text-align: center;padding-top: 10px;"><p style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;color: #282A2D;font-size: 12px;">Note: Local preview images only - images will be uploaded to ${service.capitalize()} when the newsletter is sent.</p></div> <!-- IGNORE SAVE --> | |
% elif preview and not service: | |
<div class="local-preview-note" style="text-align: center;padding-top: 10px;"><p style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;color: #282A2D;font-size: 12px;">Warning: The Image Hosting setting must be enabled for images to display on the newsletter.</p></div> <!-- IGNORE SAVE --> | |
% endif | |
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
<td class="container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;display: block;max-width: 1042px;padding: 10px;width: 1042px;margin: 0 auto !important;"> | |
<div class="content" style="box-sizing: border-box;display: block;margin: 0 auto;max-width: 1037px;padding: 10px;"> | |
<span class="preheader" style="color: transparent;display: none;height: 0;max-height: 0;max-width: 0;opacity: 0;overflow: hidden;mso-hide: all;visibility: hidden;width: 0;">Tautulli Newsletter - ${subject}</span> | |
% if base_url and not preview: | |
<div class="view-full" style="clear: both;color: #282A2D;font-size: 12px;margin-bottom: 10px;text-align: center;width: 100%;"> <!-- IGNORE SAVE --> | |
<a href="${base_url + uuid}" title="View full newsletter" target="_blank" style="text-decoration: underline;color: #282A2D;">Click here to view the full newsletter.</a> <!-- IGNORE SAVE --> | |
</div> <!-- IGNORE SAVE --> | |
% endif | |
<table border="0" cellpadding="3" cellspacing="0" class="main" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background: #282A2D;border-radius: 3px;color: #ffffff;"> | |
<tr> | |
<td class="wrapper" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;box-sizing: border-box;padding: 5px;overflow: auto;"> | |
<div class="header" style="width: 100%;height: 149px;text-align: center;"> | |
<a href="https://zenflix.jordanjanzen.com" target="_blank" rel="noopener noreferrer"><img src="https://i.imgur.com/yFjhrmd.png" class="header-img" width="492" height="149" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;width: 492px;height: 149px;margin-left: -35px;"></a> | |
</div> | |
<div class="server-name" style="font-size: 30px;text-align: center;">Recently Added Media</div> | |
<div class="dates" style="color: #aaaaaa;font-size: 20px;text-align: center;">${parameters['start_date']} - ${parameters['end_date']}</div> | |
</td> | |
</tr> | |
% if message: | |
<tr> | |
<td class="wrapper" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;box-sizing: border-box;padding: 5px;overflow: auto;"> | |
<div class="sub-header-bar" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;width: 200px;border-top: 1px solid #E5A00D;margin-top: 15px;margin-bottom: 25px;"></div> | |
<div class="body-message" style="font-size: 20px;text-align: center;width: 80%;margin-left: auto;margin-right: auto;">${'<br>'.join(l for l in message.splitlines()) | n}</div> | |
</td> | |
</tr> | |
% endif | |
% if recently_added.get('movie'): | |
<tr> | |
<td class="wrapper" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;box-sizing: border-box;padding: 5px;overflow: auto;"> | |
<div class="sub-header-bar" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;width: 200px;border-top: 1px solid #E5A00D;margin-top: 15px;margin-bottom: 25px;"></div> | |
<div class="sub-header-title" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;font-weight: lighter;"> | |
<img src="${(base_url_image + 'images/libraries/movie.png') if base_url_image else 'http://tautulli.com/images/libraries/movie.png'}" class="sub-header-icon" width="30" height="30" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;height: 30px;width: 30px;vertical-align: middle;margin-right: 5px;margin-bottom: 5px;"> Recently Added Movies | |
</div> | |
<div class="sub-header-count" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;"> | |
<span class="count" style="color: #E5A00D;">${len(recently_added['movie'])}</span> <span class="count-units" style="color: #aaaaaa;font-size: 20px;text-transform: uppercase;">movie${'s' if len(recently_added['movie']) > 1 else ''}</span> | |
</div> | |
</td> | |
</tr> | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
% for movie_a, movie_b in grouper(recently_added['movie'], 2): | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% for movie in (movie_a, movie_b): | |
% if movie: | |
% if not movie_b: | |
<td align="center" valign="top" class="card-instance pad" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 0 !important;width: 251px !important;min-width: 251px !important;max-width: 251px !important;"></td> | |
% endif | |
<td align="center" valign="top" class="card-instance movie" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 3px;width: 502px;min-width: 502px;max-width: 502px;height: 233px;"> | |
<table border="0" cellpadding="0" cellspacing="3" width="100%" class="card-background" style="background-image: url(${(base_url_image + movie['art_hash']) if base_url_image else movie['art_url']});border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background-color: #282828;background-position: center;background-size: cover;background-repeat: no-repeat;background-clip: padding-box;border: 1px solid rgba(255,255,255,.1);"> | |
<tr> | |
<td class="card-poster-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;width: 152px;min-width: 152px;height: 227px;"> | |
<table border="0" cellpadding="0" cellspacing="0" class="card-poster" style="background-image: url(${(base_url_image + movie['thumb_hash']) if base_url_image else movie['poster_url']});border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background-color: #3F4245;background-position: center;background-size: cover;background-repeat: no-repeat;background-clip: padding-box;border: 1px solid rgba(255,255,255,.1);"> | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank" style="text-decoration: underline;"> | |
<img class="card-poster-overlay" src="${base_url_image + 'images/newsletter/view-on-plex-poster.png' if base_url_image else 'http://tautulli.com/images/newsletter/view-on-plex-poster.png'}" width="150" height="225" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;display: block;"> | |
</a> | |
</td> | |
</tr> | |
</table> | |
</td> | |
<td class="card-info-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;padding-left: 4px;text-align: left;height: 227px;"> | |
<table border="0" cellpadding="0" cellspacing="0" class="card-info-container-table" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;height: 100%;"> | |
<tr> | |
<td class="card-info-title nowrap" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.9rem;vertical-align: top;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 1.2rem;padding: 5px;max-width: 320px;"> | |
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${movie['rating_key']}" title="${movie['title']}" target="_blank" style="text-decoration: none;color: #ffffff;">${movie['title']}</a> | |
</td> | |
</tr> | |
<tr> | |
<td class="card-info-body" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.75rem;vertical-align: top;padding: 5px;height: 100%;"> | |
% if movie['tagline']: | |
<p class="nowrap mb5" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;margin-bottom: 5px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;max-width: 325px;color: #ffffff;"> | |
<em>${movie['tagline']}</em> | |
</p> | |
% endif | |
<p style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;max-width: 325px;color: #ffffff;"> | |
${movie['summary'][:450] + (movie['summary'][450:] and '...')} | |
</p> | |
</td> | |
</tr> | |
<tr> | |
<td class="card-info-footer nowrap" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.6rem;vertical-align: top;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;padding-top: 0px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
<td class="badge-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;max-width: 260px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% if movie['year']: | |
<td class="badge" title="${movie['year']}" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${movie['year']}</td> | |
% endif | |
% if movie['duration']: | |
<% duration = int(int(movie['duration'])/60000) %> | |
<td class="badge" title="${duration} mins" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${duration} mins</td> | |
% endif | |
% if movie['genres']: | |
% for genre in movie['genres'][:]: | |
<td class="badge" title="${genre}" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${genre}</td> | |
% endfor | |
% endif | |
</tr> | |
</table> | |
</td> | |
% if movie['rating']: | |
<% rating = int(round(float(movie['rating']) / 2)) %> | |
<td class="star-rating-container" title="${int(float(movie['rating'])/0.1)}%" align="right" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;width: 65px;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% for _ in range(rating): | |
<td class="star-rating full" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.8rem;vertical-align: bottom;margin-left: 4px;line-height: 1rem;width: 0.5rem;display: inline-block;color: #E5A00D;">★</td> | |
% endfor | |
% for _ in range(5-rating): | |
<td class="star-rating empty" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.8rem;vertical-align: bottom;margin-left: 4px;line-height: 1rem;width: 0.5rem;display: inline-block;color: #aaaaaa;">☆</td> | |
% endfor | |
</tr> | |
</table> | |
</td> | |
% endif | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
% if not movie_b: | |
<td align="center" valign="top" class="card-instance pad" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 0 !important;width: 251px !important;min-width: 251px !important;max-width: 251px !important;"></td> | |
% endif | |
% endif | |
% endfor | |
</tr> | |
</table> | |
</td> | |
</tr> | |
% endfor | |
</table> | |
</td> | |
</tr> | |
% endif | |
% if recently_added.get('show'): | |
<tr> | |
<td class="wrapper" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;box-sizing: border-box;padding: 5px;overflow: auto;"> | |
<div class="sub-header-bar" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;width: 200px;border-top: 1px solid #E5A00D;margin-top: 15px;margin-bottom: 25px;"></div> | |
<div class="sub-header-title" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;font-weight: lighter;"> | |
<img src="${(base_url_image + 'images/libraries/show.png') if base_url_image else 'http://tautulli.com/images/libraries/show.png'}" class="sub-header-icon" width="30" height="30" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;height: 30px;width: 30px;vertical-align: middle;margin-right: 5px;margin-bottom: 5px;"> Recently Added TV Shows | |
</div> | |
<div class="sub-header-count" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;"> | |
<span class="count" style="color: #E5A00D;">${len(recently_added['show'])}</span> <span class="count-units" style="color: #aaaaaa;font-size: 20px;text-transform: uppercase;">show${'s' if len(recently_added['show']) > 1 else ''}</span> / | |
<% total_episodes = sum(season['episode_count'] for show in recently_added['show'] for season in show['season']) %> | |
<span class="count" style="color: #E5A00D;">${total_episodes}</span> <span class="count-units" style="color: #aaaaaa;font-size: 20px;text-transform: uppercase;">episode${'s' if total > 1 else ''}</span> | |
</div> | |
</td> | |
</tr> | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
% for show_a, show_b in grouper(recently_added['show'], 2): | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% for show in (show_a, show_b): | |
% if show: | |
% if not show_b: | |
<td align="center" valign="top" class="card-instance pad" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 0 !important;width: 251px !important;min-width: 251px !important;max-width: 251px !important;"></td> | |
% endif | |
<% | |
if show['season_count'] == 1: | |
if show['season'][0]['episode_count'] == 1: | |
link_rating_key = show['season'][0]['episode'][0]['rating_key'] | |
else: | |
link_rating_key = show['season'][0]['episode'][0]['parent_rating_key'] | |
else: | |
link_rating_key = show['rating_key'] | |
%> | |
<td align="center" valign="top" class="card-instance show" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 3px;width: 502px;min-width: 502px;max-width: 502px;height: 233px;"> | |
<table border="0" cellpadding="0" cellspacing="3" width="100%" class="card-background" style="background-image: url(${(base_url_image + show['art_hash']) if base_url_image else show['art_url']});border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background-color: #282828;background-position: center;background-size: cover;background-repeat: no-repeat;background-clip: padding-box;border: 1px solid rgba(255,255,255,.1);"> | |
<tr> | |
<td class="card-poster-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;width: 152px;min-width: 152px;height: 227px;"> | |
<table border="0" cellpadding="0" cellspacing="0" class="card-poster" style="background-image: url(${(base_url_image + show['thumb_hash']) if base_url_image else show['poster_url']});border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background-color: #3F4245;background-position: center;background-size: cover;background-repeat: no-repeat;background-clip: padding-box;border: 1px solid rgba(255,255,255,.1);"> | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${show['title']}" target="_blank" style="text-decoration: underline;"> | |
<img class="card-poster-overlay" src="${base_url_image + 'images/newsletter/view-on-plex-poster.png' if base_url_image else 'http://tautulli.com/images/newsletter/view-on-plex-poster.png'}" width="150" height="225" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;display: block;"> | |
</a> | |
</td> | |
</tr> | |
</table> | |
</td> | |
<td class="card-info-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;padding-left: 4px;text-align: left;height: 227px;"> | |
<table border="0" cellpadding="0" cellspacing="0" class="card-info-container-table" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;height: 100%;"> | |
<tr> | |
<td class="card-info-title nowrap" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.9rem;vertical-align: top;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 1.2rem;padding: 5px;max-width: 320px;"> | |
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${link_rating_key}" title="${show['title']}" target="_blank" style="text-decoration: none;color: #ffffff;">${show['title']}</a> | |
</td> | |
</tr> | |
<tr> | |
<td class="card-info-body" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.75rem;vertical-align: top;padding: 5px;height: 100%;"> | |
<p class="nowrap mb5" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;margin-bottom: 5px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;max-width: 325px;color: #ffffff;"> | |
% if show['season_count'] > 1: | |
<em>${show['season_count']} seasons /</em> | |
% endif | |
<% total_show_episodes = sum(s['episode_count'] for s in show['season']) %> | |
<em>${total_show_episodes} episode${'s' if total_show_episodes > 1 else ''}</em> | |
</p> | |
<p class="nowrap mb5" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;margin-bottom: 5px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;max-width: 325px;color: #ffffff;"> | |
% for i, season in enumerate(show['season'][:8]): | |
% if season['episode_count'] == 1: | |
Season ${season['media_index']} · Episode ${season['episode'][0]['media_index']} - ${season['episode'][0]['title']} | |
% else: | |
Season ${season['media_index']} · Episodes ${season['episode_range']} | |
% endif | |
% if i < min(show['season_count'], 7): | |
<br> | |
% elif i == 7 and show['season_count'] > 8: | |
...plus ${show['season_count'] - 8} more seasons! | |
% endif | |
% endfor | |
</p> | |
<p style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;max-width: 325px;color: #ffffff;"> | |
% if show['season_count'] == 1 and show['season'][0]['episode_count'] == 1: | |
${show['season'][0]['episode'][0]['summary'][:350] + (show['season'][0]['episode'][0]['summary'][350:] and '...')} | |
% else: | |
<% length = max(0, 350 - 50 * (show['season_count'] - 1)) %> | |
% if length: | |
${show['summary'][:length] + (show['summary'][length:] and '...')} | |
% endif | |
% endif | |
</p> | |
</td> | |
</tr> | |
<tr> | |
<td class="card-info-footer nowrap" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.6rem;vertical-align: top;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;padding-top: 0px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
<td class="badge-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;max-width: 260px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% if show['year']: | |
<td class="badge" title="${show['year']}" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${show['year']}</td> | |
% endif | |
% if show['duration']: | |
<% duration = int(int(show['duration'])/60000) %> | |
<td class="badge" title="${duration} mins" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${duration} mins</td> | |
% endif | |
% if show['genres']: | |
% for genre in show['genres'][:2]: | |
<td class="badge" title="${genre}" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${genre}</td> | |
% endfor | |
% endif | |
</tr> | |
</table> | |
</td> | |
% if show['rating']: | |
<% rating = int(round(float(show['rating']) / 2)) %> | |
<td class="star-rating-container" title="${int(float(show['rating'])/0.1)}%" align="right" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;width: 65px;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% for _ in range(rating): | |
<td class="star-rating full" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.8rem;vertical-align: bottom;margin-left: 4px;line-height: 1rem;width: 0.5rem;display: inline-block;color: #E5A00D;">★</td> | |
% endfor | |
% for _ in range(5-rating): | |
<td class="star-rating empty" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.8rem;vertical-align: bottom;margin-left: 4px;line-height: 1rem;width: 0.5rem;display: inline-block;color: #aaaaaa;">☆</td> | |
% endfor | |
</tr> | |
</table> | |
</td> | |
% endif | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
% if not show_b: | |
<td align="center" valign="top" class="card-instance pad" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 0 !important;width: 251px !important;min-width: 251px !important;max-width: 251px !important;"></td> | |
% endif | |
% endif | |
% endfor | |
</tr> | |
</table> | |
</td> | |
</tr> | |
% endfor | |
</table> | |
</td> | |
</tr> | |
% endif | |
% if recently_added.get('artist'): | |
<tr> | |
<td class="wrapper" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;box-sizing: border-box;padding: 5px;overflow: auto;"> | |
<div class="sub-header-bar" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;width: 200px;border-top: 1px solid #E5A00D;margin-top: 15px;margin-bottom: 25px;"></div> | |
<div class="sub-header-title" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;font-weight: lighter;"> | |
<img src="${(base_url_image + 'images/libraries/artist.png') if base_url_image else 'http://tautulli.com/images/libraries/artist.png'}" class="sub-header-icon" width="30" height="30" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;height: 30px;width: 30px;vertical-align: middle;margin-right: 5px;margin-bottom: 5px;"> Recently Added Music | |
</div> | |
<div class="sub-header-count" style="margin-left: auto;margin-right: auto;font-size: 30px;text-align: center;"> | |
<span class="count" style="color: #E5A00D;">${len(recently_added['artist'])}</span> <span class="count-units" style="color: #aaaaaa;font-size: 20px;text-transform: uppercase;">artist${'s' if len(recently_added['artist']) > 1 else ''}</span> / | |
<% total_albums = sum(artist['album_count'] for artist in recently_added['artist']) %> | |
<span class="count" style="color: #E5A00D;">${total_albums}</span> <span class="count-units" style="color: #aaaaaa;font-size: 20px;text-transform: uppercase;">album${'s' if total > 1 else ''}</span> | |
</div> | |
</td> | |
</tr> | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
% for album_a, album_b in grouper([a for artist in recently_added['artist'] for a in artist['album']], 2): | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% for album in (album_a, album_b): | |
% if album: | |
% if not album_b: | |
<td align="center" valign="top" class="card-instance pad" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 0 !important;width: 251px !important;min-width: 251px !important;max-width: 251px !important;"></td> | |
% endif | |
<td align="center" valign="top" class="card-instance album" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 3px;width: 502px;min-width: 502px;max-width: 502px;height: 158px;"> | |
<table border="0" cellpadding="0" cellspacing="3" width="100%" class="card-background" style="background-image: url(${(base_url_image + album['art_hash']) if base_url_image else album['art_url']});border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background-color: #282828;background-position: center;background-size: cover;background-repeat: no-repeat;background-clip: padding-box;border: 1px solid rgba(255,255,255,.1);"> | |
<tr> | |
<td class="card-poster-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;width: 152px;min-width: 152px;height: 152px;"> | |
<table border="0" cellpadding="0" cellspacing="0" class="card-poster" style="background-image: url(${(base_url_image + album['thumb_hash']) if base_url_image else album['poster_url']});border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;background-color: #3F4245;background-position: center;background-size: cover;background-repeat: no-repeat;background-clip: padding-box;border: 1px solid rgba(255,255,255,.1);"> | |
<tr> | |
<td style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;"> | |
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank" style="text-decoration: underline;"> | |
<img class="card-poster-overlay" src="${base_url_image + 'images/newsletter/view-on-plex-cover.png' if base_url_image else 'http://tautulli.com/images/newsletter/view-on-plex-cover.png'}" width="150" height="150" style="border: none;-ms-interpolation-mode: bicubic;max-width: 100%;display: block;"> | |
</a> | |
</td> | |
</tr> | |
</table> | |
</td> | |
<td class="card-info-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;padding-left: 4px;text-align: left;height: 152px;"> | |
<table border="0" cellpadding="0" cellspacing="0" class="card-info-container-table" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;height: 100%;"> | |
<tr> | |
<td class="card-info-title nowrap" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.9rem;vertical-align: top;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;border-bottom: 1px solid rgba(255, 255, 255, .1);line-height: 1.2rem;padding: 5px;max-width: 320px;"> | |
<a href="${parameters['pms_web_url']}#!/server/${parameters['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${album['rating_key']}" title="${album['title']}" target="_blank" style="text-decoration: none;color: #ffffff;">${album['title']}</a> | |
</td> | |
</tr> | |
<tr> | |
<td class="card-info-body" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.75rem;vertical-align: top;padding: 5px;height: 82px;min-height: 82px;"> | |
<p class="nowrap mb5" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;margin-bottom: 5px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;max-width: 325px;color: #ffffff;"> | |
<em>${album['parent_title']} · ${album['track_count']} track${'s' if album['track_count'] > 1 else ''}</em> | |
</p> | |
% if artist['title'].lower() != 'various artists': | |
<p style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-weight: 400;margin: 0;max-width: 325px;color: #ffffff;"> | |
${album['summary'][:200] + (album['summary'][200:] and '...')} | |
</p> | |
% endif | |
</td> | |
</tr> | |
<tr> | |
<td class="card-info-footer nowrap" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.6rem;vertical-align: top;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;padding-top: 0px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
<td class="badge-container" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;max-width: 260px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% if album['year']: | |
<td class="badge" title="${album['year']}" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${album['year']}</td> | |
% endif | |
% if album['genres']: | |
% for genre in album['genres'][:2]: | |
<td class="badge" title="${genre}" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 11px;vertical-align: middle;display: inline-block;min-width: 10px;margin-right: 4px;padding: 3px 7px;line-height: 1;text-align: center;white-space: nowrap;background-color: rgba(0, 0, 0, .25);border-radius: 2px;text-overflow: ellipsis;overflow: hidden;color: #ffffff;">${genre}</td> | |
% endfor | |
% endif | |
</tr> | |
</table> | |
</td> | |
% if album['rating']: | |
<% rating = int(round(float(album['rating']) / 2)) %> | |
<td class="star-rating-container" title="${int(float(album['rating'])/0.1)}%" align="right" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px;vertical-align: top;width: 65px;"> | |
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate;mso-table-lspace: 0pt;mso-table-rspace: 0pt;width: 100%;"> | |
<tr> | |
% for _ in range(rating): | |
<td class="star-rating full" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.8rem;vertical-align: bottom;margin-left: 4px;line-height: 1rem;width: 0.5rem;display: inline-block;color: #E5A00D;">★</td> | |
% endfor | |
% for _ in range(5-rating): | |
<td class="star-rating empty" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 0.8rem;vertical-align: bottom;margin-left: 4px;line-height: 1rem;width: 0.5rem;display: inline-block;color: #aaaaaa;">☆</td> | |
% endfor | |
</tr> | |
</table> | |
</td> | |
% endif | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</td> | |
% if not album_b: | |
<td align="center" valign="top" class="card-instance pad" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;overflow: hidden;padding: 0 !important;width: 251px !important;min-width: 251px !important;max-width: 251px !important;"></td> | |
% endif | |
% endif | |
% endfor | |
</tr> | |
</table> | |
</td> | |
</tr> | |
% endfor | |
</table> | |
</td> | |
</tr> | |
% endif | |
<tr> | |
<td class="footer" style="font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 12px;vertical-align: top;clear: both;margin-top: 10px;text-align: center;width: 100%;"> | |
<div class="footer-bar" style="margin-left: auto;margin-right: auto;width: 200px;border-top: 1px solid #E5A00D;margin-top: 25px;"></div> | |
<div class="content-block powered-by" style="padding-bottom: 10px;padding-top: 10px;"> | |
<!-- FOOTER MESSAGE - DO NOT REMOVE --> | |
</div> | |
</td> | |
</tr> | |
</table> | |
</div> | |
</td> | |
</tr> | |
</table> | |
</body> | |
</html> | |
% endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment