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{
     ...