public static JComponent createHtmlPanel()

in src/org/jetbrains/plugins/ipnb/IpnbJfxUtils.java [74:126]


  public static JComponent createHtmlPanel(@NotNull final String source, int width) {
    final JFXPanel javafxPanel = new JFXPanel() {
      @Override
      protected void processMouseWheelEvent(MouseWheelEvent e) {
        final Container parent = getParent();
        final MouseEvent parentEvent = SwingUtilities.convertMouseEvent(this, e, parent);
        parent.dispatchEvent(parentEvent);
      }
    };
    ApplicationManager.getApplication().invokeLater(() -> runFX(() -> Platform.runLater(() -> {
      final WebView webView = new WebView();
      webView.setContextMenuEnabled(false);
      webView.setOnDragDetected(event -> {
      });
      final WebEngine engine = webView.getEngine();
      initHyperlinkListener(engine);

      final boolean hasMath = source.contains("$");
      if (hasMath) {
        engine.setOnStatusChanged(event -> {
          final String data = event.getData();
          if (data != null && data.isEmpty()) {
            adjustHeight(webView, javafxPanel, source);
          }
        });
      }
      else {
        engine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
          if (newValue == Worker.State.SUCCEEDED) {
            adjustHeight(webView, javafxPanel, source);
          }
        });
      }
      final String prefix;
      if (hasMath) {
        prefix = String.format(ourMathJaxPrefix, width - 500, EditorColorsManager.getInstance().getGlobalScheme().getEditorFontSize(),
                               PythonHelpersLocator.getHelperFile("/MathJax/MathJax.js").toURI());
      }
      else {
        prefix = String.format(ourPrefix, width - 500);
      }
      final String content = prefix + convertToHtml(source) + ourPostfix;
      engine.loadContent(content);

      final Scene scene = new Scene(webView, 0, 0);

      javafxPanel.setScene(scene);
      updateLaf(LafManager.getInstance().getCurrentLookAndFeel() instanceof DarculaLookAndFeelInfo,
                engine, javafxPanel);
    })));

    return javafxPanel;
  }