pyodide-mkdocs-theme 5.6.0__tar.gz → 5.6.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/PKG-INFO +1 -1
  2. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/__main__.py +1 -1
  3. pyodide_mkdocs_theme-5.6.2/pyodide_mkdocs_theme/__version__.py +1 -0
  4. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +8 -9
  5. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +61 -99
  6. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +30 -56
  7. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +20 -15
  8. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +2 -2
  9. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +9 -2
  10. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +9 -2
  11. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +9 -2
  12. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +6 -1
  13. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +20 -11
  14. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/README.md +36 -0
  15. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +1 -6
  16. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +6 -7
  17. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/functools.js +57 -7
  18. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/functoolsUiBuilder.js +1 -3
  19. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +54 -34
  20. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +38 -49
  21. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +36 -83
  22. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +2 -2
  23. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +6 -0
  24. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +33 -22
  25. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +2 -2
  26. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +6 -1
  27. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +16 -1
  28. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/5-2-virtualizer-ides_test.js +143 -123
  29. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/5-3-avl-ides_test.mjs +25 -13
  30. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +8 -4
  31. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +22 -3
  32. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +1 -0
  33. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +2 -1
  34. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +6 -10
  35. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyproject.toml +1 -1
  36. pyodide_mkdocs_theme-5.6.0/pyodide_mkdocs_theme/__version__.py +0 -1
  37. pyodide_mkdocs_theme-5.6.0/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -42
  38. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/LICENSE +0 -0
  39. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/README.md +0 -0
  40. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
  41. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/p5/cdns.txt +0 -0
  42. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/p5v2/__init__.py +0 -0
  43. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/p5v2/cdns.txt +0 -0
  44. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
  45. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/vis/cdns.txt +0 -0
  46. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
  47. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/PMT_tools/vis_network/cdns.txt +0 -0
  48. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/__init__.py +0 -0
  49. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -0
  50. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
  51. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
  52. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
  53. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +0 -0
  54. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +0 -0
  55. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
  56. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
  57. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
  58. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +0 -0
  59. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +0 -0
  60. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
  61. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
  62. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
  63. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
  64. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +0 -0
  65. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +0 -0
  66. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
  67. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
  68. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
  69. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
  70. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +0 -0
  71. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
  72. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/macros/runners_macros.py +0 -0
  73. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
  74. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
  75. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
  76. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
  77. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
  78. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +0 -0
  79. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
  80. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +0 -0
  81. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +0 -0
  82. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +0 -0
  83. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
  84. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +0 -0
  85. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +0 -0
  86. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
  87. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +0 -0
  88. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
  89. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +0 -0
  90. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +0 -0
  91. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +0 -0
  92. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
  93. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
  94. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +0 -0
  95. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
  96. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +0 -0
  97. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
  98. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +0 -0
  99. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +0 -0
  100. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +0 -0
  101. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +0 -0
  102. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
  103. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/ide_tests.py +0 -0
  104. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +0 -0
  105. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +0 -0
  106. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +0 -0
  107. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
  108. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +0 -0
  109. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
  110. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
  111. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
  112. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
  113. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
  114. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
  115. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
  116. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
  117. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
  118. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
  119. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
  120. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
  121. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
  122. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
  123. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
  124. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
  125. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
  126. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
  127. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
  128. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-pause-64.png +0 -0
  129. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
  130. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
  131. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
  132. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
  133. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
  134. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
  135. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
  136. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
  137. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/functoolsStorage.js +0 -0
  138. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/functoolsTxt.js +0 -0
  139. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/functoolsUi.js +0 -0
  140. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +0 -0
  141. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
  142. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
  143. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +0 -0
  144. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +0 -0
  145. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
  146. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/main.html +0 -0
  147. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
  148. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
  149. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
  150. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
  151. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
  152. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
  153. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +0 -0
  154. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
  155. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
  156. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
  157. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
  158. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
  159. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
  160. {pyodide_mkdocs_theme-5.6.0 → pyodide_mkdocs_theme-5.6.2}/pyodide_mkdocs_theme/templates/pyodide-css/testing.css +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyodide-mkdocs-theme
3
- Version: 5.6.0
3
+ Version: 5.6.2
4
4
  Summary: Package embedding the necessary tools to host pyodide, ACE editors, jQuery terminals in mkdocs documentations
5
5
  License: GPL-3.0-or-later
6
6
  Keywords: mkdocs,mkdocs-plugin,pyodide,IDE,terminal
@@ -50,7 +50,7 @@ parser = ArgumentParser(
50
50
  "This program comes with ABSOLUTELY NO WARRANTY."
51
51
  )
52
52
  parser.add_argument(
53
- '-v', '--version', action='version', version=f'pyodide-mkdocs-theme {__version__}'
53
+ '-v', '--version', action='version', version=f'v{__version__}'
54
54
  )
55
55
  parser.add_argument(
56
56
  '-n', '--new', default="",
@@ -0,0 +1 @@
1
+ __version__ = "5.6.2"
@@ -130,11 +130,6 @@ class BaseFilesExtractor:
130
130
  also used to identify an inclusion location, when resolving them).
131
131
  """
132
132
 
133
- in_pages: Set[str] = field(default_factory=set)
134
- """
135
- Set of pages uri (relative to the docs_dir) that use the current extractor.
136
- """
137
-
138
133
  # ---------------------------------------------------------------------------------
139
134
 
140
135
  ARG_NAME: ClassVar[str] = None
@@ -145,13 +140,9 @@ class BaseFilesExtractor:
145
140
 
146
141
 
147
142
  def __post_init__(self):
148
-
149
143
  if self.runner_file:
150
144
  self.exo_file = Path(self.runner_file).resolve()
151
145
  self.docs_file = Path(self.exo_file).relative_to(CWD)
152
- md_uri = self.env.page.file.src_uri
153
- self.in_pages.add(md_uri)
154
-
155
146
 
156
147
  def __hash__(self):
157
148
  return hash(self.exo_file)
@@ -258,6 +249,12 @@ class BaseExtractorWithCache(BaseFilesExtractor):
258
249
  _mtime_infos: Dict[Path, Optional[int]] = None
259
250
 
260
251
 
252
+ in_pages: Set[str] = field(default_factory=set)
253
+ """
254
+ Set of pages uri (relative to the docs_dir) that use the current extractor (used for external
255
+ purposes only, aka, mkdocs-addresses)
256
+ """
257
+
261
258
 
262
259
  @classmethod
263
260
  def _get_file_extractor_for(
@@ -287,6 +284,8 @@ class BaseExtractorWithCache(BaseFilesExtractor):
287
284
  elif not extractor.is_up_to_date():
288
285
  extractor.extract_contents()
289
286
 
287
+ md_uri = env.page.file.src_uri
288
+ extractor.in_pages.add(md_uri)
290
289
  return runner_file, extractor
291
290
 
292
291
 
@@ -58,8 +58,27 @@ class HtmlDependencies:
58
58
  Build all the templates needed for any page of the documentation, caching the different
59
59
  versions of them.
60
60
  """
61
- needs_to_templates: Dict[FrozenSet[DepKind], BlocksTemplatesData] = {}
62
- base_needs_to_all_needs: Dict[FrozenSet[DepKind], Set[DepKind]] = {}
61
+ def build_and_store_blocks_dict(base_needs):
62
+ # Build the complete set of dependencies:
63
+ all_needs = set(base_needs)
64
+ all_needs.add(DepKind.always)
65
+
66
+ # Separate the wheat from the chaff... :p
67
+ blocks_dct: Dict[Block,List[Dep]] = {b:[] for b in Block.VALUES}
68
+ for dep in cls.__DEPS_IN_ORDER:
69
+ if dep.kind in all_needs:
70
+ blocks_dct[dep.block].append(dep)
71
+
72
+ # Mutate the wheat to templates and extra method calls needed:
73
+ for block, lst_deps in blocks_dct.items():
74
+ extras_dump_calls = []
75
+ template = '\n'.join( dep.to_template(extras_dump_calls) for dep in lst_deps )
76
+ blocks_dct[block] = (template, tuple(extras_dump_calls))
77
+
78
+ needs_to_blocks_dicts[base_needs] = blocks_dct
79
+
80
+
81
+ needs_to_blocks_dicts: Dict[FrozenSet[DepKind], BlocksTemplatesData] = {}
63
82
 
64
83
  # (covers the weird case where page is None... Might also become useful one day, if ever
65
84
  # pages_configs do not reference anymore all the possible pages of the documentation.
@@ -71,38 +90,10 @@ class HtmlDependencies:
71
90
  all_kinds_of_pages = {None: default, **pages_configs}
72
91
 
73
92
  for url, page_config in all_kinds_of_pages.items():
74
-
75
93
  base_needs = frozenset(page_config.needs)
76
- if base_needs not in needs_to_templates:
77
-
78
- # Build the complete set of dependencies:
79
- all_needs = set(base_needs)
80
- all_needs.add(DepKind.always)
81
- for need in base_needs:
82
- DepKind.resolve_deps_needs(need, all_needs)
83
- base_needs_to_all_needs[base_needs] = all_needs
84
-
85
- # Separate the wheat from the chaff... :p
86
- blocks_dct: Dict[Block,List[Dep]] = {b:[] for b in Block.get_blocks()}
87
- for dep in cls.__DEPS_IN_ORDER:
88
- if dep.kind in all_needs:
89
- blocks_dct[dep.block].append(dep)
90
-
91
- # Mutate the wheat to templates and extra method calls needed:
92
- for block, lst_deps in blocks_dct.items():
93
- extras_dump_calls = []
94
- template = '\n'.join( dep.to_template(extras_dump_calls) for dep in lst_deps )
95
- blocks_dct[block] = template, tuple(extras_dump_calls)
96
-
97
-
98
- # Register templates and cbks
99
- needs_to_templates[base_needs] = blocks_dct
100
-
101
- cls.__URL_TO_TEMPLATE_CACHE[url] = needs_to_templates[base_needs]
102
-
103
- # Reassign the page needs with the complete set so that the proper info is
104
- # available "later" if needed.
105
- page_config.needs = base_needs_to_all_needs[base_needs]
94
+ if base_needs not in needs_to_blocks_dicts:
95
+ build_and_store_blocks_dict(base_needs)
96
+ cls.__URL_TO_TEMPLATE_CACHE[url] = needs_to_blocks_dicts[base_needs]
106
97
 
107
98
 
108
99
  @classmethod
@@ -121,18 +112,17 @@ class HtmlDependencies:
121
112
  return html
122
113
 
123
114
 
124
-
125
115
  @classmethod
126
116
  def build_import_map_template(cls):
127
117
  """ Build the importmap script template (done in on_env hook). """
128
118
  imports = {
129
119
  name: target
130
- for dep in cls.__DEPS_IN_ORDER
131
- for name,target in dep.gen_import_map()
120
+ for dep in cls.__DEPS_IN_ORDER
121
+ for name,target in dep.gen_import_map()
132
122
  }
133
- cls.__IMPORT_MAP = f'''
134
- <script type="importmap">{'{'}"imports": { json.dumps(imports) }{'}'}</script>
135
- '''
123
+ data = json.dumps(imports)
124
+ cls.__IMPORT_MAP = f'<script type="importmap">{{"imports":{ data }}}</script>'
125
+
136
126
 
137
127
  @classmethod
138
128
  def render_import_map(cls, env:'PyodideMacrosPlugin', page:Optional[Page]):
@@ -143,13 +133,11 @@ class HtmlDependencies:
143
133
  return cls.__IMPORT_MAP.replace("{base_url}", env.base_url if page else '.')
144
134
 
145
135
 
146
-
147
-
148
136
  @classmethod
149
137
  def build_overlord_data(cls):
150
138
  cls.__DEP_KINDS_TO_POOL_NAME = {
151
139
  dep.kind: dep.pool_requirement
152
- for dep in cls.__DEPS_IN_ORDER if dep.pool_requirement
140
+ for dep in cls.__DEPS_IN_ORDER if dep.pool_requirement
153
141
  }
154
142
 
155
143
 
@@ -157,8 +145,8 @@ class HtmlDependencies:
157
145
  def get_overlord_classes(cls, page_configs: PageConfiguration):
158
146
  overlord_classes = [
159
147
  cls.__DEP_KINDS_TO_POOL_NAME[dep_kind]
160
- for dep_kind in page_configs.needs
161
- if dep_kind in cls.__DEP_KINDS_TO_POOL_NAME
148
+ for dep_kind in page_configs.needs
149
+ if dep_kind in cls.__DEP_KINDS_TO_POOL_NAME
162
150
  ]
163
151
  return overlord_classes
164
152
 
@@ -171,38 +159,26 @@ class HtmlDependencies:
171
159
  # 3) Easier to transmit data from mkdocs through inlined scripts if the CONFIG parts are
172
160
  # actually loaded sync (this avoids the need for yet another global async flag...)
173
161
 
174
-
162
+ # Those are inserted directly in the page, full sync way (because they might be needed
163
+ # in the html code of the page, especially jQuery):
175
164
  lodash = Cdn(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js")
176
165
  jQuery = Cdn(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/jquery@3.7.1")
177
166
 
178
- jQuery_css = Css(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/jquery.terminal@2.43.1/css/jquery.terminal.min.css")
179
- awesome_font = Css(Block.libs, DepKind.always, {
180
- "href": "https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css",
181
- "integrity": "sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=",
182
- })
183
- jQterm = Cdn(Block.libs, DepKind.term, "https://cdn.jsdelivr.net/npm/jquery.terminal@2.43.1/js/jquery.terminal.min.js")
184
- ace = Cdn(Block.libs, DepKind.ide, {
185
- 'src': "https://cdn.jsdelivr.net/npm/ace-builds@1.44.0/src-min-noconflict/ace.js",
186
- 'integrity': "sha256-By0T5T0R4s7M//4aD6fxXPacVDXYl99T2YxxvhxKLn8=",
187
- })
188
- ace_tools = Cdn(Block.libs, DepKind.ide, {
189
- 'src': "https://cdn.jsdelivr.net/npm/ace-builds@1.44.0/src-min-noconflict/ext-language_tools.js",
190
- 'integrity': "sha256-eZ46N0b3QkDX+7GjjlJfoBuXGKIH86UKJVARHhGzpWA=",
191
- })
192
- pyodide = Cdn(Block.libs, DepKind.pyodide, "https://cdn.jsdelivr.net/pyodide/v0.25.0/full/pyodide.js")
193
-
194
- #vvvvvvvvvvvvvvv
167
+ # Css must be always loaded, even if no terminal in the page, to avoid messing the
168
+ # layout differently depending on the page... :rolleyes:
169
+ jQTerm_css = Css(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/jquery.terminal@2.43.1/css/jquery.terminal.min.css")
170
+
195
171
  # GENERATED-libs
196
172
  config = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/0-config.js", type="text/javascript", extra_dump="dump_to_js_config")
197
173
  subscriber = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/0-legacy-subscriber.js", type="text/javascript")
198
- functools = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/functools.js", type="module")
199
- functoolsStorage = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/functoolsStorage.js", type="module")
200
- functoolsTxt = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/functoolsTxt.js", type="module")
201
- functoolsUi = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/functoolsUi.js", type="module")
202
- functoolsUiBuilder = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/functoolsUiBuilder.js", type="module")
203
- jsLogger = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/jsLogger.js", type="module")
174
+ functools = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functools.js", type="module")
175
+ functoolsStorage = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsStorage.js", type="module")
176
+ functoolsTxt = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsTxt.js", type="module")
177
+ functoolsUi = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsUi.js", type="module")
178
+ functoolsUiBuilder = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsUiBuilder.js", type="module")
179
+ jsLogger = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/jsLogger.js", type="module")
204
180
  mathjax = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/mathjax-libs.js", type="text/javascript")
205
- process_and_gui = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/process_and_gui.js", type="module")
181
+ process_and_gui = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/process_and_gui.js", type="module")
206
182
  css_generic = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/0-generic.css")
207
183
  css_header = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/btns-header.css")
208
184
  css_history = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/history.css")
@@ -212,45 +188,31 @@ class HtmlDependencies:
212
188
  css_terminal = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/terminal.css")
213
189
  css_testing = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/testing.css")
214
190
  # GENERATED-libs
215
- #^^^^^^^^^^^^^^^
216
191
 
217
192
  # Always _after_ the js mathjax-libs.js file (SYNC!)
218
193
  mathjax_tex = Cdn(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js")
219
194
 
220
-
221
- #---------------------------------------------------
222
-
223
-
224
- #vvvvvvvvvvvvvvvv
225
195
  # GENERATED-pages
226
- snippets = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/0-generic-python-snippets-pyodide.js", type="module")
227
- error_logs = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-error_logs-pyodide.js", type="module")
228
- install = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-packagesInstaller-install-pyodide.js", type="module")
229
- runtime = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-runtimeManager-runtime-pyodide.js", type="module")
230
- runnersManager = Cdn(Block.content, DepKind.runners, "{base_url}/js-per-pages/2-0-runnersManager-runners.js", type="module", pool="GlobalRunnersManager")
231
- runner = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js", type="module")
232
- btnRunner = Cdn(Block.content, DepKind.py_btn, "{base_url}/js-per-pages/3-btnRunner-py_btn.js", type="module", pool="PyBtn")
233
- terminalRunner = Cdn(Block.content, DepKind.term, "{base_url}/js-per-pages/3-terminalRunner-term.js", type="module", pool="Terminal")
234
- idesManager = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-0-idesManager-ide.js", type="module")
235
- ideLogistic = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideLogistic-ide.js", type="module")
236
- ideRunner = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideRunner-ide.js", type="module", pool="Ide")
237
- virtualizer = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-2-virtualizer-ides_test.js", type="module")
238
- avl = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-3-avl-ides_test.mjs", type="module")
239
- ideTester = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-ideTester-ides_test.js", type="module", pool="IdeTester")
240
- init = Cdn(Block.content, DepKind.playground, "{base_url}/js-per-pages/6-2-init-playground.js", type="module")
196
+ snippets = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/0-generic-python-snippets-pyodide.js", type="module")
197
+ error_logs = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-error_logs-pyodide.js", type="module")
198
+ install = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-packagesInstaller-install-pyodide.js", type="module")
199
+ runtime = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-runtimeManager-runtime-pyodide.js", type="module")
200
+ runnersManager = Cdn(Block.content, DepKind.runners, "{base_url}/js-per-pages/2-0-runnersManager-runners.js", type="module", pool="GlobalRunnersManager")
201
+ runner = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js", type="module")
202
+ btnRunner = Cdn(Block.content, DepKind.py_btn, "{base_url}/js-per-pages/3-btnRunner-py_btn.js", type="module", pool="PyBtn")
203
+ terminalRunner = Cdn(Block.content, DepKind.term, "{base_url}/js-per-pages/3-terminalRunner-term.js", type="module", pool="Terminal")
204
+ idesManager = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-0-idesManager-ide.js", type="module")
205
+ ideLogistic = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideLogistic-ide.js", type="module")
206
+ ideRunner = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideRunner-ide.js", type="module", pool="Ide")
207
+ virtualizer = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-2-virtualizer-ides_test.js", type="module")
208
+ avl = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-3-avl-ides_test.mjs", type="module")
209
+ ideTester = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-ideTester-ides_test.js", type="module", pool="IdeTester")
241
210
  idePlayground = Cdn(Block.content, DepKind.playground, "{base_url}/js-per-pages/6-idePlayground-playground.js", type="module", pool="IdePlayground")
242
- qcms = Cdn(Block.content, DepKind.qcm, "{base_url}/js-per-pages/qcms-qcm.js", type="module", pool="Qcm")
243
- start = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/start-pyodide.js", type="module")
211
+ qcms = Cdn(Block.content, DepKind.qcm, "{base_url}/js-per-pages/qcms-qcm.js", type="module", pool="Qcm")
212
+ start = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/start-pyodide.js", type="module")
244
213
  # GENERATED-pages
245
- #^^^^^^^^^^^^^^^^
246
-
247
-
248
- #---------------------------------------------------
249
-
250
214
 
251
- #vvvvvvvvvvvvvvvvvv
252
215
  # GENERATED-scripts
253
216
  overlord = Cdn(Block.scripts, DepKind.always, "{base_url}/js-scripts/overlord.js", type="module")
254
217
  subscriptions = Cdn(Block.scripts, DepKind.always, "{base_url}/js-scripts/subscriptions.js", type="module")
255
218
  # GENERATED-scripts
256
- #^^^^^^^^^^^^^^^^^^
@@ -22,7 +22,7 @@ from pathlib import Path
22
22
  from typing import ClassVar, Dict, List, Optional, Set, Union, TYPE_CHECKING
23
23
 
24
24
 
25
- from ..tools_and_constants import AutoDescriptor
25
+ from ..tools_and_constants import AutoDescriptor, MyEnum, dataclass_with_VALUES
26
26
 
27
27
  if TYPE_CHECKING:
28
28
  from ..plugin.pyodide_macros_plugin import PyodideMacrosPlugin
@@ -32,72 +32,39 @@ if TYPE_CHECKING:
32
32
 
33
33
 
34
34
 
35
-
36
- class Block:
35
+ @dataclass_with_VALUES
36
+ class Block(MyEnum):
37
37
  """
38
38
  StrEnum-like object, giving all the jinja blocks usable in the main.html file.
39
39
  """
40
- libs = AutoDescriptor()
41
- content = AutoDescriptor()
42
- scripts = AutoDescriptor()
43
-
44
- @classmethod
45
- def get_blocks(cls):
46
- return (cls.libs, cls.content, cls.scripts)
40
+ libs: 'Block' = AutoDescriptor()
41
+ content: 'Block' = AutoDescriptor()
42
+ scripts: 'Block' = AutoDescriptor()
47
43
 
48
44
 
49
45
 
50
46
 
51
47
 
52
- class DepKind:
48
+ @dataclass_with_VALUES
49
+ class DepKind(MyEnum):
53
50
  """
54
51
  StrEnum-like object, identifying the key components to build the "dependencies graph"
55
52
  of scripts and css injections in main.html.
56
53
  """
57
- always = AutoDescriptor()
58
-
59
- pyodide = AutoDescriptor()
60
- py_btn = AutoDescriptor()
61
- run_macro = AutoDescriptor()
62
- term = AutoDescriptor()
63
- runners = AutoDescriptor()
64
- ide = AutoDescriptor()
65
- ides_test = AutoDescriptor()
66
- playground = AutoDescriptor()
67
- qcm = AutoDescriptor()
68
- qcm_encrypt = AutoDescriptor()
69
- mermaid = AutoDescriptor()
70
-
71
-
72
- @classmethod
73
- def resolve_deps_needs(cls, kind:'DepKind', needs:Set['DepKind']):
74
- """
75
- Gather the whole "chain" of dependencies according to the dependencies graph,
76
- sorting from the given @kind, which is already present in @needs.
77
- Keep adding kinds as long as they are not present in @needs.
78
- """
79
- # NOTE: this is almost useless, for PMT 4^ because of automatic resolution of imported
80
- # modules, BUT there are still some needs for non modules, so keep everything as is...
81
-
82
- # Keep in mind DepKind _values_ are actually SIMPLE STRINGS!
83
- if kind in _DEP_KINDS_GRAPH:
84
- next_kind = _DEP_KINDS_GRAPH[kind]
85
- if next_kind not in needs:
86
- needs.add(next_kind)
87
- cls.resolve_deps_needs(next_kind, needs)
88
-
89
-
90
-
91
- # Ignoring the systematic DepKind.always final dependency.
92
- _DEP_KINDS_GRAPH = {
93
- DepKind.playground: DepKind.ide,
94
- DepKind.ides_test: DepKind.ide,
95
- DepKind.ide: DepKind.term,
96
- DepKind.term: DepKind.pyodide,
97
- DepKind.run_macro: DepKind.py_btn,
98
- DepKind.py_btn: DepKind.pyodide,
99
- DepKind.pyodide: DepKind.runners,
100
- }
54
+ always: 'DepKind' = AutoDescriptor()
55
+ never: 'DepKind' = AutoDescriptor() # Registered, sent to the importmap, but never directly
56
+ # inserted in the html
57
+ pyodide: 'DepKind' = AutoDescriptor()
58
+ py_btn: 'DepKind' = AutoDescriptor()
59
+ run_macro: 'DepKind' = AutoDescriptor('py_btn') # For now the JS requirements are identical...
60
+ term: 'DepKind' = AutoDescriptor()
61
+ runners: 'DepKind' = AutoDescriptor()
62
+ ide: 'DepKind' = AutoDescriptor()
63
+ ides_test: 'DepKind' = AutoDescriptor()
64
+ playground: 'DepKind' = AutoDescriptor()
65
+ qcm: 'DepKind' = AutoDescriptor()
66
+ qcm_encrypt: 'DepKind' = AutoDescriptor()
67
+ mermaid: 'DepKind' = AutoDescriptor()
101
68
 
102
69
 
103
70
 
@@ -159,10 +126,10 @@ class Dep:
159
126
  """ Static property: Store HtmlDependencies property names, to make sure they are unique. """
160
127
 
161
128
 
162
-
163
129
  def __init_subclass__(cls):
164
130
  Dep.EXTENSION_TO_CLASS[cls.EXTENSION] = cls
165
131
 
132
+ #-------------------------------------------------------------------------
166
133
 
167
134
  @staticmethod
168
135
  def auto_ordering():
@@ -218,11 +185,18 @@ class Dep:
218
185
 
219
186
 
220
187
  def get_html_tag(self):
188
+ """
189
+ Convert tu current dependency to the corresponding html tag to insert in the page.
190
+ """
221
191
  return self.DUMP_TEMPLATE.format(
222
192
  data=' '.join(f'{k}="{v}"' for k,v in self.data.items())
223
193
  )
224
194
 
225
195
  def gen_import_map(self):
196
+ """
197
+ Return an iterator of items to add the current dependency to the importmap tag.
198
+ Reminder: only js modules have to be referenced.
199
+ """
226
200
  return ()
227
201
 
228
202
 
@@ -21,6 +21,7 @@ If not, see <https://www.gnu.org/licenses/>.
21
21
 
22
22
 
23
23
  from abc import ABCMeta
24
+ import os
24
25
  import re
25
26
  import hashlib
26
27
  from typing import Any, ClassVar, Dict, List, Literal, Optional, Tuple, Union, TYPE_CHECKING
@@ -706,31 +707,35 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
706
707
  local machine.
707
708
  """
708
709
  is_ide = PmtPyMacrosName.is_ide(self.MACRO_NAME)
709
- is_relative = not self.env.is_legacy
710
+ not_legacy = not self.env.is_legacy
710
711
  runner_path = self.exo_py
711
712
  has_py_file = bool(runner_path)
712
- project_id = self.env.project_id or ""
713
713
 
714
- need_project_id = is_ide and self.env.project_disambiguate_local_storage and project_id and (
715
- not has_py_file or is_relative
716
- ) or self.FORCE_PROJECT_ID_IN_HASH
717
- # The project_id is needed to disambiguate the html ids in the localStorage only if:
718
- # 1. The element is an IDE
719
- # 2. The user actually gave a value for env.project_id
720
- # 3. The user _wants_ the project_id added to compute the html ids
721
- # 4. Either...:
722
- # - the ides_id_hash_mode is set to relative
723
- # - Or there is no python file for the IDE
724
-
725
- project_id = f':_{ project_id }' * bool(need_project_id)
714
+ need_project_id = bool(self.FORCE_PROJECT_ID_IN_HASH or (
715
+ is_ide
716
+ and self.env.project_disambiguate_local_storage
717
+ and self.env.project_id
718
+ and (not_legacy or not has_py_file )
719
+ ))
720
+ project_id = f':_{ self.env.project_id or "" }' * need_project_id
726
721
 
727
722
  if has_py_file and (is_ide or self.env.ACTIVATE_CACHE):
728
723
 
729
724
  less_ID_needs = "" if is_ide else ':'+self.MACRO_NAME
730
- if is_ide and is_relative:
725
+ if is_ide and not_legacy:
731
726
  runner_path = Path(self.exo_py).relative_to(self.env.docs_dir_path)
732
727
 
728
+ if os.getenv("IDE_ID_WITH_POSIX"):
729
+ runner_path = runner_path.as_posix()
730
+ # This is used in CodEx's tests, to make sure the ids do not depend on the OS.
731
+ # Without that, the IDE ids do not match the ones registered in Capytale.
732
+
733
733
  to_hash = f"{ runner_path }{ self.IDE_VERT }{ less_ID_needs }{ project_id }"
734
+ # WARNING: there is still a problem here depending on the OS: people working
735
+ # on win/something else will get different html ids because of `\` vs `/` in
736
+ # `runner_path`... This is not a problem, from the end users PoV. This is only
737
+ # a problem (so far) for CodEx tests on Capytale, because the server stores the
738
+ # html ids of the DIE, to know where to put what.
734
739
 
735
740
  else:
736
741
  count = self.env.macros_counters[ self.MACRO_NAME ].inc()
@@ -46,7 +46,7 @@ def _more_code_fence(
46
46
  title: str,
47
47
  attrs: str,
48
48
  no_block: bool,
49
- lang: str='python',
49
+ lang: str=None,
50
50
  ):
51
51
  """
52
52
  Extra function to centralize some of the formatting logic.
@@ -61,7 +61,7 @@ def _more_code_fence(
61
61
  indent,
62
62
  title=(title or ""),
63
63
  attrs=(attrs or ""),
64
- lang=lang,
64
+ lang=lang or 'python',
65
65
  )
66
66
  return out
67
67
 
@@ -208,7 +208,10 @@ class LangDe(LangFr):
208
208
  """
209
209
  Tooltip for the button resetting the content of a code editor.
210
210
  """
211
- restart_confirm: Tr = Tip(0, "ACHTUNG: Durch das Zurücksetzen des Editors gehen alle bisherigen Codes, Validierungsstatus und Verlauf verloren.")
211
+ restart_confirm: Tr = MsgPlural(
212
+ "ACHTUNG: Durch das Zurücksetzen des Editors gehen alle bisherigen Codes, Validierungsstatus und Verlauf verloren.",
213
+ "Beim Zurücksetzen der Editoren gehen der bisherige Code, die Validierungsstatus und die Verläufe aller Editoren auf der Seite verloren.",
214
+ )
212
215
  """
213
216
  Confirmation question before resetting an IDE.
214
217
  """
@@ -261,7 +264,11 @@ class LangDe(LangFr):
261
264
  """
262
265
 
263
266
 
264
- # Trashcan button related
267
+ # Trashcan or resetAll button related
268
+ tip_reset_all: Tr = Tip(12, "Alle Editoren auf der Seite zurücksetze.")
269
+ """
270
+ Tooltip for the button to reset all the IDEs on the page.
271
+ """
265
272
  tip_trash: Tr = Tip(15, "Lösche die gespeicherten Codes im Webbrowser für {site_name}")
266
273
  """
267
274
  Tooltip for the button to delete the data stored in the browser's localStorage
@@ -207,7 +207,10 @@ class LangEn(LangFr):
207
207
  """
208
208
  Tooltip for the button resetting the content of a code editor.
209
209
  """
210
- restart_confirm: Tr = Tip(0, "WARNING: resetting the editor, you will lose previous codes, validation status and histories.")
210
+ restart_confirm: Tr = MsgPlural(
211
+ "WARNING: resetting the editor, you will lose previous codes, validation status and histories.",
212
+ "WARNING: resetting the editors will erase the previous code, validation statuses, and histories for all the editors on the page.",
213
+ )
211
214
  """
212
215
  Confirmation question before resetting an IDE.
213
216
  """
@@ -260,7 +263,11 @@ class LangEn(LangFr):
260
263
  """
261
264
 
262
265
 
263
- # Trashcan button related
266
+ # Trashcan or resetAll button related
267
+ tip_reset_all: Tr = Tip(12, "Reset all the editors on the page.")
268
+ """
269
+ Tooltip for the button to reset all the IDEs on the page.
270
+ """
264
271
  tip_trash: Tr = Tip(15, "Remove the saved codes for {site_name} from the browser")
265
272
  """
266
273
  Tooltip for the button to delete the data stored in the browser's localStorage
@@ -213,7 +213,10 @@ class LangFr(LangBase):
213
213
  """
214
214
  Info-bulle du bouton réinitialisant le contenu d'un éditeur.
215
215
  """
216
- restart_confirm: Tr = Tip(0, "ATTENTION: réinitialiser l'éditeur fera perdre les anciens codes, status de validation et historiques.")
216
+ restart_confirm: Tr = MsgPlural(
217
+ "ATTENTION: réinitialiser l'éditeur fera perdre les anciens codes, status de validation et historiques.",
218
+ "ATTENTION: réinitialiser les éditeurs fera perdre les anciens codes, status de validation et historiques pour tous les éditeurs de la page.",
219
+ )
217
220
  """
218
221
  Demande de confirmation à l'utilisateur avec de faire un restart de l'IDE.
219
222
  """
@@ -268,7 +271,11 @@ class LangFr(LangBase):
268
271
  """
269
272
 
270
273
 
271
- # Trashcan button related
274
+ # Trashcan or resetAll button related
275
+ tip_reset_all: Tr = Tip(12, "Réinitialiser tous les éditeurs de la page.")
276
+ """
277
+ Info-bulle du bouton de pour réinitialiser tous les IDEs de la page.
278
+ """
272
279
  tip_trash: Tr = Tip(15, "Supprimer du navigateur les codes enregistrés pour {site_name}")
273
280
  """
274
281
  Info-bulle du bouton de pour supprimer les données stockées dans le navigateur
@@ -207,7 +207,12 @@ class PageConfiguration(Dict[EditorName,MacroPyConfig]):
207
207
  def build_page_script_tag_with_ides_configs_mermaid_and_pool_data(
208
208
  self, overlord_classes:List[str]
209
209
  ):
210
-
210
+ """
211
+ Build a synch script tag, that his adding to the page the global data structures so that
212
+ the various elements needed in the page can be built:
213
+ - Update CONFIG mermaid and classes pool infos
214
+ - build the PAGE_IDES_CONFIGS compressed string
215
+ """
211
216
  json_ide_configs = '{' + ', '.join(
212
217
  f'"{ editor_name }": { ide_conf.dump_to_js_code() }'
213
218
  for editor_name, ide_conf in self.items()