File size: 2,744 Bytes
99415de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ketcher Embed</title>
</head>
<body>
  <iframe id="ifKetcher" src="/static/index.html" width="800" height="600"></iframe>
  <script>
    setTimeout(() => {
      var iframe = document.getElementById("ifKetcher");
      // 访问iframe的window对象
      var ketcherWindow = iframe.contentWindow;
      var ketcher = ketcherWindow.ketcher;
       ketcher.setMolecule('c1ccccc1');
        console.log('set mol!');
        // 监听 Ketcher 的 'change' 事件,当分子结构改变时触发
        ketcher.on('change', () => {
            ketcher.getSmiles().then(smiles => {
                console.log("生成的新 SMILES:", smiles);
                sendDataToBackend(smiles);
            }).catch(err => {
                console.error('获取 SMILES 时出错:', err);
            });
        });

        // 监听 Ketcher 的 'load' 事件,当分子结构加载时触发
        ketcher.on('load', () => {
            ketcher.getSmiles().then(smiles => {
                console.log("加载的 SMILES:", smiles);
                sendDataToBackend(smiles);
            }).catch(err => {
                console.error('获取 SMILES 时出错:', err);
            });
        });
           /**
             * 发送 SMILES 数据到 Gradio 后端的函数
             * @param {string} smiles - 分子的 SMILES 字符串
             */
            function sendDataToBackend(smiles) {
                gradioApp().then((app) => {
                    app.call('process_smiles', smiles).then((response) => {
                        console.log("Backend response:", response);
                        // 可以在这里处理后端返回的响应,例如更新某个组件
                    }).catch(error => {
                        console.error("调用后端函数时出错:", error);
                    });
                }).catch(error => {
                    console.error("获取 Gradio 应用时出错:", error);
                });
            }
           /**
             * 从 Gradio 前端加载 SMILES 到 Ketcher
             * @param {string} smiles - 分子的 SMILES 字符串
             */
        function loadSmiles(smiles){
            if (ketcher){
                console.log("加载 SMILES 到 Ketcher:", smiles);
                ketcher.setMolecule(smiles).then(() => {
                    console.log("SMILES 加载成功");
                }).catch(err => {
                    console.error("加载 SMILES 时出错:", err);
                });
            }
        }

        window.loadSmiles = loadSmiles;
    }, 2e3)
  </script>
</body>
</html>