12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- """Templates to use in the reflex compiler."""
- from jinja2 import Environment, FileSystemLoader, Template
- from reflex import constants
- from reflex.utils import path_ops
- from reflex.utils.format import json_dumps
- class ReflexJinjaEnvironment(Environment):
- """The template class for jinja environment."""
- def __init__(self) -> None:
- """Set default environment."""
- extensions = ["jinja2.ext.debug"]
- super().__init__(
- extensions=extensions,
- trim_blocks=True,
- lstrip_blocks=True,
- )
- self.filters["json_dumps"] = json_dumps
- self.filters["react_setter"] = lambda state: f"set{state.capitalize()}"
- self.loader = FileSystemLoader(constants.JINJA_TEMPLATE_DIR)
- self.globals["const"] = {
- "socket": constants.SOCKET,
- "result": constants.RESULT,
- "router": constants.ROUTER,
- "event_endpoint": constants.Endpoint.EVENT.name,
- "events": constants.EVENTS,
- "state": constants.STATE,
- "final": constants.FINAL,
- "processing": constants.PROCESSING,
- "initial_result": {
- constants.STATE: None,
- constants.EVENTS: [],
- constants.FINAL: True,
- constants.PROCESSING: False,
- },
- "color_mode": constants.COLOR_MODE,
- "toggle_color_mode": constants.TOGGLE_COLOR_MODE,
- "use_color_mode": constants.USE_COLOR_MODE,
- "hydrate": constants.HYDRATE,
- "db_url": constants.DB_URL,
- }
- def get_template(name: str) -> Template:
- """Get render function that work with a template.
- Args:
- name: The template name. "/" is used as the path separator.
- Returns:
- A render function.
- """
- return ReflexJinjaEnvironment().get_template(name=name)
- # Template for the Reflex config file.
- RXCONFIG = get_template("app/rxconfig.py.jinja2")
- # Code to render a NextJS Document root.
- DOCUMENT_ROOT = get_template("web/pages/_document.js.jinja2")
- # Template for the theme file.
- THEME = get_template("web/utils/theme.js.jinja2")
- # Template for Tailwind config.
- TAILWIND_CONFIG = get_template("web/tailwind.config.js.jinja2")
- # Code to render a single NextJS page.
- PAGE = get_template("web/pages/index.js.jinja2")
- # Code to render the custom components page.
- COMPONENTS = get_template("web/pages/custom_component.js.jinja2")
- # Sitemap config file.
- SITEMAP_CONFIG = "module.exports = {config}".format
- FULL_CONTROL = path_ops.join(
- [
- "{{setState(prev => ({{",
- "...prev,{state_name}: {arg}",
- "}}), ",
- "()=>Event([{chain}])",
- ")}}",
- ]
- ).format
|