Kshitij-verbaflo commited on
Commit
1f1f0c9
·
verified ·
1 Parent(s): 711b424

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -0
app.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from jinja2 import Template
3
+
4
+ def render_mermaid(jinja_text, user_city, property):
5
+ try:
6
+ template = Template(jinja_text)
7
+ rendered_code = template.render(user_city=user_city, property=property)
8
+ print("DEBUG: Rendered Mermaid Code:\n", rendered_code)
9
+ mermaid_md = f"```mermaid\n{rendered_code}\n```"
10
+ return mermaid_md
11
+ except Exception as e:
12
+ return f"**Template Error:** {str(e)}"
13
+
14
+ default_template = """
15
+ flowchart TD
16
+ Start["Start"] --> AskCity["{% if user_city %}You're viewing in {{ user_city }}.{% else %}Which city would you like to view in?{% endif %}"]
17
+ AskCity --> AskProperty["{% if property %}You want to view {{ property }}.{% else %}What property are you interested in?{% endif %}"]
18
+ """
19
+
20
+ custom_css = """
21
+ .gr-box { padding: 1.5rem; }
22
+
23
+ .sticky-left {
24
+ position: sticky;
25
+ top: 1rem;
26
+ align-self: flex-start;
27
+ height: fit-content;
28
+ z-index: 1;
29
+ }
30
+
31
+ .scroll-right {
32
+ max-height: 90vh;
33
+ overflow-y: auto;
34
+ padding-right: 1rem;
35
+ }
36
+ """
37
+
38
+ with gr.Blocks(theme=gr.themes.Base(), css=custom_css) as demo:
39
+ gr.Markdown("## 🧠 Jinja2 → Mermaid Renderer", elem_id="title")
40
+ gr.Markdown("Customize the Mermaid flowchart using Jinja2 logic and see a live preview.")
41
+
42
+ with gr.Row():
43
+ # LEFT SIDE (Sticky)
44
+ with gr.Column(scale=1, elem_classes=["sticky-left"]):
45
+ user_city = gr.Textbox(label="🏙️ User City", placeholder="e.g., Liverpool", lines=1)
46
+ property = gr.Textbox(label="🏢 Property", placeholder="e.g., Moda Living", lines=1)
47
+ jinja_input = gr.Code(
48
+ label="✍️ Jinja2 + Mermaid Template",
49
+ language="html",
50
+ value=default_template,
51
+ lines=18
52
+ )
53
+
54
+ # RIGHT SIDE (Scrollable)
55
+ with gr.Column(scale=1, elem_classes=["scroll-right"]):
56
+ rendered_md = gr.Markdown(label="📈 Live Mermaid Preview")
57
+
58
+ inputs = [jinja_input, user_city, property]
59
+ jinja_input.change(render_mermaid, inputs=inputs, outputs=rendered_md)
60
+ user_city.change(render_mermaid, inputs=inputs, outputs=rendered_md)
61
+ property.change(render_mermaid, inputs=inputs, outputs=rendered_md)
62
+
63
+ demo.load(render_mermaid, inputs=inputs, outputs=rendered_md)
64
+
65
+ demo.launch()