forked from leeyoshinari/WinHub
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpython.html
More file actions
107 lines (104 loc) · 4.12 KB
/
python.html
File metadata and controls
107 lines (104 loc) · 4.12 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!doctype html>
<html lang="en">
<head>
<title>Python Editor</title>
<meta charset="utf-8">
<link rel="stylesheet" href="python/terminal.css" />
<link rel="stylesheet" href="python/desktop.css" />
<script src="../js/jq.min.js"></script>
<script src="python/pyodide.js"></script>
<script src="python/pyodide.asm.js"></script>
<script src="python/ace.min.js"></script>
<script src="python/ext-language_tools.min.js"></script>
<script src="../js/md5.min.js"></script>
</head>
<body style="margin: 0px;">
<div class="content" id="win-python-editor">
<div id="win-python-ace-editor"></div>
<div class="output" id="output"></div>
</div>
</body>
<script type="text/javascript">
let params = window.location.href.split('&');
let servers = params[0].split('=')[1];
let file_id = params[1].split('=')[1];
let is_share = file_id.length > 10;
let old_md5 = '';
let editor = null;
let get_url = servers + '/content/get/' + file_id;
if (!is_share) {
get_url = servers + '/share/get/' + file_id;
}
$.ajax({
type: "GET",
async: false,
url: get_url,
success: function (data) {
if (data['code'] === 0) {
if (is_share) {
window.parent.document.querySelectorAll('.window.pythonEditor>.titbar>span>.title')[0].innerText = data['msg'];
}
document.title = data['msg'];
(async function () {
pyodide = await loadPyodide();
pyodide.runPython(`
import sys
import io
`);
})();
ace.require("ace/ext/language_tools");
editor = ace.edit("win-python-ace-editor");
editor.session.setMode("ace/mode/python");
editor.setTheme("ace/theme/vibrant_ink");
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
showPrintMargin: false,
enableLiveAutocompletion: true
});
editor.setValue(data['data']);
old_md5 = md5(data['data']);
}
}
});
function run() {
let result;
let output = document.getElementById("output");
try {
if (pyodide) {
let code = editor.getValue();
pyodide.runPython('sys.stdout = io.StringIO()');
pyodide.runPython(code);
result = pyodide.runPython('sys.stdout.getvalue()');
}
}
catch (e) {
result = e.message;
}
output.innerHTML = result;
}
if (is_share) {
let python_interval = window.setInterval(() => {
let content = editor.getValue();
let new_md5 = md5(content);
if (new_md5 !== old_md5) {
window.parent.document.querySelectorAll('.window.pythonEditor>.titbar>span>.save-status')[0].innerText = "正在保存...";
window.parent.save_text_file(file_id, content);
old_md5 = new_md5;
window.parent.document.querySelectorAll('.window.pythonEditor>.titbar>span>.save-status')[0].innerText = window.parent.get_current_time() + " 已保存";
}
}, 10000);
function close_python_editor(file_id) {
clearInterval(python_interval);
window.parent.document.querySelectorAll('.window.pythonEditor>.titbar>span>.save-status')[0].innerText = "正在保存...";
let content = editor.getValue();
let new_md5 = md5(content);
if (new_md5 !== old_md5) {
window.parent.save_text_file(file_id, content);
}
window.parent.document.querySelectorAll('.window.pythonEditor>.titbar>span>.save-status')[0].innerText = "";
window.parent.document.getElementById("iframe_pythonEditor").src = 'about:blank';
}
}
</script>
</html>