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()