Skip to content
Extraits de code Groupes Projets

Comparer les révisions

Les modifications sont affichées comme si la révision source était fusionnée avec la révision cible. En savoir plus sur la comparaison des révisions.

Source

Sélectionner le projet cible
No results found

Cible

Sélectionner le projet cible
  • fossardchristophe/nsilo
  • kuniansamuel/nsi
  • Lycee-Cezanne-NSI/nsi-projet-site
  • nsiforges76/swc-pnav
  • nsi-p-corneille/pyodide-mkdocs-theme-review
  • fjunier/snt
  • avenel_sylvain/test-forge-sa
  • jcottin/eval-nsi
  • deleuphilippe/test-phi
  • chardine_marc_aurelien/nsi-premiere-chardine
  • maybeflush/site-de-maybeflush
  • nsicurie/exercices-experts
  • amislanghe/nsi-terminale
  • pdupuits/1-nsi-lakanal
  • profjahier/pyxel
  • max_cholley/enessite
  • moyivan/pyodide-mkdocs-theme-review
  • profpabloneruda/pablo-neruda-nsi
  • doduyrat/cpge-mpi
  • mbloch/python-pyodide-mkdocs
  • le-coin-de-rapha-l/essai-de-raphael
  • aimeeric/pyodide-mkdocs-theme-review
  • agostinoluca/pyodide-mkdocs-theme-review
  • vroullier/2024-intro-forge
  • mkdocs-david/site-web-version-pyodide-mkdocs-theme
  • nsicurie/nsi
  • cournill/nsi-lycee-prevert-pont-audemer
  • docs/modeles/pyodide-mkdocs-theme-review
  • rthibaudeau/site
  • azzizaxavier/pyodide-mkdocs-theme-review
  • dominguezanne/site-modele-forge
  • fjunier/qcm-nsi-snt-maths
  • nativelfabrice/info-cpge
  • mezeray-nsi/site-web-formation-nsi
  • bergson-paris/pyodide-mkdocs-theme-review
  • cyril.thuillier-hamel/term-nsi-honfleur
  • jdleroy/mon-essai-de-site-web
  • delphine-nunez/terminales-maths
  • dkany/site-daphne-kany
  • nsi-cornat/essai-fork
  • janson-paris/sbt-nsi-1-ere
  • nsi-guehenno/cours-nsi
  • thirionlaurent/nsi-lycee-jean-hyppolite-jonzac
  • nsinormandie/exemplej1
  • jmdemouy/cours
  • ydyd/cours-nsi
  • profjahier_test_01/site-test-01
  • initpoo/decouverte-de-la-programmation-orientee-objet
  • devedeud/essai-forge-dd
  • stvalnsi/mon-projet
  • llaadu/lla_ex
  • spy/snt-nsi
  • mcoilhac/site-demo
  • glc-nsi/cours-avec-exercices-python
  • Lycee-Cezanne-NSI/nsi-projet
  • laura-fleron/ros-docu
  • initpoo/pyodide-mkdocs-theme-review
  • charpentierronan/pyodide-mkdocs-theme-review
  • mezeray-nsi/formation-nsi-copie-du-site
  • nsi-fresnel/nsi_fresnel
  • nsinormandie/2024-intro-forge
  • test01072024/test-01072020-d-apres-pyodide-mkdocs-theme
  • madeceric/site-avec-pyodide-mkdocs-theme
  • sekowskijean-jacques/python-cours-et-exercices
  • profjahier/nsi-terminale
  • profjahier/nsi-premiere
  • BenDup/traitement-d-image-python
  • essais/term-nsi-honfleur
  • mcoilhac/sio-2-maths-approfondies
  • lefebvre05/cours-de-nsi-rey
  • tfontanet/terminale
  • ybousba/snt-en-egypte
  • olaf_le_viking/nsi-anguier
  • nieduziakamaury/ansi
  • lycee_pgdg_paris/pyodide-mkdocs-theme-review
  • profpabloneruda/tnsi-lycee-pablo-neruda
  • delphine-nunez/2-gt-maths-snt
  • mcoilhac/sio-1-maths-approfondies
  • lp-ameublement-revel/ERA-TMA-TFBMA
79 résultats
Afficher les modifications
Affichage de
avec 263 ajouts et 161 suppressions
---
author: Mireille Coilhac
title: Crédits
author: Votre nom
title: 👏 Crédits
---
Le site est hébergé par la forge des communs numériques éducatifs <a href="https://docs.forge.apps.education.fr/" target="_blank">
<span aria-label="Avatar" aria-hidden="true" data-type="round" data-color="3" class="_avatar_k41ul_17 mx_BaseAvatar" style="--cpd-avatar-size: 16px;"><img loading="lazy" alt="" src="https://matrix.agent.education.tchap.gouv.fr/_matrix/media/v3/thumbnail/matrix.agent.education.tchap.gouv.fr/de0e2fe63b40dd452178360baa3ff29ba16d8b98?width=16&amp;height=16&amp;method=crop" crossorigin="anonymous" referrerpolicy="no-referrer" class="_image_k41ul_49" data-type="round" width="16px" height="16px"></span><span class="mx_Pill_text">Centre de documentation</span></a>
![AEIF](../assets/images/logo_aeif_300.png){width=7%}
Le modèle du site a été créé par l' [Association des enseignantes et enseignants d'informatique de France](https://aeif.fr/index.php/category/non-classe/){target="_blank"}.
Le site est construit avec [`mkdocs`](https://www.mkdocs.org/) et en particulier [`mkdocs-material`](https://squidfunk.github.io/mkdocs-material/), et surtout [Pyodide-Mkdocs-Theme](https://frederic-zinelli.gitlab.io/pyodide-mkdocs-theme/) pour la partie Python.
😀 Un grand merci à Frédéric Zinelli, et Vincent-Xavier Jumel qui ont réalisé la partie technique de ce site. Merci également à Charles Poulmaire pour ses relectures attentives et ses conseils judicieux.
Le site est construit avec [`mkdocs`](https://www.mkdocs.org/){target="_blank"} et en particulier [`mkdocs-material`](https://squidfunk.github.io/mkdocs-material/){target="_blank"}, et surtout [Pyodide-Mkdocs-Theme](https://frederic-zinelli.gitlab.io/pyodide-mkdocs-theme/){target="_blank"} pour la partie Python nécessaire pour les QCM.
😀 Un grand merci à Frédéric Zinelli, et Vincent-Xavier Jumel qui ont réalisé la partie technique de ce site.
Merci également à Charles Poulmaire pour ses relectures attentives et ses conseils judicieux.
# --- PYODIDE:env --- #
# --------- PYODIDE:env --------- #
from js import document
if "restart" in globals():
restart()
# --- PYODIDE:code --- #
def m_a_j(cible):
done()
document.getElementById(cible).innerHTML = Screen().html
_cible = 'cible_3'
# --------- PYODIDE:code --------- #
from turtle import *
setup(640, 480) # pour définir la taille de la fenêtre
speed(10)
def arbre(l=100, n=5):
......@@ -18,6 +25,12 @@ def arbre(l=100, n=5):
back(l)
arbre(200, 5)
# --- PYODIDE:post --- #
done()
document.getElementById("cible_3").innerHTML = svg()
# --------- PYODIDE:post --------- #
if Screen().html is None:
forward(0)
m_a_j(_cible)
# --------- PYODIDE:post_term --------- #
if "m_a_j" in globals():
m_a_j(_cible)
# --- PYODIDE:env --- #
import matplotlib.pyplot as plt # Indispensable (provoque la déclaration de PyodidePlot)
fig = PyodidePlot('cible_double')
fig.target()
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
xs1 = [-3 + k * 0.1 for k in range(61)]
ys1 = [x**2 for x in xs1]
xs2 = [-2 + k * 0.1 for k in range(41)]
ys2 = [x**3 for x in xs2]
plt.plot(xs1, ys1, "r-", xs2, ys2, "b+")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction carré et la fonction cube")
plt.show()
......@@ -3,31 +3,30 @@ author: Mireille Coilhac
title: Images en Python
---
😊
## I. Utiliser la bibliothèque matplotlib
## I. Utiliser la bibliothèque matplotlib par Nicolas Revéret
### La fonction carré
{{ IDE('fct_carre') }}
???+ question "La courbe 1 s'affiche dans une admonition sous l'éditeur"
{{ figure() }}
### Les courbes de la fonction carré et de la fonction cube séparées
{{ IDE('exo_figure_1')}}
??? tip "Votre figure"
<div id="cible_1" class="center" style="display: flex;justify-content: center;align-content:center;flex-direction: column;margin:auto;min-height:5em;text-align:center">
Votre tracé sera ici
</div>
{{ IDE('fct_carre_cube') }}
{{ figure('cible_1') }}
{{ figure('cible_2') }}
### Les courbes de la fonction carré et de la fonction cube superposées
???+ question "La courbe 2 s'affiche dans une admonition sous l'éditeur"
{{ IDE('carre_cube_superposees') }}
{{ IDE('exo_figure_2')}}
{{ figure('cible_double') }}
??? tip "Votre figure"
<div id="cible_2" class="center" style="display: flex;justify-content: center;align-content:center;flex-direction: column;margin:auto;min-height:5em;text-align:center">
Votre tracé sera ici
</div>
## II. Utiliser la tortue par Romain Janvier
......@@ -36,10 +35,8 @@ title: Images en Python
???+ question "Utilisation de la tortue"
{{ IDE('arbre_tortue') }}
<div id="cible_3" class="admonition center" style="display: flex;justify-content: center;align-content:center;flex-direction: column;margin:auto;min-height:5em;text-align:center">
Le tracé sera affiché ici
</div>
{{ figure('cible_3') }}
# --- PYODIDE:env --- #
# Import de matplotlib (installation lors du 1er lancement)
import matplotlib
# Précision du backend à utiliser
matplotlib.use("module://matplotlib_pyodide.html5_canvas_backend")
# Insertion de la courbe dans une div spécifié(id="cible_2")
from js import document
document.pyodideMplTarget = document.getElementById("cible_2")
# On vide la div
document.getElementById("cible_2").textContent = ""
# --- PYODIDE:code --- #
import matplotlib.pyplot as plt
fig, ax = plt.subplots() # Syntaxe obligatoire pour ne pas mélanger plusieurs graphiques
xs = [-2 + k * 0.1 for k in range(41)]
ys = [x**3 for x in xs]
ax.plot(xs, ys, "r-") # Syntaxe obligatoire pour ne pas mélanger plusieurs graphiques
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction cube")
plt.show()
\ No newline at end of file
# --- PYODIDE:env --- #
# Un import de matplotlib en tout premier est indispensable, pour que la classe
# PyodidePlot devienne disponible dans l'environnement:
import matplotlib.pyplot as plt
PyodidePlot().target() # Cible la figure dans laquelle tracer la figure dans la page
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
xs = [-3 + k * 0.1 for k in range(61)]
ys = [x**2 for x in xs]
plt.plot(xs, ys, "r-")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction carré")
plt.show()
# --- PYODIDE:env --- #
# Import de matplotlib (installation lors du 1er lancement)
import matplotlib
# Précision du backend à utiliser
matplotlib.use("module://matplotlib_pyodide.html5_canvas_backend")
# Insertion de la courbe dans une div spécifié(id="cible_1")
from js import document
document.pyodideMplTarget = document.getElementById("cible_1")
# On vide la div
document.getElementById("cible_1").textContent = ""
import matplotlib.pyplot as plt
fig1 = PyodidePlot('cible_1')
fig2 = PyodidePlot('cible_2')
# --- PYODIDE:code --- #
# L'import suivant a été fait dans du code caché :
# import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
fig, ax = plt.subplots() # Syntaxe obligatoire pour ne pas mélanger plusieurs graphiques
fig1.target() # Pour tracer la fonction ci-dessous
xs = [-3 + k * 0.1 for k in range(61)]
ys = [x**2 for x in xs]
ax.plot(xs, ys, "r-") # Syntaxe obligatoire pour ne pas mélanger plusieurs graphiques
plt.plot(xs, ys, "r-")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction carré")
plt.show()
fig2.target() # Pour tracer la fonction ci-dessous
xs = [-2 + k * 0.1 for k in range(41)]
ys = [x**3 for x in xs]
plt.plot(xs, ys, "r-")
plt.grid() # Optionnel : pour voir le quadrillage
plt.axhline() # Optionnel : pour voir l'axe des abscisses
plt.axvline() # Optionnel : pour voir l'axe des ordonnées
plt.title("La fonction cube")
plt.show()
# Mon site
---
author: Votre nom
title: 🏡 Accueil
---
Vous trouverez ...
À vous de personnaliser cet accueil
## titre 1
!!! info "Adapter ce site modèle"
leçons
Le tutoriel est ici : [Tutoriel de site avec python](https://docs.forge.apps.education.fr/modeles/tutoriels/pyodide-mkdocs-theme-review/){:target="_blank" }
Si vous voulez conserver certaines pages de ce modèles sans qu'elles ne soient visibles dans le menu, il suffit de les enlever du fichier .pages
Vous les retrouverez facilement en utilisant la barre de recherche en haut à droite
## titre 2
autres leçons
Si vous voulez supprimer le lien vers le dépôt de votre site en haut à droite : ![lien_depot](assets/images/aller_depot.png){ width=5%}
👉 les explications sont ici : [Tutoriel : votre propre contenu](https://docs.forge.apps.education.fr/modeles/tutoriels/pyodide-mkdocs-theme-review/08_tuto_fork/1_fork_projet/#iii-votre-propre-contenu){:target="_blank" }
😊 Bienvenue !
_Dernière MAJ le 11/03/2025_
......@@ -6,71 +6,7 @@ tags:
- Difficulté **
---
Pour créer **très facilement de façon automatique** ce fichier, suivre ce lien : [Création de QCM : générer le fichier .json automatiquement](https://frederic-zinelli.gitlab.io/pyodide-mkdocs-theme/redactors/qcm_builder/){ .md-button target="_blank" rel="noopener" }.
{{ multi_qcm('qcm_exemple.json') }}
## Multi QCM ancien Pyodide
{{multi_qcm(
["Quelle est la réponse à la question universelle ? Cocher deux réponses.",
["$6\\times 7$", "$\\int_0^{42} 1 dx$", "Je ne sais pas", " `#!py sum([i for i in range(10)])`", "La réponse D"], [1, 2]],
["1 + 1 = ? Cocher deux réponses.",
["Je ne sais pas", "2", "L'âge du capitaine", "10 en binaire"], [2, 4]]
)}}
## QCM avec des questions sur plusieurs lignes
{{ multi_qcm(
[
"""
On a saisi le code suivant :
```python title=''
n = 8
while n > 1:
n = n/2
```
Que vaut `n` après l'exécution du code ?
""",
[
"2.0",
"4.0",
"1.0",
"0.5",
],
[3]
],
[
"Quelle est la machine qui va exécuter un programme JavaScript inclus dans une page HTML ?",
[
"La machine de l’utilisateur sur laquelle s’exécute le navigateur web.",
"La machine de l’utilisateur ou du serveur, selon celle qui est la plus disponible.",
"La machine de l’utilisateur ou du serveur, suivant la confidentialité des données manipulées.",
"Le serveur web sur lequel est stockée la page HTML."
],
[1],
],
[
"""
Cocher toutes les bonnes réponses
```python title=''
meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
```
""",
[
"`#!py meubles[1]` vaut `#!py Table`",
"`#!py meubles[1]` vaut `#!py Commode`",
"`#!py meubles[4]` vaut `#!py Buffet`",
"`#!py meubles[5]` vaut `#!py Buffet`",
],
[2, 3],
{'multi':True}
],
multi = False,
qcm_title = "Un QCM avec mélange automatique des questions (bouton en bas pour recommencer)",
DEBUG = False,
shuffle = True,
) }}
{
"questions": [
[
"```python title=\"\"\nn = 8\nwhile n > 1:\n n = n/2\n```\n\nQue vaut `n` après l'exécution du code ?",
[
"0.5",
"1.0",
"2.0",
"4.0"
],
[2]
],
[
"`meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']`\n\nCocher toutes les bonnes réponses.",
[
"`meubles[-1]` vaut `'Buffet'`",
"`meubles[1]` vaut `'Table'`",
"`meubles[1]` vaut `'Commode'`"
],
[1,3],
{"multi":true}
]
],
"description": "QCM Exemple",
"shuffle": true
}
\ No newline at end of file
......@@ -48,9 +48,10 @@
margin: 0 auto;
}
/*
Largeur de la page
*/
.md-grid {
max-width: 90%;
}
}
\ No newline at end of file
logo_forge.png

24,9 ko

from pyodide_mkdocs_theme.pyodide_macros import PyodideMacrosPlugin, TestsToken
def define_env(env:PyodideMacrosPlugin):
custom = {
"tests": TestsToken("\n# Tests"),
}
\ No newline at end of file
......@@ -4,9 +4,9 @@ site_description: Un modèle avec pyodide-mkdocs-theme
# À modifier, avec votre nom et la licence choisie
copyright: |
M. Coilhac
<a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br/>
Nom d'auteur
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a>.
<br><a href="https://aeif.fr">Design by AEIF</a>
# À modifier, avec votre mail
#extra:
......@@ -20,11 +20,15 @@ copyright: |
# Éventuellement à modifier avec votre thème de couleurs
theme:
favicon: assets/favicon.ico
favicon: assets/images/favicon.png
icon:
logo: material/stairs-up
#custom_dir: my_theme_customizations/
name: pyodide-mkdocs-theme
# La palette de couleur est maintenant intégrée par défaut au thème.
# Si vous souhaitez en changer, vous pouvez redéclarer la section entière
# et vos réglages prendront le pas sur les valeurs par défaut.
# Mêmes choses pour la langue et la suppression des google-fonts (non RGPD).
#font: false # RGPD ; pas de fonte Google
#language: fr # français
#palette: # Palettes de couleurs jour/nuit
......@@ -51,6 +55,8 @@ theme:
- content.code.annotate # Pour les annotations de code deroulantes avec +
- content.code.copy # Ajout après MAJ pour pouvoir copier du code
custom_dir: overrides
site_url: !ENV [CI_PAGES_URL, "http://127.0.0.1:8000/"]
......@@ -60,9 +66,7 @@ edit_uri: !ENV [EDIT_VARIABLE]
docs_dir: docs
nav:
- "🏡 Accueil": index.md
- ... | regex=^(?:(?!_REM.md).)*$
#nav: inutile on utilise les fichiers .pages plus pratiques
markdown_extensions:
- md_in_html
......@@ -77,18 +81,22 @@ markdown_extensions:
- pymdownx.mark # Passage ==surligné==.
- pymdownx.tilde # Passage ~~barré~~ ou en ~indice~.
- pymdownx.highlight: # Coloration syntaxique du code
auto_title: true
anchor_linenums: true
line_spans: __span
pygments_lang_class: true
- pymdownx.inlinehilite # pour `#!python <python en ligne>`
- pymdownx.snippets # Inclusion de fichiers externe.
- pymdownx.tasklist: # Cases à cocher - [ ] et - [x]
custom_checkbox: false # avec cases d'origine
clickable_checkbox: true # et cliquables.
- pymdownx.tabbed: # Volets glissants. === "Mon volet"
alternate_style: true
alternate_style: true
- pymdownx.keys: # Touches du clavier. ++ctrl+d++
separator: "\uff0b"
- pymdownx.emoji: # Émojis :boom:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
- pymdownx.emoji: # Émojis :boom:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.superfences:
custom_fences:
- name: mermaid
......@@ -103,11 +111,11 @@ markdown_extensions:
plugins:
- awesome-pages:
- awesome-pages: # Pour les fichiers .pages
collapse_single_pages: true
- material/search
- material/tags:
- search
- tags:
tags_file: tags.md
- pyodide_macros:
# Vous pouvez ajouter ici tout réglage que vous auriez ajouté concernant les macros:
......@@ -115,7 +123,8 @@ plugins:
build:
python_libs:
- turtle
tab_to_spaces: 4
- sqlite-console
# En remplacement de mkdocs-exclude. Tous les fichiers correspondant aux patterns indiqués seront
......@@ -125,12 +134,10 @@ exclude_docs: |
**/*_REM.md
**/*.py
#extra_javascript:
#- xtra/javascripts/mathjax-config.js Supprimé pour MAJ pyodide
#extra_javascript: Supprimé pour MAJ pyodide pris en compte par le thème lui même
#- xtra/mathjax.js # MathJax
#- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
extra_css:
#- xtra/stylesheets/qcm.css ## Supprimé pour MAJ pyodide
- xtra/stylesheets/ajustements.css # ajustements
function mathJaxUpdate(){
jsLogger('[MathJax] - Page formatting')
if(!window.MathJax.startup.output){
console.error("Cannot update MathJax (CDN failed to load?)")
return
}
window.MathJax.startup.output.clearCache()
window.MathJax.typesetClear()
window.MathJax.texReset()
window.MathJax.typesetPromise()
}
const mathJaxIsReady = subscribeWhenReady('mathJax', mathJaxUpdate, {maxTries:100})
window.MathJax = {
startup: {
ready: () => {
jsLogger("[MathJax] - Setting up");
MathJax.startup.defaultReady();
jsLogger("[MathJax] - Ready");
mathJaxIsReady()
mathJaxUpdate()
},
},
loader: {
load: ['[tex]/cancel', 'output/svg', '[tex]/color', '[tex]/mhchem']
},
tex: {
packages: {'[+]': ['cancel', 'color', 'mhchem']},
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true,
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex",
},
}
......@@ -3,6 +3,7 @@
#
# A revised version of CPython's turtle module written for Brython
#
# Adaptation to pyodide-mkdocs-theme by Romain Janvier
# Note: This version is not intended to be used in interactive mode,
# nor use help() to look up methods/functions definitions. The docstrings
......@@ -22,6 +23,8 @@
# as rotating it from 350 to 10 degrees. For this reason, we did not use the
# Vec2D class from the CPython module and handle the rotations quite differently.
# TODO: quand la tortue est invisible puis visible, on ne met pas à jour
# sa position avec les déplacements "invisibles"
import math
import sys
......@@ -182,6 +185,7 @@ class Screen(metaclass=Singleton):
"square": (create_square, 20),
"circle": (create_circle, 10),
}
self.html = None
self._animate = True
self._old_svg_scene = None
self.reset()
......@@ -210,13 +214,13 @@ class Screen(metaclass=Singleton):
raise RuntimeError(
"No turtle scene ended! " "You should call 'done' first."
)
html = self.svg()
# html = self.svg()
if isinstance(file, str):
with open(file, "w") as f:
f.write(html)
f.write(self.html)
else:
# file should be a file descriptor
file.write(html)
file.write(self.html)
def animation_frame_id(self, index):
return "af_{}_{}".format(self.svg_id, index)
......@@ -466,6 +470,7 @@ class Screen(metaclass=Singleton):
self.background_color = "white"
self._scene_finished = False
self._set_geometry()
self.html = None
def restart(self):
_CFG.update(_default_cfg())
......@@ -1229,6 +1234,9 @@ class Turtle(TPen, TNavigator):
self._creatingPoly = False
self._fillitem = self._fillpath = None
self._init(shape, visible)
def _init(self, shape=_CFG["shape"], visible=_CFG["visible"]):
self.name = shape
self.svg, rotation = self.screen.create_svg_turtle(self, name=shape)
self.svg.setAttribute("opacity", 0)
......@@ -1246,14 +1254,17 @@ class Turtle(TPen, TNavigator):
) # this will update the display to include the correction
self.speed(speed)
def reset(self):
"""Delete the turtle's drawings and restore its default values."""
# TODO: review this and most likely revise docstring.
TNavigator.reset(self)
TPen._reset(self)
self._old_heading = self.heading() + self.rotation_correction
self.home()
self.color(_CFG["pencolor"], _CFG["fillcolor"])
self.screen.reset()
self._init()
def clear(self):
sys.stderr.write("Warning: Turtle.clear() is not implemented.\n")
......@@ -1590,7 +1601,19 @@ Pen = Turtle
def done():
Screen().show_scene()
ancien = Screen().html
s = Screen().show_scene()
Screen().html = Screen().svg() # On mémorise le svg produit
if ancien is None or len(ancien) < len(Screen().html): # L'aninmation a changé
# Lorsqu'on réduit, on peut diminuer la taille
# On suppose juste que rajouter quelque chose compense cette
# différence
#print("on réduit")
#if ancien is None:
# print("C'est None")
#else:
# print(len(ancien), len(Screen().html))
s.reduire_animation()
show_scene = done
......
......@@ -93,6 +93,12 @@ class Element:
content += self._value
return f"{open_tag}{content}{close_tag}"
def reduire_animation(self):
if "dur" in self._attributes: # On réduit le temps de l'animation
self._attributes["dur"] = " 1ms"
for elem in self._children:
elem.reduire_animation()
def _tag_func(tag):
def func(*args, **kwargs):
......