mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-19 18:27:29 -05:00
[next] Porting most basic examples (#1631)
This commit is contained in:
committed by
GitHub
parent
8a1db288fc
commit
75a57a49f5
@@ -8,7 +8,15 @@
|
|||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
<style>
|
||||||
|
py-script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar" style="background-color: #000000">
|
<nav class="navbar" style="background-color: #000000">
|
||||||
@@ -33,6 +41,7 @@
|
|||||||
]
|
]
|
||||||
</py-config>
|
</py-config>
|
||||||
<py-script>
|
<py-script>
|
||||||
|
from pyscript import display
|
||||||
import altair as alt
|
import altair as alt
|
||||||
from vega_datasets import data
|
from vega_datasets import data
|
||||||
|
|
||||||
|
|||||||
@@ -32,8 +32,16 @@
|
|||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
|
<style>
|
||||||
|
py-script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar" style="background-color: #000000">
|
<nav class="navbar" style="background-color: #000000">
|
||||||
|
|||||||
@@ -7,8 +7,16 @@
|
|||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
|
<style>
|
||||||
|
py-script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar" style="background-color: #000000">
|
<nav class="navbar" style="background-color: #000000">
|
||||||
@@ -34,6 +42,7 @@
|
|||||||
</py-config>
|
</py-config>
|
||||||
|
|
||||||
<py-script>
|
<py-script>
|
||||||
|
from pyscript import display
|
||||||
import folium
|
import folium
|
||||||
import json
|
import json
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|||||||
@@ -12,7 +12,15 @@
|
|||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
<style>
|
||||||
|
py-script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -36,6 +44,7 @@
|
|||||||
Hello world! <br />
|
Hello world! <br />
|
||||||
This is the current date and time, as computed by Python:
|
This is the current date and time, as computed by Python:
|
||||||
<py-script>
|
<py-script>
|
||||||
|
from pyscript import display
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
display(now.strftime("%m/%d/%Y, %H:%M:%S"))
|
display(now.strftime("%m/%d/%Y, %H:%M:%S"))
|
||||||
|
|||||||
@@ -7,7 +7,10 @@
|
|||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -28,7 +28,8 @@
|
|||||||
<script defer src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js"></script>
|
<script defer src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js"></script>
|
||||||
<script defer src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js"></script>
|
<script defer src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js"></script>
|
||||||
<script defer src="https://cdn.jsdelivr.net/npm/@holoviz/panel@0.14.1/dist/panel.min.js"></script>
|
<script defer src="https://cdn.jsdelivr.net/npm/@holoviz/panel@0.14.1/dist/panel.min.js"></script>
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
<style>py-script{display:none}</style>
|
||||||
|
<script type="module" src="https://esm.sh/@pyscript/core@latest/core.js"></script>
|
||||||
<py-config>
|
<py-config>
|
||||||
packages = [
|
packages = [
|
||||||
"https://cdn.holoviz.org/panel/0.14.3/dist/wheels/bokeh-2.4.3-py3-none-any.whl",
|
"https://cdn.holoviz.org/panel/0.14.3/dist/wheels/bokeh-2.4.3-py3-none-any.whl",
|
||||||
|
|||||||
@@ -12,8 +12,16 @@
|
|||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
|
<style>
|
||||||
|
py-script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -27,10 +35,10 @@
|
|||||||
</nav>
|
</nav>
|
||||||
<section class="pyscript">
|
<section class="pyscript">
|
||||||
<div class="font-mono">
|
<div class="font-mono">
|
||||||
start time: <label id="outputDiv"></label>
|
start time: <label id="output1"></label>
|
||||||
</div>
|
</div>
|
||||||
<div id="outputDiv2" class="font-mono"></div>
|
<div id="output2" class="font-mono"></div>
|
||||||
<div id="outputDiv3" class="font-mono"></div>
|
<div id="output3" class="font-mono"></div>
|
||||||
|
|
||||||
<py-tutor modules="utils.py">
|
<py-tutor modules="utils.py">
|
||||||
<py-config>
|
<py-config>
|
||||||
@@ -40,12 +48,14 @@
|
|||||||
[[fetch]]
|
[[fetch]]
|
||||||
files = ["./utils.py"]
|
files = ["./utils.py"]
|
||||||
</py-config>
|
</py-config>
|
||||||
<py-script>
|
<script type="py">
|
||||||
import utils
|
import utils
|
||||||
display(utils.now())
|
from pyscript import display
|
||||||
</py-script>
|
display(utils.now(), target="output1")
|
||||||
|
</script>
|
||||||
|
|
||||||
<py-script>
|
<py-script>
|
||||||
|
from pyscript import display
|
||||||
from utils import now
|
from utils import now
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
@@ -53,15 +63,14 @@
|
|||||||
while True:
|
while True:
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
output = now()
|
output = now()
|
||||||
Element("outputDiv2").write(output)
|
display(output, target="output2")
|
||||||
|
|
||||||
out3 = Element("outputDiv3")
|
|
||||||
if output[-1] in ["0", "4", "8"]:
|
if output[-1] in ["0", "4", "8"]:
|
||||||
out3.write("It's espresso time!")
|
display("It's espresso time!", target="output3")
|
||||||
else:
|
else:
|
||||||
out3.clear()
|
display("", target="output3")
|
||||||
|
|
||||||
pyscript.run_until_complete(foo())
|
foo()
|
||||||
</py-script>
|
</py-script>
|
||||||
</py-tutor>
|
</py-tutor>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -12,8 +12,11 @@
|
|||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
|
||||||
<link rel="stylesheet" href="./assets/css/examples.css" />
|
<link rel="stylesheet" href="./assets/css/examples.css" />
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -26,14 +29,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
<section class="pyscript">
|
<section class="pyscript">
|
||||||
<py-tutor modules="./utils.py;./todo.py">
|
<py-tutor modules="./todo.py">
|
||||||
<py-config>
|
<py-config>
|
||||||
plugins = [
|
plugins = [
|
||||||
"https://pyscript.net/latest/plugins/python/py_tutor.py",
|
"https://pyscript.net/latest/plugins/python/py_tutor.py",
|
||||||
"./py_list.py"
|
"./py_list.py"
|
||||||
]
|
]
|
||||||
[[fetch]]
|
[[fetch]]
|
||||||
files = ["./utils.py", "./todo.py"]
|
files = ["./todo.py"]
|
||||||
</py-config>
|
</py-config>
|
||||||
|
|
||||||
<py-script src="./todo.py"></py-script>
|
<py-script src="./todo.py"></py-script>
|
||||||
@@ -57,7 +60,7 @@
|
|||||||
id="new-task-btn"
|
id="new-task-btn"
|
||||||
class="py-button"
|
class="py-button"
|
||||||
type="submit"
|
type="submit"
|
||||||
py-click="add_task()"
|
py-click="add_task"
|
||||||
>
|
>
|
||||||
Add task
|
Add task
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -1,25 +1,30 @@
|
|||||||
from datetime import datetime as dt
|
from datetime import datetime as dt
|
||||||
|
|
||||||
from utils import add_class, remove_class
|
from pyscript import document
|
||||||
|
|
||||||
tasks = []
|
tasks = []
|
||||||
|
|
||||||
|
|
||||||
|
def q(selector, root=document):
|
||||||
|
return root.querySelector(selector)
|
||||||
|
|
||||||
|
|
||||||
# define the task template that will be use to render new templates to the page
|
# define the task template that will be use to render new templates to the page
|
||||||
task_template = Element("task-template").select(".task", from_content=True)
|
task_template = q("#task-template").content.querySelector(".task")
|
||||||
task_list = Element("list-tasks-container")
|
task_list = q("#list-tasks-container")
|
||||||
new_task_content = Element("new-task-content")
|
new_task_content = q("#new-task-content")
|
||||||
|
|
||||||
|
|
||||||
def add_task(*args, **kws):
|
def add_task(e):
|
||||||
# ignore empty task
|
# ignore empty task
|
||||||
if not new_task_content.element.value:
|
if not new_task_content.value:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# create task
|
# create task
|
||||||
task_id = f"task-{len(tasks)}"
|
task_id = f"task-{len(tasks)}"
|
||||||
task = {
|
task = {
|
||||||
"id": task_id,
|
"id": task_id,
|
||||||
"content": new_task_content.element.value,
|
"content": new_task_content.value,
|
||||||
"done": False,
|
"done": False,
|
||||||
"created_at": dt.now(),
|
"created_at": dt.now(),
|
||||||
}
|
}
|
||||||
@@ -28,26 +33,24 @@ def add_task(*args, **kws):
|
|||||||
|
|
||||||
# add the task element to the page as new node in the list by cloning from a
|
# add the task element to the page as new node in the list by cloning from a
|
||||||
# template
|
# template
|
||||||
task_html = task_template.clone(task_id)
|
task_html = task_template.cloneNode(True)
|
||||||
task_html_content = task_html.select("p")
|
task_html.id = task_id
|
||||||
task_html_content.element.innerText = task["content"]
|
task_html_check = q("input", root=task_html)
|
||||||
task_html_check = task_html.select("input")
|
task_html_content = q("p", root=task_html)
|
||||||
task_list.element.appendChild(task_html.element)
|
task_html_content.textContent = task["content"]
|
||||||
|
task_list.append(task_html)
|
||||||
|
|
||||||
def check_task(evt=None):
|
def check_task(evt=None):
|
||||||
task["done"] = not task["done"]
|
task["done"] = not task["done"]
|
||||||
if task["done"]:
|
task_html_content.classList.toggle("line-through", task["done"])
|
||||||
add_class(task_html_content, "line-through")
|
|
||||||
else:
|
|
||||||
remove_class(task_html_content, "line-through")
|
|
||||||
|
|
||||||
new_task_content.clear()
|
new_task_content.value = ""
|
||||||
task_html_check.element.onclick = check_task
|
task_html_check.onclick = check_task
|
||||||
|
|
||||||
|
|
||||||
def add_task_event(e):
|
def add_task_event(e):
|
||||||
if e.key == "Enter":
|
if e.key == "Enter":
|
||||||
add_task()
|
add_task(e)
|
||||||
|
|
||||||
|
|
||||||
new_task_content.element.onkeypress = add_task_event
|
new_task_content.onkeypress = add_task_event
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ def now(fmt="%m/%d/%Y, %H:%M:%S"):
|
|||||||
|
|
||||||
|
|
||||||
def remove_class(element, class_name):
|
def remove_class(element, class_name):
|
||||||
element.element.classList.remove(class_name)
|
element.classList.remove(class_name)
|
||||||
|
|
||||||
|
|
||||||
def add_class(element, class_name):
|
def add_class(element, class_name):
|
||||||
element.element.classList.add(class_name)
|
element.classList.add(class_name)
|
||||||
|
|||||||
@@ -21,19 +21,26 @@
|
|||||||
</div>
|
</div>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/0.147.0/three.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/0.147.0/three.min.js"></script>
|
||||||
|
|
||||||
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
|
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://pyscript.net/latest/pyscript.css"
|
href="https://pyscript.net/latest/pyscript.css"
|
||||||
/>
|
/>
|
||||||
|
<style>
|
||||||
|
py-script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script
|
||||||
|
type="module"
|
||||||
|
src="https://esm.sh/@pyscript/core@latest/core.js"
|
||||||
|
></script>
|
||||||
<py-script>
|
<py-script>
|
||||||
from pyodide.ffi import create_proxy, to_js
|
from pyodide.ffi import create_proxy, to_js
|
||||||
from js import window
|
from pyscript import window, document
|
||||||
from js import Math
|
from js import Math
|
||||||
from js import THREE
|
from js import THREE
|
||||||
from js import performance
|
from js import performance
|
||||||
from js import Object
|
from js import Object
|
||||||
from js import document
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
mouse = THREE.Vector2.new();
|
mouse = THREE.Vector2.new();
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
12
pyscript.core/package-lock.json
generated
12
pyscript.core/package-lock.json
generated
@@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "@pyscript/core",
|
"name": "@pyscript/core",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@pyscript/core",
|
"name": "@pyscript/core",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"license": "APACHE-2.0",
|
"license": "APACHE-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ungap/with-resolvers": "^0.1.0",
|
"@ungap/with-resolvers": "^0.1.0",
|
||||||
"basic-devtools": "^0.1.6",
|
"basic-devtools": "^0.1.6",
|
||||||
"polyscript": "^0.1.9"
|
"polyscript": "^0.1.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-node-resolve": "^15.1.0",
|
"@rollup/plugin-node-resolve": "^15.1.0",
|
||||||
@@ -935,9 +935,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/polyscript": {
|
"node_modules/polyscript": {
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"resolved": "https://registry.npmjs.org/polyscript/-/polyscript-0.1.9.tgz",
|
"resolved": "https://registry.npmjs.org/polyscript/-/polyscript-0.1.10.tgz",
|
||||||
"integrity": "sha512-UhBcpN7FAE7MZPg10cQOXpIE9vLG6cYOrQRX37CPps4Rvl8vbUgHkzkB3qsd1DL5ztMykfeSvYPI+AIP7lx4Yw==",
|
"integrity": "sha512-NdO0inJIJyNgM8bYvD9z8aYbs1chQWq3iNtXjj7YrDT84A7IOVELPCFDlXzLU8UngpO/yQm3j4YrEoln89LbsA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ungap/structured-clone": "^1.2.0",
|
"@ungap/structured-clone": "^1.2.0",
|
||||||
"@ungap/with-resolvers": "^0.1.0",
|
"@ungap/with-resolvers": "^0.1.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@pyscript/core",
|
"name": "@pyscript/core",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "PyScript",
|
"description": "PyScript",
|
||||||
"main": "core.js",
|
"main": "core.js",
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ungap/with-resolvers": "^0.1.0",
|
"@ungap/with-resolvers": "^0.1.0",
|
||||||
"basic-devtools": "^0.1.6",
|
"basic-devtools": "^0.1.6",
|
||||||
"polyscript": "^0.1.9"
|
"polyscript": "^0.1.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-node-resolve": "^15.1.0",
|
"@rollup/plugin-node-resolve": "^15.1.0",
|
||||||
|
|||||||
@@ -54,15 +54,12 @@ const after = () => {
|
|||||||
* It either throws an error if the 'src' can't be fetched or it returns a fallback
|
* It either throws an error if the 'src' can't be fetched or it returns a fallback
|
||||||
* content as source.
|
* content as source.
|
||||||
*/
|
*/
|
||||||
const fetchSource = async (tag) => {
|
const fetchSource = async (tag, io) => {
|
||||||
if (tag.hasAttribute("src")) {
|
if (tag.hasAttribute("src")) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(tag.getAttribute("src"));
|
return await fetch(tag.getAttribute("src")).then(getText);
|
||||||
return response.then(getText);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// TODO _createAlertBanner(err) instead ?
|
io.stderr(error);
|
||||||
alert(error.message);
|
|
||||||
throw error;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tag.textContent;
|
return tag.textContent;
|
||||||
@@ -105,8 +102,16 @@ const registerModule = ({ XWorker: $XWorker, interpreter, io }) => {
|
|||||||
? currentElement.target.id
|
? currentElement.target.id
|
||||||
: currentElement.id;
|
: currentElement.id;
|
||||||
|
|
||||||
return (what, target = id, append = true) => {
|
return (...args) => {
|
||||||
pyDisplay.callKwargs(...[].concat(what), { target, append });
|
const last = args.at(-1);
|
||||||
|
let kw = { target: id, append: false };
|
||||||
|
if (
|
||||||
|
typeof last === "object" &&
|
||||||
|
last &&
|
||||||
|
("target" in last || "append" in last)
|
||||||
|
)
|
||||||
|
kw = { ...kw, ...args.pop() };
|
||||||
|
pyDisplay.callKwargs(...args, kw);
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -199,7 +204,9 @@ define("py", {
|
|||||||
// document.currentScript.target if needed
|
// document.currentScript.target if needed
|
||||||
defineProperty(element, "target", { value: show });
|
defineProperty(element, "target", { value: show });
|
||||||
|
|
||||||
pyodide[`run${isAsync ? "Async" : ""}`](await fetchSource(element));
|
pyodide[`run${isAsync ? "Async" : ""}`](
|
||||||
|
await fetchSource(element, pyodide.io),
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// resolve PyScriptElement to allow connectedCallback
|
// resolve PyScriptElement to allow connectedCallback
|
||||||
element._pyodide.resolve(pyodide);
|
element._pyodide.resolve(pyodide);
|
||||||
@@ -217,11 +224,10 @@ class PyScriptElement extends HTMLElement {
|
|||||||
async connectedCallback() {
|
async connectedCallback() {
|
||||||
if (!this.executed) {
|
if (!this.executed) {
|
||||||
this.executed = true;
|
this.executed = true;
|
||||||
const { run } = await this._pyodide.promise;
|
const { io, run } = await this._pyodide.promise;
|
||||||
this.srcCode = await fetchSource(this);
|
this.srcCode = await fetchSource(this, io);
|
||||||
this.textContent = "";
|
this.textContent = "";
|
||||||
const result = run(this.srcCode);
|
run(this.srcCode);
|
||||||
if (!this.textContent && result) this.textContent = result;
|
|
||||||
this.style.display = "block";
|
this.style.display = "block";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<script type="py">
|
<script type="py">
|
||||||
from pyscript import display
|
from pyscript import display
|
||||||
display("Hello PyScript Next")
|
display("Hello", "PyScript Next", append=False)
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
10
pyscript.core/types/coincident/window.d.ts
vendored
Normal file
10
pyscript.core/types/coincident/window.d.ts
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
export { ie as default };
|
||||||
|
declare function ie(e: any, ...r: any[]): any;
|
||||||
|
declare namespace ie {
|
||||||
|
import transfer = m.transfer;
|
||||||
|
export { transfer };
|
||||||
|
}
|
||||||
|
declare function m(t: any, { parse: n, stringify: r, transform: u }?: JSON): any;
|
||||||
|
declare namespace m {
|
||||||
|
function transfer(...e: any[]): any[];
|
||||||
|
}
|
||||||
54
pyscript.core/types/polyscript/esm/custom.d.ts
vendored
Normal file
54
pyscript.core/types/polyscript/esm/custom.d.ts
vendored
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
export const CUSTOM_SELECTORS: any[];
|
||||||
|
export function handleCustomType(node: Element): void;
|
||||||
|
export function define(type: string, options: CustomOptions): void;
|
||||||
|
export function whenDefined(type: string): Promise<object>;
|
||||||
|
/**
|
||||||
|
* custom configuration
|
||||||
|
*/
|
||||||
|
export type Runtime = {
|
||||||
|
/**
|
||||||
|
* the bootstrapped interpreter
|
||||||
|
*/
|
||||||
|
interpreter: object;
|
||||||
|
/**
|
||||||
|
* an XWorker constructor that defaults to same interpreter on the Worker.
|
||||||
|
*/
|
||||||
|
XWorker: (url: string, options?: object) => Worker;
|
||||||
|
/**
|
||||||
|
* a cloned config used to bootstrap the interpreter
|
||||||
|
*/
|
||||||
|
config: object;
|
||||||
|
/**
|
||||||
|
* an utility to run code within the interpreter
|
||||||
|
*/
|
||||||
|
run: (code: string) => any;
|
||||||
|
/**
|
||||||
|
* an utility to run code asynchronously within the interpreter
|
||||||
|
*/
|
||||||
|
runAsync: (code: string) => Promise<any>;
|
||||||
|
/**
|
||||||
|
* an utility to write a file in the virtual FS, if available
|
||||||
|
*/
|
||||||
|
writeFile: (path: string, data: ArrayBuffer) => void;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* custom configuration
|
||||||
|
*/
|
||||||
|
export type CustomOptions = {
|
||||||
|
/**
|
||||||
|
* the interpreter to use
|
||||||
|
*/
|
||||||
|
interpreter: 'pyodide' | 'micropython' | 'wasmoon' | 'ruby-wasm-wasi';
|
||||||
|
/**
|
||||||
|
* the optional interpreter version to use
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
/**
|
||||||
|
* the optional config to use within such interpreter
|
||||||
|
*/
|
||||||
|
config?: string;
|
||||||
|
/**
|
||||||
|
* the callback that will be invoked once
|
||||||
|
*/
|
||||||
|
onInterpreterReady?: (environment: object, node: Element) => void;
|
||||||
|
};
|
||||||
3
pyscript.core/types/polyscript/esm/fetch-utils.d.ts
vendored
Normal file
3
pyscript.core/types/polyscript/esm/fetch-utils.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export function getBuffer(response: Response): Promise<ArrayBuffer>;
|
||||||
|
export function getJSON(response: Response): Promise<any>;
|
||||||
|
export function getText(response: Response): Promise<string>;
|
||||||
3
pyscript.core/types/polyscript/esm/index.d.ts
vendored
Normal file
3
pyscript.core/types/polyscript/esm/index.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export { env } from "./listeners.js";
|
||||||
|
export const XWorker: (url: string, options?: import("./worker/class.js").WorkerOptions) => Worker;
|
||||||
|
export { define, whenDefined } from "./custom.js";
|
||||||
4
pyscript.core/types/polyscript/esm/interpreter/_python.d.ts
vendored
Normal file
4
pyscript.core/types/polyscript/esm/interpreter/_python.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export function registerJSModule(interpreter: any, name: any, value: any): void;
|
||||||
|
export function run(interpreter: any, code: any): any;
|
||||||
|
export function runAsync(interpreter: any, code: any): any;
|
||||||
|
export function runEvent(interpreter: any, code: any, event: any): Promise<void>;
|
||||||
15
pyscript.core/types/polyscript/esm/interpreter/_utils.d.ts
vendored
Normal file
15
pyscript.core/types/polyscript/esm/interpreter/_utils.d.ts
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
export function clean(code: string): string;
|
||||||
|
export const io: WeakMap<object, any>;
|
||||||
|
export function stdio(init: any): {
|
||||||
|
stderr: (...args: any[]) => any;
|
||||||
|
stdout: (...args: any[]) => any;
|
||||||
|
get(engine: any): Promise<any>;
|
||||||
|
};
|
||||||
|
export function writeFile({ FS, PATH, PATH_FS }: {
|
||||||
|
FS: any;
|
||||||
|
PATH: any;
|
||||||
|
PATH_FS: any;
|
||||||
|
}, path: any, buffer: any): any;
|
||||||
|
export function writeFileShim(FS: any, path: any, buffer: any): any;
|
||||||
|
export const base: WeakMap<object, any>;
|
||||||
|
export function fetchPaths(module: any, interpreter: any, config_fetch: any): Promise<any[]>;
|
||||||
25
pyscript.core/types/polyscript/esm/interpreter/micropython.d.ts
vendored
Normal file
25
pyscript.core/types/polyscript/esm/interpreter/micropython.d.ts
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
declare namespace _default {
|
||||||
|
export { type };
|
||||||
|
export function module(version?: string): string;
|
||||||
|
export function engine({ loadMicroPython }: {
|
||||||
|
loadMicroPython: any;
|
||||||
|
}, config: any, url: any): Promise<any>;
|
||||||
|
export { registerJSModule };
|
||||||
|
export { run };
|
||||||
|
export { runAsync };
|
||||||
|
export { runEvent };
|
||||||
|
export function transform(_: any, value: any): any;
|
||||||
|
export function writeFile({ FS, _module: { PATH, PATH_FS } }: {
|
||||||
|
FS: any;
|
||||||
|
_module: {
|
||||||
|
PATH: any;
|
||||||
|
PATH_FS: any;
|
||||||
|
};
|
||||||
|
}, path: any, buffer: any): any;
|
||||||
|
}
|
||||||
|
export default _default;
|
||||||
|
declare const type: "micropython";
|
||||||
|
import { registerJSModule } from './_python.js';
|
||||||
|
import { run } from './_python.js';
|
||||||
|
import { runAsync } from './_python.js';
|
||||||
|
import { runEvent } from './_python.js';
|
||||||
25
pyscript.core/types/polyscript/esm/interpreter/pyodide.d.ts
vendored
Normal file
25
pyscript.core/types/polyscript/esm/interpreter/pyodide.d.ts
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
declare namespace _default {
|
||||||
|
export { type };
|
||||||
|
export function module(version?: string): string;
|
||||||
|
export function engine({ loadPyodide }: {
|
||||||
|
loadPyodide: any;
|
||||||
|
}, config: any, url: any): Promise<any>;
|
||||||
|
export { registerJSModule };
|
||||||
|
export { run };
|
||||||
|
export { runAsync };
|
||||||
|
export { runEvent };
|
||||||
|
export function transform(interpreter: any, value: any): any;
|
||||||
|
export function writeFile({ FS, PATH, _module: { PATH_FS } }: {
|
||||||
|
FS: any;
|
||||||
|
PATH: any;
|
||||||
|
_module: {
|
||||||
|
PATH_FS: any;
|
||||||
|
};
|
||||||
|
}, path: any, buffer: any): any;
|
||||||
|
}
|
||||||
|
export default _default;
|
||||||
|
declare const type: "pyodide";
|
||||||
|
import { registerJSModule } from './_python.js';
|
||||||
|
import { run } from './_python.js';
|
||||||
|
import { runAsync } from './_python.js';
|
||||||
|
import { runEvent } from './_python.js';
|
||||||
16
pyscript.core/types/polyscript/esm/interpreter/ruby-wasm-wasi.d.ts
vendored
Normal file
16
pyscript.core/types/polyscript/esm/interpreter/ruby-wasm-wasi.d.ts
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
declare namespace _default {
|
||||||
|
export { type };
|
||||||
|
export let experimental: boolean;
|
||||||
|
export function module(version?: string): string;
|
||||||
|
export function engine({ DefaultRubyVM }: {
|
||||||
|
DefaultRubyVM: any;
|
||||||
|
}, config: any, url: any): Promise<any>;
|
||||||
|
export function registerJSModule(interpreter: any, _: any, value: any): void;
|
||||||
|
export function run(interpreter: any, code: any): any;
|
||||||
|
export function runAsync(interpreter: any, code: any): any;
|
||||||
|
export function runEvent(interpreter: any, code: any, event: any): Promise<void>;
|
||||||
|
export function transform(_: any, value: any): any;
|
||||||
|
export function writeFile(): never;
|
||||||
|
}
|
||||||
|
export default _default;
|
||||||
|
declare const type: "ruby-wasm-wasi";
|
||||||
22
pyscript.core/types/polyscript/esm/interpreter/wasmoon.d.ts
vendored
Normal file
22
pyscript.core/types/polyscript/esm/interpreter/wasmoon.d.ts
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
declare namespace _default {
|
||||||
|
export { type };
|
||||||
|
export function module(version?: string): string;
|
||||||
|
export function engine({ LuaFactory, LuaLibraries }: {
|
||||||
|
LuaFactory: any;
|
||||||
|
LuaLibraries: any;
|
||||||
|
}, config: any): Promise<any>;
|
||||||
|
export function registerJSModule(interpreter: any, _: any, value: any): void;
|
||||||
|
export function run(interpreter: any, code: any): any;
|
||||||
|
export function runAsync(interpreter: any, code: any): any;
|
||||||
|
export function runEvent(interpreter: any, code: any, event: any): Promise<void>;
|
||||||
|
export function transform(_: any, value: any): any;
|
||||||
|
export function writeFile({ cmodule: { module: { FS }, }, }: {
|
||||||
|
cmodule: {
|
||||||
|
module: {
|
||||||
|
FS: any;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}, path: any, buffer: any): any;
|
||||||
|
}
|
||||||
|
export default _default;
|
||||||
|
declare const type: "wasmoon";
|
||||||
9
pyscript.core/types/polyscript/esm/interpreters.d.ts
vendored
Normal file
9
pyscript.core/types/polyscript/esm/interpreters.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/** @type {Map<string, object>} */
|
||||||
|
export const registry: Map<string, object>;
|
||||||
|
/** @type {Map<string, object>} */
|
||||||
|
export const configs: Map<string, object>;
|
||||||
|
/** @type {string[]} */
|
||||||
|
export const selectors: string[];
|
||||||
|
/** @type {string[]} */
|
||||||
|
export const prefixes: string[];
|
||||||
|
export const interpreter: Map<any, any>;
|
||||||
3
pyscript.core/types/polyscript/esm/listeners.d.ts
vendored
Normal file
3
pyscript.core/types/polyscript/esm/listeners.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export const env: any;
|
||||||
|
export function listener(event: any): Promise<void>;
|
||||||
|
export function addAllListeners(root: Document | Element): void;
|
||||||
2
pyscript.core/types/polyscript/esm/loader.d.ts
vendored
Normal file
2
pyscript.core/types/polyscript/esm/loader.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export function getRuntime(id: string, config?: string, options?: object): Promise<any>;
|
||||||
|
export function getRuntimeID(type: string, version?: string): string;
|
||||||
4
pyscript.core/types/polyscript/esm/script-handler.d.ts
vendored
Normal file
4
pyscript.core/types/polyscript/esm/script-handler.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export function queryTarget(script: any, idOrSelector: any): any;
|
||||||
|
export const interpreters: Map<any, any>;
|
||||||
|
export function getDetails(type: any, id: any, name: any, version: any, config: any, runtime?: any): any;
|
||||||
|
export function handle(script: HTMLScriptElement): Promise<void>;
|
||||||
1
pyscript.core/types/polyscript/esm/toml.d.ts
vendored
Normal file
1
pyscript.core/types/polyscript/esm/toml.d.ts
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export function parse(text: string): object;
|
||||||
29
pyscript.core/types/polyscript/esm/utils.d.ts
vendored
Normal file
29
pyscript.core/types/polyscript/esm/utils.d.ts
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
export const isArray: (arg: any) => arg is any[];
|
||||||
|
export const assign: {
|
||||||
|
<T extends {}, U>(target: T, source: U): T & U;
|
||||||
|
<T_1 extends {}, U_1, V>(target: T_1, source1: U_1, source2: V): T_1 & U_1 & V;
|
||||||
|
<T_2 extends {}, U_2, V_1, W>(target: T_2, source1: U_2, source2: V_1, source3: W): T_2 & U_2 & V_1 & W;
|
||||||
|
(target: object, ...sources: any[]): any;
|
||||||
|
};
|
||||||
|
export const create: {
|
||||||
|
(o: object): any;
|
||||||
|
(o: object, properties: PropertyDescriptorMap & ThisType<any>): any;
|
||||||
|
};
|
||||||
|
export const defineProperties: <T>(o: T, properties: PropertyDescriptorMap & ThisType<any>) => T;
|
||||||
|
export const defineProperty: <T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>) => T;
|
||||||
|
export const entries: {
|
||||||
|
<T>(o: {
|
||||||
|
[s: string]: T;
|
||||||
|
} | ArrayLike<T>): [string, T][];
|
||||||
|
(o: {}): [string, any][];
|
||||||
|
};
|
||||||
|
export const all: {
|
||||||
|
<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>[]>;
|
||||||
|
<T_1 extends [] | readonly unknown[]>(values: T_1): Promise<{ -readonly [P in keyof T_1]: Awaited<T_1[P]>; }>;
|
||||||
|
};
|
||||||
|
export const resolve: {
|
||||||
|
(): Promise<void>;
|
||||||
|
<T>(value: T): Promise<Awaited<T>>;
|
||||||
|
<T_1>(value: T_1 | PromiseLike<T_1>): Promise<Awaited<T_1>>;
|
||||||
|
};
|
||||||
|
export function absoluteURL(path: any, base?: string): string;
|
||||||
19
pyscript.core/types/polyscript/esm/worker/class.d.ts
vendored
Normal file
19
pyscript.core/types/polyscript/esm/worker/class.d.ts
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
declare function _default(...args: any[]): (url: string, options?: WorkerOptions) => Worker;
|
||||||
|
export default _default;
|
||||||
|
/**
|
||||||
|
* custom configuration
|
||||||
|
*/
|
||||||
|
export type WorkerOptions = {
|
||||||
|
/**
|
||||||
|
* the interpreter type to use
|
||||||
|
*/
|
||||||
|
type: string;
|
||||||
|
/**
|
||||||
|
* the optional interpreter version to use
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
/**
|
||||||
|
* the optional config to use within such interpreter
|
||||||
|
*/
|
||||||
|
config?: string;
|
||||||
|
};
|
||||||
6
pyscript.core/types/polyscript/esm/worker/hooks.d.ts
vendored
Normal file
6
pyscript.core/types/polyscript/esm/worker/hooks.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export class Hook {
|
||||||
|
constructor(interpreter: any, options: any);
|
||||||
|
interpreter: any;
|
||||||
|
onWorkerReady: any;
|
||||||
|
get stringHooks(): {};
|
||||||
|
}
|
||||||
2
pyscript.core/types/polyscript/esm/worker/xworker.d.ts
vendored
Normal file
2
pyscript.core/types/polyscript/esm/worker/xworker.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
declare function _default(): Worker;
|
||||||
|
export default _default;
|
||||||
25
pyscript.core/types/pyscript/pyscript.core/src/core.d.ts
vendored
Normal file
25
pyscript.core/types/pyscript/pyscript.core/src/core.d.ts
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* A `Worker` facade able to bootstrap on the worker thread only a PyScript module.
|
||||||
|
* @param {string} file the python file to run ina worker.
|
||||||
|
* @param {{config?: string | object, async?: boolean}} [options] optional configuration for the worker.
|
||||||
|
* @returns {Worker & {sync: ProxyHandler<object>}}
|
||||||
|
*/
|
||||||
|
export function PyWorker(file: string, options?: {
|
||||||
|
config?: string | object;
|
||||||
|
async?: boolean;
|
||||||
|
}): Worker & {
|
||||||
|
sync: ProxyHandler<object>;
|
||||||
|
};
|
||||||
|
export namespace hooks {
|
||||||
|
let onBeforeRun: Set<Function>;
|
||||||
|
let onBeforeRunAync: Set<Function>;
|
||||||
|
let onAfterRun: Set<Function>;
|
||||||
|
let onAfterRunAsync: Set<Function>;
|
||||||
|
let onInterpreterReady: Set<Function>;
|
||||||
|
let codeBeforeRunWorker: Set<string>;
|
||||||
|
let codeBeforeRunWorkerAsync: Set<string>;
|
||||||
|
let codeAfterRunWorker: Set<string>;
|
||||||
|
let codeAfterRunWorkerAsync: Set<string>;
|
||||||
|
}
|
||||||
|
declare let config: any;
|
||||||
|
export {};
|
||||||
27
pyscript.core/types/pyscript/pyscript.core/src/exceptions.d.ts
vendored
Normal file
27
pyscript.core/types/pyscript/pyscript.core/src/exceptions.d.ts
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
export function _createAlertBanner(message: any, level: any, messageType?: string, logMessage?: boolean): void;
|
||||||
|
export namespace ErrorCode {
|
||||||
|
let GENERIC: string;
|
||||||
|
let FETCH_ERROR: string;
|
||||||
|
let FETCH_NAME_ERROR: string;
|
||||||
|
let FETCH_UNAUTHORIZED_ERROR: string;
|
||||||
|
let FETCH_FORBIDDEN_ERROR: string;
|
||||||
|
let FETCH_NOT_FOUND_ERROR: string;
|
||||||
|
let FETCH_SERVER_ERROR: string;
|
||||||
|
let FETCH_UNAVAILABLE_ERROR: string;
|
||||||
|
let BAD_CONFIG: string;
|
||||||
|
let MICROPIP_INSTALL_ERROR: string;
|
||||||
|
let BAD_PLUGIN_FILE_EXTENSION: string;
|
||||||
|
let NO_DEFAULT_EXPORT: string;
|
||||||
|
let TOP_LEVEL_AWAIT: string;
|
||||||
|
}
|
||||||
|
export class UserError extends Error {
|
||||||
|
constructor(errorCode: any, message?: string, messageType?: string);
|
||||||
|
errorCode: any;
|
||||||
|
messageType: string;
|
||||||
|
}
|
||||||
|
export class FetchError extends UserError {
|
||||||
|
constructor(errorCode: any, message: any);
|
||||||
|
}
|
||||||
|
export class InstallError extends UserError {
|
||||||
|
constructor(errorCode: any, message: any);
|
||||||
|
}
|
||||||
10
pyscript.core/types/pyscript/pyscript.core/src/fetch.d.ts
vendored
Normal file
10
pyscript.core/types/pyscript/pyscript.core/src/fetch.d.ts
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* This is a fetch wrapper that handles any non 200 responses and throws a
|
||||||
|
* FetchError with the right ErrorCode. This is useful because our FetchError
|
||||||
|
* will automatically create an alert banner.
|
||||||
|
*
|
||||||
|
* @param {string} url - URL to fetch
|
||||||
|
* @param {Request} [options] - options to pass to fetch
|
||||||
|
* @returns {Promise<Response>}
|
||||||
|
*/
|
||||||
|
export function robustFetch(url: string, options?: Request): Promise<Response>;
|
||||||
Reference in New Issue
Block a user