diff --git a/pyscriptjs/examples/antigravity.html b/pyscriptjs/examples/antigravity.html index 7c2bfa4..4efb7b2 100644 --- a/pyscriptjs/examples/antigravity.html +++ b/pyscriptjs/examples/antigravity.html @@ -5,68 +5,16 @@ - - - - - - - Based on xkcd: antigravity https://xkcd.com/353/. - -
-
-
-
-
- - -import random - -from js import document, setInterval -from pyodide import create_proxy -from pyodide.http import open_url - -class Antigravity(): - - def __init__(self, node): - self.node = node - self.xoffset, self.yoffset = 0, 0 - setInterval(create_proxy(self.move), 10) - - def move(self): - char = document.getElementById('python') - console.log(char) - char.setAttribute('transform', f'translate({self.xoffset}, {-self.yoffset})') - self.xoffset += random.normalvariate(0, 1)/20 - if self.yoffset < 50: - self.yoffset += 0.1 - else: - self.yoffset += random.normalvariate(0, 1)/20 - - def _repr_svg_(self): - return open_url('./antigravity.svg').read() - -node = document.getElementById('antigravity') -node.replaceChildren() - -Antigravity(node) - - - + + +- paths: + - /antigravity.py + + + Based on xkcd: antigravity https://xkcd.com/353/. + +import antigravity +antigravity.fly() + + diff --git a/pyscriptjs/examples/antigravity.py b/pyscriptjs/examples/antigravity.py new file mode 100644 index 0000000..ac4404e --- /dev/null +++ b/pyscriptjs/examples/antigravity.py @@ -0,0 +1,39 @@ +import random +import sys + +from js import document, DOMParser, setInterval +from pyodide import create_proxy +from pyodide.http import open_url + +class Antigravity(): + + url = './antigravity.svg' + + def __init__(self, target=None, interval=10, append=True, fly=False): + target = target or sys.stdout._out + self.target = document.getElementById(target) if isinstance(target, str) else target + doc = DOMParser.new().parseFromString(open_url(self.url).read(), "image/svg+xml") + self.node = doc.documentElement + if append: + self.target.append(self.node) + else: + self.target.replaceChildren(self.node) + self.xoffset, self.yoffset = 0, 0 + self.interval = interval + if fly: + self.fly() + + def fly(self): + setInterval(create_proxy(self.move), self.interval) + + def move(self): + char = self.node.getElementsByTagName('g')[1] + char.setAttribute('transform', f'translate({self.xoffset}, {-self.yoffset})') + self.xoffset += random.normalvariate(0, 1)/20 + if self.yoffset < 50: + self.yoffset += 0.1 + else: + self.yoffset += random.normalvariate(0, 1)/20 + +_auto = Antigravity(append=True) +fly = _auto.fly diff --git a/pyscriptjs/examples/repl.html b/pyscriptjs/examples/repl.html index 806a73c..4e50a8b 100644 --- a/pyscriptjs/examples/repl.html +++ b/pyscriptjs/examples/repl.html @@ -4,14 +4,18 @@ - Svelte app + REPL - + +- paths: + - /antigravity.py + +
diff --git a/pyscriptjs/examples/repl2.html b/pyscriptjs/examples/repl2.html index 39c595e..1f9becc 100644 --- a/pyscriptjs/examples/repl2.html +++ b/pyscriptjs/examples/repl2.html @@ -17,6 +17,7 @@ - numpy - paths: - /utils.py + - /antigravity.py