pyodide-mkdocs-theme 5.4.0__tar.gz → 5.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/PKG-INFO +1 -1
  2. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +1 -1
  3. pyodide_mkdocs_theme-5.4.2/pyodide_mkdocs_theme/__version__.py +1 -0
  4. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +1 -1
  5. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +32 -34
  6. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +1 -2
  7. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +5 -2
  8. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +17 -6
  9. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +3 -1
  10. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +6 -8
  11. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +26 -0
  12. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +1 -0
  13. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +4 -2
  14. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +7 -0
  15. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +1 -1
  16. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +1 -0
  17. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-libs/functools.js +10 -4
  18. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +12 -8
  19. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyproject.toml +1 -1
  20. pyodide_mkdocs_theme-5.4.0/pyodide_mkdocs_theme/__version__.py +0 -1
  21. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/LICENSE +0 -0
  22. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/README.md +0 -0
  23. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
  24. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
  25. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/__init__.py +0 -0
  26. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/__main__.py +0 -0
  27. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -0
  28. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
  29. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
  30. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
  31. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
  32. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
  33. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +0 -0
  34. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +0 -0
  35. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
  36. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +0 -0
  37. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +0 -0
  38. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
  39. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/IDEs.py +0 -0
  40. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
  41. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
  42. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +0 -0
  43. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +0 -0
  44. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
  45. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
  46. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
  47. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +0 -0
  48. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
  49. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
  50. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +0 -0
  51. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +0 -0
  52. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +0 -0
  53. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
  54. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
  55. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
  56. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +0 -0
  57. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
  58. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +0 -0
  59. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +0 -0
  60. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
  61. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +0 -0
  62. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
  63. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +0 -0
  64. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
  65. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +0 -0
  66. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +0 -0
  67. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +0 -0
  68. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
  69. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
  70. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
  71. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
  72. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +0 -0
  73. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +0 -0
  74. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +0 -0
  75. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +0 -0
  76. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
  77. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +0 -0
  78. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +0 -0
  79. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +0 -0
  80. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +0 -0
  81. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
  82. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +0 -0
  83. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
  84. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
  85. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
  86. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
  87. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
  88. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
  89. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
  90. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
  91. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
  92. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
  93. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
  94. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
  95. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
  96. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
  97. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
  98. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/README.md +0 -0
  99. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
  100. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
  101. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
  102. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
  103. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
  104. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
  105. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
  106. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
  107. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
  108. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
  109. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
  110. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
  111. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +0 -0
  112. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +0 -0
  113. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +0 -0
  114. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
  115. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +0 -0
  116. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +0 -0
  117. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
  118. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +0 -0
  119. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +0 -0
  120. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +0 -0
  121. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +0 -0
  122. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +0 -0
  123. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +0 -0
  124. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +0 -0
  125. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +0 -0
  126. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +0 -0
  127. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +0 -0
  128. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -0
  129. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +0 -0
  130. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +0 -0
  131. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
  132. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +0 -0
  133. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/main.html +0 -0
  134. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
  135. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
  136. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
  137. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
  138. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
  139. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
  140. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +0 -0
  141. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
  142. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
  143. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
  144. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
  145. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
  146. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
  147. {pyodide_mkdocs_theme-5.4.0 → pyodide_mkdocs_theme-5.4.2}/pyodide_mkdocs_theme/templates/pyodide-css/testing.css +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyodide-mkdocs-theme
3
- Version: 5.4.0
3
+ Version: 5.4.2
4
4
  Summary: Package embedding the necessary tools to host pyodide, ACE editors, jQuery terminals in mkdocs documentations
5
5
  License: GPL-3.0-or-later
6
6
  Keywords: mkdocs,mkdocs-plugin,pyodide,IDE,terminal
@@ -4,7 +4,7 @@ p5.js wrapper for Pyodide-MkDocs-Theme, by Frédéric Zinelli.
4
4
  Basic use:
5
5
 
6
6
  1. Import p5 as a namespace (no wildcard imports!):
7
- 2. Define the setup and draw callbacks, using calls to the original p6 JS functions,
7
+ 2. Define the setup and draw callbacks, using calls to the original p5 JS functions,
8
8
  using`p5.functionName()` syntax.
9
9
  3. Call `p5.run(setup, draw, preload, target="div_id")` at the end of the code (`preload`
10
10
  is optional / `target` is also optional and defaults to the current PMT option value
@@ -0,0 +1 @@
1
+ __version__ = "5.4.2"
@@ -136,7 +136,7 @@ Replacements:{ replacements }"""
136
136
  self.err_stack_closing()
137
137
  j = self.i
138
138
  str_repr = ''.join(self.tokens[i:j])
139
- return eval(str_repr)
139
+ return eval(str_repr) # Using eval to automatically handle escaped chars
140
140
 
141
141
 
142
142
  INCLUSION_PARSER = InclusionParser()
@@ -17,45 +17,42 @@ along with this program.
17
17
  If not, see <https://www.gnu.org/licenses/>.
18
18
  """
19
19
 
20
+
21
+
22
+
20
23
  """
21
24
  # Extractor general contracts/logic:
22
25
  ------------------------------------
23
26
 
24
27
 
25
- Represent all the files associated to a runner (IDE, terminal, ...), holding the logic/tools
26
- to build the various sections contents.
28
+ Represent all the files associated to a runner (IDE, terminal, sqlide, ...), holding the
29
+ logic/tools to build the various sections contents.
27
30
 
28
31
  Context/Contracts/Goals:
29
32
 
30
33
  * An Extractor is linked to a single PMT file, with its potential "direct" dependencies
31
- (aka REMs, or tests/corr files par for the PM source project's format).
32
-
33
- * The PMT file can actually not exist at all! (in that case, exo_py is None)
34
-
35
- * A PMT file, if it exists, contains sections, delimited by tokens in the form:
36
- `{something} (PMT|PYODIDE):{section} {something}`
37
- `something` being different depending on what is the file to extract (python, sql, ...).
38
- .
39
- * An Extractor instance is cached based on the absolute/resolved path to the main file
40
- (self.exo_py).
41
-
42
- * The cache is automatically refreshed when a local file has been modified (based on the
43
- stats of the file). NOTE: this update is done at the on_config step, to avoid checking on
44
- each extractor use/call.
45
-
46
- * The contents of the files are stored in the instance, avoiding multiple HDD reads operations.
47
-
48
- * Inclusions instructions are gathered after the file content has been read, WITHOUT recursively
49
- triggering extraction of successors: these will be resolved on demand, when building contents.
50
- NOTE: this is to allow .snippets.py file containing multiple sections, some of them not being
51
- used in the "parent" file. These .snippets.py files often using [py] redirections, forcing the
52
- resolution of the children might cause crashes if some sections of the .snippets.py file would
53
- require specific content in the parent file while they aren't actually needed for this file.
54
-
55
- * The final/actual contents are never stored in the object: sections (inclusions) are rebuilt
56
- on the fly each time they are needed (relying on the fact reading a file is longer than string
57
- concatenations, and that the simplification this allows in the implementation compensate for
58
- the extra computation time).
34
+ (aka REMs, or tests/corr files with the PM source project's setup).
35
+
36
+ * The PMT file can actually not exist at all! (in that case, exo_file is None)
37
+
38
+ * A PMT file, if it exists, contains sections delimited by tokens (comments) in the form:
39
+
40
+ {head} (PMT|PYODIDE):{section} {tail}
41
+
42
+ Where `head` and `tail` depend on the type of the file, to build a valide comment (python, sql, ...).
43
+
44
+ * An Extractor instance is cached based on the absolute/resolved path to the targeted
45
+ file (aka `self.exo_file`).
46
+
47
+ * The file is automatically refreshed when a local file has been modified.
48
+
49
+ * The concrete contents of the files are stored in the instance, avoiding multiple HDD
50
+ reads operations. Note that the content is stored "as is", meaning the inclusions are not
51
+ resolved yet, but the code is analyzed so that the inclusions are known upfront.
52
+
53
+ * The final/actual contents are never stored in the object: the concrete contents are
54
+ always built on the fly/on demand, so that all inclusions redirections can apply where
55
+ needed.
59
56
  """
60
57
  # pylint: disable=multiple-statements, missing-function-docstring
61
58
 
@@ -121,14 +118,15 @@ class BaseFilesExtractor:
121
118
  Path to the master main file (if any).
122
119
  Also used as key cache to retrieve an Extractor instance.
123
120
 
124
- WARNING: This path is absolute AND normalized, while an exo_py for an IDE actually needs the
125
- absolute UNnormalized path when generating its html id (for backward compatibility,
126
- when checking their uniqueness).
121
+ WARNING: This path is absolute + resolved, whereas the runner_file for an IDE actually is
122
+ absolute but NOT normalized (to reduce the needs of ID arugments in macros calls,
123
+ when generating the html ids of the resulting elements).
127
124
  """
128
125
 
129
126
  docs_file: Optional[Path] = None
130
127
  """
131
- Same as self.exo_file, but relative to the CWD (logging and error messages purpose).
128
+ Same as self.exo_file, but relative to the CWD (logging and error messages purpose / NOTE:
129
+ also used to identify an inclusion location, when resolving them).
132
130
  """
133
131
 
134
132
  in_pages: Set[str] = field(default_factory=set)
@@ -546,8 +546,7 @@ class BasePmtSectionsExtractor(BasePmtSectionsTools):
546
546
  Extraction of a bare file, supposedly containing only one section (implicitly / consider
547
547
  it's a `code` section).
548
548
  """
549
- log_exo = self.exo_file and Path(self.exo_file).relative_to(CWD)
550
- self.env.outdated_PM_files.append( (log_exo, self.env.file_location()) )
549
+ self.env.outdated_PM_files.append( (self.docs_file, self.env.file_location()) )
551
550
 
552
551
  sections_and_contents = (
553
552
  (ScriptData.code, script_content),
@@ -49,13 +49,16 @@ class FileExtractorWithInclusions(BasePmtSectionsExtractor):
49
49
  """
50
50
  Manage inclusions in the python files, following this kind of syntaxes:
51
51
 
52
+ ## {{ [cwd]py_name:section:section }}
52
53
  ## {{ [md]py_name:section:section }}
53
54
  ## {{ [py]py_name:section:section }}
54
55
  ## {{ py_name:section:section }}
55
56
 
56
- Relative paths usable:
57
+ Relative paths are usable:
57
58
  ## {{ ../bal/py_name:section }}
58
- ## {{ :section }} (= "in the current py file")
59
+
60
+ If no `py_name` element, extract from the current python file:
61
+ ## {{ :section }}
59
62
 
60
63
  Possible to change the file extractor type on the fly by giving the extension file in py_name.
61
64
  """
@@ -528,6 +528,12 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
528
528
  Generic html handling (ids, buttons, ...)
529
529
  """
530
530
 
531
+ FORCE_PROJECT_ID_IN_HASH: ClassVar[bool] = False
532
+ """
533
+ Some kind of IDEs (generated ones: IDE_tester, IDE_playground) have to use the project id,
534
+ otherwise their html id _will_ always collide between different projects.
535
+ """
536
+
531
537
  editor_name: str = ''
532
538
  """ tail part of most html elements' ids, in the shape of 'editor_{32 bits hexadecimal}' """
533
539
 
@@ -546,7 +552,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
546
552
 
547
553
 
548
554
 
549
- def generate_id(self):
555
+ def _build_string_to_be_hashed(self):
550
556
  """
551
557
  Generate hash part of the html id for the current element, in the form:
552
558
 
@@ -612,9 +618,9 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
612
618
  page are more than enough.
613
619
  - Consistency of the generated ids through time is more important than anything else.
614
620
  - The ids are built using:
615
- * the page url (relative to site_dir)
621
+ * the page url (relative to the docs_dir).
616
622
  * the macro name (so that the counts for IDEs is not affected by adding other
617
- elements earlier in the page).
623
+ elements earlier in the page -> stability guarantee).
618
624
  * a counter specific to the macro name and the page
619
625
 
620
626
 
@@ -627,7 +633,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
627
633
  For IDE elements without associated python file:
628
634
 
629
635
  - These are more often subject to side effects across different projects, because the
630
- html ids are generated using the PAGE URL (relative to the site_dir), concatenated with
636
+ html ids are generated using the PAGE URL (relative to the docs_dir), concatenated with
631
637
  various things that are specific to the page or the macro. So different website with the
632
638
  same relative URL _will_ clash in the localStorage. These require the use of a project_id
633
639
  value.
@@ -696,7 +702,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
696
702
 
697
703
  need_project_id = is_ide and self.env.project_disambiguate_local_storage and project_id and (
698
704
  not has_py_file or is_relative
699
- )
705
+ ) or self.FORCE_PROJECT_ID_IN_HASH
700
706
  # The project_id is needed to disambiguate the html ids in the localStorage only if:
701
707
  # 1. The element is an IDE
702
708
  # 2. The user actually gave a value for env.project_id
@@ -721,7 +727,12 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
721
727
  # DO NOT lstrip `to_hash`, to keep implementation consistent for users, even if it
722
728
  # looks ugly on the home page (url is ""). Nobody but me can see it anyway... :rolleyes:
723
729
 
724
- hashed = self.id_to_hash(to_hash)
730
+ return to_hash
731
+
732
+
733
+ def generate_id(self):
734
+ to_hash = self._build_string_to_be_hashed()
735
+ hashed = self.id_to_hash(to_hash)
725
736
  return hashed
726
737
 
727
738
 
@@ -19,7 +19,7 @@ If not, see <https://www.gnu.org/licenses/>.
19
19
 
20
20
 
21
21
  from abc import ABCMeta
22
- from typing import Optional
22
+ from typing import ClassVar, Optional
23
23
 
24
24
 
25
25
  from .. import html_builder as Html
@@ -67,6 +67,8 @@ _BTN_MATERIAL_OVERFLOW = admonition_safe_html('''
67
67
 
68
68
  class CommonGeneratedIde(IdeManager, metaclass=ABCMeta):
69
69
 
70
+ FORCE_PROJECT_ID_IN_HASH: ClassVar[bool] = True
71
+
70
72
  @classmethod
71
73
  def get_markdown(cls, use_mermaid:bool):
72
74
  raise NotImplementedError()
@@ -20,17 +20,15 @@ If not, see <https://www.gnu.org/licenses/>.
20
20
 
21
21
  import json
22
22
  from dataclasses import dataclass, field
23
- import re
24
23
  from textwrap import dedent
25
- from typing import Any, Callable, ClassVar, Dict, Iterator, List, TYPE_CHECKING, NewType, Optional, Tuple, Type
24
+ from typing import Any, ClassVar, Dict, List, TYPE_CHECKING, NewType, Optional, Tuple, Type
26
25
 
27
26
 
28
27
 
29
28
 
30
29
 
31
- from ..exceptions import PmtMacrosInvalidArgumentError
32
30
  from .. import html_builder as Html
33
- from ..tools_and_constants import HtmlClass, PageUrl, PmtPyMacrosName, PageInclusion, Prefix, Qcm, ScriptSection, ScriptData
31
+ from ..tools_and_constants import HtmlClass, PageUrl, PmtPyMacrosName, PageInclusion, Prefix, Qcm, ScriptData
34
32
  from ..parsing import compress_LZW
35
33
  from ..html_dependencies.deps_class import DepKind
36
34
  from ..plugin_tools.test_cases import Case
@@ -121,12 +119,12 @@ class IdeTester(CommonGeneratedIde, Ide):
121
119
  Build the code generating the IdeTester object. Insert the MERMAID logistic only if
122
120
  the `mkdocs.yml` holds the custom fences code configuration.
123
121
  """
124
- return dedent(f"""
125
- # Testing all IDEs in the documentation {'{'} data-search-exclude {'}'}
122
+ return dedent(f"""\
123
+ # Testing all IDEs in the documentation {'{'} data-search-exclude {'}'}
126
124
 
127
- <br>
125
+ <br>
128
126
 
129
- {'{{'} IDE_tester(MAX='+', MERMAID={ use_mermaid }, TERM_H=15) {'}}'}
127
+ {'{{'} IDE_tester(MAX='+', MERMAID={ use_mermaid }, TERM_H=15) {'}}'}
130
128
 
131
129
  """)
132
130
 
@@ -19,6 +19,8 @@ If not, see <https://www.gnu.org/licenses/>.
19
19
  # pylint: disable=unused-argument
20
20
 
21
21
  from functools import wraps
22
+ import json
23
+ from pathlib import Path
22
24
  from textwrap import dedent
23
25
  from typing import Any, Dict, List, Tuple
24
26
 
@@ -75,6 +77,7 @@ def multi_qcm(env:MaestroMacros):
75
77
  qcm_title: str = None,
76
78
  tag_list_of_qs: str = None,
77
79
  DEBUG: bool = None,
80
+ DUMP: bool = None,
78
81
  SHOW: str = None, # sink (not needed here!)
79
82
  ID=None, # sink (deprecated)
80
83
  ):
@@ -280,6 +283,29 @@ def multi_qcm(env:MaestroMacros):
280
283
 
281
284
  qcm_close()
282
285
 
286
+ if DUMP:
287
+ json_data = {
288
+ 'questions': questions,
289
+ 'description': description,
290
+ 'hide': hide,
291
+ 'multi': multi,
292
+ 'shuffle': shuffle,
293
+ 'shuffle_questions': shuffle_questions,
294
+ 'shuffle_items': shuffle_items,
295
+ 'admo_kind': admo_kind,
296
+ 'admo_class': admo_class,
297
+ 'qcm_title': qcm_title,
298
+ 'tag_list_of_qs': tag_list_of_qs,
299
+ 'DEBUG': DEBUG,
300
+ }
301
+
302
+ name = env.page.url.strip('/').split('/')[-1]
303
+ loc = Path(env.page.file.abs_src_path).with_name(f"qcm_{ name }_{ env.compteur_qcms }.json")
304
+ content = json.dumps(json_data, indent=2)
305
+ loc.touch(exist_ok=True)
306
+ loc.write_text(content, encoding='utf-8')
307
+
308
+
283
309
 
284
310
  output = '\n'.join(admonition_lst)
285
311
  output = f'\n\n{ output }\n\n' # Enforce empty spaces around in the markdown admonition
@@ -148,6 +148,7 @@ class BaseMaestro(BasePlugin[PyodideMacrosConfig]):
148
148
  args_figure_p5_buttons: str = ConfigExtractor('config.args.figure', prop='p5_buttons')
149
149
 
150
150
  args_multi_qcm_DEBUG: bool = ConfigExtractor('config.args.multi_qcm', prop='DEBUG')
151
+ args_multi_qcm_DUMP: bool = ConfigExtractor('config.args.multi_qcm', prop='DUMP')
151
152
  args_multi_qcm_SHOW: str = ConfigExtractor('config.args.multi_qcm', prop='SHOW')
152
153
  args_multi_qcm_admo_class: str = ConfigExtractor('config.args.multi_qcm', prop='admo_class')
153
154
  args_multi_qcm_admo_kind: str = ConfigExtractor('config.args.multi_qcm', prop='admo_kind')
@@ -76,7 +76,7 @@ class MaestroMacroManager(MaestroIndent):
76
76
  """
77
77
 
78
78
 
79
- compteur_qcms: int = AutoCounter()
79
+ compteur_qcms: int = 0
80
80
  """ Number of qcm or qcs in the docs """
81
81
 
82
82
  _editors_ids: Set[str]
@@ -102,7 +102,9 @@ class MaestroMacroManager(MaestroIndent):
102
102
 
103
103
 
104
104
  def get_qcm_id(self):
105
- return f"{ Prefix.py_mk_qcm_id_ }{ self.compteur_qcms :0>5}"
105
+ id = f"{ Prefix.py_mk_qcm_id_ }{ self.compteur_qcms :0>5}"
106
+ self.compteur_qcms += 1
107
+ return id
106
108
 
107
109
 
108
110
  def is_unique_then_register(self, id_ide:str, no_id_path:str, ID:Optional[str]) -> bool :
@@ -1300,6 +1300,13 @@ MULTI_QCM = MultiQcmConfigSrc.with_default_docs(
1300
1300
  """,
1301
1301
  yaml_desc="Display macro related infos in the terminal.",
1302
1302
  ),
1303
+ ConfigOptionSrc(
1304
+ 'DUMP', bool, default=False,
1305
+ docs="""
1306
+ Crée un fichier json avec les données du qcm en cours dans le dossier de la page en cours.
1307
+ """,
1308
+ yaml_desc="Dump the MCQ content as json.",
1309
+ ),
1303
1310
  ))
1304
1311
 
1305
1312
 
@@ -877,7 +877,7 @@ TESTING_CONFIG = SubConfigSrc(
877
877
  extra_docs = f"""
878
878
  Définit si la page de tests des IDEs doit être générée et de quelle façon.
879
879
  {'{{'}ul_li([
880
- "`#!py '{PageInclusion.none}'` (_défaut_) : la page de tests n'est pas générée.",
880
+ "`#!py '{PageInclusion.none}'` : la page de tests n'est pas générée.",
881
881
  "`#!py '{PageInclusion.serve}'` : la page de tests est générée pendant `mkdocs serve`,
882
882
  et est ajoutée automatiquement à la navigation.",
883
883
  "`#!py '{PageInclusion.site}'` : La page de tests est ajoutée au site construit,
@@ -533,6 +533,7 @@ class MacroArgsDataMulti_qcm(ObjectWithDataGetters):
533
533
  tag_list_of_qs: str = DataGetter()
534
534
  DEBUG: bool = DataGetter()
535
535
  SHOW: str = DataGetter()
536
+ DUMP: bool = DataGetter()
536
537
 
537
538
  class MacroDataMulti_qcm(MacroData):
538
539
  """ Runtime data object for the multi_qcm macro. """
@@ -1086,18 +1086,24 @@ export function getIdeDataFromStorage(editorId, ide=null){
1086
1086
  code = obj.code ?? ""
1087
1087
  }catch(_){}
1088
1088
 
1089
- const upToDate = PMT_LOCAL_STORAGE_KEYS_WRITE.every(k=> k in obj)
1090
- const storage = upToDate ? obj : freshStore(code, obj, ide)
1089
+ // If the update to 5.4.0 has occured before the `project.id` was filled by the author,
1090
+ // users might have the localStorage updated with a `project: null` entry. This is not to
1091
+ // be considered "up to date", to avoid basillions of warning for the users (1 per IDE!).
1092
+ const pmt_540_ok = (obj.project??null)!==null
1093
+ const upToDate = PMT_LOCAL_STORAGE_KEYS_WRITE.every(k=> k in obj) && pmt_540_ok
1094
+ const storage = upToDate ? obj : freshStore(code, obj, ide)
1091
1095
 
1092
1096
  if(ide && !CONFIG.projectNoJsWarning && storage.project !== CONFIG.projectId){
1093
1097
  const msg = [
1094
1098
  CONFIG.lang.storageIdCollision.msg,
1095
1099
  '',
1100
+ `Project id: "${ CONFIG.projectId }"`,
1096
1101
  `Page: ${ document.location }`,
1097
1102
  `py_name: ${ ide.pyName }`,
1098
- `Project id: "${ CONFIG.projectId }"`,
1099
- `Collision id: "${ storage.project }"`,
1100
1103
  `(id: ${ editorId })`,
1104
+ '------------------------\nCollision source:',
1105
+ `Project id: "${ storage.project }"`,
1106
+ `py_name: ${ storage.name }`,
1101
1107
  ]
1102
1108
  window.alert(msg.join('\n'))
1103
1109
  }
@@ -151,7 +151,7 @@ class QCM {
151
151
  perennialMathJaxUpdate()
152
152
  renderMermaidGraphs()
153
153
  }
154
- const [good,all] = this.questions.reduce( (track,quest)=>quest._validate(...track), [0,0])
154
+ const [good,all] = this.questions.reduce( (track,quest)=>quest._validate(this.reveal, ...track), [0,0])
155
155
  this.updateCounter(`${good}/${all}`)
156
156
  this.locked = true
157
157
  }
@@ -266,21 +266,25 @@ class Question {
266
266
  }
267
267
  }
268
268
 
269
- _validate(goods, all){
269
+ _validate(revealed, goods, all){
270
270
  const values = Object.values(this.byId)
271
271
 
272
272
  /*
273
273
  // Count per item:
274
- goods += values.reduce( (s,o)=>s+(o.checked === o.correct), 0)
275
- all += values.length
274
+ const localGood = values.reduce( (s,o)=>s+(o.checked === o.correct), 0)
275
+ const localAll = values.length
276
276
 
277
277
  /*/
278
278
  // Count per question:
279
- goods += values.every( o => o.checked === o.correct )
280
- all++
279
+ const localGood = values.every( o => o.checked === o.correct )
280
+ const localAll = true
281
281
  //*/
282
282
 
283
- return [goods, all]
283
+ if(revealed && this.comment && localGood===localAll){
284
+ this.comment.prop('open', true)
285
+ }
286
+
287
+ return [goods+localGood, all+localAll]
284
288
  }
285
289
 
286
290
  _reveal(){
@@ -312,7 +316,7 @@ class Question {
312
316
 
313
317
 
314
318
  resetAllItems(always=false){
315
- if(this.comment) this.comment.detach()
319
+ if(this.comment) this.comment.detach().prop('open', false)
316
320
  Object.entries(this.byId).forEach(([itemId,it])=>{
317
321
  if(always || it.checked) this.updateItem(itemId, false)
318
322
  })
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pyodide-mkdocs-theme"
3
- version = "5.4.0"
3
+ version = "5.4.2"
4
4
  requires-python = ">=3.9, <4.0"
5
5
  license = { text = "GPL-3.0-or-later" }
6
6
  description = "Package embedding the necessary tools to host pyodide, ACE editors, jQuery terminals in mkdocs documentations"
@@ -1 +0,0 @@
1
- __version__ = "5.4.0"