JSFiddle - React, Tailwind, and code Playground
by Wolfgang Fahl
HTML
<html>
<head>
<title>Javascript eval</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type='text/javascript'>
// legacy global variable
var websocket_id = '';
function evaluate_javascript(code) {
msg = {
'data': code,
'send': true
}
let justpy_core = new JustpyCore(
this,
page_id="1"
);
justpy_core.handleRunJavascriptEvent(msg)
}
// send to server surrogate for debugging
function send_to_server(e,event_type,debug_flag) {
const json_msg = JSON.stringify({'type': event_type, 'event_data': e});
document.getElementById("#result").innerText = json_msg;
}
class JustpyCore {
constructor(window,page_id) {
this.window = window;
this.page_id= page_id;
this.page_ready=true;
this.result_ready=true;
this.debug = true;
}
/**
* handle Error
*/
handleError(error) {
if (this.debug) {
console.log(error);
}
this.send_result("Error in javascript")
}
/**
* send javascript eval result back to server
* @param js_result - the javascript result to send
*/
send_result(js_result) {
let e = {
'event_type': 'result_ready',
'visibility': document.visibilityState,
'page_id': this.page_id,
'websocket_id': websocket_id,
'request_id': msg.request_id,
'result': js_result //JSON.stringify(js_result)
};
if (this.result_ready) {
if (msg.send) {
send_to_server(e, 'page_event', false);
}
}
}
/**
* Handles the run_javascript event
* @param msg
*/
handleRunJavascriptEvent(msg) {
/**
* callback to send javascript result back to server
*/
const jsPromise = new Promise((resolve, reject) => {
try{
...