Do not reload book when changing color scheme

This commit is contained in:
Kovid Goyal 2016-09-27 08:37:27 +05:30
parent 28f8b0aa7b
commit e6bea96ff5
4 changed files with 40 additions and 18 deletions

View File

@ -45,6 +45,7 @@ class IframeBoss:
'scroll_to_anchor': self.on_scroll_to_anchor,
'next_screen': self.on_next_screen,
'change_font_size': self.change_font_size,
'change_color_scheme': self.change_color_scheme,
}
self.last_window_ypos = 0
@ -148,6 +149,11 @@ class IframeBoss:
opts.base_font_size = data.base_font_size
self.apply_font_size()
def change_color_scheme(self, data):
if data.color_scheme and data.color_scheme.foreground and data.color_scheme.background:
opts.color_scheme = data.color_scheme
self.apply_colors()
def content_loaded(self):
document.documentElement.style.overflow = 'hidden'
# document.body.appendChild(

View File

@ -5,7 +5,7 @@ from __python__ import hash_literals, bound_methods
from gettext import gettext as _
from dom import svgicon, set_css, add_extra_css, build_rule, clear, unique_id
from elementmaker import E
from book_list.globals import get_session_data
from book_list.globals import get_session_data, get_boss
from read_book.globals import default_color_schemes
from modals import error_dialog
from widgets import create_button
@ -34,6 +34,20 @@ add_extra_css(def():
def get_container():
return document.getElementById(CONTAINER)
def resolve_color_scheme(current_color_scheme):
sd = get_session_data()
cs = current_color_scheme or sd.get('current_color_scheme') or 'white'
ucs = sd.get('user_color_schemes')
if default_color_schemes[cs]:
ans = default_color_schemes[cs]
elif ucs[cs] and ucs[cs].foreground and ucs[cs].background:
ans = ucs[cs]
else:
for sn in default_color_schemes:
ans = default_color_schemes[sn]
break
return ans
def change_current_color(ev):
ul = ev.currentTarget.parentNode
for li in ul.childNodes:
@ -152,6 +166,9 @@ def set_action_button_visibility():
def create_colors_panel(container):
container.appendChild(E.div(id=CONTAINER))
container = container.lastChild
cs = resolve_color_scheme()
container.dataset.bg = cs.background
container.dataset.fg = cs.foreground
container.appendChild(E.p(_('Choose a color scheme below'), style='margin:1ex 1em; padding: 1ex 0'))
ul = E.ul(id=COLOR_LIST)
container.appendChild(ul)
@ -179,8 +196,9 @@ develop = create_colors_panel
def commit_colors(onchange):
ccs = current_color_scheme()
rcs = resolve_color_scheme(ccs)
c = get_container()
if rcs.foreground is not c.dataset.fg or rcs.background is not c.dataset.bg:
sd = get_session_data()
if sd.get('current_color_scheme') is not ccs:
sd.set('current_color_scheme', ccs)
onchange()
get_boss().read_ui.update_color_scheme()

View File

@ -113,6 +113,9 @@ class ReadUI:
def update_font_size(self):
self.view.update_font_size()
def update_color_scheme(self):
self.view.update_color_scheme()
@property
def url_data(self):
ans = {'book_id':self.base_url_data.book_id, 'fmt': self.base_url_data.fmt}

View File

@ -6,9 +6,10 @@ from book_list.globals import get_session_data, get_boss
from dom import set_css, add_extra_css, build_rule, svgicon
from elementmaker import E
from gettext import gettext as _
from read_book.globals import messenger, iframe_id, default_color_schemes
from read_book.globals import messenger, iframe_id
from read_book.resources import load_resources
from read_book.overlay import Overlay
from read_book.prefs.colors import resolve_color_scheme
from book_list.theme import get_color
from utils import parse_url_params, username_key
@ -178,17 +179,7 @@ class View:
self.ui.show_error((data.title or _('There was an error processing the book')), data.msg, data.details)
def get_color_scheme(self, apply_to_margins):
sd = get_session_data()
cs = sd.get('current_color_scheme') or 'white'
ucs = sd.get('user_color_schemes')
if default_color_schemes[cs]:
ans = default_color_schemes[cs]
elif ucs[cs] and ucs[cs].foreground and ucs[cs].background:
ans = ucs[cs]
else:
for sn in default_color_schemes:
ans = default_color_schemes[sn]
break
ans = resolve_color_scheme()
if apply_to_margins:
for which in 'left top right bottom'.split(' '):
s = document.getElementById('book-{}-margin'.format(which)).style
@ -324,3 +315,7 @@ class View:
def update_font_size(self):
self.send_message('change_font_size', base_font_size=get_session_data().get('base_font_size'))
def update_color_scheme(self):
cs = self.get_color_scheme(True)
self.send_message('change_color_scheme', color_scheme=cs)