@app.route("/")
def get_homepage():
- response = flask.Response(flask.render_template("index.html"))
+ code_body = """#load "core/std"
+
+use package core
+
+main :: (args: [] cstr) {
+ println("Hello, Onyx!");
+}"""
+
+ response = flask.Response(flask.render_template("index.html", code_body=code_body))
response.headers['Cross-Origin-Embedder-Policy'] = "require-corp"
response.headers['Cross-Origin-Opener-Policy'] = "same-origin"
return response
else:
return compile_process.stdout, 500
+@app.route("/permalink", methods=['POST'])
+def create_permalink():
+ import tempfile, os
+
+ code = request.json['code']
+ code_file_desc, code_file_name = tempfile.mkstemp(prefix="", dir="./permalinked")
+ with os.fdopen(code_file_desc, "w+b") as code_file:
+ code_file.write(code.encode('utf-8'))
+
+ _, link_id = os.path.split(code_file_name)
+
+ response = {}
+ response["id"] = link_id
+ response["url"] = app.config["DOMAIN_NAME"] + "/" + link_id
+ return response, 200
+
+@app.route("/<string:link>")
+def get_permalinked(link):
+ import os
+ path = os.path.join("./permalinked", link)
+
+ code_body = ""
+ if os.path.isfile(path):
+ with open(path) as f:
+ code_body = f.read()
+
+ response = flask.Response(flask.render_template("index.html", code_body=code_body))
+ response.headers['Cross-Origin-Embedder-Policy'] = "require-corp"
+ response.headers['Cross-Origin-Opener-Policy'] = "same-origin"
+ return response
+
});
}
+async function request_permalink() {
+ let editor = ace.edit('code-editor');
+ let code = editor.getValue();
+
+ let response = await fetch(window.ROOT_ENDPOINT + "/permalink", {
+ method: 'POST',
+ cache: 'no-cache',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ code }),
+ });
+
+ if (response.status == 200) {
+ let res = await response.json();
+ console.log(res);
+ $("#permalink").html(`Permalink created: <a target="_blank" href="${res.url}">${res.url}</a>`);
+ $("#permalink + button").prop("disabled", "true");
+ }
+}
+
window.onload = () => {
let editor = ace.edit('code-editor');
</div>
<div class="left-half">
- <pre id="code-editor" ondragover="handle_dragover(event);" ondrop="handle_drop(event);">
-#load "core/std"
-
-use package core
-
-main :: (args: [] cstr) {
- println("Hello, Onyx!");
-}</pre>
+ <pre id="code-editor" ondragover="handle_dragover(event);" ondrop="handle_drop(event);">{{ code_body }}</pre>
</div>
<div id="horizontal-divider" class="divider"></div>
</div>
<div id="save-modal" class="modal">
- <h2>Save</h2>
+ <h2>Save Online</h2>
+ <div>
+ <span style="margin: 8px 0;" id="permalink">Permalink not created.</span>
+ <button style="float: right; padding: 0 8px;" onclick="request_permalink()">Create permalink</button>
+ </div>
+
+ <br/>
+ <h2>Save Locally</h2>
<input type="text" id="save-filename" name="save-filename" placeholder="Name" />
<br/>
<button onclick="save_to_local_storage()">Save</button>