pyodide-mkdocs-theme 5.6.1__tar.gz → 5.6.3__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.1 → pyodide_mkdocs_theme-5.6.3}/PKG-INFO +1 -1
  2. pyodide_mkdocs_theme-5.6.3/pyodide_mkdocs_theme/__version__.py +1 -0
  3. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +61 -99
  4. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +22 -55
  5. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/runners_macros.py +1 -1
  6. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +9 -2
  7. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +9 -2
  8. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +9 -2
  9. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +5 -0
  10. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +7 -7
  11. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +3 -6
  12. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functools.js +57 -7
  13. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsUiBuilder.js +1 -3
  14. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +54 -34
  15. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +12 -5
  16. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +36 -83
  17. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +11 -3
  18. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +37 -25
  19. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +2 -2
  20. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +6 -1
  21. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +11 -2
  22. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +16 -1
  23. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/5-3-avl-ides_test.mjs +25 -13
  24. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +1 -1
  25. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +22 -3
  26. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +1 -0
  27. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +2 -1
  28. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +11 -10
  29. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyproject.toml +1 -1
  30. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/__version__.py +0 -1
  31. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -42
  32. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/LICENSE +0 -0
  33. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/README.md +0 -0
  34. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
  35. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5/cdns.txt +0 -0
  36. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5v2/__init__.py +0 -0
  37. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5v2/cdns.txt +0 -0
  38. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
  39. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis/cdns.txt +0 -0
  40. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
  41. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis_network/cdns.txt +0 -0
  42. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/__init__.py +0 -0
  43. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/__main__.py +0 -0
  44. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -0
  45. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
  46. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
  47. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
  48. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +0 -0
  49. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +0 -0
  50. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +0 -0
  51. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
  52. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
  53. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
  54. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +0 -0
  55. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +0 -0
  56. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
  57. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
  58. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
  59. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
  60. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +0 -0
  61. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +0 -0
  62. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +0 -0
  63. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
  64. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
  65. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
  66. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
  67. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +0 -0
  68. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +0 -0
  69. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
  70. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
  71. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
  72. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
  73. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
  74. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
  75. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +0 -0
  76. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
  77. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +0 -0
  78. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +0 -0
  79. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +0 -0
  80. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
  81. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +0 -0
  82. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +0 -0
  83. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
  84. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
  85. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +0 -0
  86. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +0 -0
  87. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +0 -0
  88. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
  89. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
  90. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +0 -0
  91. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
  92. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +0 -0
  93. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
  94. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +0 -0
  95. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +0 -0
  96. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +0 -0
  97. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +0 -0
  98. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
  99. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/ide_tests.py +0 -0
  100. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +0 -0
  101. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +0 -0
  102. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +0 -0
  103. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +0 -0
  104. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
  105. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +0 -0
  106. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
  107. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
  108. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
  109. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
  110. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
  111. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
  112. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
  113. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
  114. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
  115. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
  116. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
  117. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
  118. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
  119. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
  120. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
  121. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/README.md +0 -0
  122. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
  123. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
  124. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
  125. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
  126. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-pause-64.png +0 -0
  127. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
  128. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
  129. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
  130. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
  131. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
  132. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
  133. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
  134. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
  135. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +0 -0
  136. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsStorage.js +0 -0
  137. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsTxt.js +0 -0
  138. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsUi.js +0 -0
  139. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +0 -0
  140. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
  141. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
  142. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +0 -0
  143. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +0 -0
  144. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/5-2-virtualizer-ides_test.js +0 -0
  145. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
  146. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/main.html +0 -0
  147. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
  148. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
  149. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
  150. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
  151. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
  152. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
  153. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +0 -0
  154. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
  155. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
  156. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
  157. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
  158. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
  159. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
  160. {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/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.1
3
+ Version: 5.6.3
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
@@ -0,0 +1 @@
1
+ __version__ = "5.6.3"
@@ -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
 
@@ -17,7 +17,7 @@ along with this program.
17
17
  If not, see <https://www.gnu.org/licenses/>.
18
18
  """
19
19
 
20
- # pylint: disable=invalid-name, missing-module-docstring
20
+ # pylint: disable=invalid-name
21
21
 
22
22
 
23
23
  from typing import Optional, Type
@@ -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
@@ -154,6 +154,11 @@ class PyodideMacrosPlugin(
154
154
 
155
155
  self.macro(test_cases.Case) # Not a macro, but needed in the jinja environment
156
156
 
157
+ @self.macro
158
+ def base_url():
159
+ return self.base_url
160
+
161
+
157
162
  # If mkdocs-sqlite-console is registered as plugin for the project, automatically add
158
163
  # the macro to the environment (requires sqlite-console > 1.0.7)
159
164
  if self.use_sqlite_console:
@@ -145,6 +145,12 @@ class Case:
145
145
  Quick description of the test (optional).
146
146
  """
147
147
 
148
+ inputs: Optional[Sequence[str]] = None
149
+ """
150
+ Tuple or list of strings that will be returned during the test by any call to `input`.
151
+ """
152
+
153
+
148
154
  #-------------------------------------------------------------------------
149
155
  # Private interface:
150
156
 
@@ -258,21 +264,15 @@ class Case:
258
264
  - `hasCounter`
259
265
  - `hasRevealBtn`
260
266
  - `hasTerminal`
261
- - `hasTerminal`
262
- - `hasTerminal`
263
267
  - `isDelayedRevelation`
264
268
  - `isFullScreen`
265
269
  - `isIde`
266
- - `isIde`
267
270
  - `isInSequentialRun`
268
271
  - `isInSplit`
269
272
  - `isPyBtn`
270
- - `isPyBtn`
271
273
  - `isRunner`
272
274
  - `isStarredGroup`
273
275
  - `isTerminal`
274
- - `isTerminal`
275
- - `isTerminal`
276
276
  - `isVert`
277
277
  - `maxIdeLines`
278
278
  - `minIdeLines`
@@ -452,7 +452,7 @@ class Case:
452
452
  criteria: see below).
453
453
  """
454
454
  dumped = {
455
- f.name: v
455
+ f.name: v if f.name != 'inputs' else list(v)
456
456
  for f in fields(self)
457
457
  if f.name not in skipped_props # Useful in the JS layer of the tests...
458
458
  and ( # ...and:
@@ -18,12 +18,6 @@ If not, see <https://www.gnu.org/licenses/>.
18
18
  */
19
19
 
20
20
 
21
- /*
22
- NOTE: Globals defined somewhere else:
23
- * The "ace" variable is defined in the ace library. Everything using it must be called after
24
- the libs insertion steps.
25
- */
26
-
27
21
 
28
22
  const SqBs = {
29
23
  '[':'&lsqb;',
@@ -110,6 +104,7 @@ const CONFIG = {
110
104
  successTail: null,
111
105
  tests: null,
112
106
  testsDone: null,
107
+ tipResetAll: null,
113
108
  tipTrash: null,
114
109
  titleCorr: null,
115
110
  titleRem: null,
@@ -179,7 +174,9 @@ const CONFIG = {
179
174
  },
180
175
 
181
176
 
177
+ // Proxy-like object toward the GlobalRunnersManager. Holds only methods, no shared state:
182
178
  RUNNERS_MANAGER: null,
179
+
183
180
  pyodideIsReady: false,
184
181
  classesPoolIsReady: false,
185
182
  overlordIsReady: false,
@@ -63,7 +63,7 @@ export const cssPx =(jObj,prop='height')=> +jObj.css(prop).slice(0,-2)
63
63
  * is single threaded, and its value is protected be defining it within a scope where the
64
64
  * "locking" function is also defined (behaves like a python/TS decorator. Kinda... :p ).
65
65
  * */
66
- export const withPyodideAsyncLock = (_=>{
66
+ export const withPyodideAsyncLock = (()=>{
67
67
 
68
68
  /**Everything is run async but single threaded, so a global lock can be added, using a simple
69
69
  * boolean flag, declared inside a closure to avoid a user messing with the variable...
@@ -327,7 +327,57 @@ export function waitForClassesPoolReady(applyWhenPoolReady=null){
327
327
 
328
328
 
329
329
 
330
+ const LOADED = new Set()
330
331
 
332
+ const _ressourceLoaderFactory = (tagName, attr, kind, baseOptions={}) => (options) => new Promise(
333
+ (resolve,reject)=>{
334
+ options = (typeof(options)=='string' ? {[attr]: options} : options)
335
+ options = {crossOrigin: "anonymous", referrerPolicy: "no-referrer", ...baseOptions, ...options}
336
+
337
+ if(LOADED.has(options[attr])) return resolve()
338
+
339
+ const tag = document.createElement(tagName)
340
+ tag.addEventListener("load", _=>{ LOADED.add(options[attr]); resolve() })
341
+ tag.addEventListener("error", _=>reject(console.error(`Could not load ${ options[attr] } ${kind}`)))
342
+ for(const k in options){
343
+ if(k==attr) continue // Always set last...
344
+ tag[k] = options[k]
345
+ }
346
+ tag[attr] = options[attr] // Always set LAST (something about the script loading triggered whe src is added...)
347
+ document.head.appendChild(tag)
348
+ }
349
+ )
350
+
351
+
352
+ export const cdnLoader = _ressourceLoaderFactory('script', 'src', 'script')
353
+ export const cssLoader = _ressourceLoaderFactory('link', 'href', 'css', {rel:'stylesheet'})
354
+
355
+
356
+ export const externalRessourcesLoaderFor = (name, ressourcesArr)=>{
357
+ if(name) console.log(`Loading ${ name } utilities...`)
358
+ const done = Promise.all(ressourcesArr.map(o=>typeof(o)!='string' && ('href' in o) ? cssLoader(o):cdnLoader(o)))
359
+ if(name) console.log(name, 'ready')
360
+ return done
361
+ }
362
+
363
+
364
+ export class RessourcesLoader {
365
+
366
+ static RESSOURCES = []
367
+ static POST_ACTIONS = []
368
+
369
+ static register(options, post=null){
370
+ RessourcesLoader.RESSOURCES.push(options)
371
+ if(post) RessourcesLoader.POST_ACTIONS.push(post)
372
+ return RessourcesLoader
373
+ }
374
+
375
+ static async loadAll(){
376
+ await externalRessourcesLoaderFor('', RessourcesLoader.RESSOURCES).then(async _=>{
377
+ await Promise.all(RessourcesLoader.POST_ACTIONS.map(p=>p()))
378
+ })
379
+ }
380
+ }
331
381
 
332
382
 
333
383
 
@@ -613,9 +663,9 @@ export class RunningProfile {
613
663
  * (done this way to get autocompletion support when coding in js, without
614
664
  * breaking the current implementation logic).
615
665
  * */
616
- static buildDefaultRunnersObject(asProperties=false){
666
+ static buildDefaultRunnersObject(withValues=false){
617
667
  const obj = {...RunningProfile.PROFILE}
618
- for(const k in obj) obj[k] = asProperties ? k : undefined
668
+ for(const k in obj) obj[k] = withValues ? k : undefined
619
669
  obj.default = undefined
620
670
  return obj
621
671
  }
@@ -625,11 +675,11 @@ export class RunningProfile {
625
675
 
626
676
  static build(profile){
627
677
  return Object.freeze({
628
- name: profile,
629
- isTermCmd: profile.includes(RunningProfile.PROFILE.cmd),
630
- isPlaying: profile.includes(RunningProfile.PROFILE.play),
678
+ name: profile,
679
+ isTermCmd: profile.includes(RunningProfile.PROFILE.cmd),
680
+ isPlaying: profile.includes(RunningProfile.PROFILE.play),
631
681
  isValidating: profile.includes(RunningProfile.PROFILE.validate),
632
- isTesting: profile.includes(RunningProfile.PROFILE.testing),
682
+ isTesting: profile.includes(RunningProfile.PROFILE.testing),
633
683
  })
634
684
  }
635
685
  }
@@ -38,7 +38,7 @@ const defaultOptions=(options, prop)=>({
38
38
  tagClass: "vertical",
39
39
  tagId: prop,
40
40
  fontSize: "",
41
- extraStyles: "", // For the outer element/tag, as "width:min-content;..."
41
+ extraStyle: "", // For the outer element/tag, as "width:min-content;..."
42
42
 
43
43
  // If a label is used:
44
44
  label: prop,
@@ -174,7 +174,6 @@ export function buildJqTextArea(obj, prop, options={}){
174
174
  * */
175
175
  export function buildJqCheckBox(obj, prop, options={}){
176
176
  options.tagClass = ("horizontal "+(options.tagClass??"")).trim()
177
- options.extraStyles = "grid-template-columns: max-content max-content;grid-gap:5px;"
178
177
  options.labelFirst ??= false
179
178
  options = defaultOptions(options, prop)
180
179
  const kls = options.inputClass ? `class="${ options.inputClass }"`:""
@@ -192,7 +191,6 @@ export function buildJqCheckBox(obj, prop, options={}){
192
191
  * */
193
192
  export function buildJqNumber(obj, prop, options={}){
194
193
  options.tagClass = ("horizontal "+(options.tagClass??"")).trim()
195
- options.extraStyles = "grid-template-columns: max-content max-content;grid-gap:5px;"
196
194
  options.labelFirst ??= false
197
195
  options = defaultOptions(options, prop)
198
196
  const kls = options.inputClass ? `class="${ options.inputClass }"`:""