fantos commited on
Commit
d64466a
·
verified ·
1 Parent(s): 81253f2

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +114 -0
app.py ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import urllib.parse
2
+ import gradio as gr
3
+
4
+ # ---------------------------
5
+ # 배지 URL 생성 함수 정의
6
+ # ---------------------------
7
+ def generate_static_badge(label, message, color, label_color, logo, logo_color, style, link):
8
+ base = "https://img.shields.io/static/v1"
9
+ params = []
10
+ if label:
11
+ params.append(f"label={urllib.parse.quote(label, safe='')}")
12
+ if message:
13
+ params.append(f"message={urllib.parse.quote(message, safe='')}")
14
+ if color:
15
+ params.append(f"color={urllib.parse.quote(color, safe='')}")
16
+ if label_color:
17
+ params.append(f"labelColor={urllib.parse.quote(label_color, safe='')}")
18
+ if logo:
19
+ params.append(f"logo={urllib.parse.quote(logo, safe='')}")
20
+ if logo_color:
21
+ params.append(f"logoColor={urllib.parse.quote(logo_color, safe='')}")
22
+ if style:
23
+ params.append(f"style={urllib.parse.quote(style, safe='')}")
24
+
25
+ badge_url = base + ("?" + "&".join(params) if params else "")
26
+ if link:
27
+ html_code = f'<a href="{link}" target="_blank"><img src="{badge_url}" alt="badge"></a>'
28
+ else:
29
+ html_code = f'<img src="{badge_url}" alt="badge">'
30
+
31
+ badge_preview = f"""
32
+ <div style='padding:20px; background: #fefefe; border-radius: 12px; display: flex; justify-content: center;'>
33
+ {html_code}
34
+ </div>
35
+ """
36
+ return html_code, badge_preview
37
+
38
+ # ---------------------------
39
+ # Gradio UI 구성
40
+ # ---------------------------
41
+ with gr.Blocks(theme=gr.themes.Default()) as demo:
42
+ gr.HTML("""
43
+ <h1 style="text-align: center; font-size: 2.2em; margin-bottom: 0.2em;">🎨 BadgeCraft - Beautiful Badge Generator</h1>
44
+ <p style="text-align: center; font-size: 1.1em; color: #555;">Design stylish shields.io badges with live preview and HTML snippet generation.</p>
45
+ """)
46
+
47
+ with gr.Row():
48
+ out_code = gr.Code(label="HTML Snippet", language="html")
49
+ out_preview = gr.HTML(label="Badge Preview")
50
+
51
+ with gr.Row():
52
+ label = gr.Textbox(label="Label", placeholder="예: build")
53
+ message = gr.Textbox(label="Message", placeholder="예: passing")
54
+ logo = gr.Textbox(label="Logo", placeholder="예: github")
55
+
56
+ with gr.Row():
57
+ color = gr.ColorPicker(label="Color", value="#a0c4ff")
58
+ label_color = gr.ColorPicker(label="Label Color", value="#bdb2ff")
59
+ logo_color = gr.ColorPicker(label="Logo Color", value="#ffc6ff")
60
+
61
+ style = gr.Dropdown(label="Style", choices=["flat", "flat-square", "plastic", "for-the-badge", "social"], value="for-the-badge")
62
+ link = gr.Textbox(label="Link (배지 클릭 시 이동할 URL)", placeholder="https://yourlink.com")
63
+
64
+ inputs = [label, message, color, label_color, logo, logo_color, style, link]
65
+ for inp in inputs:
66
+ inp.change(fn=generate_static_badge, inputs=inputs, outputs=[out_code, out_preview])
67
+
68
+ def fill_example(label_val, message_val, logo_val, link_val):
69
+ return label_val, message_val, logo_val, link_val
70
+
71
+ gr.HTML("""
72
+ <h3 style="text-align: center; margin-top: 30px;">✨ Examples (Click to Load)</h3>
73
+ """)
74
+
75
+ with gr.Row():
76
+ with gr.Column():
77
+ gr.Button("Discord Badge Example").click(
78
+ fn=fill_example,
79
+ inputs=[],
80
+ outputs=[label, message, logo, link],
81
+ _js="() => window.open('https://discord.gg/openfreeai', '_blank')"
82
+ ).style(full_width=True)
83
+
84
+ gr.Button("X Badge Example").click(
85
+ fn=fill_example,
86
+ inputs=[],
87
+ outputs=[label, message, logo, link],
88
+ _js="() => window.open('https://x.com/openfree_ai', '_blank')"
89
+ ).style(full_width=True)
90
+
91
+ gr.Button("Instagram Badge Example").click(
92
+ fn=fill_example,
93
+ inputs=[],
94
+ outputs=[label, message, logo, link],
95
+ _js="() => window.open('https://www.instagram.com/openfree_ai', '_blank')"
96
+ ).style(full_width=True)
97
+
98
+ gr.Button("Threads Badge Example").click(
99
+ fn=fill_example,
100
+ inputs=[],
101
+ outputs=[label, message, logo, link],
102
+ _js="() => window.open('https://www.threads.net/@openfree_ai', '_blank')"
103
+ ).style(full_width=True)
104
+
105
+ gr.Button("Facebook Badge Example").click(
106
+ fn=fill_example,
107
+ inputs=[],
108
+ outputs=[label, message, logo, link],
109
+ _js="() => window.open('https://www.facebook.com/profile.php?id=61575353674679', '_blank')"
110
+ ).style(full_width=True)
111
+
112
+ # 실행
113
+ if __name__ == "__main__":
114
+ demo.launch()