from browser import bind, doc, html, win
from browser.local_storage import storage
def apply_single(item, apply, remove):
try:
classlist = item.classList
for cls in remove:
try:
classlist.remove(cls)
except Exception as ex:
print(ex)
for cls in apply:
try:
classlist.add(cls)
except Exception as ex:
print(ex)
except:
pass
def recursively_apply(item, apply, remove):
apply_single(item, apply, remove)
for child in item:
recursively_apply(child, apply, remove)
def load_sheet(folder, pattern, name):
sheet = html.LINK(rel='stylesheet',
href=f'/static/css/visualaid/{folder}/aid-{pattern}-{name}.css')
sheet.disabled = True
doc.head <= sheet
return sheet
def bind_style(button_id, enables, overrides, save):
@bind(doc[button_id], 'click')
def set_style(ev=None):
for sheet in overrides:
sheet.disabled = True
enables.disabled = False
type, style = save
storage[type] = style
def activate(ev=None):
global sheets
sizes = ('lg', 'md', 'sm')
folders = [
('color-palettes', 'theme', ('dark', 'light', 'blue')),
('font-sizes', 'font', sizes),
('font-spacings', 'spacing', sizes),
('image-states', 'img', ('disabled', 'enabled', 'grayscale')),
]
load_sheet('.', 'general', 'style').disabled = False
sheets = {
folder: {
option: load_sheet(folder, pattern, option) for option in options
} for folder, pattern, options in folders
}
for folder, type, styles in folders:
for style in styles:
sheets_list = sheets[folder]
bind_style(button_id=f'btn-aid-{type}-{style}',
enables=sheets_list[style],
overrides=sheets_list.values(),
save=(type, style))
recursively_apply(doc['main'], ('aid',), ())
def load_settings():
activate()
sheets['color-palettes'][storage.get('theme', 'light')].disabled = False
sheets['font-sizes'][storage.get('font', 'md')].disabled = False
sheets['font-spacings'][storage.get('spacing', 'sm')].disabled = False
sheets['image-states'][storage.get('img', 'enabled')].disabled = False
@bind(doc['visualaid-btn'], 'click')
def toggle_aid(ev=None):
if storage.get('visualaid-enabled', 'false') == 'true':
storage['visualaid-enabled'] = 'false'
win.location.reload()
return
storage['visualaid-enabled'] = 'true'
load_settings()
if storage.get('visualaid-enabled', 'false') == 'true':
load_settings()