diff --git a/docker/web/app.py b/docker/web/app.py index 32fc9420..9637ea11 100644 --- a/docker/web/app.py +++ b/docker/web/app.py @@ -3,51 +3,46 @@ from flask import Flask, render_template app = Flask(__name__) -@app.route('/') -def welcome(): - """Top welcome page.""" - template = 'welcome.html' - - values = { - "aa": "bjc" - } - - return render_template(template, **values) - - -@app.route('/builder', methods=['POST', 'GET']) +@app.route('/', methods=['POST', 'GET']) def builder(): - """Builder page with python input.""" + """One page app.""" import os import subprocess from flask import request - template = 'builder.html' + template = 'app.html' values = {} diag_folder = "static/diagrams/" - code = request.form.get('code') - if code: + diagrams_data = request.form.get('diagrams_data') + if diagrams_data: # clean the directory _, _, filenames = next(os.walk(diag_folder)) for one_file in filenames: os.remove('%s%s' % (diag_folder, one_file)) - # write the code in a file and execute + # write the diagrams_data in a file and execute with open("%stemp_code.py" % diag_folder, "w") as f: - f.write(code) + f.write(diagrams_data) result = subprocess.run(["python3", "temp_code.py"], cwd=diag_folder, capture_output=True) - # TODO get the result if there's error to display on the template - print('stdout: ', result.stdout) - print('stderr: ', result.stderr) # delete the temp file os.remove("%stemp_code.py" % diag_folder) - # get the pic to display - _, _, filenames = next(os.walk(diag_folder)) - pic_name = filenames[0] - values.update({ - "code": code, - "pic_name": pic_name, - }) + # if there's error display them on the template + if result.stderr: + error_msg = result.stderr.decode("utf-8") + # clean up the error message + error_msg = error_msg.replace('File "temp_code.py", ', '') + values.update({ + "diagrams_data": diagrams_data, + "error": error_msg + }) + else: + # get the pic to display + _, _, filenames = next(os.walk(diag_folder)) + pic_name = filenames[0] + values.update({ + "diagrams_data": diagrams_data, + "pic_name": pic_name, + }) return render_template(template, **values) diff --git a/docker/web/static/diagrams.css b/docker/web/static/diagrams.css new file mode 100644 index 00000000..84fa4421 --- /dev/null +++ b/docker/web/static/diagrams.css @@ -0,0 +1,6 @@ +img { + margin-bottom: 0px; +} +.icon { + width: 100px; +} diff --git a/docker/web/static/diagrams.js b/docker/web/static/diagrams.js new file mode 100644 index 00000000..eaeb3637 --- /dev/null +++ b/docker/web/static/diagrams.js @@ -0,0 +1,30 @@ +jQuery(document).ready(function () { + + var example_1_btn = jQuery('#example_1_btn'); + var example_2_btn = jQuery('#example_2_btn'); + var example_3_btn = jQuery('#example_3_btn'); + var more_example_btn = jQuery('#more_example_btn'); + + var diagrams_form = jQuery('#diagrams_form'); + + var diagrams_data_textarea = jQuery('#diagrams_data'); + + function InsertDiagramsText(text) { + diagrams_data_textarea.val(text); + diagrams_form.submit(); + } + + example_1_btn.click(function(){ + InsertDiagramsText(jQuery("#example_1_text").html().trim()); + }); + example_2_btn.click(function(){ + InsertDiagramsText(jQuery("#example_2_text").html().trim()); + }); + example_3_btn.click(function(){ + InsertDiagramsText(jQuery("#example_3_text").html().trim()); + }); + more_example_btn.click(function(){ + window.open("https://diagrams.mingrammer.com/docs/getting-started/examples", "_blank"); + }); + +}); diff --git a/docker/web/static/diagrams/grouped_workersぽぽ.png b/docker/web/static/diagrams/grouped_workersぽぽ.png deleted file mode 100644 index 86492dbf..00000000 Binary files a/docker/web/static/diagrams/grouped_workersぽぽ.png and /dev/null differ diff --git a/docker/web/templates/app.html b/docker/web/templates/app.html new file mode 100644 index 00000000..4a9dfde8 --- /dev/null +++ b/docker/web/templates/app.html @@ -0,0 +1,117 @@ + + +
+ + +{{error}}
+ {% else %}
+ Made with ♥ and