Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Dynamic theming #1358

Merged
merged 134 commits into from
Jun 27, 2024
Merged
Changes from 1 commit
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
943b48d
bump to latest shiny/bslib
gadenbuie May 1, 2024
36dc596
feat: Merge shiny dependencies into a single bootstrap.min.css
gadenbuie May 1, 2024
f33a59e
Consolidate all CSS in bootstrap.min.css
gadenbuie May 4, 2024
27c6912
feat: Add Sass source files for bslib preset themes
gadenbuie May 6, 2024
17eeee7
write theme presets into `shiny/ui/_theme_presets.py`
gadenbuie May 6, 2024
7ee9358
include tuple of preset names for error checking
gadenbuie May 6, 2024
4a67c0b
feat: Dynamic theming with ui.ShinyTheme
gadenbuie May 6, 2024
47d751d
tests: update example (as demo)
gadenbuie May 6, 2024
09d4d60
Include bslib components in base shiny-bootstrap
gadenbuie May 6, 2024
2febd00
rename: `ui.Theme`
gadenbuie May 6, 2024
ec330f2
update demo
gadenbuie May 6, 2024
b6227d3
rename: shiny:::__SassLayer -> shiny:::__Sass
gadenbuie May 6, 2024
2a92dfb
separate sass prep and compilation tasks
gadenbuie May 6, 2024
6c92ef4
add comment headings
gadenbuie May 6, 2024
553cc12
small edits, various
gadenbuie May 6, 2024
195e244
don't bundle precompiled bootstwatch themes
gadenbuie May 6, 2024
8a74ae8
script reports which themes were bundled
gadenbuie May 6, 2024
93a8763
Add soft-dependency on libsass
gadenbuie May 6, 2024
5a5d1a1
chore: make check-fix
gadenbuie May 7, 2024
6719bf1
chore: shiny.express.ui.Theme
gadenbuie May 7, 2024
e4bd7ad
chore: also add libsass to dev packages
gadenbuie May 7, 2024
e2995b9
fix: gitignore folders at the top level
gadenbuie May 7, 2024
93f8284
Merged origin/main into feat/dynamic-theming
gadenbuie May 7, 2024
1c486c4
chore: add comments and some docs
gadenbuie May 7, 2024
92d9fcb
refactor: move all steps to functions
gadenbuie May 7, 2024
e7c6189
refactor: Organize scripts/htmlDependencies into functions
gadenbuie May 8, 2024
fecbdf6
refactor: move sass compressed options into individual functions
gadenbuie May 8, 2024
2bab669
refactor: Merge dependency prep into single file
gadenbuie May 8, 2024
090060a
refactor: align messages, small step order adjustments
gadenbuie May 8, 2024
ae67027
feat: base Bootstrap for component CSS, Shiny preset for bundled Boot…
gadenbuie May 8, 2024
f0821ff
Merge 'origin/main' into branch 'feat/dynamic-theming'
gadenbuie May 8, 2024
b840e15
chore: update source of generated file
gadenbuie May 8, 2024
1588238
chore: style scripts to normalize
gadenbuie May 8, 2024
9bfe679
chore: document more functions in setup script
gadenbuie May 8, 2024
839e633
refactor: move setup functions from _deps to _setup
gadenbuie May 8, 2024
350811e
docs(Theme): Document class and add two new methods:
gadenbuie May 8, 2024
f031e5f
tests(Theme): Add tests and fix a few things
gadenbuie May 8, 2024
07f6542
feat: Bundle page dependencies together without CSS
gadenbuie May 8, 2024
01f3054
chore: update shiny.js
gadenbuie May 8, 2024
ad9817c
chore: include full version info in script output
gadenbuie May 8, 2024
4adbe4a
chore: leave comment about theme extras
gadenbuie May 8, 2024
380f69b
chore: rename bootstrap version constant
gadenbuie May 8, 2024
d00ac20
chore: rename variable to avoid confusion with type
gadenbuie May 8, 2024
fd5beca
feat: add `include_paths` to `Theme` init
gadenbuie May 9, 2024
fa93a08
fix: new tempdir if we need to recompile css
gadenbuie May 9, 2024
e4ca799
refactor: Add `_can_use_precompiled()` method instead of overloading …
gadenbuie May 9, 2024
3774d1c
chore: `ui.Theme` is an instance of `Tagifiable`
gadenbuie May 9, 2024
0158012
docs: minor edit
gadenbuie May 9, 2024
8bcc695
feat: All `add_*()` methods support kwargs and python -> sass transfo…
gadenbuie May 9, 2024
2e8e009
example: Update api-examples/theme
gadenbuie May 9, 2024
6565d3d
docs: update example, add local css example
gadenbuie May 10, 2024
8559c54
Merged origin/main into feat/dynamic-theming
gadenbuie May 10, 2024
7d2b099
tests: Adjust tests of Sass kwarg value handling
gadenbuie May 10, 2024
bb492ff
feat: Add `compile_args` to `Theme.to_css()`
gadenbuie May 10, 2024
66f91bf
temp: Use dev htmltools
gadenbuie May 10, 2024
53a8bd0
chore: remove unused import
gadenbuie May 10, 2024
77e8d85
chore: don't use mutable data structure as default argument
gadenbuie May 10, 2024
feafa64
chore: cast to str in place
gadenbuie May 10, 2024
92de33c
chore: ignore flake8 warning in one file
gadenbuie May 10, 2024
34f6d87
chore: update github ref for py-htmltools
gadenbuie May 10, 2024
7201607
chore: use backwards-compatible NotRequired, TypedDict
gadenbuie May 10, 2024
e78d953
chore: Use `Union[]` for types
gadenbuie May 10, 2024
2b5719a
fix(types): Another backcompat type fix
gadenbuie May 10, 2024
1dc7749
docs: Add css pre-compiling example, add theme to quartodoc index
gadenbuie May 10, 2024
2cec3df
chore: update bslib sass files function name
gadenbuie Jun 13, 2024
9c4b63c
chore: latest bslib and shiny
gadenbuie Jun 13, 2024
4adbe26
feat(.add_defaults): Include `!default` flag
gadenbuie Jun 13, 2024
12a6d8c
refactor: _reset_css() method
gadenbuie Jun 13, 2024
3525ade
refactor: `ui.Theme` is not tagifiable, but `theme` can handle it
gadenbuie Jun 13, 2024
784a90e
tests: fix tests after `!default` flag addition
gadenbuie Jun 13, 2024
50f9a45
feat: Throw if trying to tagify a Theme object
gadenbuie Jun 13, 2024
1d154c3
Merge 'origin/main' into feat/dynamic-theming
gadenbuie Jun 13, 2024
adfe7a6
refactor: `write_spinners_py()`
gadenbuie Jun 13, 2024
ba2105b
tests: Test that htmltools dependency resolution works as expected
gadenbuie Jun 13, 2024
a7b79b8
chore: Leave a note about shiny_page_theme_deps() being for legacy co…
gadenbuie Jun 13, 2024
8b1428a
chore: be happy, pyright
gadenbuie Jun 13, 2024
8cf75d4
feat: Make `ui.Theme` a first class type of the `theme` argument.
gadenbuie Jun 13, 2024
6657ac8
chore: Use bslib, shiny from main
gadenbuie Jun 13, 2024
3abdc76
chore: remove requirements.txt from api-examples/theme
gadenbuie Jun 14, 2024
04f05f9
chore: Add comment about maker layer location
gadenbuie Jun 14, 2024
b067ae0
chore: comment about ionrangeslider
gadenbuie Jun 14, 2024
7cbd2d7
refactor: Just extract the contents of `@import "...";`
gadenbuie Jun 14, 2024
a8e271b
use released htmltools
gadenbuie Jun 20, 2024
8591ce3
chore: Remove `**kwargs` from `.add_functions()`
gadenbuie Jun 20, 2024
587c760
Apply suggestions from code review
gadenbuie Jun 20, 2024
3e0d79a
chore: remove `dedent_array()`
gadenbuie Jun 20, 2024
8e2d6fa
tests: `.add_functions()` doesn't allow kwargs
gadenbuie Jun 20, 2024
7010e98
chore: don't copy `self._css`
gadenbuie Jun 20, 2024
75479d7
chore: make `_combine_args_kwargs()` a static method
gadenbuie Jun 20, 2024
edb6287
Merge 'origin/main' into branch feat/dynamic-theming
gadenbuie Jun 20, 2024
415b9f3
docs: Document `compile_args` in `.to_css()` method
gadenbuie Jun 20, 2024
7ec2275
chore: Use `tempfile.TemporaryDirectory()`
gadenbuie Jun 20, 2024
d115d03
refactor: Simplify logic of `_html_dependency` method
gadenbuie Jun 20, 2024
37be3b5
chore: clean up theme tempdir if `theme` is garbage collected
gadenbuie Jun 20, 2024
ab056bb
docs(Theme): Add example
gadenbuie Jun 20, 2024
83647e2
fix(add_example): Don't embed files in `.venv` or `venv` directories
gadenbuie Jun 20, 2024
5530b79
docs: update example to avoid red squiggles
gadenbuie Jun 20, 2024
f4039e2
lint fixes
gadenbuie Jun 20, 2024
17343a4
chore: remove unused import
gadenbuie Jun 20, 2024
6a71999
chore: directly link to `sass.compile()`
gadenbuie Jun 21, 2024
89186de
docs: Add item to changelog
gadenbuie Jun 21, 2024
2e8890f
chore: add comment about BS version
gadenbuie Jun 21, 2024
21fa5e9
chore: Add a check for font import before updating
gadenbuie Jun 21, 2024
747fb82
chore: Add `make upgrade-html-deps` target
gadenbuie Jun 21, 2024
df0578b
chore: Add tuple of bootstwatch theme names
gadenbuie Jun 21, 2024
548782d
chore: restore bs3compat layer
gadenbuie Jun 24, 2024
b31011f
Merged origin/main into feat/dynamic-theming
gadenbuie Jun 24, 2024
5a6a2ca
fix: remove trailing empty line
gadenbuie Jun 24, 2024
dbd989c
chore: Move some internals into methods
gadenbuie Jun 24, 2024
eaf3081
fix: check that the Theme object has `_css_temp_srcdr` before accessi…
gadenbuie Jun 24, 2024
eaedbff
fix: f-string to plain string
gadenbuie Jun 24, 2024
4db16e8
Merged origin/main into feat/dynamic-theming
gadenbuie Jun 24, 2024
c72c0fd
refactor: Unify into a single HTML dependency method
gadenbuie Jun 25, 2024
be51b0f
test: More testing of css suppression
gadenbuie Jun 25, 2024
4616db0
chore: Bump version to 0.10.2.9003
gadenbuie Jun 25, 2024
81f642c
fix: Make sure `shiny.min.css` isn't included in rendered app HTML
gadenbuie Jun 25, 2024
36a95fd
feat: Mark shiny theme stylesheets with `data-shiny-theme`
gadenbuie Jun 25, 2024
7bff2d7
fix: ensure theme dependency has valid name
gadenbuie Jun 25, 2024
6b9ed59
fix: Use optional type annotation for older pythons
gadenbuie Jun 25, 2024
402399f
fix: Don't delete tempdir on garbage collection
gadenbuie Jun 25, 2024
396105c
tests: don't set default value of `theme` in parameterized test
gadenbuie Jun 25, 2024
3f7986a
Merged origin/main into feat/dynamic-theming
gadenbuie Jun 25, 2024
f294093
chore: back to `tempfile.mkdtemp()`
gadenbuie Jun 25, 2024
147364b
Merged origin/main into feat/dynamic-theming
gadenbuie Jun 26, 2024
5c90133
Revert "chore: back to `tempfile.mkdtemp()`"
gadenbuie Jun 26, 2024
801e52a
fix: Keep a reference to the tempdir to avoid early garbage collection
gadenbuie Jun 26, 2024
290a8ec
Revert "feat: Mark shiny theme stylesheets with `data-shiny-theme`"
gadenbuie Jun 26, 2024
e6819f6
feat: include `data-shiny-theme` attribute in theme stylesheet link tags
gadenbuie Jun 26, 2024
95cc53e
refactor: Improve/simplify `.to_css(compile_args=)`
gadenbuie Jun 26, 2024
6a6d508
fix: include `shiny.css` when Bootstrap is not available
gadenbuie Jun 26, 2024
a0eaf80
chore: Include express in tagify syntax error message
gadenbuie Jun 26, 2024
dbdb8bd
fix: include shiny.css in page-from-file apps
gadenbuie Jun 27, 2024
d444061
docs: Add Express option to changelog item
gadenbuie Jun 27, 2024
41f4e21
chore: Add comment about why we check for Bootstrap
gadenbuie Jun 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions shiny/ui/_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import os
import pathlib
import re
import shutil
import tempfile
import textwrap
from typing import (
Expand Down Expand Up @@ -161,7 +162,7 @@ def __init__(

# If the theme has been customized and rendered once, we store the tempdir
# so that we can re-use the already compiled CSS file.
self._css_temp_srcdir: Optional[tempfile.TemporaryDirectory[str]] = None
self._css_temp_srcdir: Optional[str] = None

@staticmethod
def available_presets() -> tuple[ShinyThemePreset, ...]:
Expand All @@ -183,8 +184,8 @@ def preset(self, value: ShinyThemePreset) -> None:
def _reset_css(self) -> None:
self._css = ""
if self._css_temp_srcdir is not None:
self._css_temp_srcdir.cleanup()
self._css_temp_srcdir = None
shutil.rmtree(self._css_temp_srcdir)
self._css_temp_srcdir = None

def _has_customizations(self) -> bool:
return (
Expand Down Expand Up @@ -457,9 +458,9 @@ def _html_dependency(self) -> HTMLDependency:
css_name = self._dep_css_name()

if self._css_temp_srcdir is None:
self._css_temp_srcdir = tempfile.TemporaryDirectory(delete=False)
self._css_temp_srcdir = tempfile.mkdtemp()
gadenbuie marked this conversation as resolved.
Show resolved Hide resolved

css_path = os.path.join(self._css_temp_srcdir.name, css_name)
css_path = os.path.join(self._css_temp_srcdir, css_name)

if not os.path.exists(css_path):
with open(css_path, "w") as css_file:
Expand Down
Loading