pyodide-mkdocs-theme 5.5.6__tar.gz → 5.6.1__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 (161) hide show
  1. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/PKG-INFO +1 -1
  2. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/__main__.py +1 -1
  3. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/__version__.py +1 -0
  4. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -5
  5. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +3 -3
  6. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +8 -9
  7. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +1 -0
  8. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +53 -30
  9. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +10 -8
  10. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +9 -2
  11. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +10 -19
  12. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +29 -19
  13. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +25 -18
  14. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +126 -121
  15. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +2 -2
  16. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +0 -16
  17. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +0 -16
  18. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +0 -16
  19. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +1 -1
  20. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +29 -20
  21. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +5 -7
  22. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +10 -3
  23. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +4 -3
  24. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +2 -1
  25. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +25 -32
  26. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +74 -44
  27. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +41 -39
  28. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +52 -22
  29. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +110 -61
  30. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +52 -1
  31. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +50 -4
  32. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +5 -5
  33. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +3 -3
  34. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/ide_tests.py +80 -0
  35. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +1 -62
  36. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +13 -10
  37. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +3 -3
  38. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +7 -2
  39. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +89 -41
  40. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +36 -13
  41. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/README.md +36 -0
  42. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/assets/images/icons8-pause-64.png +0 -0
  43. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +4 -8
  44. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +6 -7
  45. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functools.js +25 -0
  46. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsUi.js +9 -6
  47. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +1 -2
  48. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +166 -0
  49. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +26 -44
  50. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +2 -2
  51. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +7 -20
  52. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-per-pages/5-2-virtualizer-ides_test.js +918 -0
  53. pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-per-pages/5-3-avl-ides_test.mjs +342 -0
  54. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +337 -387
  55. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +3 -2
  56. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +1 -1
  57. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +15 -27
  58. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +14 -16
  59. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/testing.css +69 -14
  60. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyproject.toml +1 -1
  61. pyodide_mkdocs_theme-5.5.6/pyodide_mkdocs_theme/__version__.py +0 -1
  62. pyodide_mkdocs_theme-5.5.6/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +0 -141
  63. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/LICENSE +0 -0
  64. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/README.md +0 -0
  65. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
  66. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5/cdns.txt +0 -0
  67. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5v2/__init__.py +0 -0
  68. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5v2/cdns.txt +0 -0
  69. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
  70. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis/cdns.txt +0 -0
  71. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
  72. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis_network/cdns.txt +0 -0
  73. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/__init__.py +0 -0
  74. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
  75. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
  76. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
  77. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +0 -0
  78. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
  79. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
  80. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
  81. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
  82. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
  83. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
  84. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
  85. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
  86. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
  87. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
  88. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
  89. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
  90. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/runners_macros.py +0 -0
  91. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
  92. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
  93. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
  94. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
  95. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
  96. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
  97. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
  98. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
  99. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +0 -0
  100. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
  101. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
  102. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
  103. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
  104. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
  105. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
  106. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
  107. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
  108. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
  109. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
  110. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
  111. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
  112. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
  113. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
  114. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
  115. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
  116. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
  117. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
  118. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
  119. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
  120. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
  121. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
  122. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
  123. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
  124. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
  125. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
  126. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
  127. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
  128. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
  129. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
  130. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
  131. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
  132. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
  133. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
  134. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsStorage.js +0 -0
  135. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsTxt.js +0 -0
  136. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsUiBuilder.js +0 -0
  137. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
  138. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
  139. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +0 -0
  140. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +0 -0
  141. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +0 -0
  142. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +0 -0
  143. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +0 -0
  144. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +0 -0
  145. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +1 -1
  146. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -0
  147. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
  148. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +0 -0
  149. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/main.html +0 -0
  150. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
  151. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
  152. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
  153. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
  154. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
  155. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
  156. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
  157. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
  158. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
  159. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
  160. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
  161. {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyodide-mkdocs-theme
3
- Version: 5.5.6
3
+ Version: 5.6.1
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.1"
@@ -211,7 +211,6 @@ def update_basthon_p5_code(file:str, target:str, tail:str=None):
211
211
 
212
212
  source_code = py_file.read_text(encoding='utf-8')
213
213
 
214
-
215
214
  # Determine the output file name:
216
215
  i_end = None
217
216
  tail = tail or '_pmt'
@@ -223,22 +222,18 @@ def update_basthon_p5_code(file:str, target:str, tail:str=None):
223
222
 
224
223
  print('Convert:', py_file, 'to', out_name)
225
224
 
226
-
227
225
  # First pass to update each p5 name to p5.name:
228
226
  p5_code, tree = update_code_with_nodes(source_code, find_p5_names, name_transform)
229
227
 
230
-
231
228
  # Second pass to update the `run` calls:
232
229
  run_call = find_runs_signature_call(tree, target)
233
230
  out_code,_ = update_code_with_nodes(p5_code, find_p5_run_calls, run_transformer(run_call))
234
231
  out_code = out_code.replace('from p5 import *', "import p5")
235
232
 
236
-
237
233
  # Show useful info to the user:
238
234
  P5Visitor().visit(ast.parse(out_code))
239
235
  P5Visitor.show_messages(run_call)
240
236
 
241
-
242
237
  # Dump the fixed file, in the same folder:
243
238
  out_file.write_text(out_code, encoding='utf-8')
244
239
 
@@ -266,7 +266,7 @@ class InclusionConfig:
266
266
  if not rel_path:
267
267
  raise PmtMacrosInvalidPmtFileError(
268
268
  "Inclusions using `[md]` or `[cwd]` require to specify a relative path information "
269
- f"(aka, `py_name`).\nOccurred in:\n{ self.parent.env.log() }"
269
+ f"(aka, `py_name`).\nFile containing the error: { self.parent.exo_file }"
270
270
  )
271
271
 
272
272
  as_path = Path(rel_path)
@@ -278,8 +278,8 @@ class InclusionConfig:
278
278
 
279
279
  if not runner_file:
280
280
  raise PmtMacrosInvalidPmtFileError(
281
- f"No file matching {(redirect or '')+rel_path!r} could be found, starting from "
282
- f"the { source.parent } directory."
281
+ f"No file matching {(redirect or '')+rel_path!r} could be found, starting from the"
282
+ f" { source.parent } directory.\nFile containing the error: { self.parent.exo_file }"
283
283
  )
284
284
 
285
285
  _, child = self.parent.get_file_extractor_for(
@@ -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
 
@@ -40,6 +40,7 @@ from ._html_builder import (
40
40
  button,
41
41
  code,
42
42
  div,
43
+ label,
43
44
  script,
44
45
  style,
45
46
  span,
@@ -21,8 +21,8 @@ If not, see <https://www.gnu.org/licenses/>.
21
21
 
22
22
  from typing import Any, Dict, Optional
23
23
 
24
- from ..exceptions import PmtInternalError
25
24
  from ..tools_and_constants import HtmlClass
25
+ from ..parsing import admonition_safe_html
26
26
 
27
27
 
28
28
 
@@ -31,9 +31,8 @@ def _build_html_attributes(
31
31
  id:str,
32
32
  kls:str,
33
33
  attrs: Dict[str, str],
34
- # disabled: Any=None,
35
- # checked: Any=None,
36
- kwargs: Dict[str,Any],
34
+ kwargs: Dict[str,Any], # NOTE: content overrides attrs values
35
+ # Supported through @kwargs or attrs: disabled, checked, for_
37
36
  ):
38
37
  """
39
38
  Build a string with all the desired html attributes for an opening tag.
@@ -53,6 +52,14 @@ def _build_html_attributes(
53
52
  attrs.update(kwargs)
54
53
  if id: attrs['id'] = id
55
54
  if kls: attrs['class'] = kls
55
+ if attrs.get('for_'):
56
+ attrs['for'] = attrs.pop('for_')
57
+
58
+ style = attrs.get('style')
59
+ if style and not isinstance(style, str):
60
+ raise ValueError(
61
+ f'The `style` argument should be given as a string, but was:\n{style!r}'
62
+ )
56
63
 
57
64
  if 'data' in attrs:
58
65
  data: Dict = attrs.pop('data')
@@ -114,13 +121,14 @@ a = bi_tag('a')
114
121
  button = bi_tag('button', type='button') # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#notes
115
122
  code = bi_tag('code')
116
123
  div = bi_tag('div')
124
+ label = bi_tag('label')
117
125
  script = bi_tag('script')
118
126
  style = bi_tag('style')
119
127
  span = bi_tag('span')
120
128
  svg = bi_tag('svg')
121
129
  td = bi_tag('td')
122
130
 
123
-
131
+ _label = label # To access the function from within the checkbox one, which has a label argument...
124
132
 
125
133
 
126
134
 
@@ -147,45 +155,50 @@ def checkbox(
147
155
  checked:bool,
148
156
  *,
149
157
  label:str="",
150
- id:str = "none",
158
+ id:str = "",
151
159
  kls:str = "",
152
160
  kls_box:str = "",
153
161
  tip_txt:str = "",
154
- width_em:Optional[int]=None,
155
- tip_shift:Optional[int]=None,
156
- bare_tip: bool = False
162
+ tip_width:Optional[int]=None,
163
+ disabled: bool = False,
164
+ box_left:bool = True
157
165
  ):
158
166
  """
159
167
  Build a checkbox with a PMT tooltip attached, and an optional label after it.
160
- If @bare_tip is True and there is no given label, attach the tooltip info as dataset
161
- directly on the input.
168
+ * @kls is on the outer element (whatever it is...)
169
+ * if @label is given, the checkbox is wrapped with a span element containing the
170
+ label and the checkbox
162
171
  """
163
- input_kw = {'checked':""} if checked else {}
172
+ box_kw = {}
173
+ if checked: box_kw['checked'] = ""
174
+ if disabled: box_kw['disabled'] = ""
175
+
176
+ tip_kw = {}
177
+ if tip_txt:
178
+ tip_kw['data-tip-txt'] = tip_txt
179
+ if tip_width is not None:
180
+ tip_kw['data-tip-width'] = tip_width
181
+
182
+ tip_box, tip_label = ({},tip_kw) if label else (tip_kw,{})
164
183
 
165
- if bare_tip:
166
- if label or kls:
167
- raise PmtInternalError(
168
- "A checkbox built with @bare_tip=True shouldn't have a label or a class for any outer element."
169
- )
170
- dct = {}
171
- if tip_txt:
172
- dct['data-tip-txt'] = tip_txt
173
- if width_em is not None: dct['data-tip-width'] = width_em
174
- input_kw.update(dct)
175
- kls_box = f"{ kls_box } { HtmlClass.tooltip }".lstrip()
176
- else:
177
- txt = label and span(label)
178
- tip = tooltip(tip_txt, width_em, shift=tip_shift)
184
+ kls_box = f"{ kls_box } { HtmlClass.tooltip * bool(tip_txt) }".strip()
185
+ box = input('', type='checkbox', id=id, kls=kls_box, **tip_box, **box_kw)
179
186
 
180
- box = input('', type='checkbox', disabled=True, id=id, kls=kls_box, **input_kw)
181
- return box if bare_tip else div( box+txt+tip, kls=f'{ HtmlClass.tooltip } { kls }'.rstrip() )
187
+ if label:
188
+ side_margin = 'left' if box_left else 'right'
189
+ box = _label(
190
+ box*box_left + span(label, style=f'margin-{side_margin}:10px') + box*(not box_left),
191
+ kls=f"{ kls } { HtmlClass.tooltip * bool(tip_txt) }".strip(),
192
+ for_=id, **tip_label,
193
+ )
194
+ return box
182
195
 
183
196
 
184
197
 
185
198
 
186
199
 
187
200
 
188
- SVG_BOX_TEMPLATE = '''\
201
+ SVG_BOX_TEMPLATE = admonition_safe_html('''\
189
202
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
190
203
  <svg {attrs} viewBox="0 0 12 12" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" style="stroke-width:1.25;stroke-linecap:round">
191
204
  <path class="bgd-svg" style="fill:var(--qcm-fill);stroke:none;" d="M 5.93,1.93 3.29,2.40 2.70,2.75 1.86,5.70 2.38,8.76 2.75,9.29 5.82,10.13 9.07,9.45 9.36,9.13 10.12,6.11 9.49,2.93 9.12,2.65 Z"></path>
@@ -197,7 +210,7 @@ SVG_BOX_TEMPLATE = '''\
197
210
  </g>
198
211
  </g>
199
212
  <g style="fill:none;stroke:var(--qcm-border)">{shape}</g>
200
- </svg>'''
213
+ </svg>''')
201
214
  CIRCLE_QCS = '<circle cy="6" cx="6" r="4.2"></circle>'
202
215
  SQUARE_QCM = '<rect width="7.41" height="7.36" x="2.29" y="2.32"></rect>'
203
216
 
@@ -207,8 +220,18 @@ def svg_qcm_box(
207
220
  id: str = "",
208
221
  kls: str = "",
209
222
  attrs: Dict[str,Any] = None,
223
+ state:str=None,
224
+ tip_txt:str=None,
225
+ tip_width:float=None,
210
226
  **kwargs
211
227
  ):
228
+ if tip_txt:
229
+ kls = 'tooltip '+kls
230
+ kwargs['data-tip-txt'] = tip_txt
231
+ if tip_width is not None:
232
+ kwargs['data-tip-width'] = tip_width
233
+ if state is not None:
234
+ kwargs['data-state'] = state
212
235
  shape = SQUARE_QCM if is_multi else CIRCLE_QCS
213
236
  attributes = _build_html_attributes(id, f'qcm {kls}'.rstrip(), attrs, kwargs)
214
237
  return SVG_BOX_TEMPLATE.format(attrs=attributes, shape=shape)
@@ -203,14 +203,14 @@ class HtmlDependencies:
203
203
  jsLogger = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/jsLogger.js", type="module")
204
204
  mathjax = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/mathjax-libs.js", type="text/javascript")
205
205
  process_and_gui = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/process_and_gui.js", type="module")
206
- generic = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/0-generic.css")
207
- header = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/btns-header.css")
208
- history = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/history.css")
209
- hourglass = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/hourglass.css")
210
- ide = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/ide.css")
211
- qcm = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/qcm.css")
212
- terminal = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/terminal.css")
213
- testing = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/testing.css")
206
+ css_generic = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/0-generic.css")
207
+ css_header = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/btns-header.css")
208
+ css_history = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/history.css")
209
+ css_hourglass = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/hourglass.css")
210
+ css_ide = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/ide.css")
211
+ css_qcm = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/qcm.css")
212
+ css_terminal = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/terminal.css")
213
+ css_testing = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/testing.css")
214
214
  # GENERATED-libs
215
215
  #^^^^^^^^^^^^^^^
216
216
 
@@ -234,6 +234,8 @@ class HtmlDependencies:
234
234
  idesManager = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-0-idesManager-ide.js", type="module")
235
235
  ideLogistic = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideLogistic-ide.js", type="module")
236
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")
237
239
  ideTester = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-ideTester-ides_test.js", type="module", pool="IdeTester")
238
240
  init = Cdn(Block.content, DepKind.playground, "{base_url}/js-per-pages/6-2-init-playground.js", type="module")
239
241
  idePlayground = Cdn(Block.content, DepKind.playground, "{base_url}/js-per-pages/6-idePlayground-playground.js", type="module", pool="IdePlayground")
@@ -76,7 +76,7 @@ class DepKind:
76
76
  sorting from the given @kind, which is already present in @needs.
77
77
  Keep adding kinds as long as they are not present in @needs.
78
78
  """
79
- # NOTE: this is almost useless, for PMT 4^ because of automatic resolution of imported
79
+ # NOTE: this is almost useless for PMT 4+, because of automatic resolution of imported
80
80
  # modules, BUT there are still some needs for non modules, so keep everything as is...
81
81
 
82
82
  # Keep in mind DepKind _values_ are actually SIMPLE STRINGS!
@@ -159,10 +159,10 @@ class Dep:
159
159
  """ Static property: Store HtmlDependencies property names, to make sure they are unique. """
160
160
 
161
161
 
162
-
163
162
  def __init_subclass__(cls):
164
163
  Dep.EXTENSION_TO_CLASS[cls.EXTENSION] = cls
165
164
 
165
+ #-------------------------------------------------------------------------
166
166
 
167
167
  @staticmethod
168
168
  def auto_ordering():
@@ -218,11 +218,18 @@ class Dep:
218
218
 
219
219
 
220
220
  def get_html_tag(self):
221
+ """
222
+ Convert tu current dependency to the corresponding html tag to insert in the page.
223
+ """
221
224
  return self.DUMP_TEMPLATE.format(
222
225
  data=' '.join(f'{k}="{v}"' for k,v in self.data.items())
223
226
  )
224
227
 
225
228
  def gen_import_map(self):
229
+ """
230
+ Return an iterator of items to add the current dependency to the importmap tag.
231
+ Reminder: only js modules have to be referenced.
232
+ """
226
233
  return ()
227
234
 
228
235
 
@@ -31,11 +31,11 @@ from pyodide_mkdocs_theme.pyodide_macros.html_dependencies.deps_class import Dep
31
31
 
32
32
 
33
33
  from .. import html_builder as Html
34
- from ..tools_and_constants import HtmlClass, PmtCte, IdeMode, PmtPyMacrosName, Prefix
34
+ from ..tools_and_constants import HtmlClass, PmtCte, IdeMode, PmtPyMacrosName, Prefix, NamedTestCase
35
35
  from ..messages import Tip
36
36
  from ..parsing import add_indent, admonition_safe_html, build_code_fence, items_comma_joiner
37
37
  from ..plugin_tools.test_cases import Case
38
- from ..plugin_tools.macros_data import IdeToTest
38
+ from ..plugin_tools.ide_tests import IdeTests
39
39
  from ..plugin_config import PLUGIN_CONFIG_SRC
40
40
 
41
41
  from .ide_term_ide import CommonTermIde
@@ -75,6 +75,9 @@ class Ide(CommonTermIde):
75
75
  (what an awful interface, yeah... x) )
76
76
  """
77
77
 
78
+ IS_TESTED: ClassVar[bool] = True
79
+ """ True if the IDE is supposed to end up in the `test_ides` page. """
80
+
78
81
  NEED_INDENTS: ClassVar[bool] = True
79
82
 
80
83
  MACRO_NAME: ClassVar[PmtPyMacrosName] = PmtPyMacrosName.IDE
@@ -189,25 +192,13 @@ class Ide(CommonTermIde):
189
192
 
190
193
  def __post_init__(self):
191
194
  super().__post_init__()
192
- self.register_ide_for_tests()
193
-
194
-
195
-
196
- def register_ide_for_tests(self):
197
- """
198
- Archive config info about the current IDE and register for testing...
199
- """
200
- case = Case.auto_convert_str_to_case(self.test_config)
201
-
202
- some_to_test = self.has_code if case.code else self.has_corr
203
- fallback = self.env.testing_empty_section_fallback
204
- if not some_to_test and fallback:
205
- setattr(case, fallback, True)
206
195
 
207
- self.test_config = case
196
+ if not self.IS_TESTED:
197
+ return
208
198
 
209
- test = IdeToTest.from_ide(self)
210
- self.env.archive_ide_to_tests(test)
199
+ self.test_config = Case.auto_convert_and_fix_case(self)
200
+ ide_tests = IdeTests.from_ide(self)
201
+ self.env.archive_ide_for_tests(ide_tests)
211
202
 
212
203
 
213
204
 
@@ -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()
@@ -788,6 +793,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
788
793
  margin_right: float = 0.2,
789
794
  extra_btn_kls: str = "",
790
795
  tip_side: P5BtnLocation = "",
796
+ tip_txt: str = "",
791
797
  bare_tip: bool = False,
792
798
  **kwargs
793
799
  ) -> str:
@@ -806,6 +812,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
806
812
  margin_right = margin_right,
807
813
  extra_btn_kls = extra_btn_kls,
808
814
  tip_side = tip_side,
815
+ tip_txt = tip_txt,
809
816
  bare_tip = bare_tip,
810
817
  **kwargs
811
818
  )
@@ -821,6 +828,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
821
828
  margin_right: float = 0.2,
822
829
  extra_btn_kls: str = "",
823
830
  tip_side: P5BtnLocation = "",
831
+ tip_txt: str = "",
824
832
  bare_tip: bool = False,
825
833
  **kwargs
826
834
  ) -> str:
@@ -843,14 +851,15 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
843
851
 
844
852
  img = Html.img(src=img_link, kls=HtmlClass.skip_light_box, **img_style)
845
853
 
846
- tip_txt: Tip = getattr(env.lang, lang_prop)
854
+ tip: Tip = tip_txt or getattr(env.lang, lang_prop)
855
+ tip_width = None if tip_txt else tip.em
847
856
  if bare_tip:
848
857
  tip_span = ""
849
858
  kwargs['data'] = kwargs.get('data', {})
850
- kwargs['data']['tip-txt'] = str(tip_txt)
851
- if tip_txt.em: kwargs['data']['tip-width'] = tip_txt.em
859
+ kwargs['data']['tip-txt'] = str(tip)
860
+ if tip_width: kwargs['data']['tip-width'] = tip_width
852
861
  else:
853
- tip_span = Html.tooltip(tip_txt, tip_txt.em, tip_side=tip_side or P5BtnLocation.bottom)
862
+ tip_span = Html.tooltip(tip, tip_width, tip_side=tip_side or P5BtnLocation.bottom)
854
863
 
855
864
  btn_style = f"margin-left:{margin_left}em; margin-right:{ margin_right }em;"
856
865
  if 'style' in kwargs:
@@ -887,6 +896,7 @@ BTNS_KINDS_CONFIG = {
887
896
  'show': ('check', 'show', 'gray'),
888
897
 
889
898
  'test_ides': ('play', 'test_ides', 'orange'),
899
+ 'test_pause': ('pause', 'test_pause', 'orange'),
890
900
  'test_stop': ('stop', 'test_stop', 'orange'),
891
901
  'test_1_ide': ('play', 'test_1_ide', 'orange'),
892
902
  'load_ide': ('download', 'load_ide', None),
@@ -42,6 +42,8 @@ class IdePlayground(CommonGeneratedIde, Ide):
42
42
 
43
43
  DEPS_KIND: ClassVar[DepKind] = DepKind.playground
44
44
 
45
+ IS_TESTED: ClassVar[bool] = False
46
+
45
47
 
46
48
  @property
47
49
  def has_check_btn(self):
@@ -64,19 +66,17 @@ class IdePlayground(CommonGeneratedIde, Ide):
64
66
  return False
65
67
 
66
68
 
67
-
68
69
  def exported_items(self):
70
+ """
71
+ Override the exported values, making sure deactivate_stdout_for_secrets is always
72
+ false in the playground (otherwise, it becomes mainly useless...).
73
+ """
69
74
  yield from (
70
75
  (k,v) if k!='deactivate_stdout_for_secrets' else (k, False)
71
76
  for k,v in super().exported_items()
72
77
  )
73
78
 
74
79
 
75
-
76
- def register_ide_for_tests(self):
77
- """ IdeTester instances are never registered for testing... """
78
-
79
-
80
80
  # def list_of_buttons(self):
81
81
  # """ Keep only public tests, validations and restart. """
82
82
  # btns = super().list_of_buttons()
@@ -84,7 +84,6 @@ class IdePlayground(CommonGeneratedIde, Ide):
84
84
  # return btns[:2] + [restart]
85
85
 
86
86
 
87
-
88
87
  #-----------------------------------------------------------------------------------
89
88
 
90
89
 
@@ -117,16 +116,23 @@ class IdePlayground(CommonGeneratedIde, Ide):
117
116
  # Playground {{ data-search-exclude }}
118
117
 
119
118
 
120
- Cette page permet de développer dynamiquement dans un contexte où les différentes sections sont
121
- modifiables et exécutables à volonté : lorsque l'IDE est exécuté, les contenus de tous les autres
122
- éditeurs de la page sont utilisés en tant que sections de l'IDE.
119
+ Cette page permet de développer dynamiquement dans un contexte où les différentes
120
+ [`sections`]({ GIT_LAB_PAGES }redactors/IDE-details/#ide-sections) sont modifiables et exécutables
121
+ à volonté : lorsque l'IDE est exécuté, les contenus de tous les autres éditeurs de la page sont
122
+ utilisés en tant que sections de l'IDE.
123
+
124
+ Elle permet donc d'accélérer la création et le débogage des codes pythons pour un exercice, sans
125
+ avoir besoin de passer par de multiples pipelines ou `mkdocs serve`.
126
+
127
+ <br>
123
128
 
129
+ * <span style="color:orange" markdown>___Le bouton de téléversement de l'IDE permet d'importer un fichier existant pour
130
+ ensuite en modifier les différentes sections.___</span>
131
+ * <span style="color:orange" markdown>___Le bouton de téléchargement de l'IDE permet de récupérer un fichier PMT correctement
132
+ formaté, avec toutes les sections assemblées.___</span>
133
+ * Toutes les [`python_libs`]({ GIT_LAB_PAGES }custom/python_libs/) du site sont utilisables dans l'IDE.
124
134
  * Les raccourcis ++ctrl+s++ (tests publics) et ++ctrl+enter++ (validation) sont actifs dans
125
135
  n'importe quel éditeur de la page.
126
- * Le bouton de téléversement permet d'importer un fichier existant pour ensuite en modifier
127
- les différentes sections.
128
- * Le bouton de téléchargement sous l'IDE permet de récupérer un fichier PMT correctement formaté,
129
- avec toutes les sections assemblées.
130
136
  * Le contenu de la section `tests` est automatiquement exécuté après le contenu de l'IDE : il n'est
131
137
  pas nécessaire d'en rajouter le code dans celui-ci pour retrouver le comportement habituel des IDEs
132
138
  normaux, que ce soit pour les tests publics ou les validations.
@@ -138,10 +144,11 @@ normaux, que ce soit pour les tests publics ou les validations.
138
144
 
139
145
  <br>
140
146
 
141
- ??? help "Aide..."
142
- - [Configuration]({ GIT_LAB_PAGES }custom/config/#pyodide_macros.playground) de la page Playground.
143
- - Informations sur les différentes [`sections`]({ GIT_LAB_PAGES }redactors/IDE-details/#ide-sections)
144
- et leurs comportements
147
+ ???+ help "Configurer et utiliser la page Playground sur votre site ?"
148
+
149
+ La page décrivant les options de configuration de la page Playground :
150
+
151
+ [`Utilisations avancées/configuration`]({ GIT_LAB_PAGES }custom/config/#pyodide_macros.playground)
145
152
 
146
153
  <br>
147
154