Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -3,8 +3,13 @@ from markdown import markdown
|
|
3 |
from bs4 import BeautifulSoup
|
4 |
import streamlit.components.v1 as components
|
5 |
|
6 |
-
# Set page config
|
7 |
-
st.set_page_config(
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
def md_to_text(md_text):
|
10 |
html = markdown(md_text)
|
@@ -13,26 +18,25 @@ def md_to_text(md_text):
|
|
13 |
|
14 |
def copy_button(text_to_copy, button_id):
|
15 |
# Creating a safer version of the text for JavaScript
|
16 |
-
# This avoids the backslash issue in f-strings
|
17 |
escaped_text = text_to_copy.replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r')
|
18 |
|
19 |
-
html_code = """
|
20 |
<script>
|
21 |
-
function copyText
|
22 |
-
const text =
|
23 |
-
navigator.clipboard.writeText(text).then(function() {
|
24 |
console.log('Text copied to clipboard');
|
25 |
-
document.getElementById('copy-button-
|
26 |
-
setTimeout(function() {
|
27 |
-
document.getElementById('copy-button-
|
28 |
-
}, 2000);
|
29 |
-
})
|
30 |
-
.catch(function(err) {
|
31 |
console.error('Failed to copy text: ', err);
|
32 |
-
});
|
33 |
-
}
|
34 |
</script>
|
35 |
-
<button id="copy-button-
|
36 |
style="background-color: #4CAF50; color: white; border: none;
|
37 |
padding: 5px 10px; text-align: center; text-decoration: none;
|
38 |
display: inline-block; font-size: 14px; margin: 4px 2px;
|
@@ -50,8 +54,11 @@ st.write("Paste your Markdown content below and convert it to plain text!")
|
|
50 |
col1, col2 = st.columns(2)
|
51 |
|
52 |
with col1:
|
53 |
-
md_input = st.text_area(
|
54 |
-
|
|
|
|
|
|
|
55 |
|
56 |
# Convert button
|
57 |
if st.button("Convert"):
|
@@ -61,22 +68,24 @@ if st.button("Convert"):
|
|
61 |
# Display results
|
62 |
with col2:
|
63 |
if 'converted_text' in st.session_state:
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
|
|
69 |
|
70 |
# Add copy button
|
71 |
if st.session_state.converted_text:
|
72 |
copy_button(st.session_state.converted_text, "output")
|
73 |
|
74 |
-
#
|
75 |
with st.expander("Preview Original Markdown"):
|
76 |
if md_input:
|
77 |
st.markdown(md_input, unsafe_allow_html=True)
|
78 |
-
#
|
79 |
-
|
|
|
80 |
else:
|
81 |
st.write("No Markdown to preview")
|
82 |
|
@@ -86,7 +95,8 @@ st.sidebar.markdown("""
|
|
86 |
1. Paste your Markdown in the left panel
|
87 |
2. Click 'Convert'
|
88 |
3. Use the 'Copy' button in the right panel
|
89 |
-
4. Toggle the preview to see original formatting
|
|
|
90 |
""")
|
91 |
|
92 |
# Apply light theme using CSS
|
|
|
3 |
from bs4 import BeautifulSoup
|
4 |
import streamlit.components.v1 as components
|
5 |
|
6 |
+
# Set page config
|
7 |
+
st.set_page_config(
|
8 |
+
page_title="Markdown Converter",
|
9 |
+
layout="wide",
|
10 |
+
initial_sidebar_state="expanded",
|
11 |
+
page_icon="📝"
|
12 |
+
)
|
13 |
|
14 |
def md_to_text(md_text):
|
15 |
html = markdown(md_text)
|
|
|
18 |
|
19 |
def copy_button(text_to_copy, button_id):
|
20 |
# Creating a safer version of the text for JavaScript
|
|
|
21 |
escaped_text = text_to_copy.replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r')
|
22 |
|
23 |
+
html_code = f"""
|
24 |
<script>
|
25 |
+
function copyText{button_id}() {{
|
26 |
+
const text = "{escaped_text}";
|
27 |
+
navigator.clipboard.writeText(text).then(function() {{
|
28 |
console.log('Text copied to clipboard');
|
29 |
+
document.getElementById('copy-button-{button_id}').innerHTML = 'Copied!';
|
30 |
+
setTimeout(function() {{
|
31 |
+
document.getElementById('copy-button-{button_id}').innerHTML = 'Copy';
|
32 |
+
}}, 2000);
|
33 |
+
}})
|
34 |
+
.catch(function(err) {{
|
35 |
console.error('Failed to copy text: ', err);
|
36 |
+
}});
|
37 |
+
}}
|
38 |
</script>
|
39 |
+
<button id="copy-button-{button_id}" onclick="copyText{button_id}()"
|
40 |
style="background-color: #4CAF50; color: white; border: none;
|
41 |
padding: 5px 10px; text-align: center; text-decoration: none;
|
42 |
display: inline-block; font-size: 14px; margin: 4px 2px;
|
|
|
54 |
col1, col2 = st.columns(2)
|
55 |
|
56 |
with col1:
|
57 |
+
md_input = st.text_area(
|
58 |
+
"Markdown Input",
|
59 |
+
height=300,
|
60 |
+
placeholder="Paste your Markdown here..."
|
61 |
+
)
|
62 |
|
63 |
# Convert button
|
64 |
if st.button("Convert"):
|
|
|
68 |
# Display results
|
69 |
with col2:
|
70 |
if 'converted_text' in st.session_state:
|
71 |
+
st.text_area(
|
72 |
+
"",
|
73 |
+
value=st.session_state.converted_text,
|
74 |
+
height=300,
|
75 |
+
key="output_area"
|
76 |
+
)
|
77 |
|
78 |
# Add copy button
|
79 |
if st.session_state.converted_text:
|
80 |
copy_button(st.session_state.converted_text, "output")
|
81 |
|
82 |
+
# Preview section with proper copy functionality
|
83 |
with st.expander("Preview Original Markdown"):
|
84 |
if md_input:
|
85 |
st.markdown(md_input, unsafe_allow_html=True)
|
86 |
+
# Convert to plain text for the copy button
|
87 |
+
preview_plain_text = md_to_text(md_input)
|
88 |
+
copy_button(preview_plain_text, "preview")
|
89 |
else:
|
90 |
st.write("No Markdown to preview")
|
91 |
|
|
|
95 |
1. Paste your Markdown in the left panel
|
96 |
2. Click 'Convert'
|
97 |
3. Use the 'Copy' button in the right panel
|
98 |
+
4. Toggle the preview to see original formatting
|
99 |
+
5. The preview's copy button copies the plain text version
|
100 |
""")
|
101 |
|
102 |
# Apply light theme using CSS
|