calibre/src/pyj/read_book/settings.pyj

59 lines
2.1 KiB
Text

# vim:fileencoding=utf-8
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
from __python__ import hash_literals
from elementmaker import E
from read_book.globals import runtime
opts = {}
def update_settings(settings):
settings = settings or {}
opts.columns_per_screen = settings.columns_per_screen or {'portrait':0, 'landscape':0}
opts.margin_left = max(0, settings.margin_left or 0)
opts.margin_right = max(0, settings.margin_right or 0)
opts.color_scheme = settings.color_scheme
opts.base_font_size = max(8, min(settings.base_font_size or 16, 64))
opts.user_stylesheet = settings.user_stylesheet or ''
opts.hide_tooltips = settings.hide_tooltips
opts.cover_preserve_aspect_ratio = settings.cover_preserve_aspect_ratio
update_settings()
def apply_font_size():
if not runtime.is_standalone_viewer:
document.documentElement.style.fontSize = '{}px'.format(opts.base_font_size)
def apply_colors():
for elem in (document.documentElement, document.body):
elem.style.color = opts.color_scheme.foreground
# set background color to transparent so that the users background
# color which is set on the iframe is used instead
elem.style.backgroundColor = 'transparent'
ss = document.getElementById('calibre-color-scheme-style-overrides')
if not ss:
ss = E.style(id='calibre-color-scheme-style-overrides', type='text/css')
document.documentElement.appendChild(ss)
if opts.color_scheme.link:
c = opts.color_scheme.link
ss.textContent = f':link, :link * {{ color: {c} !important }} :visited, :visited * {{ color: {c} !important }}'
else:
ss.textContent = ''
def apply_stylesheet():
if opts.user_stylesheet:
sid = 'calibre-browser-viewer-user-stylesheet'
style = document.getElementById(sid)
if not style:
style = E.style(type='text/css', id=sid)
document.documentElement.appendChild(style)
style.textContent = opts.user_stylesheet
def apply_settings():
apply_font_size()
apply_colors()
apply_stylesheet()