pyodide-mkdocs-theme 5.4.3__tar.gz → 5.4.5__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.3 → pyodide_mkdocs_theme-5.4.5}/PKG-INFO +1 -1
  2. pyodide_mkdocs_theme-5.4.5/pyodide_mkdocs_theme/__version__.py +1 -0
  3. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +9 -9
  4. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +3 -1
  5. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +14 -4
  6. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +0 -4
  7. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +6 -5
  8. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +4 -0
  9. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +5 -0
  10. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +9 -2
  11. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +4 -0
  12. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +73 -15
  13. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +7 -0
  14. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +7 -3
  15. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +1 -1
  16. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +1 -1
  17. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +3 -0
  18. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyproject.toml +1 -1
  19. pyodide_mkdocs_theme-5.4.3/pyodide_mkdocs_theme/__version__.py +0 -1
  20. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/LICENSE +0 -0
  21. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/README.md +0 -0
  22. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
  23. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
  24. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
  25. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/__init__.py +0 -0
  26. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/__main__.py +0 -0
  27. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -0
  28. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
  29. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
  30. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
  31. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +0 -0
  32. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +0 -0
  33. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +0 -0
  34. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
  35. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
  36. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
  37. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +0 -0
  38. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +0 -0
  39. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
  40. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +0 -0
  41. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +0 -0
  42. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
  43. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/IDEs.py +0 -0
  44. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
  45. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
  46. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
  47. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
  48. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
  49. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
  50. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +0 -0
  51. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +0 -0
  52. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
  53. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
  54. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
  55. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +0 -0
  56. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +0 -0
  57. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +0 -0
  58. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
  59. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
  60. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
  61. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +0 -0
  62. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
  63. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +0 -0
  64. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +0 -0
  65. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +0 -0
  66. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
  67. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +0 -0
  68. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
  69. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +0 -0
  70. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
  71. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +0 -0
  72. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +0 -0
  73. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +0 -0
  74. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
  75. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
  76. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
  77. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
  78. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +0 -0
  79. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +0 -0
  80. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +0 -0
  81. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +0 -0
  82. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
  83. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +0 -0
  84. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +0 -0
  85. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +0 -0
  86. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +0 -0
  87. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
  88. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +0 -0
  89. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
  90. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
  91. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
  92. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
  93. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
  94. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
  95. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
  96. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
  97. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
  98. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
  99. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
  100. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
  101. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
  102. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
  103. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
  104. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/README.md +0 -0
  105. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
  106. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
  107. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
  108. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
  109. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
  110. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
  111. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
  112. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
  113. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
  114. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
  115. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
  116. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
  117. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +0 -0
  118. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +0 -0
  119. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-libs/functools.js +0 -0
  120. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +0 -0
  121. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
  122. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +0 -0
  123. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +0 -0
  124. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
  125. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +0 -0
  126. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +0 -0
  127. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +0 -0
  128. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +0 -0
  129. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +0 -0
  130. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +0 -0
  131. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -0
  132. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +0 -0
  133. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +0 -0
  134. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +0 -0
  135. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
  136. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/main.html +0 -0
  137. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
  138. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
  139. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
  140. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
  141. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
  142. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
  143. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
  144. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
  145. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
  146. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
  147. {pyodide_mkdocs_theme-5.4.3 → pyodide_mkdocs_theme-5.4.5}/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.3
3
+ Version: 5.4.5
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.4.5"
@@ -577,26 +577,26 @@ class Ide(CommonTermIde):
577
577
  Build a list of all the buttons to add after the IDE.
578
578
  """
579
579
  buttons = [
580
- self.create_button("play"),
581
- self.create_button("check") if self.has_check_btn else "",
582
- self.create_button("download", margin_left=1 ),
583
- self.create_button("upload", margin_right=1 ),
584
- self.create_button("restart"),
585
- self.create_button("save"),
580
+ self.create_button("play", bare_tip=True),
581
+ self.create_button("check", bare_tip=True) if self.has_check_btn else "",
582
+ self.create_button("download", bare_tip=True, margin_left=1 ),
583
+ self.create_button("upload", bare_tip=True, margin_right=1 ),
584
+ self.create_button("restart", bare_tip=True),
585
+ self.create_button("save", bare_tip=True),
586
586
  ]
587
587
 
588
588
  if self.export:
589
589
  buttons.append(
590
- self.create_button("zip")
590
+ self.create_button("zip", bare_tip=True)
591
591
  )
592
592
  if self.has_corr_btn: # "mkdocs serve" only:
593
593
  buttons.append(
594
- self.create_button("corr_btn", margin_left=1)
594
+ self.create_button("corr_btn", bare_tip=True, margin_left=1)
595
595
  )
596
596
  if self.has_reveal_btn: # "mkdocs serve" only:
597
597
  margin_left = {} if self.has_corr_btn else {"margin_left": 1}
598
598
  buttons.append(
599
- self.create_button("show", **margin_left),
599
+ self.create_button("show", bare_tip=True, **margin_left),
600
600
  )
601
601
 
602
602
  return buttons
@@ -777,6 +777,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
777
777
  margin_right: float = 0.2,
778
778
  extra_btn_kls: str = "",
779
779
  tip_side: P5BtnLocation = "",
780
+ bare_tip: bool = False,
780
781
  **kwargs
781
782
  ) -> str:
782
783
  """
@@ -794,6 +795,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
794
795
  margin_right = margin_right,
795
796
  extra_btn_kls = extra_btn_kls,
796
797
  tip_side = tip_side,
798
+ bare_tip = bare_tip,
797
799
  **kwargs
798
800
  )
799
801
 
@@ -834,7 +836,7 @@ class IdeManagerMdHtmlGenerator(IdeSectionsManager):
834
836
  if bare_tip:
835
837
  tip_span = ""
836
838
  kwargs['data'] = kwargs.get('data', {})
837
- kwargs['data']['tip-txt'] = tip_txt
839
+ kwargs['data']['tip-txt'] = str(tip_txt)
838
840
  if tip_txt.em: kwargs['data']['tip-width'] = tip_txt.em
839
841
  else:
840
842
  tip_span = Html.tooltip(tip_txt, tip_txt.em, tip_side=tip_side or P5BtnLocation.bottom)
@@ -65,6 +65,14 @@ class IdePlayground(CommonGeneratedIde, Ide):
65
65
 
66
66
 
67
67
 
68
+ def exported_items(self):
69
+ yield from (
70
+ (k,v) if k!='deactivate_stdout_for_secrets' else (k, False)
71
+ for k,v in super().exported_items()
72
+ )
73
+
74
+
75
+
68
76
  def register_ide_for_tests(self):
69
77
  """ IdeTester instances are never registered for testing... """
70
78
 
@@ -106,16 +114,18 @@ class IdePlayground(CommonGeneratedIde, Ide):
106
114
  """
107
115
 
108
116
  return f"""
109
- # Playground {'{'} data-search-exclude {'}'}
117
+ # Playground {{ data-search-exclude }}
110
118
 
111
119
 
112
120
  Cette page permet de développer dynamiquement dans un contexte où les différentes sections sont modifiables et exécutables à volonté : lorsque l'IDE est exécuté, les contenus de tous les autres éditeurs de la page sont utilisés en tant que sections de l'IDE.
113
121
 
122
+ * Les raccourcis ++ctrl+s++ (tests publics) et ++ctrl+enter++ (validation) sont actifs dans n'importe quel éditeur de la page.
123
+ * Le bouton de téléversement permet d'importer un fichier existant pour ensuite en modifier les différentes sections.
124
+ * Le bouton de téléchargement sous l'IDE permet de récupérer un fichier PMT correctement formaté, avec toutes les sections assemblées.
114
125
  * Le contenu de la section `tests` est automatiquement exécuté après le contenu de l'IDE : il n'est pas nécessaire d'en rajouter le code dans celui-ci pour retrouver le comportement habituel des IDEs normaux, que ce soit pour les tests publics ou les validations.
115
126
  * Mermaid est utilisable dans cette page, ainsi que les autres outils complémentaires (p5, matplotlib, ...).
116
- * Le bouton de téléchargement sous l'IDE permet de récupérer un fichier PMT correctement formaté, avec toutes les sections assemblées.
117
- * Le bouton de téléversement permet d'importer un fichier existant pour ensuite en modifier les différentes sections.
118
- * Les raccourcis ++ctrl+s++ et ++ctrl+enter++ sont actifs depuis n'importe quel éditeur dans la page.
127
+ * Dans la page Playground, la sortie standard est toujours visible durant les validations, de manière à ne pas rencontrer d'erreurs si le code des tests secrets utilise `terminal_message`.
128
+ * L'id html de la figure a la valeur par défaut pour une page localisée directement dans le `docs_dir`.
119
129
 
120
130
  <br>
121
131
 
@@ -434,10 +434,6 @@ class MaestroMacros(MaestroMacroManager):
434
434
  search plugin starts indexing stuff in the related plugin (which precisely happens
435
435
  in the on_page_context hook).
436
436
  """
437
- # pylint: disable=pointless-string-statement
438
-
439
- # Log AFTER the call to `get_page_config_and_set_base_url`, because self.file_location
440
- # needs the current page object:
441
437
  logger.debug(f"Add scripts + encrypt solutions and remarks in {self.file_location()}")
442
438
 
443
439
  chunks = []
@@ -657,9 +657,9 @@ IDE = MacroConfigSrc(
657
657
  deactivated.
658
658
  """,
659
659
  docs = """
660
- Clef à passer en argument de [`terminal_message`](--IDEs-terminal_message) pour
661
- autoriser son utilisation lorsque la sortie standard est désactivée pendant les
662
- tests.
660
+ Clef à passer en argument de [`terminal_message`](--IDEs-terminal_message)
661
+ pour autoriser son utilisation lorsque [la sortie standard est
662
+ désactivée](--pyodide_macros_ides_deactivate_stdout_for_secrets) pendant les tests.
663
663
  """,
664
664
  extra_docs='--8<-- "docs_tools/inclusions/IDE_STD_KEY_validation.md"',
665
665
  ),
@@ -1303,9 +1303,10 @@ MULTI_QCM = MultiQcmConfigSrc.with_default_docs(
1303
1303
  ConfigOptionSrc(
1304
1304
  'DUMP', bool, default=False,
1305
1305
  docs="""
1306
- Crée un fichier json avec les données du qcm en cours dans le dossier de la page en cours.
1306
+ Crée un fichier json avec les données du qcm en cours dans le dossier de la page en cours.{{
1307
+ pmt_note("Utilisable uniquement en local.")}}
1307
1308
  """,
1308
- yaml_desc="Dump the MCQ content as json.",
1309
+ yaml_desc="Dump the MCQ content as json (local use only).",
1309
1310
  ),
1310
1311
  ))
1311
1312
 
@@ -424,6 +424,10 @@ IDES_CONFIG = SubConfigSrc(
424
424
  extra_docs="""
425
425
  Détermine si la sortie standard (stdout) sera visible dans les terminaux lors
426
426
  des tests secrets ou non.
427
+
428
+ Si la sortie standard est désactivée, il est impossible d'utiliser la fonction
429
+ `terminal_message` durant les tests secrets sans passer en premier argument la
430
+ valeur correspondant à l'argument [`STD_KEY`](--IDE-STD_KEY) de l'IDE concerné.
427
431
  """,
428
432
  yaml_desc="""
429
433
  Define if the stdout will be shown in terminals to the user or not, during the
@@ -211,6 +211,11 @@ class Case:
211
211
  previously revealed stuff. Use 1000 to get infinite number of attempts.
212
212
  """
213
213
 
214
+ done: Optional[int] = None
215
+ """
216
+ Value to use for this.storage.done at the beginning of this test.
217
+ """
218
+
214
219
  show_only_assertion_errors_for_secrets: Optional[bool] = None
215
220
  """ Override the current value for the source page, if given. """
216
221
 
@@ -277,6 +277,7 @@ class PyodideSectionsRunnerBase {
277
277
  LOGGER_CONFIG.ACTIVATE && jsLogger(loggerName)
278
278
 
279
279
  CONFIG.calledMermaid = false
280
+ const wasDirty = this.isDirty
280
281
  this.makeDirty(false) // Assume executions will go well (see note in finally block)
281
282
  this.running = runningMan
282
283
  let runtime
@@ -307,10 +308,16 @@ class PyodideSectionsRunnerBase {
307
308
  // For isDirty update, DO NOT only rely on `this.isDirty = runtime.stopped`, so that the
308
309
  // runner itself can set the value on a success if needed, and it won't be overridden here
309
310
  // (useful if a valid "play" is still considered dirty when a validation exists...).
310
- if(!runtime || runtime.stopped){
311
+ if(!runtime || runtime.stopped || runningMan.isPlaying && wasDirty){
311
312
  this.makeDirty()
312
313
  }
313
314
 
315
+ // AFTER updating isDirty, remove the validation button border if the current execution
316
+ // is a validation:
317
+ if(runningMan.isValidating){
318
+ this._getJValidationButton().removeClass("dirty-validation")
319
+ }
320
+
314
321
  if(runtime){
315
322
  await finallyTeardown.call(this, runtime)
316
323
  }
@@ -544,7 +551,7 @@ class PyodideSequentialRunner extends PyodideSectionsRunnerBase {
544
551
  super(id)
545
552
 
546
553
  this.rotateTerminalMessage = true
547
- this.isDirty = true // Tell if the last run wa successful or not, or if the content has been modified
554
+ this.isDirty = true // Tell if the last run was successful or not, or if the content has been modified
548
555
  // without being run (handled unconditionally for all elements, even if they aren't
549
556
  // "in sequential run". The RUNNERS_MANAGER handles what is actually to be run or not).
550
557
  }
@@ -780,6 +780,7 @@ class IdeFullScreenManager extends IdeFullScreenGlobalManager {
780
780
 
781
781
  this.storeInitPositionsDataIfNeeded()
782
782
  const focused = document.activeElement
783
+ const floatingTip = $("#floating-tip").detach()
783
784
 
784
785
  this.global[0].requestFullscreen().then(async _=>{
785
786
  LOGGER_CONFIG.ACTIVATE && jsLogger('[ScreenMode]', "Full screen ready")
@@ -791,6 +792,8 @@ class IdeFullScreenManager extends IdeFullScreenGlobalManager {
791
792
  this.guiIdeFlags.internalIsFullScreen = true
792
793
  splitScreenBtn.addClass('deactivated')
793
794
  this.ideScreenModeVerticalResize({goingFullScreen: true})
795
+ this.global.append(floatingTip)
796
+
794
797
  focused.focus() // Always give back the focus to the element which had it before.
795
798
 
796
799
  LOGGER_CONFIG.ACTIVATE && jsLogger('[ScreenMode]', "Full screen setup - DONE")
@@ -806,6 +809,7 @@ class IdeFullScreenManager extends IdeFullScreenGlobalManager {
806
809
  '[ScreenMode]', "Full screen reversion with", minLines, maxLines
807
810
  )
808
811
 
812
+ floatingTip.detach().appendTo('body')
809
813
  if(this.splitScreenActivated) splitScreenBtn.removeClass('deactivated')
810
814
  this.guiIdeFlags.internalIsFullScreen = false
811
815
  const resizeOption = this.isInSplit ? {topDivH:this.setupTopDivHeight()}
@@ -177,7 +177,7 @@ class IdeHistoryManager extends IdeAceManager {
177
177
  * */
178
178
  updateValidationBtnColor(done=undefined, jElt=undefined){
179
179
  done ??= this.storage.done
180
- jElt ??= this.global.find("button[btn_kind=check]")
180
+ jElt ??= this._getJValidationButton()
181
181
  if(!this.isDelayedRevelation){
182
182
  const color = this.getIdeStateColor(done)
183
183
  jElt.css('--ide-btn-color', color)
@@ -185,6 +185,10 @@ class IdeHistoryManager extends IdeAceManager {
185
185
  return jElt
186
186
  }
187
187
 
188
+ _getJValidationButton(){
189
+ return this.global.find("button[btn_kind=check]")
190
+ }
191
+
188
192
 
189
193
  getIdeStateColor(done){ // CodCap
190
194
  return !done ? "unset" : done<0 ? 'red' : 'green'
@@ -193,6 +197,13 @@ class IdeHistoryManager extends IdeAceManager {
193
197
  clearValidations(){ this.validations.length = 0 }
194
198
 
195
199
 
200
+ makeDirty(isDirty=true){
201
+ super.makeDirty(isDirty)
202
+ if(isDirty){
203
+ this._getJValidationButton().addClass("dirty-validation")
204
+ }
205
+ }
206
+
196
207
 
197
208
  setupHistoryBtn(jHistItem, [done, time, code]){
198
209
  jHistItem.text(time)
@@ -262,20 +273,21 @@ class IdeFeedbackManager extends IdeHistoryManager {
262
273
  if(runtime.stopped || !step) return
263
274
 
264
275
  const playing = this.running.isPlaying
265
- const intro = playing ? "" : CONFIG.lang.validation.msg
266
276
  const section = CONFIG.lang[step].msg
267
- const ok = CONFIG.lang.successMsg.msg
277
+ const isDone = this.storage.done > 0
278
+ const okMsg = CONFIG.lang.successMsg.msg
279
+ const intro = playing ? "" : CONFIG.lang.validation.msg
268
280
 
269
- let msg = `${ intro }${ section }: ${ ok }` // Default section message
270
- if(!code) msg = "" // No default message if no code in the section...
271
- if(playing && !this.hasCheckBtn){ // ...but ensure the default ending message is shown,
272
- msg = CONFIG.lang.successMsgNoTests.msg // if this is "playing" and nothing else to do after.
281
+ let msg = `${ intro }${ section }: ${ okMsg }` // Default section message
282
+ if(!code) msg = "" // No default message if no code in the section...
283
+ if(playing && !this.hasCheckBtn){ // ...but ensure the default ending message is shown,
284
+ msg = CONFIG.lang.successMsgNoTests.msg // if this is "playing" and nothing else to do after.
273
285
  }
274
286
 
275
287
  if(msg) this.terminalEcho(msg)
276
288
 
277
289
  // Prepare a "very final" message if needed:
278
- if(playing && this.hasCheckBtn){
290
+ if(playing && this.hasCheckBtn && (!isDone || this.isDirty)){
279
291
  // If a validation button is present while running the public tests
280
292
  runtime.finalMsg = CONFIG.lang.unforgettable.msg
281
293
  }
@@ -718,6 +730,42 @@ class IdeRunnerLogic extends IdeFeedbackManager {
718
730
  * */
719
731
  export class IdeRunner extends IdeRunnerLogic {
720
732
 
733
+ static KEY_UP_NO_CHANGES = new Set(`
734
+ Control
735
+ Alt
736
+ AltGraph
737
+ Meta
738
+ CapsLock
739
+ NumLock
740
+ Shift
741
+ ContextMenu
742
+ F1
743
+ F2
744
+ F3
745
+ F4
746
+ F5
747
+ F6
748
+ F7
749
+ F8
750
+ F9
751
+ F10
752
+ F11
753
+ F12
754
+ Insert
755
+ PageUp
756
+ PageDown
757
+ End
758
+ Home
759
+ Escape
760
+ `.trim().split(/\s+/g))
761
+
762
+ static KEY_UP_ARROWS = new Set(`
763
+ ArrowLeft
764
+ ArrowRight
765
+ ArrowUp
766
+ ArrowDown
767
+ `.trim().split(/\s+/g))
768
+
721
769
 
722
770
  /**Process to "re-initiate" the internal state of the IDE (useful for testing) */
723
771
  _init(){
@@ -852,7 +900,7 @@ export class IdeRunner extends IdeRunnerLogic {
852
900
 
853
901
  // Add fullscreen activation binding, but NOT through the ACE editor commands
854
902
  // cannot control the exit :/ )
855
- this.global.on('keyup', this.respondToEscapeKeyUp.bind(this))
903
+ this.global.on('keyup', this.respondToKeyUp.bind(this))
856
904
 
857
905
  // Bind editor extra buttons:
858
906
  this.global.find(".comment.tooltip" ).on("click", this.toggleComments.bind(this))
@@ -930,22 +978,32 @@ export class IdeRunner extends IdeRunnerLogic {
930
978
  }
931
979
 
932
980
 
933
- async respondToEscapeKeyUp(event){
934
- if(
935
- event.key == 'Escape'
981
+ async respondToKeyUp(event){
982
+
983
+ const goFullScreen = (event.key == 'Escape'
936
984
  && !IdeFullScreenGlobalManager.someMenuOpened
937
985
  && !this.guiIdeFlags.escapeIdeSearch
938
986
  && !somethingFullScreen()
939
- ){
987
+ )
988
+ const justMoving = (
989
+ this.constructor.KEY_UP_NO_CHANGES.has(event.key) ||
990
+ this.constructor.KEY_UP_ARROWS.has(event.key) && !event.altKey ||
991
+ event.ctrlKey && "acfhs Enter".includes(event.key) ||
992
+ event.key == 'Escape'
993
+ )
994
+
995
+ if(goFullScreen){
940
996
  this.requestFullScreen()
941
- // The browser already handles on its own going out of fullscreen with escape => no else needed
997
+ // The browser already handles on its own going out of fullscreen with escape
998
+ // => no "else" needed for that
942
999
 
943
1000
  }else if(event.altKey && event.key==':'){
944
1001
  this.switchSplitScreenFromButton(event)
945
1002
 
946
- }else{
1003
+ }else if(!justMoving){
947
1004
  this.makeDirty()
948
1005
  }
1006
+
949
1007
  this.guiIdeFlags.escapeIdeSearch = false
950
1008
  }
951
1009
 
@@ -404,6 +404,13 @@ class IdeTesterGuiManager extends IdeRunner {
404
404
 
405
405
  _applyConfAndData(onLoad=false){
406
406
 
407
+ // Always reset the "done" state, to make tests independent of each others.
408
+ this.storage.done = 0
409
+ if('done' in this.conf){
410
+ this.storage.done = this.conf.done
411
+ }
412
+ this.updateValidationBtnColor()
413
+
407
414
  const hasSetMaxHide = 'set_max_and_hide' in this.conf
408
415
  if(onLoad || hasSetMaxHide){
409
416
  this.conf.reveal_corr_rems = false
@@ -119,7 +119,7 @@ CONFIG.ACE_COLOR_THEME.aceStyle = {
119
119
 
120
120
  /**Automatically define the position of the tooltip around the hovered element by mutation of pos
121
121
  * */
122
- const getAnchorPoint=({width, height, top, left}, pagePos)=>{
122
+ const getAnchorPoint=({width, height, top, left}, pagePos, obj)=>{
123
123
  const pos = defaultPos()
124
124
 
125
125
  pos.anchorX = Math.round(pagePos.left + width/2)
@@ -135,6 +135,10 @@ CONFIG.ACE_COLOR_THEME.aceStyle = {
135
135
  }else if (pointer.isRight){
136
136
  pos.translateX = -100
137
137
  }
138
+
139
+ const w = obj.dataset.tipWidth
140
+ if (w!==undefined) pos.width = w+'em'
141
+
138
142
  return pos
139
143
  }
140
144
 
@@ -167,9 +171,9 @@ CONFIG.ACE_COLOR_THEME.aceStyle = {
167
171
  // Positions & dimensions in viewport:
168
172
  const rect = this.getBoundingClientRect()
169
173
 
170
- pos = getAnchorPoint(rect, pagePos)
174
+ pos = getAnchorPoint(rect, pagePos, this)
171
175
  }
172
- tipSpan.text(this.dataset.tipTxt)
176
+ tipSpan.html(this.dataset.tipTxt)
173
177
  placement(pos)
174
178
  })
175
179
 
@@ -282,5 +282,5 @@ mais sans lien dessus */
282
282
  .tooltip.p5-btn > img { width: 24px; }
283
283
 
284
284
 
285
- #floating-tip { position: absolute; }
285
+ #floating-tip { position: absolute; z-index: 1 }
286
286
  #floating-tip > span { visibility: unset; }
@@ -22,7 +22,7 @@ If not, see <https://www.gnu.org/licenses/>.
22
22
  position: absolute;
23
23
  left: 50%;
24
24
  bottom: 50%;
25
- z-index: 1;
25
+ z-index: 4; /* above bare tooltips */
26
26
  background: var(--main-theme);
27
27
  border-radius: 10px;
28
28
  padding: var(--hist-size);
@@ -189,6 +189,9 @@ div[class*='ace-'] .ace_gutter {
189
189
  margin-right: calc(var(--marg-split) - 1px);
190
190
  }
191
191
 
192
+ .dirty-validation > img {
193
+ border: 3px solid orange;
194
+ }
192
195
 
193
196
  /*
194
197
  -------------------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pyodide-mkdocs-theme"
3
- version = "5.4.3"
3
+ version = "5.4.5"
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.3"