forked from openlp/openlp
Convert htmlbuilder strings to Template()
This commit is contained in:
parent
d690366595
commit
2443b94eda
@ -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
|
|
||||||
|
@ -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 = ''
|
||||||
|
Loading…
Reference in New Issue
Block a user