aboutsummaryrefslogtreecommitdiff
path: root/demos/python.html
diff options
context:
space:
mode:
Diffstat (limited to 'demos/python.html')
-rw-r--r--demos/python.html133
1 files changed, 0 insertions, 133 deletions
diff --git a/demos/python.html b/demos/python.html
deleted file mode 100644
index f175f081..00000000
--- a/demos/python.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<html>
-<head>
- <title>
- Python on the Web
- </title>
- <link id="bespin_base" href="skywriter/"/>
- <script src="skywriter/BespinEmbedded.js"></script>
- <style type="text/css">
- .bespin {
- width: 80%;
- height: 30%;
- }
- </style>
-
- <!--
- The attached python.js (or python.cc.js) is CPython 2.7.1, licensed under
- the PSF: http://docs.python.org/license.html
-
- Additional steps to create this demo:
-
- * Compile with _PyRun_SimpleStringFlags exported in EXPORTED_FUNCTIONS
- * Find the actual name of that function (closure changes it, see .vars), and use it as per the XXX comment below.
- -->
-
- <script>
- var Module = {
- noInitialRun: true
- };
- </script>
- <script src="python.cc.js"></script>
- <script>
- var orig = Module._PyRun_SimpleStringFlags;
- var RAN_ALREADY;
- QDb = function() { // XXX Have the actual name here! See comment above.
- if(!RAN_ALREADY) {
- RAN_ALREADY = true;
- throw "halting, since this is the first run";
- }
- orig.apply(null, arguments);
- }
-
- // print function which the Python engine will call
- var lines = [], printed = false;
-
- function print(text, force) {
- //force = true; // XXX - for debugging
- lines.push(text);
- printed = true;
-
- if (force) {
- var element = document.getElementById('output');
- element.value = text;
- }
- }
-
- function execute(text) {
- lines = [];
- printed = false;
-
- var element = document.getElementById('output');
- if (!element) return; // perhaps during startup
-
- var ptr = Module.Pointer_make(Module.intArrayFromString(text), 0, 2, 'i8'); // leak!
- try {
- Module._PyRun_SimpleStringFlags(ptr, 0);
- } catch(e) {
- if (e === 'halting, since this is the first run') {
- return;
- }
- element.value = 'JS crash:\n\n' + e + '\n\nPlease let us know about this problem!\n' + element.value;
- return;
- }
-
- if (printed) {
- element.value = element.value + lines.join('\n') + '\n';
- // scroll down
- var len = element.textLength;
- element.setSelectionRange(len-1, len);
- }
- }
-
- var editor;
-
- function doRun() {
- args = ['-S', '-c', 'print 5'];
- try {
- Module.run(args);
- } catch (e) {
- if (e !== 'halting, since this is the first run') {
- throw e;
- }
- }
- setTimeout(function() {
- if (!bespin.useBespin) setTimeout(arguments.callee, 10);
- bespin.useBespin(document.getElementById('the_input'), { "stealFocus":true, "syntax": "python" }).then(function(env) {
- editor = env.editor;
- });
- }, 10);
- }
-
- </script>
-</head>
-<body onload="doRun(); document.getElementById('the_input').focus()">
- <h1>Python on the Web</h1>
- <p>
- This is CPython, the standard <a href="http://www.python.org">Python</a> implementation, compiled from C to
- JavaScript using <a href="http://emscripten.org">Emscripten</a>,
- running in your browser (without any plugins). It is both a tech demo and also a usable tool, for example, to
- assist in teaching people Python by just visiting a website (instead of installing Python locally).
- </p>
- <p>
- Notes:
- <ul>
- <li>Most core language stuff should work, except for importing non-static modules (in other words, <code>import sys</code> will
- work, but other modules won't).</li>
- <li>Please report bugs if you find them!</li>
- <li>The editor is <a href="https://mozillalabs.com/skywriter/">Skywriter</a>.
- </ul>
- </p>
- <hr>
- <!-- Call Python's execution function -->
- <form onsubmit="execute(editor.value); return false">
- <b>Enter some Python</b>:
- <input type="submit" value="execute">
- <div id="the_input">import sys
-print 'Hello %s, here are some numbers:' % raw_input('What is your name?'), [2*x for x in range(5)][:4]
-print 'This is Python {} on {}'.format(sys.version, sys.platform)
- </div>
- </form>
- <hr>
- <textarea id="output" style="font-family: monospace; width: 80%" rows="8" readonly></textarea>
-</body>
-</html>