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.
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/PKG-INFO +1 -1
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/__main__.py +1 -1
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/__version__.py +1 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +8 -9
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +1 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +53 -30
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +10 -8
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +9 -2
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +10 -19
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +29 -19
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +25 -18
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +126 -121
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +2 -2
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +0 -16
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +0 -16
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +0 -16
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +1 -1
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +29 -20
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +5 -7
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +10 -3
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +4 -3
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +2 -1
- {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
- {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
- {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
- {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
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +52 -1
- {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
- {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
- {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
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/ide_tests.py +80 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +1 -62
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +13 -10
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +3 -3
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +89 -41
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +36 -13
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/README.md +36 -0
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/assets/images/icons8-pause-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +4 -8
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +6 -7
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functools.js +25 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsUi.js +9 -6
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +1 -2
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +166 -0
- {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
- {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
- {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
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-per-pages/5-2-virtualizer-ides_test.js +918 -0
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-per-pages/5-3-avl-ides_test.mjs +342 -0
- {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
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +1 -1
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +15 -27
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +14 -16
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/testing.css +69 -14
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyproject.toml +1 -1
- pyodide_mkdocs_theme-5.5.6/pyodide_mkdocs_theme/__version__.py +0 -1
- pyodide_mkdocs_theme-5.5.6/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +0 -141
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/LICENSE +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/README.md +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5v2/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/p5v2/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/PMT_tools/vis_network/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/macros/runners_macros.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
- {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
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsStorage.js +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsTxt.js +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/functoolsUiBuilder.js +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/main.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
- {pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
- {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.
|
|
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'
|
|
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"
|
{pyodide_mkdocs_theme-5.5.6 → pyodide_mkdocs_theme-5.6.1}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py
RENAMED
|
@@ -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`).\
|
|
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"
|
|
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
|
|
|
@@ -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
|
-
#
|
|
35
|
-
#
|
|
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 = "
|
|
158
|
+
id:str = "",
|
|
151
159
|
kls:str = "",
|
|
152
160
|
kls_box:str = "",
|
|
153
161
|
tip_txt:str = "",
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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
|
-
|
|
166
|
-
|
|
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
|
-
|
|
181
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
|
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.
|
|
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.
|
|
196
|
+
if not self.IS_TESTED:
|
|
197
|
+
return
|
|
208
198
|
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
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 =
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
851
|
-
if
|
|
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(
|
|
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
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|