Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea variari voluptas distinguique possit, augeri amplificarique non possit. At etiam Athenis, ut e patre audiebam facete et urbane Stoicos irridente, statua est in quo a nobis philosophia defensa et collaudata est, cum id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum defuturum, quas natura non depravata desiderat. Et quem ad me accedis, saluto: 'chaere,' inquam, 'Tite!' lictores, turma omnis chorusque: 'chaere, Tite!' hinc hostis mi Albucius, hinc inimicus. Sed iure Mucius. Ego autem mirari satis non queo unde hoc sit tam insolens domesticarum rerum fastidium. Non est omnino hic docendi locus; sed ita prorsus existimo, neque eum Torquatum, qui hoc primus cognomen invenerit, aut torquem illum hosti detraxisse, ut aliquam ex eo est consecutus? – Laudem et caritatem, quae sunt vitae sine metu degendae praesidia firmissima. – Filium morte multavit. – Si sine causa, nollem me ab eo delectari, quod ista Platonis, Aristoteli, Theophrasti orationis ornamenta neglexerit. Nam illud quidem physici, credere aliquid esse minimum, quod profecto numquam putavisset, si a Polyaeno, familiari suo, geometrica discere maluisset quam illum etiam ipsum dedocere. Sol Democrito magnus videtur, quippe homini erudito in geometriaque perfecto, huic pedalis fortasse; tantum enim esse omnino in nostris poetis aut inertissimae segnitiae est aut fastidii delicatissimi. Mihi quidem videtur, inermis ac nudus est. Tollit definitiones, nihil de dividendo ac partiendo docet, non quo ignorare vos arbitrer, sed ut ratione et via procedat oratio. Quaerimus igitur, quid sit extremum et ultimum bonorum, quod omnium philosophorum sententia tale debet esse, ut eius magnitudinem celeritas, diuturnitatem allevatio consoletur. Ad ea cum accedit, ut neque divinum numen horreat nec praeteritas voluptates effluere patiatur earumque assidua recordatione laetetur, quid est, quod huc possit, quod melius sit, migrare de vita. His rebus instructus semper est in voluptate esse aut in armatum hostem impetum fecisse aut in poetis evolvendis, ut ego et Triarius te hortatore facimus, consumeret, in quibus hoc primum est in quo admirer, cur in gravissimis rebus non delectet eos sermo patrius, cum idem fabellas Latinas.
n =""
-whilenot n.isnumeric():
- n =input("enter a valid number: ")
-
-for i inrange(1, int(n) +1):
- if i %3==0and i %5==0:
- print("plopliplop")
- elif i %3==0:
- print("plop")
- elif i %5==0:
- print("plip")
- else:
- print(i)
# setting tool.pyscript.hide-meta to true will hide the `/// script` section
-import json
-from rich.pretty import pprint
-
-withopen("./peps.json") as fd:
- data = json.load(fd)
-pprint([(k, v["title"]) for k, v in data.items()][:10])
-# >>> print(data["723"]["title"])
-# Inline script metadata
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea variari voluptas distinguique possit, augeri amplificarique non possit. At etiam Athenis, ut e patre audiebam facete et urbane Stoicos irridente, statua est in quo a nobis philosophia defensa et collaudata est, cum id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum defuturum, quas natura non depravata desiderat. Et quem ad me accedis, saluto: 'chaere,' inquam, 'Tite!' lictores, turma omnis chorusque: 'chaere, Tite!' hinc hostis mi Albucius, hinc inimicus. Sed iure Mucius. Ego autem mirari satis non queo unde hoc sit tam insolens domesticarum rerum fastidium. Non est omnino hic docendi locus; sed ita prorsus existimo, neque eum Torquatum, qui hoc primus cognomen invenerit, aut torquem illum hosti detraxisse, ut aliquam ex eo est consecutus? – Laudem et caritatem, quae sunt vitae sine metu degendae praesidia firmissima. – Filium morte multavit. – Si sine causa, nollem me ab eo delectari, quod ista Platonis, Aristoteli, Theophrasti orationis ornamenta neglexerit. Nam illud quidem physici, credere aliquid esse minimum, quod profecto numquam putavisset, si a Polyaeno, familiari suo, geometrica discere maluisset quam illum etiam ipsum dedocere. Sol Democrito magnus videtur, quippe homini erudito in geometriaque perfecto, huic pedalis fortasse; tantum enim esse omnino in nostris poetis aut inertissimae segnitiae est aut fastidii delicatissimi. Mihi quidem videtur, inermis ac nudus est. Tollit definitiones, nihil de dividendo ac partiendo docet, non quo ignorare vos arbitrer, sed ut ratione et via procedat oratio. Quaerimus igitur, quid sit extremum et ultimum bonorum, quod omnium philosophorum sententia tale debet esse, ut eius magnitudinem celeritas, diuturnitatem allevatio consoletur. Ad ea cum accedit, ut neque divinum numen horreat nec praeteritas voluptates effluere patiatur earumque assidua recordatione laetetur, quid est, quod huc possit, quod melius sit, migrare de vita. His rebus instructus semper est in voluptate esse aut in armatum hostem impetum fecisse aut in poetis evolvendis, ut ego et Triarius te hortatore facimus, consumeret, in quibus hoc primum est in quo admirer, cur in gravissimis rebus non delectet eos sermo patrius, cum idem fabellas Latinas.
Test, this is not a code block, end test.
elif i %5==0:
print("plip")
else:
- print(i)print(i)A Platypus!A Big Platypus!
2000-12-01
\ No newline at end of file
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea variari voluptas distinguique possit, augeri amplificarique non possit. At etiam Athenis, ut e patre audiebam facete et urbane Stoicos irridente, statua est in quo a nobis philosophia defensa et collaudata est, cum id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et.
SDK version
Number of API methods
Documented
In emulator
Only documented
Only in emulator
32
495713
499837
1060
5184
33
537427
539236
1258
3067
34
605106
605098
26
18
Comparison of API methods between documentation and emulators
SDK version
Number of API methods
Documented
In emulator
Only documented
Only in emulator
32
495713
499837
1060
5184
33
537427
539236
1258
3067
34
605106
605098
26
18
A Platypus!A Big Platypus!
\ No newline at end of file
diff --git a/test_template/pages/cards.typ b/test_template/pages/cards.typ
new file mode 100644
index 0000000..4371dda
--- /dev/null
+++ b/test_template/pages/cards.typ
@@ -0,0 +1,89 @@
+#import "@local/template-web:0.0.1": *
+
+#let summ = summary(
+ base-url: "http://test.example.com",
+ path: "/cards.html",
+ title: "Summary cards",
+ page-label: ,
+ preview-image: image(
+ "/assets/platypus.png",
+ alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
+ ),
+ author: "Me!",
+ tags: ("test", "html/css", "typst"),
+ description: "Showcase the summary card system",
+ date: datetime(year: 1942, month: 4, day: 1),
+)
+
+#show: webpage.with(
+ ..summ.template-args,
+ logo: image(
+ "/assets/platypus.png",
+ alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
+ height: 100pt,
+ width: 100pt, // TODO 0.15 regression? in 0.14 setting the height was enough
+ ),
+ header: [
+ = Summary Cards
+ Showcase summary cards
+ ],
+ footer: context [
+
+ #sym.copyright #document.date.display("[year]") Histausse \
+ Please don't train AI on my stuff without explicit permission
+ ],
+ menu: [
+ - #link()[Home]
+ - #link()[Demo Pyscript]
+ - #link()[Demo the card system]
+ ],
+ site-name: "TTT",
+ icon: "/img/platypus.png", // TODO: use somehow? probably not supported in 0.15
+
+ // Pyscript:
+ pyscript-data-list: (
+ "remote-2026.3.1": pyscript-data(
+ "https://pyscript.net/releases/2026.3.1/core.js",
+ additionnal-head-tags: {
+ html.elem("script", attrs: (src: "/mini-coi.js")) // TODO: use somehow? probably not supported in 0.15
+ html.elem("link", attrs: (rel: "stylesheet", href: "https://pyscript.net/releases/2026.3.1/core.css"))
+ },
+ )
+ ),
+ pyscript-version: "remote-2026.3.1",
+)
+
+
+#summ.card
+
+
+#let perm = (17, 6, 20, 19, 15, 5, 13, 11, 14, 12, 16, 10, 2, 3, 1, 9, 7, 4, 18, 8)
+#let summaries = range(20).map(i =>
+ summary(
+ base-url: "http://test.example.com",
+ path: "/tst/" + str(perm.at(i)),
+ title: "Card " + str(perm.at(i)),
+ tags: if perm.at(i) == 20 {
+ ("tag2", "tag5","loooooonnnnnnnnnnnnnng-tag","some-tag","some-other-tag")
+ } else {
+ (2, 3, 5, 7).filter(j => calc.rem(perm.at(i), j) == 0).map(j => "tag" + str(j))
+ },
+ preview-image: summ.preview-image,
+ img-copyright: if calc.rem(i, 3) == 0 { [Histausse ] } else { none },
+ author: "Me!",
+ description: lorem(10 * calc.rem(i * 123, 10)),
+ date: datetime(year: 2000, month: 12, day: perm.at(i)),
+ page-label: label("dummy-label-" + str(perm.at(i))),
+ )
+)
+#card-list(
+ min-width: 200,
+ summaries,
+)
+
+== Card Link Targets
+Cards need a label to link to. Usually it is the label of a page, but here we don't generate the pages, to we target elements of this list:
+
+#for i in range(20) [
+ - Target of card #i #label("dummy-label-" + str(perm.at(i)))
+]
diff --git a/test_template/index.typ b/test_template/pages/index.typ
similarity index 54%
rename from test_template/index.typ
rename to test_template/pages/index.typ
index 4265adf..a915368 100644
--- a/test_template/index.typ
+++ b/test_template/pages/index.typ
@@ -1,10 +1,12 @@
#import "@local/template-web:0.0.1": *
#let summ = summary(
- url: "http://test.example.com",
+ base-url: "http://test.example.com",
+ path: "/index.html",
+ page-label: ,
title: "TeTyTe",
preview-image: image(
- "assets/platypus.png",
+ "/assets/platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
),
author: "Me!",
@@ -16,7 +18,7 @@
#show: webpage.with(
..summ.template-args,
logo: image(
- "assets/platypus.png",
+ "/assets/platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
height: 100pt,
width: 100pt, // TODO 0.15 regression? in 0.14 setting the height was enough
@@ -35,7 +37,7 @@
link(
"http://test.example.com",
image(
- "assets/platypus.png",
+ "/assets/platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
height: 2em,
)
@@ -44,113 +46,17 @@
html.a(href: "/feed.rss", aria-label: "RSS feed", icons.rss-icon),
),
menu: [
- - #link("example.com")[Hello Void!]
- - #link("example.com")[Demons]
- - #link("example.com")[Run]
- - #link("example.com")[When]
- - #link("example.com")[A]
- - #link("example.com")[Good]
- - #link("example.com")[Man]
- - #link("example.com")[Goes]
- - #link("example.com")[To]
- - #link("example.com")[War]
+ - #link()[Home]
+ - #link()[Demo Pyscript]
+ - #link()[Demo the summary card system]
],
site-name: "TTT",
icon: "/img/platypus.png", // TODO: use somehow? probably not supported in 0.15
-
- // Pyscript:
- pyscript-data-list: (
- "remote-2026.3.1": pyscript-data(
- "https://pyscript.net/releases/2026.3.1/core.js",
- additionnal-head-tags: {
- html.elem("script", attrs: (src: "/mini-coi.js")) // TODO: use somehow? probably not supported in 0.15
- html.elem("link", attrs: (rel: "stylesheet", href: "https://pyscript.net/releases/2026.3.1/core.css"))
- },
- )
- ),
- pyscript-version: "remote-2026.3.1",
)
#lorem(400)
-```python-run
-n = ""
-while not n.isnumeric():
- n = input("enter a valid number: ")
-
-for i in range(1, int(n) + 1):
- if i % 3 == 0 and i % 5 == 0:
- print("plopliplop")
- elif i % 3 == 0:
- print("plop")
- elif i % 5 == 0:
- print("plip")
- else:
- print(i)
-```
-```python-run
-# /// script
-# # requires-python = ">=3.11" # not supported yet
-# dependencies = [
-# "rich",
-# ]
-#
-# [tool.pyscript]
-# repl = true
-# [tool.pyscript.files]
-# "https://peps.python.org/api/peps.json" = "./peps.json"
-# ///
-
-import json
-from rich.pretty import pprint
-
-with open("./peps.json") as fd:
- data = json.load(fd)
-pprint([(k, v["title"]) for k, v in data.items()][:10])
-# >>> print(data["723"]["title"])
-# Inline script metadata
-```
-
-```python-run
-# /// script
-# # requires-python = ">=3.11" # not supported yet
-# dependencies = [
-# "rich",
-# ]
-#
-# [tool.pyscript]
-# repl = true
-# hide-meta = true
-# [tool.pyscript.files]
-# "https://peps.python.org/api/peps.json" = "./peps.json"
-# ///
-# setting tool.pyscript.hide-meta to true will hide the `/// script` section
-import json
-from rich.pretty import pprint
-
-with open("./peps.json") as fd:
- data = json.load(fd)
-pprint([(k, v["title"]) for k, v in data.items()][:10])
-# >>> print(data["723"]["title"])
-# Inline script metadata
-```
-
-```python-run
-# /// script
-# dependencies = [
-# "pygame-ce",
-# "./python-packages/isn_s_cube-0.1.0-py3-none-any.whl"
-# ]
-# [tool.pyscript]
-# pygame = true
-# ///
-from isn_s_cube import wasm
-await wasm()
-```
-
-#summ.card
-
Test, `this is not a code block`, end test.
```python
@@ -168,7 +74,6 @@ def plopliplop(n: int)
#raw(range(10).map(i => lorem(100)).join("\n"), block: true)
-/*
#figure({
show table: set text(size: 0.80em)
table(
@@ -199,7 +104,6 @@ def plopliplop(n: int)
caption: [Comparison of API methods between documentation and emulators],
)
-*/
```raw-css
table {
@@ -220,7 +124,6 @@ thead {
border-bottom: 1px solid #999999;
}
```
-/*
#table(
columns: 5,
//inset: (x: 0% + 5pt, y: 0% + 2pt),
@@ -238,41 +141,19 @@ thead {
[34], [605106], [605098], [26], [18],
table.hline(),
)
-*/
#figure(
image(
- "assets/smol-platypus.png",
+ "/assets/smol-platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
),
caption: [A Platypus!]
)
#figure(
image(
- "assets/big-platypus.png",
+ "/assets/big-platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
),
caption: [A Big Platypus!]
)
-#let perm = (17, 6, 20, 19, 15, 5, 13, 11, 14, 12, 16, 10, 2, 3, 1, 9, 7, 4, 18, 8)
-#let summaries = range(20).map(i =>
- summary(
- url: "http://test.example.com/tst/" + str(perm.at(i)),
- title: "Card " + str(perm.at(i)),
- tags: if perm.at(i) == 20 {
- ("tag2", "tag5","loooooonnnnnnnnnnnnnng-tag","some-tag","some-other-tag")
- } else {
- (2, 3, 5, 7).filter(j => calc.rem(perm.at(i), j) == 0).map(j => "tag" + str(j))
- },
- preview-image: summ.preview-image,
- img-copyright: if calc.rem(i, 3) == 0 { [Histausse ] } else { none },
- author: "Me!",
- description: lorem(10 * calc.rem(i * 123, 10)),
- date: datetime(year: 2000, month: 12, day: perm.at(i)),
- )
-)
-#card-list(
- min-width: 200,
- summaries,
-)
diff --git a/test_template/pages/pyscript.typ b/test_template/pages/pyscript.typ
new file mode 100644
index 0000000..28b0c7e
--- /dev/null
+++ b/test_template/pages/pyscript.typ
@@ -0,0 +1,129 @@
+#import "@local/template-web:0.0.1": *
+
+#let summ = summary(
+ base-url: "http://test.example.com",
+ path: "/pycript.html",
+ title: "TeTyTe",
+ page-label: ,
+ preview-image: image(
+ "/assets/platypus.png",
+ alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
+ ),
+ author: "Me!",
+ tags: ("test", "html/css", "typst", "pyscript"),
+ description: "Demonstrate how to use pyscript to run python in the browser",
+ date: datetime(year: 1942, month: 4, day: 1),
+)
+
+#show: webpage.with(
+ ..summ.template-args,
+ logo: image(
+ "/assets/platypus.png",
+ alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
+ height: 100pt,
+ width: 100pt, // TODO 0.15 regression? in 0.14 setting the height was enough
+ ),
+ header: [
+ = Showcase Pyscript
+ Show how to run Python in the browser
+ ],
+ footer: context [
+
+ #sym.copyright #document.date.display("[year]") Histausse \
+ Please don't train AI on my stuff without explicit permission
+ ],
+ site-name: "TTT",
+ icon: "/img/platypus.png", // TODO: use somehow? probably not supported in 0.15
+ menu: [
+ - #link()[Home]
+ - #link()[Demo Pyscript]
+ - #link()[Demo the summary card system]
+ ],
+ // Pyscript:
+ pyscript-data-list: (
+ "remote-2026.3.1": pyscript-data(
+ "https://pyscript.net/releases/2026.3.1/core.js",
+ additionnal-head-tags: {
+ html.elem("script", attrs: (src: "/mini-coi.js")) // TODO: use somehow? probably not supported in 0.15
+ html.elem("link", attrs: (rel: "stylesheet", href: "https://pyscript.net/releases/2026.3.1/core.css"))
+ },
+ )
+ ),
+ pyscript-version: "remote-2026.3.1",
+)
+
+```python-run
+n = ""
+while not n.isnumeric():
+ n = input("enter a valid number: ")
+
+for i in range(1, int(n) + 1):
+ if i % 3 == 0 and i % 5 == 0:
+ print("plopliplop")
+ elif i % 3 == 0:
+ print("plop")
+ elif i % 5 == 0:
+ print("plip")
+ else:
+ print(i)
+```
+```python-run
+# /// script
+# # requires-python = ">=3.11" # not supported yet
+# dependencies = [
+# "rich",
+# ]
+#
+# [tool.pyscript]
+# repl = true
+# [tool.pyscript.files]
+# "https://peps.python.org/api/peps.json" = "./peps.json"
+# ///
+
+import json
+from rich.pretty import pprint
+
+with open("./peps.json") as fd:
+ data = json.load(fd)
+pprint([(k, v["title"]) for k, v in data.items()][:10])
+# >>> print(data["723"]["title"])
+# Inline script metadata
+```
+
+```python-run
+# /// script
+# # requires-python = ">=3.11" # not supported yet
+# dependencies = [
+# "rich",
+# ]
+#
+# [tool.pyscript]
+# repl = true
+# hide-meta = true
+# [tool.pyscript.files]
+# "https://peps.python.org/api/peps.json" = "./peps.json"
+# ///
+# setting tool.pyscript.hide-meta to true will hide the `/// script` section
+import json
+from rich.pretty import pprint
+
+with open("./peps.json") as fd:
+ data = json.load(fd)
+pprint([(k, v["title"]) for k, v in data.items()][:10])
+# >>> print(data["723"]["title"])
+# Inline script metadata
+```
+
+```python-run
+# /// script
+# dependencies = [
+# "pygame-ce",
+# "./python-packages/isn_s_cube-0.1.0-py3-none-any.whl"
+# ]
+# [tool.pyscript]
+# pygame = true
+# ///
+from isn_s_cube import wasm
+await wasm()
+```
+