Convert htmlbuilder strings to Template()

This commit is contained in:
Ken Roberts 2016-06-06 08:16:09 -07:00
parent d690366595
commit 2443b94eda
2 changed files with 116 additions and 103 deletions

View File

@ -390,14 +390,14 @@ is the function which has to be called from outside. The generated and returned
import logging import logging
from PyQt5 import QtWebKit from PyQt5 import QtWebKit
from string import Template
from openlp.core.common import Settings from openlp.core.common import Settings
from openlp.core.lib.theme import BackgroundType, BackgroundGradientType, VerticalType, HorizontalType from openlp.core.lib.theme import BackgroundType, BackgroundGradientType, VerticalType, HorizontalType
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# TODO: Verify where this is used before converting to python3 HTML_SRC = Template("""
HTMLSRC = """
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -411,14 +411,14 @@ HTMLSRC = """
-webkit-user-select: none; -webkit-user-select: none;
} }
body { body {
%s; ${bg_css};
} }
.size { .size {
position: absolute; position: absolute;
left: 0px; left: 0px;
top: 0px; top: 0px;
width: 100%%; width: 100%;
height: 100%%; height: 100%;
} }
#black { #black {
z-index: 8; z-index: 8;
@ -431,14 +431,14 @@ body {
#image { #image {
z-index: 2; z-index: 2;
} }
%s ${css_additions}
#footer { #footer {
position: absolute; position: absolute;
z-index: 6; z-index: 6;
%s ${footer_css}
} }
/* lyric css */ /* lyric css */
%s ${lyrics_css}
sup { sup {
font-size: 0.6em; font-size: 0.6em;
vertical-align: top; vertical-align: top;
@ -448,8 +448,8 @@ sup {
</style> </style>
<script> <script>
var timer = null; var timer = null;
var transition = %s; var transition = ${transitions};
%s ${js_additions}
function show_image(src){ function show_image(src){
var img = document.getElementById('image'); var img = document.getElementById('image');
@ -538,15 +538,60 @@ sup {
</script> </script>
</head> </head>
<body> <body>
<img id="bgimage" class="size" %s /> <img id="bgimage" class="size" ${bg_image} />
<img id="image" class="size" %s /> <img id="image" class="size" ${image} />
%s ${html_additions}
<div class="lyricstable"><div id="lyricsmain" style="opacity:1" class="lyricscell lyricsmain"></div></div> <div class="lyricstable"><div id="lyricsmain" style="opacity:1" class="lyricscell lyricsmain"></div></div>
<div id="footer" class="footer"></div> <div id="footer" class="footer"></div>
<div id="black" class="size"></div> <div id="black" class="size"></div>
</body> </body>
</html> </html>
""" """)
LYRICS_SRC = Template("""
.lyricstable {
z-index: 5;
position: absolute;
display: table;
${stable}
}
.lyricscell {
display: table-cell;
word-wrap: break-word;
-webkit-transition: opacity 0.4s ease;
${lyrics}
}
.lyricsmain {
${main}
}
""")
FOOTER_SRC = Template("""
left: ${left}px;
bottom: ${bottom}px;
width: ${width}px;
font-family: ${family};
font-size: ${size}pt;
color: ${color};
text-align: left;
white-space: ${space};
""")
LYRICS_FORMAT_SRC = Template("""
${justify}word-wrap: break-word;
text-align: ${align};
vertical-align: ${valign};
font-family: ${font};
font-size: ${size}pt;
color: ${color};
line-height: ${line}%;
margin: 0;
padding: 0;
padding-bottom: ${bottom};
padding-left: ${left}px;
width: ${width}px;
height: ${height}px;${font_style}${font_weight}
""")
def build_html(item, screen, is_live, background, image=None, plugins=None): def build_html(item, screen, is_live, background, image=None, plugins=None):
@ -582,18 +627,17 @@ def build_html(item, screen, is_live, background, image=None, plugins=None):
css_additions += plugin.get_display_css() css_additions += plugin.get_display_css()
js_additions += plugin.get_display_javascript() js_additions += plugin.get_display_javascript()
html_additions += plugin.get_display_html() html_additions += plugin.get_display_html()
html = HTMLSRC % ( return HTML_SRC.substitute(bg_css=build_background_css(item, width),
build_background_css(item, width), css_additions=css_additions,
css_additions, footer_css=build_footer_css(item, height),
build_footer_css(item, height), lyrics_css=build_lyrics_css(item),
build_lyrics_css(item), transitions='true' if (theme_data and
'true' if theme_data and theme_data.display_slide_transition and is_live else 'false', theme_data.display_slide_transition and
js_additions, is_live) else 'false',
bgimage_src, js_additions=js_additions,
image_src, bg_image=bgimage_src,
html_additions image=image_src,
) html_additions=html_additions)
return html
def webkit_version(): def webkit_version():
@ -650,24 +694,6 @@ def build_lyrics_css(item):
:param item: Service Item containing theme and location information :param item: Service Item containing theme and location information
""" """
# TODO: Verify this before converting to python3
style = """
.lyricstable {
z-index: 5;
position: absolute;
display: table;
%s
}
.lyricscell {
display: table-cell;
word-wrap: break-word;
-webkit-transition: opacity 0.4s ease;
%s
}
.lyricsmain {
%s
}
"""
theme_data = item.theme_data theme_data = item.theme_data
lyricstable = '' lyricstable = ''
lyrics = '' lyrics = ''
@ -680,8 +706,7 @@ def build_lyrics_css(item):
lyricsmain += ' text-shadow: {theme} {shadow}px ' \ lyricsmain += ' text-shadow: {theme} {shadow}px ' \
'{shadow}px;'.format(theme=theme_data.font_main_shadow_color, '{shadow}px;'.format(theme=theme_data.font_main_shadow_color,
shadow=theme_data.font_main_shadow_size) shadow=theme_data.font_main_shadow_size)
lyrics_css = style % (lyricstable, lyrics, lyricsmain) return LYRICS_SRC.substitute(stable=lyricstable, lyrics=lyrics, main=lyricsmain)
return lyrics_css
def build_lyrics_outline_css(theme_data): def build_lyrics_outline_css(theme_data):
@ -710,38 +735,23 @@ def build_lyrics_format_css(theme_data, width, height):
""" """
align = HorizontalType.Names[theme_data.display_horizontal_align] align = HorizontalType.Names[theme_data.display_horizontal_align]
valign = VerticalType.Names[theme_data.display_vertical_align] valign = VerticalType.Names[theme_data.display_vertical_align]
if theme_data.font_main_outline: left_margin = (int(theme_data.font_main_outline_size) * 2) if theme_data.font_main_outline else 0
left_margin = int(theme_data.font_main_outline_size) * 2
else:
left_margin = 0
justify = 'white-space:pre-wrap;'
# fix tag incompatibilities # fix tag incompatibilities
if theme_data.display_horizontal_align == HorizontalType.Justify: justify = '' if (theme_data.display_horizontal_align == HorizontalType.Justify) else 'white-space:pre-wrap;\n'
justify = '' padding_bottom = '0.5em' if (theme_data.display_vertical_align == VerticalType.Bottom) else '0'
if theme_data.display_vertical_align == VerticalType.Bottom: return LYRICS_FORMAT_SRC.substitute(justify=justify,
padding_bottom = '0.5em' align=align,
else: valign=valign,
padding_bottom = '0' font=theme_data.font_main_name,
lyrics = '{justify} word-wrap: break-word; ' \ size=theme_data.font_main_size,
'text-align: {align}; vertical-align: {valign}; font-family: {font}; ' \ color=theme_data.font_main_color,
'font-size: {size}pt; color: {color}; line-height: {line:d}%; margin: 0;' \ line='{line:d}'.format(line=100 + int(theme_data.font_main_line_adjustment)),
'padding: 0; padding-bottom: {bottom}; padding-left: {left}px; width: {width}px; ' \ bottom=padding_bottom,
'height: {height}px; '.format(justify=justify, left=left_margin,
align=align, width=width,
valign=valign, height=height,
font=theme_data.font_main_name, font_style='\nfont-style:italic;' if theme_data.font_main_italics else '',
size=theme_data.font_main_size, font_weight='\nfont-weight:bold;' if theme_data.font_main_bold else '')
color=theme_data.font_main_color,
line=100 + int(theme_data.font_main_line_adjustment),
bottom=padding_bottom,
left=left_margin,
width=width,
height=height)
if theme_data.font_main_italics:
lyrics += 'font-style:italic; '
if theme_data.font_main_bold:
lyrics += 'font-weight:bold; '
return lyrics
def build_footer_css(item, height): def build_footer_css(item, height):
@ -751,22 +761,11 @@ def build_footer_css(item, height):
:param item: Service Item to be processed. :param item: Service Item to be processed.
:param height: :param height:
""" """
style = """
left: {left}px;
bottom: {bottom}px;
width: {width}px;
font-family: {family};
font-size: {size}pt;
color: {color};
text-align: left;
white-space: {space};
"""
theme = item.theme_data theme = item.theme_data
if not theme or not item.footer: if not theme or not item.footer:
return '' return ''
bottom = height - int(item.footer.y()) - int(item.footer.height()) bottom = height - int(item.footer.y()) - int(item.footer.height())
whitespace = 'normal' if Settings().value('themes/wrap footer') else 'nowrap' whitespace = 'normal' if Settings().value('themes/wrap footer') else 'nowrap'
lyrics_html = style.format(left=item.footer.x(), bottom=bottom, width=item.footer.width(), return FOOTER_SRC.substitute(left=item.footer.x(), bottom=bottom, width=item.footer.width(),
family=theme.font_footer_name, size=theme.font_footer_size, family=theme.font_footer_name, size=theme.font_footer_size,
color=theme.font_footer_color, space=whitespace) color=theme.font_footer_color, space=whitespace)
return lyrics_html

View File

@ -182,19 +182,33 @@ LYRICS_CSS = """
} }
""" """
LYRICS_OUTLINE_CSS = ' -webkit-text-stroke: 0.125em #000000; -webkit-text-fill-color: #FFFFFF; ' LYRICS_OUTLINE_CSS = ' -webkit-text-stroke: 0.125em #000000; -webkit-text-fill-color: #FFFFFF; '
LYRICS_FORMAT_CSS = ' word-wrap: break-word; text-align: justify; vertical-align: bottom; ' + \ LYRICS_FORMAT_CSS = """
'font-family: Arial; font-size: 40pt; color: #FFFFFF; line-height: 108%; margin: 0;padding: 0; ' + \ word-wrap: break-word;
'padding-bottom: 0.5em; padding-left: 2px; width: 1580px; height: 810px; font-style:italic; font-weight:bold; ' text-align: justify;
vertical-align: bottom;
font-family: Arial;
font-size: 40pt;
color: #FFFFFF;
line-height: 108%;
margin: 0;
padding: 0;
padding-bottom: 0.5em;
padding-left: 2px;
width: 1580px;
height: 810px;
font-style:italic;
font-weight:bold;
"""
FOOTER_CSS_BASE = """ FOOTER_CSS_BASE = """
left: 10px; left: 10px;
bottom: 0px; bottom: 0px;
width: 1260px; width: 1260px;
font-family: Arial; font-family: Arial;
font-size: 12pt; font-size: 12pt;
color: #FFFFFF; color: #FFFFFF;
text-align: left; text-align: left;
white-space: %s; white-space: %s;
""" """
FOOTER_CSS = FOOTER_CSS_BASE % ('nowrap') FOOTER_CSS = FOOTER_CSS_BASE % ('nowrap')
FOOTER_CSS_WRAP = FOOTER_CSS_BASE % ('normal') FOOTER_CSS_WRAP = FOOTER_CSS_BASE % ('normal')
FOOTER_CSS_INVALID = '' FOOTER_CSS_INVALID = ''