broadfield-dev commited on
Commit
efb00f7
·
verified ·
1 Parent(s): 7ab3d84

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -6
app.py CHANGED
@@ -103,7 +103,6 @@ def build_full_html(markdown_text, styles, include_fontawesome):
103
  {wrapper_id} th {{ background-color: #f2f2f2; }}
104
  {wrapper_id} img {{ max-width: 100%; height: auto; }}
105
  {wrapper_id} pre {{ padding: {styles.get('code_padding', '15')}px; border-radius: 5px; white-space: pre-wrap; word-wrap: break-word; }}
106
-
107
  {wrapper_id} h1, {wrapper_id} h2, {wrapper_id} h3 {{ border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 1.5em; }}
108
  {wrapper_id} :not(pre) > code {{ font-family: 'Courier New', monospace; background-color: #eef; padding: .2em .4em; border-radius: 3px; }}
109
  {pygments_css} {styles.get('custom_css', '')}
@@ -123,7 +122,7 @@ def build_full_html(markdown_text, styles, include_fontawesome):
123
 
124
  return full_html
125
 
126
- # --- API ENDPOINT for Conversion (Unchanged) ---
127
  @app.route('/convert', methods=['POST'])
128
  def convert_endpoint():
129
  data = request.json
@@ -133,15 +132,18 @@ def convert_endpoint():
133
  styles=data.get('styles', {}),
134
  include_fontawesome=data.get('include_fontawesome', False)
135
  )
 
 
 
136
  if data.get('download', False):
137
  download_type = data.get('download_type', 'png')
138
  if download_type == 'html':
139
  return send_file(BytesIO(full_html.encode("utf-8")), as_attachment=True, download_name="output.html", mimetype="text/html")
140
  else:
141
- png_bytes = imgkit.from_string(full_html, False, options={"quiet": "", 'encoding': "UTF-8"})
142
  return send_file(BytesIO(png_bytes), as_attachment=True, download_name="output.png", mimetype="image/png")
143
  else:
144
- png_bytes = imgkit.from_string(full_html, False, options={"quiet": "", 'encoding': "UTF-8"})
145
  png_base64 = base64.b64encode(png_bytes).decode('utf-8')
146
  return jsonify({'preview_html': full_html, 'preview_png_base64': png_base64})
147
  except Exception as e:
@@ -209,7 +211,6 @@ def index():
209
  </div>
210
  <div id="png-preview-container" class="preview-container"></div>
211
  </div>
212
-
213
  <script>
214
  // --- All JavaScript is unchanged from the previous correct version ---
215
  // It correctly gathers style info without modifying the parent page.
@@ -220,7 +221,6 @@ def index():
220
  previewSection = document.getElementById('preview-section'), htmlPreviewContainer = document.getElementById('html-preview-container'),
221
  pngPreviewContainer = document.getElementById('png-preview-container'), errorBox = document.getElementById('error-box'),
222
  infoBox = document.getElementById('info-box');
223
-
224
  function toggleAllComponents(checked) { componentsContainer.querySelectorAll('.component-checkbox').forEach(cb => cb.checked = checked); }
225
  function displayError(message) { errorBox.textContent = message; errorBox.style.display = 'block'; previewSection.style.display = 'none'; }
226
  function buildPayload() {
 
103
  {wrapper_id} th {{ background-color: #f2f2f2; }}
104
  {wrapper_id} img {{ max-width: 100%; height: auto; }}
105
  {wrapper_id} pre {{ padding: {styles.get('code_padding', '15')}px; border-radius: 5px; white-space: pre-wrap; word-wrap: break-word; }}
 
106
  {wrapper_id} h1, {wrapper_id} h2, {wrapper_id} h3 {{ border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 1.5em; }}
107
  {wrapper_id} :not(pre) > code {{ font-family: 'Courier New', monospace; background-color: #eef; padding: .2em .4em; border-radius: 3px; }}
108
  {pygments_css} {styles.get('custom_css', '')}
 
122
 
123
  return full_html
124
 
125
+ # --- API ENDPOINT for Conversion (CHANGED) ---
126
  @app.route('/convert', methods=['POST'])
127
  def convert_endpoint():
128
  data = request.json
 
132
  styles=data.get('styles', {}),
133
  include_fontawesome=data.get('include_fontawesome', False)
134
  )
135
+ # Define options here to avoid repetition and add the required fix
136
+ options = {"quiet": "", 'encoding': "UTF-8", "--no-cache": ""}
137
+
138
  if data.get('download', False):
139
  download_type = data.get('download_type', 'png')
140
  if download_type == 'html':
141
  return send_file(BytesIO(full_html.encode("utf-8")), as_attachment=True, download_name="output.html", mimetype="text/html")
142
  else:
143
+ png_bytes = imgkit.from_string(full_html, False, options=options)
144
  return send_file(BytesIO(png_bytes), as_attachment=True, download_name="output.png", mimetype="image/png")
145
  else:
146
+ png_bytes = imgkit.from_string(full_html, False, options=options)
147
  png_base64 = base64.b64encode(png_bytes).decode('utf-8')
148
  return jsonify({'preview_html': full_html, 'preview_png_base64': png_base64})
149
  except Exception as e:
 
211
  </div>
212
  <div id="png-preview-container" class="preview-container"></div>
213
  </div>
 
214
  <script>
215
  // --- All JavaScript is unchanged from the previous correct version ---
216
  // It correctly gathers style info without modifying the parent page.
 
221
  previewSection = document.getElementById('preview-section'), htmlPreviewContainer = document.getElementById('html-preview-container'),
222
  pngPreviewContainer = document.getElementById('png-preview-container'), errorBox = document.getElementById('error-box'),
223
  infoBox = document.getElementById('info-box');
 
224
  function toggleAllComponents(checked) { componentsContainer.querySelectorAll('.component-checkbox').forEach(cb => cb.checked = checked); }
225
  function displayError(message) { errorBox.textContent = message; errorBox.style.display = 'block'; previewSection.style.display = 'none'; }
226
  function buildPayload() {