pyodide-mkdocs-theme 5.6.1__tar.gz → 5.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/PKG-INFO +1 -1
- pyodide_mkdocs_theme-5.6.3/pyodide_mkdocs_theme/__version__.py +1 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps.py +61 -99
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/deps_class.py +22 -55
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/runners_macros.py +1 -1
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/de_lang.py +9 -2
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/en_lang.py +9 -2
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/fr_lang.py +9 -2
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/pyodide_macros_plugin.py +5 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/test_cases.py +7 -7
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/0-config.js +3 -6
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functools.js +57 -7
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsUiBuilder.js +1 -3
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/process_and_gui.js +54 -34
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/0-generic-python-snippets-pyodide.js +12 -5
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/1-packagesInstaller-install-pyodide.js +36 -83
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/2-0-runnersManager-runners.js +11 -3
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js +37 -25
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/3-btnRunner-py_btn.js +2 -2
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/3-terminalRunner-term.js +6 -1
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/4-0-idesManager-ide.js +11 -2
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideLogistic-ide.js +16 -1
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/5-3-avl-ides_test.mjs +25 -13
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/5-ideTester-ides_test.js +1 -1
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/6-idePlayground-playground.js +22 -3
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/qcms-qcm.js +1 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/start-pyodide.js +2 -1
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-scripts/subscriptions.js +11 -10
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyproject.toml +1 -1
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/__version__.py +0 -1
- pyodide_mkdocs_theme-5.6.1/pyodide_mkdocs_theme/templates/js-per-pages/6-2-init-playground.js +0 -42
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/LICENSE +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/README.md +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5v2/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/p5v2/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis_network/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/PMT_tools/vis_network/cdns.txt +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/__main__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/basthon_p5_to_pmt.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/exceptions.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/_inclusions_tools.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base0_extractors.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base1_contents_extractor.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base2_inclusions.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/base3_generic_extractors.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/files_extractors/concrete_extractors.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_builder/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_builder/_html_builder.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/html_dependencies/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/indent_parser.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/figure.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_ide.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_manager.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_playground.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_py_btn.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_run_macro.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_term_ide.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_terminal.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/ide_tester.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/py_script.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/macros/qcm.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/classes.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/messages/proxy.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/parsing.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/paths_utils.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/config.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_base.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_contracts.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_files.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_indent.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_macros.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_meta.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin/maestro_templates.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/_string_tools_and_constants.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/common_tree_src.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/config_option_src.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/docs_dirs_config.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/macros_configs.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/plugin_config.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/definitions/sub_configs.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/dumpers.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/lang_src.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/macro_config_src.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/plugin_config_src.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_config/sub_config_src.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/ide_tests.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/macros_data.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/maestro_tools.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/options_alterations.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/plugin_tools/pages_and_macros_py_configs.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/pyodide_logger.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/pyodide_macros/tools_and_constants.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/de/docs/exo.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/de/docs/index.md +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/de/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/en/docs/exo.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/en/docs/index.md +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/en/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/fr/docs/exo.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/fr/docs/index.md +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/fr/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/.gitignore +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/main.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/mkdocs.yml +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/pyodide_plot.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/requirements.txt +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/scripts/models/toolbox.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/README.md +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/__init__.py +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/.qcm-circle.svg +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-check-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-download-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-pause-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-play-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-restart-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-save-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-step-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-stop-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-upload-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/assets/images/icons8-zip-64.png +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/base_pmt.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/0-legacy-subscriber.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsStorage.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsTxt.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/functoolsUi.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/jsLogger.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-libs/mathjax-libs.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/1-error_logs-pyodide.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/1-runtimeManager-runtime-pyodide.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/4-ideRunner-ide.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-per-pages/5-2-virtualizer-ides_test.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/js-scripts/overlord.js +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/main.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/mkdocs_theme.yml +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/content.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/copyright.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/footer.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/header.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/partials/social.html +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/0-generic.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/btns-header.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/history.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/hourglass.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/ide.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/qcm.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/terminal.css +0 -0
- {pyodide_mkdocs_theme-5.6.1 → pyodide_mkdocs_theme-5.6.3}/pyodide_mkdocs_theme/templates/pyodide-css/testing.css +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pyodide-mkdocs-theme
|
|
3
|
-
Version: 5.6.
|
|
3
|
+
Version: 5.6.3
|
|
4
4
|
Summary: Package embedding the necessary tools to host pyodide, ACE editors, jQuery terminals in mkdocs documentations
|
|
5
5
|
License: GPL-3.0-or-later
|
|
6
6
|
Keywords: mkdocs,mkdocs-plugin,pyodide,IDE,terminal
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "5.6.3"
|
|
@@ -58,8 +58,27 @@ class HtmlDependencies:
|
|
|
58
58
|
Build all the templates needed for any page of the documentation, caching the different
|
|
59
59
|
versions of them.
|
|
60
60
|
"""
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
def build_and_store_blocks_dict(base_needs):
|
|
62
|
+
# Build the complete set of dependencies:
|
|
63
|
+
all_needs = set(base_needs)
|
|
64
|
+
all_needs.add(DepKind.always)
|
|
65
|
+
|
|
66
|
+
# Separate the wheat from the chaff... :p
|
|
67
|
+
blocks_dct: Dict[Block,List[Dep]] = {b:[] for b in Block.VALUES}
|
|
68
|
+
for dep in cls.__DEPS_IN_ORDER:
|
|
69
|
+
if dep.kind in all_needs:
|
|
70
|
+
blocks_dct[dep.block].append(dep)
|
|
71
|
+
|
|
72
|
+
# Mutate the wheat to templates and extra method calls needed:
|
|
73
|
+
for block, lst_deps in blocks_dct.items():
|
|
74
|
+
extras_dump_calls = []
|
|
75
|
+
template = '\n'.join( dep.to_template(extras_dump_calls) for dep in lst_deps )
|
|
76
|
+
blocks_dct[block] = (template, tuple(extras_dump_calls))
|
|
77
|
+
|
|
78
|
+
needs_to_blocks_dicts[base_needs] = blocks_dct
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
needs_to_blocks_dicts: Dict[FrozenSet[DepKind], BlocksTemplatesData] = {}
|
|
63
82
|
|
|
64
83
|
# (covers the weird case where page is None... Might also become useful one day, if ever
|
|
65
84
|
# pages_configs do not reference anymore all the possible pages of the documentation.
|
|
@@ -71,38 +90,10 @@ class HtmlDependencies:
|
|
|
71
90
|
all_kinds_of_pages = {None: default, **pages_configs}
|
|
72
91
|
|
|
73
92
|
for url, page_config in all_kinds_of_pages.items():
|
|
74
|
-
|
|
75
93
|
base_needs = frozenset(page_config.needs)
|
|
76
|
-
if base_needs not in
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
all_needs = set(base_needs)
|
|
80
|
-
all_needs.add(DepKind.always)
|
|
81
|
-
for need in base_needs:
|
|
82
|
-
DepKind.resolve_deps_needs(need, all_needs)
|
|
83
|
-
base_needs_to_all_needs[base_needs] = all_needs
|
|
84
|
-
|
|
85
|
-
# Separate the wheat from the chaff... :p
|
|
86
|
-
blocks_dct: Dict[Block,List[Dep]] = {b:[] for b in Block.get_blocks()}
|
|
87
|
-
for dep in cls.__DEPS_IN_ORDER:
|
|
88
|
-
if dep.kind in all_needs:
|
|
89
|
-
blocks_dct[dep.block].append(dep)
|
|
90
|
-
|
|
91
|
-
# Mutate the wheat to templates and extra method calls needed:
|
|
92
|
-
for block, lst_deps in blocks_dct.items():
|
|
93
|
-
extras_dump_calls = []
|
|
94
|
-
template = '\n'.join( dep.to_template(extras_dump_calls) for dep in lst_deps )
|
|
95
|
-
blocks_dct[block] = template, tuple(extras_dump_calls)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
# Register templates and cbks
|
|
99
|
-
needs_to_templates[base_needs] = blocks_dct
|
|
100
|
-
|
|
101
|
-
cls.__URL_TO_TEMPLATE_CACHE[url] = needs_to_templates[base_needs]
|
|
102
|
-
|
|
103
|
-
# Reassign the page needs with the complete set so that the proper info is
|
|
104
|
-
# available "later" if needed.
|
|
105
|
-
page_config.needs = base_needs_to_all_needs[base_needs]
|
|
94
|
+
if base_needs not in needs_to_blocks_dicts:
|
|
95
|
+
build_and_store_blocks_dict(base_needs)
|
|
96
|
+
cls.__URL_TO_TEMPLATE_CACHE[url] = needs_to_blocks_dicts[base_needs]
|
|
106
97
|
|
|
107
98
|
|
|
108
99
|
@classmethod
|
|
@@ -121,18 +112,17 @@ class HtmlDependencies:
|
|
|
121
112
|
return html
|
|
122
113
|
|
|
123
114
|
|
|
124
|
-
|
|
125
115
|
@classmethod
|
|
126
116
|
def build_import_map_template(cls):
|
|
127
117
|
""" Build the importmap script template (done in on_env hook). """
|
|
128
118
|
imports = {
|
|
129
119
|
name: target
|
|
130
|
-
|
|
131
|
-
|
|
120
|
+
for dep in cls.__DEPS_IN_ORDER
|
|
121
|
+
for name,target in dep.gen_import_map()
|
|
132
122
|
}
|
|
133
|
-
|
|
134
|
-
<script type="importmap">{
|
|
135
|
-
|
|
123
|
+
data = json.dumps(imports)
|
|
124
|
+
cls.__IMPORT_MAP = f'<script type="importmap">{{"imports":{ data }}}</script>'
|
|
125
|
+
|
|
136
126
|
|
|
137
127
|
@classmethod
|
|
138
128
|
def render_import_map(cls, env:'PyodideMacrosPlugin', page:Optional[Page]):
|
|
@@ -143,13 +133,11 @@ class HtmlDependencies:
|
|
|
143
133
|
return cls.__IMPORT_MAP.replace("{base_url}", env.base_url if page else '.')
|
|
144
134
|
|
|
145
135
|
|
|
146
|
-
|
|
147
|
-
|
|
148
136
|
@classmethod
|
|
149
137
|
def build_overlord_data(cls):
|
|
150
138
|
cls.__DEP_KINDS_TO_POOL_NAME = {
|
|
151
139
|
dep.kind: dep.pool_requirement
|
|
152
|
-
|
|
140
|
+
for dep in cls.__DEPS_IN_ORDER if dep.pool_requirement
|
|
153
141
|
}
|
|
154
142
|
|
|
155
143
|
|
|
@@ -157,8 +145,8 @@ class HtmlDependencies:
|
|
|
157
145
|
def get_overlord_classes(cls, page_configs: PageConfiguration):
|
|
158
146
|
overlord_classes = [
|
|
159
147
|
cls.__DEP_KINDS_TO_POOL_NAME[dep_kind]
|
|
160
|
-
|
|
161
|
-
|
|
148
|
+
for dep_kind in page_configs.needs
|
|
149
|
+
if dep_kind in cls.__DEP_KINDS_TO_POOL_NAME
|
|
162
150
|
]
|
|
163
151
|
return overlord_classes
|
|
164
152
|
|
|
@@ -171,38 +159,26 @@ class HtmlDependencies:
|
|
|
171
159
|
# 3) Easier to transmit data from mkdocs through inlined scripts if the CONFIG parts are
|
|
172
160
|
# actually loaded sync (this avoids the need for yet another global async flag...)
|
|
173
161
|
|
|
174
|
-
|
|
162
|
+
# Those are inserted directly in the page, full sync way (because they might be needed
|
|
163
|
+
# in the html code of the page, especially jQuery):
|
|
175
164
|
lodash = Cdn(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js")
|
|
176
165
|
jQuery = Cdn(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/jquery@3.7.1")
|
|
177
166
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
})
|
|
183
|
-
jQterm = Cdn(Block.libs, DepKind.term, "https://cdn.jsdelivr.net/npm/jquery.terminal@2.43.1/js/jquery.terminal.min.js")
|
|
184
|
-
ace = Cdn(Block.libs, DepKind.ide, {
|
|
185
|
-
'src': "https://cdn.jsdelivr.net/npm/ace-builds@1.44.0/src-min-noconflict/ace.js",
|
|
186
|
-
'integrity': "sha256-By0T5T0R4s7M//4aD6fxXPacVDXYl99T2YxxvhxKLn8=",
|
|
187
|
-
})
|
|
188
|
-
ace_tools = Cdn(Block.libs, DepKind.ide, {
|
|
189
|
-
'src': "https://cdn.jsdelivr.net/npm/ace-builds@1.44.0/src-min-noconflict/ext-language_tools.js",
|
|
190
|
-
'integrity': "sha256-eZ46N0b3QkDX+7GjjlJfoBuXGKIH86UKJVARHhGzpWA=",
|
|
191
|
-
})
|
|
192
|
-
pyodide = Cdn(Block.libs, DepKind.pyodide, "https://cdn.jsdelivr.net/pyodide/v0.25.0/full/pyodide.js")
|
|
193
|
-
|
|
194
|
-
#vvvvvvvvvvvvvvv
|
|
167
|
+
# Css must be always loaded, even if no terminal in the page, to avoid messing the
|
|
168
|
+
# layout differently depending on the page... :rolleyes:
|
|
169
|
+
jQTerm_css = Css(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/jquery.terminal@2.43.1/css/jquery.terminal.min.css")
|
|
170
|
+
|
|
195
171
|
# GENERATED-libs
|
|
196
172
|
config = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/0-config.js", type="text/javascript", extra_dump="dump_to_js_config")
|
|
197
173
|
subscriber = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/0-legacy-subscriber.js", type="text/javascript")
|
|
198
|
-
functools = Cdn(Block.libs, DepKind.
|
|
199
|
-
functoolsStorage = Cdn(Block.libs, DepKind.
|
|
200
|
-
functoolsTxt = Cdn(Block.libs, DepKind.
|
|
201
|
-
functoolsUi = Cdn(Block.libs, DepKind.
|
|
202
|
-
functoolsUiBuilder = Cdn(Block.libs, DepKind.
|
|
203
|
-
jsLogger = Cdn(Block.libs, DepKind.
|
|
174
|
+
functools = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functools.js", type="module")
|
|
175
|
+
functoolsStorage = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsStorage.js", type="module")
|
|
176
|
+
functoolsTxt = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsTxt.js", type="module")
|
|
177
|
+
functoolsUi = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsUi.js", type="module")
|
|
178
|
+
functoolsUiBuilder = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/functoolsUiBuilder.js", type="module")
|
|
179
|
+
jsLogger = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/jsLogger.js", type="module")
|
|
204
180
|
mathjax = Cdn(Block.libs, DepKind.always, "{base_url}/js-libs/mathjax-libs.js", type="text/javascript")
|
|
205
|
-
process_and_gui = Cdn(Block.libs, DepKind.
|
|
181
|
+
process_and_gui = Cdn(Block.libs, DepKind.never, "{base_url}/js-libs/process_and_gui.js", type="module")
|
|
206
182
|
css_generic = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/0-generic.css")
|
|
207
183
|
css_header = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/btns-header.css")
|
|
208
184
|
css_history = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/history.css")
|
|
@@ -212,45 +188,31 @@ class HtmlDependencies:
|
|
|
212
188
|
css_terminal = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/terminal.css")
|
|
213
189
|
css_testing = Css(Block.libs, DepKind.always, "{base_url}/pyodide-css/testing.css")
|
|
214
190
|
# GENERATED-libs
|
|
215
|
-
#^^^^^^^^^^^^^^^
|
|
216
191
|
|
|
217
192
|
# Always _after_ the js mathjax-libs.js file (SYNC!)
|
|
218
193
|
mathjax_tex = Cdn(Block.libs, DepKind.always, "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js")
|
|
219
194
|
|
|
220
|
-
|
|
221
|
-
#---------------------------------------------------
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
#vvvvvvvvvvvvvvvv
|
|
225
195
|
# GENERATED-pages
|
|
226
|
-
snippets = Cdn(Block.content, DepKind.pyodide,
|
|
227
|
-
error_logs = Cdn(Block.content, DepKind.pyodide,
|
|
228
|
-
install = Cdn(Block.content, DepKind.pyodide,
|
|
229
|
-
runtime = Cdn(Block.content, DepKind.pyodide,
|
|
230
|
-
runnersManager = Cdn(Block.content, DepKind.runners,
|
|
231
|
-
runner = Cdn(Block.content, DepKind.pyodide,
|
|
232
|
-
btnRunner = Cdn(Block.content, DepKind.py_btn,
|
|
233
|
-
terminalRunner = Cdn(Block.content, DepKind.term,
|
|
234
|
-
idesManager = Cdn(Block.content, DepKind.ide,
|
|
235
|
-
ideLogistic = Cdn(Block.content, DepKind.ide,
|
|
236
|
-
ideRunner = Cdn(Block.content, DepKind.ide,
|
|
237
|
-
virtualizer = Cdn(Block.content, DepKind.ides_test,
|
|
238
|
-
avl = Cdn(Block.content, DepKind.ides_test,
|
|
239
|
-
ideTester = Cdn(Block.content, DepKind.ides_test,
|
|
240
|
-
init = Cdn(Block.content, DepKind.playground, "{base_url}/js-per-pages/6-2-init-playground.js", type="module")
|
|
196
|
+
snippets = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/0-generic-python-snippets-pyodide.js", type="module")
|
|
197
|
+
error_logs = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-error_logs-pyodide.js", type="module")
|
|
198
|
+
install = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-packagesInstaller-install-pyodide.js", type="module")
|
|
199
|
+
runtime = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/1-runtimeManager-runtime-pyodide.js", type="module")
|
|
200
|
+
runnersManager = Cdn(Block.content, DepKind.runners, "{base_url}/js-per-pages/2-0-runnersManager-runners.js", type="module", pool="GlobalRunnersManager")
|
|
201
|
+
runner = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/2-pyodideSectionsRunner-runner-pyodide.js", type="module")
|
|
202
|
+
btnRunner = Cdn(Block.content, DepKind.py_btn, "{base_url}/js-per-pages/3-btnRunner-py_btn.js", type="module", pool="PyBtn")
|
|
203
|
+
terminalRunner = Cdn(Block.content, DepKind.term, "{base_url}/js-per-pages/3-terminalRunner-term.js", type="module", pool="Terminal")
|
|
204
|
+
idesManager = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-0-idesManager-ide.js", type="module")
|
|
205
|
+
ideLogistic = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideLogistic-ide.js", type="module")
|
|
206
|
+
ideRunner = Cdn(Block.content, DepKind.ide, "{base_url}/js-per-pages/4-ideRunner-ide.js", type="module", pool="Ide")
|
|
207
|
+
virtualizer = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-2-virtualizer-ides_test.js", type="module")
|
|
208
|
+
avl = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-3-avl-ides_test.mjs", type="module")
|
|
209
|
+
ideTester = Cdn(Block.content, DepKind.ides_test, "{base_url}/js-per-pages/5-ideTester-ides_test.js", type="module", pool="IdeTester")
|
|
241
210
|
idePlayground = Cdn(Block.content, DepKind.playground, "{base_url}/js-per-pages/6-idePlayground-playground.js", type="module", pool="IdePlayground")
|
|
242
|
-
qcms = Cdn(Block.content, DepKind.qcm,
|
|
243
|
-
start = Cdn(Block.content, DepKind.pyodide,
|
|
211
|
+
qcms = Cdn(Block.content, DepKind.qcm, "{base_url}/js-per-pages/qcms-qcm.js", type="module", pool="Qcm")
|
|
212
|
+
start = Cdn(Block.content, DepKind.pyodide, "{base_url}/js-per-pages/start-pyodide.js", type="module")
|
|
244
213
|
# GENERATED-pages
|
|
245
|
-
#^^^^^^^^^^^^^^^^
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
#---------------------------------------------------
|
|
249
|
-
|
|
250
214
|
|
|
251
|
-
#vvvvvvvvvvvvvvvvvv
|
|
252
215
|
# GENERATED-scripts
|
|
253
216
|
overlord = Cdn(Block.scripts, DepKind.always, "{base_url}/js-scripts/overlord.js", type="module")
|
|
254
217
|
subscriptions = Cdn(Block.scripts, DepKind.always, "{base_url}/js-scripts/subscriptions.js", type="module")
|
|
255
218
|
# GENERATED-scripts
|
|
256
|
-
#^^^^^^^^^^^^^^^^^^
|
|
@@ -22,7 +22,7 @@ from pathlib import Path
|
|
|
22
22
|
from typing import ClassVar, Dict, List, Optional, Set, Union, TYPE_CHECKING
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
from ..tools_and_constants import AutoDescriptor
|
|
25
|
+
from ..tools_and_constants import AutoDescriptor, MyEnum, dataclass_with_VALUES
|
|
26
26
|
|
|
27
27
|
if TYPE_CHECKING:
|
|
28
28
|
from ..plugin.pyodide_macros_plugin import PyodideMacrosPlugin
|
|
@@ -32,72 +32,39 @@ if TYPE_CHECKING:
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
class Block:
|
|
35
|
+
@dataclass_with_VALUES
|
|
36
|
+
class Block(MyEnum):
|
|
37
37
|
"""
|
|
38
38
|
StrEnum-like object, giving all the jinja blocks usable in the main.html file.
|
|
39
39
|
"""
|
|
40
|
-
libs = AutoDescriptor()
|
|
41
|
-
content = AutoDescriptor()
|
|
42
|
-
scripts = AutoDescriptor()
|
|
43
|
-
|
|
44
|
-
@classmethod
|
|
45
|
-
def get_blocks(cls):
|
|
46
|
-
return (cls.libs, cls.content, cls.scripts)
|
|
40
|
+
libs: 'Block' = AutoDescriptor()
|
|
41
|
+
content: 'Block' = AutoDescriptor()
|
|
42
|
+
scripts: 'Block' = AutoDescriptor()
|
|
47
43
|
|
|
48
44
|
|
|
49
45
|
|
|
50
46
|
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
@dataclass_with_VALUES
|
|
49
|
+
class DepKind(MyEnum):
|
|
53
50
|
"""
|
|
54
51
|
StrEnum-like object, identifying the key components to build the "dependencies graph"
|
|
55
52
|
of scripts and css injections in main.html.
|
|
56
53
|
"""
|
|
57
|
-
always = AutoDescriptor()
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
@classmethod
|
|
73
|
-
def resolve_deps_needs(cls, kind:'DepKind', needs:Set['DepKind']):
|
|
74
|
-
"""
|
|
75
|
-
Gather the whole "chain" of dependencies according to the dependencies graph,
|
|
76
|
-
sorting from the given @kind, which is already present in @needs.
|
|
77
|
-
Keep adding kinds as long as they are not present in @needs.
|
|
78
|
-
"""
|
|
79
|
-
# NOTE: this is almost useless for PMT 4+, because of automatic resolution of imported
|
|
80
|
-
# modules, BUT there are still some needs for non modules, so keep everything as is...
|
|
81
|
-
|
|
82
|
-
# Keep in mind DepKind _values_ are actually SIMPLE STRINGS!
|
|
83
|
-
if kind in _DEP_KINDS_GRAPH:
|
|
84
|
-
next_kind = _DEP_KINDS_GRAPH[kind]
|
|
85
|
-
if next_kind not in needs:
|
|
86
|
-
needs.add(next_kind)
|
|
87
|
-
cls.resolve_deps_needs(next_kind, needs)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
# Ignoring the systematic DepKind.always final dependency.
|
|
92
|
-
_DEP_KINDS_GRAPH = {
|
|
93
|
-
DepKind.playground: DepKind.ide,
|
|
94
|
-
DepKind.ides_test: DepKind.ide,
|
|
95
|
-
DepKind.ide: DepKind.term,
|
|
96
|
-
DepKind.term: DepKind.pyodide,
|
|
97
|
-
DepKind.run_macro: DepKind.py_btn,
|
|
98
|
-
DepKind.py_btn: DepKind.pyodide,
|
|
99
|
-
DepKind.pyodide: DepKind.runners,
|
|
100
|
-
}
|
|
54
|
+
always: 'DepKind' = AutoDescriptor()
|
|
55
|
+
never: 'DepKind' = AutoDescriptor() # Registered, sent to the importmap, but never directly
|
|
56
|
+
# inserted in the html
|
|
57
|
+
pyodide: 'DepKind' = AutoDescriptor()
|
|
58
|
+
py_btn: 'DepKind' = AutoDescriptor()
|
|
59
|
+
run_macro: 'DepKind' = AutoDescriptor('py_btn') # For now the JS requirements are identical...
|
|
60
|
+
term: 'DepKind' = AutoDescriptor()
|
|
61
|
+
runners: 'DepKind' = AutoDescriptor()
|
|
62
|
+
ide: 'DepKind' = AutoDescriptor()
|
|
63
|
+
ides_test: 'DepKind' = AutoDescriptor()
|
|
64
|
+
playground: 'DepKind' = AutoDescriptor()
|
|
65
|
+
qcm: 'DepKind' = AutoDescriptor()
|
|
66
|
+
qcm_encrypt: 'DepKind' = AutoDescriptor()
|
|
67
|
+
mermaid: 'DepKind' = AutoDescriptor()
|
|
101
68
|
|
|
102
69
|
|
|
103
70
|
|
|
@@ -208,7 +208,10 @@ class LangDe(LangFr):
|
|
|
208
208
|
"""
|
|
209
209
|
Tooltip for the button resetting the content of a code editor.
|
|
210
210
|
"""
|
|
211
|
-
restart_confirm: Tr =
|
|
211
|
+
restart_confirm: Tr = MsgPlural(
|
|
212
|
+
"ACHTUNG: Durch das Zurücksetzen des Editors gehen alle bisherigen Codes, Validierungsstatus und Verlauf verloren.",
|
|
213
|
+
"Beim Zurücksetzen der Editoren gehen der bisherige Code, die Validierungsstatus und die Verläufe aller Editoren auf der Seite verloren.",
|
|
214
|
+
)
|
|
212
215
|
"""
|
|
213
216
|
Confirmation question before resetting an IDE.
|
|
214
217
|
"""
|
|
@@ -261,7 +264,11 @@ class LangDe(LangFr):
|
|
|
261
264
|
"""
|
|
262
265
|
|
|
263
266
|
|
|
264
|
-
# Trashcan button related
|
|
267
|
+
# Trashcan or resetAll button related
|
|
268
|
+
tip_reset_all: Tr = Tip(12, "Alle Editoren auf der Seite zurücksetze.")
|
|
269
|
+
"""
|
|
270
|
+
Tooltip for the button to reset all the IDEs on the page.
|
|
271
|
+
"""
|
|
265
272
|
tip_trash: Tr = Tip(15, "Lösche die gespeicherten Codes im Webbrowser für {site_name}")
|
|
266
273
|
"""
|
|
267
274
|
Tooltip for the button to delete the data stored in the browser's localStorage
|
|
@@ -207,7 +207,10 @@ class LangEn(LangFr):
|
|
|
207
207
|
"""
|
|
208
208
|
Tooltip for the button resetting the content of a code editor.
|
|
209
209
|
"""
|
|
210
|
-
restart_confirm: Tr =
|
|
210
|
+
restart_confirm: Tr = MsgPlural(
|
|
211
|
+
"WARNING: resetting the editor, you will lose previous codes, validation status and histories.",
|
|
212
|
+
"WARNING: resetting the editors will erase the previous code, validation statuses, and histories for all the editors on the page.",
|
|
213
|
+
)
|
|
211
214
|
"""
|
|
212
215
|
Confirmation question before resetting an IDE.
|
|
213
216
|
"""
|
|
@@ -260,7 +263,11 @@ class LangEn(LangFr):
|
|
|
260
263
|
"""
|
|
261
264
|
|
|
262
265
|
|
|
263
|
-
# Trashcan button related
|
|
266
|
+
# Trashcan or resetAll button related
|
|
267
|
+
tip_reset_all: Tr = Tip(12, "Reset all the editors on the page.")
|
|
268
|
+
"""
|
|
269
|
+
Tooltip for the button to reset all the IDEs on the page.
|
|
270
|
+
"""
|
|
264
271
|
tip_trash: Tr = Tip(15, "Remove the saved codes for {site_name} from the browser")
|
|
265
272
|
"""
|
|
266
273
|
Tooltip for the button to delete the data stored in the browser's localStorage
|
|
@@ -213,7 +213,10 @@ class LangFr(LangBase):
|
|
|
213
213
|
"""
|
|
214
214
|
Info-bulle du bouton réinitialisant le contenu d'un éditeur.
|
|
215
215
|
"""
|
|
216
|
-
restart_confirm: Tr =
|
|
216
|
+
restart_confirm: Tr = MsgPlural(
|
|
217
|
+
"ATTENTION: réinitialiser l'éditeur fera perdre les anciens codes, status de validation et historiques.",
|
|
218
|
+
"ATTENTION: réinitialiser les éditeurs fera perdre les anciens codes, status de validation et historiques pour tous les éditeurs de la page.",
|
|
219
|
+
)
|
|
217
220
|
"""
|
|
218
221
|
Demande de confirmation à l'utilisateur avec de faire un restart de l'IDE.
|
|
219
222
|
"""
|
|
@@ -268,7 +271,11 @@ class LangFr(LangBase):
|
|
|
268
271
|
"""
|
|
269
272
|
|
|
270
273
|
|
|
271
|
-
# Trashcan button related
|
|
274
|
+
# Trashcan or resetAll button related
|
|
275
|
+
tip_reset_all: Tr = Tip(12, "Réinitialiser tous les éditeurs de la page.")
|
|
276
|
+
"""
|
|
277
|
+
Info-bulle du bouton de pour réinitialiser tous les IDEs de la page.
|
|
278
|
+
"""
|
|
272
279
|
tip_trash: Tr = Tip(15, "Supprimer du navigateur les codes enregistrés pour {site_name}")
|
|
273
280
|
"""
|
|
274
281
|
Info-bulle du bouton de pour supprimer les données stockées dans le navigateur
|
|
@@ -154,6 +154,11 @@ class PyodideMacrosPlugin(
|
|
|
154
154
|
|
|
155
155
|
self.macro(test_cases.Case) # Not a macro, but needed in the jinja environment
|
|
156
156
|
|
|
157
|
+
@self.macro
|
|
158
|
+
def base_url():
|
|
159
|
+
return self.base_url
|
|
160
|
+
|
|
161
|
+
|
|
157
162
|
# If mkdocs-sqlite-console is registered as plugin for the project, automatically add
|
|
158
163
|
# the macro to the environment (requires sqlite-console > 1.0.7)
|
|
159
164
|
if self.use_sqlite_console:
|
|
@@ -145,6 +145,12 @@ class Case:
|
|
|
145
145
|
Quick description of the test (optional).
|
|
146
146
|
"""
|
|
147
147
|
|
|
148
|
+
inputs: Optional[Sequence[str]] = None
|
|
149
|
+
"""
|
|
150
|
+
Tuple or list of strings that will be returned during the test by any call to `input`.
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
|
|
148
154
|
#-------------------------------------------------------------------------
|
|
149
155
|
# Private interface:
|
|
150
156
|
|
|
@@ -258,21 +264,15 @@ class Case:
|
|
|
258
264
|
- `hasCounter`
|
|
259
265
|
- `hasRevealBtn`
|
|
260
266
|
- `hasTerminal`
|
|
261
|
-
- `hasTerminal`
|
|
262
|
-
- `hasTerminal`
|
|
263
267
|
- `isDelayedRevelation`
|
|
264
268
|
- `isFullScreen`
|
|
265
269
|
- `isIde`
|
|
266
|
-
- `isIde`
|
|
267
270
|
- `isInSequentialRun`
|
|
268
271
|
- `isInSplit`
|
|
269
272
|
- `isPyBtn`
|
|
270
|
-
- `isPyBtn`
|
|
271
273
|
- `isRunner`
|
|
272
274
|
- `isStarredGroup`
|
|
273
275
|
- `isTerminal`
|
|
274
|
-
- `isTerminal`
|
|
275
|
-
- `isTerminal`
|
|
276
276
|
- `isVert`
|
|
277
277
|
- `maxIdeLines`
|
|
278
278
|
- `minIdeLines`
|
|
@@ -452,7 +452,7 @@ class Case:
|
|
|
452
452
|
criteria: see below).
|
|
453
453
|
"""
|
|
454
454
|
dumped = {
|
|
455
|
-
f.name: v
|
|
455
|
+
f.name: v if f.name != 'inputs' else list(v)
|
|
456
456
|
for f in fields(self)
|
|
457
457
|
if f.name not in skipped_props # Useful in the JS layer of the tests...
|
|
458
458
|
and ( # ...and:
|
|
@@ -18,12 +18,6 @@ If not, see <https://www.gnu.org/licenses/>.
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
/*
|
|
22
|
-
NOTE: Globals defined somewhere else:
|
|
23
|
-
* The "ace" variable is defined in the ace library. Everything using it must be called after
|
|
24
|
-
the libs insertion steps.
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
21
|
|
|
28
22
|
const SqBs = {
|
|
29
23
|
'[':'[',
|
|
@@ -110,6 +104,7 @@ const CONFIG = {
|
|
|
110
104
|
successTail: null,
|
|
111
105
|
tests: null,
|
|
112
106
|
testsDone: null,
|
|
107
|
+
tipResetAll: null,
|
|
113
108
|
tipTrash: null,
|
|
114
109
|
titleCorr: null,
|
|
115
110
|
titleRem: null,
|
|
@@ -179,7 +174,9 @@ const CONFIG = {
|
|
|
179
174
|
},
|
|
180
175
|
|
|
181
176
|
|
|
177
|
+
// Proxy-like object toward the GlobalRunnersManager. Holds only methods, no shared state:
|
|
182
178
|
RUNNERS_MANAGER: null,
|
|
179
|
+
|
|
183
180
|
pyodideIsReady: false,
|
|
184
181
|
classesPoolIsReady: false,
|
|
185
182
|
overlordIsReady: false,
|
|
@@ -63,7 +63,7 @@ export const cssPx =(jObj,prop='height')=> +jObj.css(prop).slice(0,-2)
|
|
|
63
63
|
* is single threaded, and its value is protected be defining it within a scope where the
|
|
64
64
|
* "locking" function is also defined (behaves like a python/TS decorator. Kinda... :p ).
|
|
65
65
|
* */
|
|
66
|
-
export const withPyodideAsyncLock = (
|
|
66
|
+
export const withPyodideAsyncLock = (()=>{
|
|
67
67
|
|
|
68
68
|
/**Everything is run async but single threaded, so a global lock can be added, using a simple
|
|
69
69
|
* boolean flag, declared inside a closure to avoid a user messing with the variable...
|
|
@@ -327,7 +327,57 @@ export function waitForClassesPoolReady(applyWhenPoolReady=null){
|
|
|
327
327
|
|
|
328
328
|
|
|
329
329
|
|
|
330
|
+
const LOADED = new Set()
|
|
330
331
|
|
|
332
|
+
const _ressourceLoaderFactory = (tagName, attr, kind, baseOptions={}) => (options) => new Promise(
|
|
333
|
+
(resolve,reject)=>{
|
|
334
|
+
options = (typeof(options)=='string' ? {[attr]: options} : options)
|
|
335
|
+
options = {crossOrigin: "anonymous", referrerPolicy: "no-referrer", ...baseOptions, ...options}
|
|
336
|
+
|
|
337
|
+
if(LOADED.has(options[attr])) return resolve()
|
|
338
|
+
|
|
339
|
+
const tag = document.createElement(tagName)
|
|
340
|
+
tag.addEventListener("load", _=>{ LOADED.add(options[attr]); resolve() })
|
|
341
|
+
tag.addEventListener("error", _=>reject(console.error(`Could not load ${ options[attr] } ${kind}`)))
|
|
342
|
+
for(const k in options){
|
|
343
|
+
if(k==attr) continue // Always set last...
|
|
344
|
+
tag[k] = options[k]
|
|
345
|
+
}
|
|
346
|
+
tag[attr] = options[attr] // Always set LAST (something about the script loading triggered whe src is added...)
|
|
347
|
+
document.head.appendChild(tag)
|
|
348
|
+
}
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
export const cdnLoader = _ressourceLoaderFactory('script', 'src', 'script')
|
|
353
|
+
export const cssLoader = _ressourceLoaderFactory('link', 'href', 'css', {rel:'stylesheet'})
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
export const externalRessourcesLoaderFor = (name, ressourcesArr)=>{
|
|
357
|
+
if(name) console.log(`Loading ${ name } utilities...`)
|
|
358
|
+
const done = Promise.all(ressourcesArr.map(o=>typeof(o)!='string' && ('href' in o) ? cssLoader(o):cdnLoader(o)))
|
|
359
|
+
if(name) console.log(name, 'ready')
|
|
360
|
+
return done
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
export class RessourcesLoader {
|
|
365
|
+
|
|
366
|
+
static RESSOURCES = []
|
|
367
|
+
static POST_ACTIONS = []
|
|
368
|
+
|
|
369
|
+
static register(options, post=null){
|
|
370
|
+
RessourcesLoader.RESSOURCES.push(options)
|
|
371
|
+
if(post) RessourcesLoader.POST_ACTIONS.push(post)
|
|
372
|
+
return RessourcesLoader
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
static async loadAll(){
|
|
376
|
+
await externalRessourcesLoaderFor('', RessourcesLoader.RESSOURCES).then(async _=>{
|
|
377
|
+
await Promise.all(RessourcesLoader.POST_ACTIONS.map(p=>p()))
|
|
378
|
+
})
|
|
379
|
+
}
|
|
380
|
+
}
|
|
331
381
|
|
|
332
382
|
|
|
333
383
|
|
|
@@ -613,9 +663,9 @@ export class RunningProfile {
|
|
|
613
663
|
* (done this way to get autocompletion support when coding in js, without
|
|
614
664
|
* breaking the current implementation logic).
|
|
615
665
|
* */
|
|
616
|
-
static buildDefaultRunnersObject(
|
|
666
|
+
static buildDefaultRunnersObject(withValues=false){
|
|
617
667
|
const obj = {...RunningProfile.PROFILE}
|
|
618
|
-
for(const k in obj) obj[k] =
|
|
668
|
+
for(const k in obj) obj[k] = withValues ? k : undefined
|
|
619
669
|
obj.default = undefined
|
|
620
670
|
return obj
|
|
621
671
|
}
|
|
@@ -625,11 +675,11 @@ export class RunningProfile {
|
|
|
625
675
|
|
|
626
676
|
static build(profile){
|
|
627
677
|
return Object.freeze({
|
|
628
|
-
name:
|
|
629
|
-
isTermCmd:
|
|
630
|
-
isPlaying:
|
|
678
|
+
name: profile,
|
|
679
|
+
isTermCmd: profile.includes(RunningProfile.PROFILE.cmd),
|
|
680
|
+
isPlaying: profile.includes(RunningProfile.PROFILE.play),
|
|
631
681
|
isValidating: profile.includes(RunningProfile.PROFILE.validate),
|
|
632
|
-
isTesting:
|
|
682
|
+
isTesting: profile.includes(RunningProfile.PROFILE.testing),
|
|
633
683
|
})
|
|
634
684
|
}
|
|
635
685
|
}
|
|
@@ -38,7 +38,7 @@ const defaultOptions=(options, prop)=>({
|
|
|
38
38
|
tagClass: "vertical",
|
|
39
39
|
tagId: prop,
|
|
40
40
|
fontSize: "",
|
|
41
|
-
|
|
41
|
+
extraStyle: "", // For the outer element/tag, as "width:min-content;..."
|
|
42
42
|
|
|
43
43
|
// If a label is used:
|
|
44
44
|
label: prop,
|
|
@@ -174,7 +174,6 @@ export function buildJqTextArea(obj, prop, options={}){
|
|
|
174
174
|
* */
|
|
175
175
|
export function buildJqCheckBox(obj, prop, options={}){
|
|
176
176
|
options.tagClass = ("horizontal "+(options.tagClass??"")).trim()
|
|
177
|
-
options.extraStyles = "grid-template-columns: max-content max-content;grid-gap:5px;"
|
|
178
177
|
options.labelFirst ??= false
|
|
179
178
|
options = defaultOptions(options, prop)
|
|
180
179
|
const kls = options.inputClass ? `class="${ options.inputClass }"`:""
|
|
@@ -192,7 +191,6 @@ export function buildJqCheckBox(obj, prop, options={}){
|
|
|
192
191
|
* */
|
|
193
192
|
export function buildJqNumber(obj, prop, options={}){
|
|
194
193
|
options.tagClass = ("horizontal "+(options.tagClass??"")).trim()
|
|
195
|
-
options.extraStyles = "grid-template-columns: max-content max-content;grid-gap:5px;"
|
|
196
194
|
options.labelFirst ??= false
|
|
197
195
|
options = defaultOptions(options, prop)
|
|
198
196
|
const kls = options.inputClass ? `class="${ options.inputClass }"`:""
|