From f7d0bac5685b2b351f8237d0b1489d99a07733b7 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 10 Apr 2022 20:19:33 -0400 Subject: [PATCH 01/19] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index beb55db4..ca570ea8 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ Check the ship's log for how to use your warp drive to travel between star syste - Use our [template Unity project](https://github.com/xen-42/outer-wilds-unity-template) to create assets for use in NH, including all game scripts recovered using UtinyRipper - Separate solar system scenes accessible via wormhole OR via the ship's new warp drive feature accessible via the ship's log - Remove existing planets -- Create basic planets from heightmaps/texturemaps -- Stars, comets, asteroid belts, satellites, geysers, cloak fields +- Create planets from heightmaps/texturemaps +- Create stars, comets, asteroid belts, satellites, geysers, cloak fields - Binary orbits - Signalscope signals and custom frequencies - Surface scatter: rocks, trees, etc, using in-game models, or custom ones From 0eb667864d201c383f86e7f4bf5e0477906c5ab8 Mon Sep 17 00:00:00 2001 From: TerrificTrifid <99054745+TerrificTrifid@users.noreply.github.com> Date: Tue, 12 Apr 2022 17:27:25 -0500 Subject: [PATCH 02/19] Added to Dialogue schema (#84) * Update dialogue_schema.xsd with better condition elements Improved support for the condition system, plus some other tweaks * Update dialogue_schema.xsd --- NewHorizons/dialogue_schema.xsd | 102 +++++++++++++++++++++++++------- 1 file changed, 79 insertions(+), 23 deletions(-) diff --git a/NewHorizons/dialogue_schema.xsd b/NewHorizons/dialogue_schema.xsd index 626b0751..8297eb22 100644 --- a/NewHorizons/dialogue_schema.xsd +++ b/NewHorizons/dialogue_schema.xsd @@ -8,7 +8,7 @@ - The name of the dialogue tree + The name of the character, used for the interaction prompt. Set to "SIGN" for the prompt "Read", or "RECORDING" for "Play Recording" @@ -36,14 +36,7 @@ - The condition that needs to be met in order to get to this node - - - - - - - A ship log fact that must be revealed in order to get to this node + The condition that needs to be met in order for the dialogue to begin at this node. There must be one node that uses "DEFAULT" @@ -54,17 +47,45 @@ - - - - Facts to reveal when the player sees this dialogue node - - - - A list of options to show to the player once the character is one talking + A list of options to show to the player once the character is done talking + + + + + + + Facts to reveal when the player goes through this dialogue node + + + + + + + Set a new condition that will only last for the current loop + + + + + + + Set a new persistent condition that will last indefinitely in the current save, unless cancelled or deleted + + + + + + + A ship log fact that must be revealed in order to proceed to the DialogueTarget + + + + + + + The name of the DialogueNode to go to after this node. Mutually exclusive with DialogueOptionsList here @@ -113,17 +134,38 @@ - + - Require a prior condition to be met to show this option + Require a persistent condition to be met to show this option - + - Hide this option if a condition has been met + Hide this option if a persistent condition has been met + + + + + + + Require a (single-loop) condition to be met to show this option + + + + + + + Hide this option if a (single-loop) condition has been met + + + + + + + Require a ship log fact to be known to show this option @@ -134,7 +176,21 @@ - + + + + Set a condition when this option is chosen + + + + + + + Cancel a condition when this option is chosen + + + + The name of the DialogueNode to go to when this option is selected @@ -144,4 +200,4 @@ - \ No newline at end of file + From 457a6b8482bfc9d914c0796031c864893c8ac6ca Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 13 Apr 2022 18:27:11 -0400 Subject: [PATCH 03/19] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2af26fd7..b4627dab 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ -patreon: xen_42 +patreon: ownh custom: ["https://paypal.me/xen42"] From 58126d5f81c3502442e1bc70b6441f1d07774ef7 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 13 Apr 2022 18:27:35 -0400 Subject: [PATCH 04/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca570ea8..84b02b6e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![new horizons thumbnail 2](https://user-images.githubusercontent.com/22628069/154112130-b777f618-245f-44c9-9408-e11141fc5fde.png) -[![Support me on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dxen_42%26type%3Dpatrons&style=flat)](https://patreon.com/xen_42) +[![Support us on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dxen_42%26type%3Dpatrons&style=flat)](https://patreon.com/ownh) [![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.com/paypalme/xen42) ![Current version](https://img.shields.io/github/manifest-json/v/xen-42/outer-wilds-new-horizons?color=gree&filename=NewHorizons%2Fmanifest.json) ![Downloads](https://img.shields.io/github/downloads/xen-42/outer-wilds-new-horizons/total) From f151adc3f3fdd88952e7ef87db714b031a8ac24e Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 15 Apr 2022 14:11:19 -0400 Subject: [PATCH 05/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 84b02b6e..c8354f80 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![new horizons thumbnail 2](https://user-images.githubusercontent.com/22628069/154112130-b777f618-245f-44c9-9408-e11141fc5fde.png) -[![Support us on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dxen_42%26type%3Dpatrons&style=flat)](https://patreon.com/ownh) +[![Support me on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Downh%26type%3Dpatrons&style=flat)](https://patreon.com/ownh) [![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.com/paypalme/xen42) ![Current version](https://img.shields.io/github/manifest-json/v/xen-42/outer-wilds-new-horizons?color=gree&filename=NewHorizons%2Fmanifest.json) ![Downloads](https://img.shields.io/github/downloads/xen-42/outer-wilds-new-horizons/total) From 0381aabd22fa3ce0aeb79e30c1a1f87adaa6133c Mon Sep 17 00:00:00 2001 From: Ben C Date: Fri, 15 Apr 2022 17:09:50 -0400 Subject: [PATCH 06/19] Docs Rework (#85) * Reworked docs * Add base_url to config.json * Add Pipfile * Update docs_build.yml * Add opengraph metadata * Make caching work * Add link to addon creation tool * Add link to VSCode --- .github/workflows/docs_build.yml | 32 +- NewHorizons/dialogue_schema.xsd | 27 +- NewHorizons/schema.json | 20 +- NewHorizons/shiplog_schema.xsd | 2 +- NewHorizons/star_system_schema.json | 2 +- docs/Pipfile | 9 +- docs/Pipfile.lock | 326 ++++++++++++------ docs/Setup.md | 14 +- docs/config.json | 56 +++ docs/content/base/base.jinja2 | 80 ----- docs/content/base/macros.jinja2 | 12 - docs/content/base/meta.jinja2 | 63 ---- docs/content/base/page_template.jinja2 | 46 --- .../base/schema/json/badge_type.jinja2 | 14 - .../base/schema/json/breadcrumbs.jinja2 | 13 - docs/content/base/schema/json/content.jinja2 | 122 ------- .../base/schema/json/macro_restriction.jinja2 | 5 - .../base/schema/json/schema_base.jinja2 | 21 -- .../base/schema/json/section_array.jinja2 | 36 -- .../json/section_conditional_subschema.jinja2 | 58 ---- .../schema/json/section_description.jinja2 | 20 -- .../base/schema/json/section_examples.jinja2 | 18 - .../base/schema/json/section_not.jinja2 | 8 - .../schema/json/section_properties.jinja2 | 64 ---- ...on_undocumented_required_properties.jinja2 | 11 - .../base/schema/json/tabbed_section.jinja2 | 25 -- .../base/schema/schema_includes.jinja2 | 2 - .../base/schema/xml/schema_base.jinja2 | 99 ------ docs/content/browserconfig.jinja2 | 11 - docs/content/pages/api.md | 2 +- docs/content/pages/details.md | 2 +- docs/content/pages/dialogue.md | 2 +- docs/content/pages/faq.jinja2 | 5 +- docs/content/pages/home.md | 15 +- docs/content/pages/ship_log.md | 24 +- docs/content/pages/translation.md | 2 +- docs/content/pages/update_existing.md | 2 +- docs/content/robots.jinja2 | 4 - docs/content/sitemap.jinja2 | 11 - docs/content/static/fav/manifest.webmanifest | 49 --- docs/content/static/styles/base.css | 7 +- docs/generate.py | 101 ------ docs/lib/BootstrapExtension.py | 42 --- docs/lib/Content/AbstractItem.py | 58 ---- docs/lib/Content/AbstractSchemaItem.py | 24 -- docs/lib/Content/AbstractTemplatedItem.py | 53 --- docs/lib/Content/CSSStaticItem.py | 11 - docs/lib/Content/HTMLPage.py | 18 - docs/lib/Content/ImageStaticItem.py | 21 -- docs/lib/Content/JSONSchema.py | 58 ---- docs/lib/Content/JSStaticItem.py | 13 - docs/lib/Content/MDPage.py | 43 --- docs/lib/Content/MetaItem.py | 18 - docs/lib/Content/StaticItem.py | 36 -- docs/lib/Content/XMLSchema.py | 93 ----- docs/lib/__init__.py | 0 docs/lib/utils.py | 19 - 57 files changed, 352 insertions(+), 1597 deletions(-) create mode 100644 docs/config.json delete mode 100644 docs/content/base/base.jinja2 delete mode 100644 docs/content/base/macros.jinja2 delete mode 100644 docs/content/base/meta.jinja2 delete mode 100644 docs/content/base/page_template.jinja2 delete mode 100644 docs/content/base/schema/json/badge_type.jinja2 delete mode 100644 docs/content/base/schema/json/breadcrumbs.jinja2 delete mode 100644 docs/content/base/schema/json/content.jinja2 delete mode 100644 docs/content/base/schema/json/macro_restriction.jinja2 delete mode 100644 docs/content/base/schema/json/schema_base.jinja2 delete mode 100644 docs/content/base/schema/json/section_array.jinja2 delete mode 100644 docs/content/base/schema/json/section_conditional_subschema.jinja2 delete mode 100644 docs/content/base/schema/json/section_description.jinja2 delete mode 100644 docs/content/base/schema/json/section_examples.jinja2 delete mode 100644 docs/content/base/schema/json/section_not.jinja2 delete mode 100644 docs/content/base/schema/json/section_properties.jinja2 delete mode 100644 docs/content/base/schema/json/section_undocumented_required_properties.jinja2 delete mode 100644 docs/content/base/schema/json/tabbed_section.jinja2 delete mode 100644 docs/content/base/schema/schema_includes.jinja2 delete mode 100644 docs/content/base/schema/xml/schema_base.jinja2 delete mode 100644 docs/content/browserconfig.jinja2 delete mode 100644 docs/content/robots.jinja2 delete mode 100644 docs/content/sitemap.jinja2 delete mode 100644 docs/content/static/fav/manifest.webmanifest delete mode 100644 docs/generate.py delete mode 100644 docs/lib/BootstrapExtension.py delete mode 100644 docs/lib/Content/AbstractItem.py delete mode 100644 docs/lib/Content/AbstractSchemaItem.py delete mode 100644 docs/lib/Content/AbstractTemplatedItem.py delete mode 100644 docs/lib/Content/CSSStaticItem.py delete mode 100644 docs/lib/Content/HTMLPage.py delete mode 100644 docs/lib/Content/ImageStaticItem.py delete mode 100644 docs/lib/Content/JSONSchema.py delete mode 100644 docs/lib/Content/JSStaticItem.py delete mode 100644 docs/lib/Content/MDPage.py delete mode 100644 docs/lib/Content/MetaItem.py delete mode 100644 docs/lib/Content/StaticItem.py delete mode 100644 docs/lib/Content/XMLSchema.py delete mode 100644 docs/lib/__init__.py delete mode 100644 docs/lib/utils.py diff --git a/.github/workflows/docs_build.yml b/.github/workflows/docs_build.yml index 301d6bb9..3737bdf6 100644 --- a/.github/workflows/docs_build.yml +++ b/.github/workflows/docs_build.yml @@ -10,7 +10,7 @@ on: pull_request: paths: - - dev/** + - docs/** - NewHorizons/*schema*.json - NewHorizons/*.xsd @@ -22,9 +22,8 @@ on: default: "/" env: - OUT_DIR: ${{ github.events.inputs.relative_path }} - BASE_URL: https://nh.outerwildsmods.com/ - PIPENV_VENV_IN_PROJECT: enabled + URL_PREFIX: ${{ github.events.inputs.relative_path }} + PIPENV_VENV_IN_PROJECT: 1 jobs: build: @@ -33,11 +32,13 @@ jobs: steps: - uses: actions/checkout@v2 + - run: mkdir ./.venv + - run: cp -r docs/** . - if: github.ref == 'refs/heads/master' run: | - echo "OUT_DIR=/" >> $GITHUB_ENV + echo "URL_PREFIX=/" >> $GITHUB_ENV - name: Cache Dependencies uses: actions/cache@v2 @@ -51,26 +52,21 @@ jobs: - name: Install dependecies uses: VaultVulp/action-pipenv@v2.0.1 with: - command: install + command: install --dev - name: Copy Schemas run: | - mkdir content/schemas/ - cp NewHorizons/schema.json content/schemas/ - cp NewHorizons/star_system_schema.json content/schemas/ - cp NewHorizons/translation_schema.json content/schemas/ - cp NewHorizons/shiplog_schema.xsd content/schemas/ - cp NewHorizons/dialogue_schema.xsd content/schemas/ - - - name: Create Output Dir - run: | - mkdir out/ - mkdir out/schemas/ + mkdir content/pages/schemas/ + cp NewHorizons/schema.json content/pages/schemas/ + cp NewHorizons/star_system_schema.json content/pages/schemas/ + cp NewHorizons/translation_schema.json content/pages/schemas/ + cp NewHorizons/shiplog_schema.xsd content/pages/schemas/ + cp NewHorizons/dialogue_schema.xsd content/pages/schemas/ - name: Build Site uses: VaultVulp/action-pipenv@v2.0.1 with: - command: run python generate.py + command: run python -m menagerie generate - name: Upload Artifact uses: actions/upload-artifact@v2 diff --git a/NewHorizons/dialogue_schema.xsd b/NewHorizons/dialogue_schema.xsd index 8297eb22..ea02785a 100644 --- a/NewHorizons/dialogue_schema.xsd +++ b/NewHorizons/dialogue_schema.xsd @@ -8,7 +8,8 @@ - The name of the character, used for the interaction prompt. Set to "SIGN" for the prompt "Read", or "RECORDING" for "Play Recording" + The name of the character, used for the interaction prompt. Set to `SIGN` for the prompt + "Read", or `RECORDING` for "Play Recording" @@ -22,7 +23,7 @@ - + @@ -36,7 +37,8 @@ - The condition that needs to be met in order for the dialogue to begin at this node. There must be one node that uses "DEFAULT" + The condition that needs to be met in order for the dialogue to begin at this node. There must + be one node that has a value of `DEFAULT` @@ -71,27 +73,29 @@ - Set a new persistent condition that will last indefinitely in the current save, unless cancelled or deleted + Set a new persistent condition that will last indefinitely in the current save, unless cancelled + or deleted - A ship log fact that must be revealed in order to proceed to the DialogueTarget + A ship log fact that must be revealed in order to proceed to the `DialogueTarget` - The name of the DialogueNode to go to after this node. Mutually exclusive with DialogueOptionsList here + The name of the `DialogueNode` to go to after this node. Mutually exclusive with + `DialogueOptionsList` here - + @@ -104,7 +108,7 @@ - + @@ -117,7 +121,7 @@ - + @@ -130,7 +134,7 @@ - + @@ -193,11 +197,10 @@ - The name of the DialogueNode to go to when this option is selected + The name of the `DialogueNode` to go to when this option is selected - diff --git a/NewHorizons/schema.json b/NewHorizons/schema.json index b6beb807..aa55804d 100644 --- a/NewHorizons/schema.json +++ b/NewHorizons/schema.json @@ -1,5 +1,9 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", + "$docs": { + "title": "Celestial Body Schema", + "description": "Schema for a celestial body in New Horizons" + }, "$defs": { "vector3": { "type": "object", @@ -122,7 +126,7 @@ }, "destroy": { "type": "boolean", - "description": "True if you want to delete this planet", + "description": "`true` if you want to delete this planet", "default": false }, "Base": { @@ -136,7 +140,7 @@ "hasAmbientLight": { "type": "boolean", "default": false, - "description": "If the dark side of the body should have some slight ammount of light" + "description": "If the dark side of the body should have some slight amount of light" }, "surfaceGravity": { "type": "number", @@ -230,7 +234,7 @@ "useBasicCloudShader": { "type": "boolean", "default": false, - "description": "Set to false to use Giant's deep shader. Set to true to just apply the cloud texture as is." + "description": "Set to `false` in order to use Giant's deep shader. Set to `true` to just apply the cloud texture as is." }, "shadowsOnClouds": { "type": "boolean", @@ -311,7 +315,7 @@ }, "argumentOfPeriapsis": { "$ref": "#/$defs/angle", - "description": "An angle (in degrees) defining the location of the periapsis (closest distance to it's primary body) if it has nonzero eccentricity." + "description": "An angle (in degrees) defining the location of the periapsis (the closest distance to it's primary body) if it has nonzero eccentricity." }, "trueAnomaly": { "$ref": "#/$defs/angle", @@ -333,7 +337,7 @@ }, "alignmentAxis": { "$ref": "#/$defs/vector3", - "description": "If it is tidally locked, this direction will face towards the primary. Ex) Interloper uses 0, -1, 0. Most planets will want something like -1, 0, 0." + "description": "If it is tidally locked, this direction will face towards the primary. Ex: Interloper uses `0, -1, 0`. Most planets will want something like `-1, 0, 0`." }, "showOrbitLine": { "type": "boolean", @@ -735,7 +739,7 @@ "identificationRadius": { "type": "number", "minimum": 0, - "description": "How close the player must get to the signal to identify it. This is when you learn it's name." + "description": "How close the player must get to the signal to identify it. This is when you learn its name." }, "onlyAudibleToScope": { "type": "boolean", @@ -767,7 +771,7 @@ }, "targetStarSystem": { "type": "string", - "description": "If you want a black hole to load a new star system scene, put it's name here. Optional." + "description": "If you want a black hole to load a new star system scene, put its name here. Optional." }, "type": { "type": "string", @@ -953,7 +957,7 @@ }, "scale": { "$ref": "#/$defs/vector2", - "description": "The amount to scale the x and y axis of the detail by." + "description": "The amount to scale the x and y-axis of the detail by." } } } diff --git a/NewHorizons/shiplog_schema.xsd b/NewHorizons/shiplog_schema.xsd index 10063293..4655788f 100644 --- a/NewHorizons/shiplog_schema.xsd +++ b/NewHorizons/shiplog_schema.xsd @@ -95,7 +95,7 @@ - Child entires within this entry + Child entries within this entry diff --git a/NewHorizons/star_system_schema.json b/NewHorizons/star_system_schema.json index 52e6e732..a10d191a 100644 --- a/NewHorizons/star_system_schema.json +++ b/NewHorizons/star_system_schema.json @@ -14,7 +14,7 @@ }, "factRequiredForWarp": { "type": "string", - "description": "Set to the FactID that must be revealed before it can be warped to. Don't set \"CanEnterViaWarpDrive\" to false if you're using this, that would make no sense." + "description": "Set to the FactID that must be revealed before it can be warped to. Don't set `CanEnterViaWarpDrive` to false if you're using this, that would make no sense." } } } diff --git a/docs/Pipfile b/docs/Pipfile index a575ba81..6e0ef3fc 100644 --- a/docs/Pipfile +++ b/docs/Pipfile @@ -4,16 +4,9 @@ verify_ssl = true name = "pypi" [packages] -jinja2 = "*" -json-schema-for-humans = "*" -markdown = "*" -htmlmin = "*" -xmlschema = "*" -rcssmin = "*" -rjsmin = "*" -pillow = "*" [dev-packages] +menagerie-docs = "*" [requires] python_version = "3.10" diff --git a/docs/Pipfile.lock b/docs/Pipfile.lock index ac954609..a884708f 100644 --- a/docs/Pipfile.lock +++ b/docs/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "249c505e3423814361cd7e54a630b8d501e3fa299d2b225696522d175c85ca3a" + "sha256": "1d9327d16bbc79bdbb466d6264ad8f196504950e741eadaa1fd3f90bada696c2" }, "pipfile-spec": 6, "requires": { @@ -15,7 +15,24 @@ } ] }, - "default": { + "default": {}, + "develop": { + "attrs": { + "hashes": [ + "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", + "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.4.0" + }, + "beautifulsoup4": { + "hashes": [ + "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30", + "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693" + ], + "markers": "python_version >= '3.6'", + "version": "==4.11.1" + }, "certifi": { "hashes": [ "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", @@ -33,11 +50,11 @@ }, "click": { "hashes": [ - "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1", - "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb" + "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e", + "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72" ], - "markers": "python_version >= '3.6'", - "version": "==8.0.4" + "markers": "python_version >= '3.7'", + "version": "==8.1.2" }, "colorama": { "hashes": [ @@ -49,11 +66,11 @@ }, "dataclasses-json": { "hashes": [ - "sha256:1d7f3a284a49d350ddbabde0e7d0c5ffa34a144aaf1bcb5b9f2c87673ff0c76e", - "sha256:1f60be3405dee30b86ffbf6a436db8ba5efaeeb676bfda358e516a97aa7dfce4" + "sha256:bc285b5f892094c3a53d558858a88553dd6a61a11ab1a8128a0e554385dcc5dd", + "sha256:c2c11bc8214fbf709ffc369d11446ff6945254a7f09128154a7620613d8fda90" ], "markers": "python_version >= '3.6'", - "version": "==0.5.6" + "version": "==0.5.7" }, "elementpath": { "hashes": [ @@ -67,7 +84,6 @@ "hashes": [ "sha256:50c1ef4630374a5d723900096a961cff426dff46b48f34d194a81bbe14eca178" ], - "index": "pypi", "version": "==0.1.12" }, "idna": { @@ -80,26 +96,41 @@ }, "jinja2": { "hashes": [ - "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", - "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" + "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119", + "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9" ], - "index": "pypi", - "version": "==3.0.3" + "markers": "python_version >= '3.7'", + "version": "==3.1.1" + }, + "json-minify": { + "hashes": [ + "sha256:268e6966c0f1dcb32ac54e1d047b83deba9ce711c0763ceba63f26d3aeedf656", + "sha256:499717626144a533d64ed4a1513976cf2212958b6806a66e07dd8e22207df559" + ], + "version": "==0.3.0" }, "json-schema-for-humans": { "hashes": [ - "sha256:2272e053e7b44961c79d22628eca9c475bd3984b99401a4184ae8f4224df296a", - "sha256:986158ae543d6aae5df6bb1dbc9e23f45a374fd7e9da5165ddcd9a7596b877e7" + "sha256:66784a3d37c8f730588524cc8f103448847533f067ba8b5d76e7667675ee31f1", + "sha256:ed900db6b19b41bf681513c48ae5e403632878745775ddfc8d5b73438d2930fe" ], - "index": "pypi", - "version": "==0.40" + "markers": "python_version >= '3.7' and python_version < '4.0'", + "version": "==0.40.2" + }, + "jsonschema": { + "hashes": [ + "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83", + "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823" + ], + "markers": "python_version >= '3.7'", + "version": "==4.4.0" }, "markdown": { "hashes": [ "sha256:76df8ae32294ec39dcf89340382882dfa12975f87f45c3ed1ecdb1e8cefc7006", "sha256:9923332318f843411e9932237530df53162e29dc7a4e2b91e35764583c46c9a3" ], - "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.3.6" }, "markdown2": { @@ -107,62 +138,62 @@ "sha256:8f4ac8d9a124ab408c67361090ed512deda746c04362c36c2ec16190c720c2b0", "sha256:91113caf23aa662570fe21984f08fe74f814695c0a0ea8e863a8b4c4f63f9f6e" ], - "markers": "python_version >= '3.5' and python_version < '4'", + "markers": "python_version >= '3.5' and python_version < '4.0'", "version": "==2.4.2" }, "markupsafe": { "hashes": [ - "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3", - "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8", - "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759", - "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed", - "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989", - "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3", - "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a", - "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c", - "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c", - "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8", - "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454", - "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad", - "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d", - "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635", - "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61", - "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea", - "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49", - "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce", - "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e", - "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f", - "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f", - "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f", - "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7", - "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a", - "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7", - "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076", - "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb", - "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7", - "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7", - "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c", - "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26", - "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c", - "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8", - "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448", - "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956", - "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05", - "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1", - "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357", - "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea", - "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730" + "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", + "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", + "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", + "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", + "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", + "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", + "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", + "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", + "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", + "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", + "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", + "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", + "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", + "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", + "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", + "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", + "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", + "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", + "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", + "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", + "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", + "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", + "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", + "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", + "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", + "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", + "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", + "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", + "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", + "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", + "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", + "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", + "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", + "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", + "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", + "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", + "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", + "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", + "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", + "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" ], "markers": "python_version >= '3.7'", - "version": "==2.1.0" + "version": "==2.1.1" }, "marshmallow": { "hashes": [ - "sha256:04438610bc6dadbdddb22a4a55bcc7f6f8099e69580b2e67f5a681933a1f4400", - "sha256:4c05c1684e0e97fe779c62b91878f173b937fe097b356cd82f793464f5bc6138" + "sha256:2aaaab4f01ef4f5a011a21319af9fce17ab13bf28a026d1252adab0e035648d5", + "sha256:ff79885ed43b579782f48c251d262e062bce49c65c52412458769a4fb57ac30f" ], - "markers": "python_version >= '3.6'", - "version": "==3.14.1" + "markers": "python_version >= '3.7'", + "version": "==3.15.0" }, "marshmallow-enum": { "hashes": [ @@ -171,6 +202,14 @@ ], "version": "==1.5.1" }, + "menagerie-docs": { + "hashes": [ + "sha256:4b5cdeb5a32bc1b9ce123f9a3d23b5504701a07be293d5408ff9a36bde32e61a", + "sha256:8e382e2d91a7e57783cf4f25f069893f18c22b98ffae4d9f195edaa63b4e08fa" + ], + "index": "pypi", + "version": "==0.0.3" + }, "mypy-extensions": { "hashes": [ "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", @@ -178,46 +217,65 @@ ], "version": "==0.4.3" }, + "ndicts": { + "hashes": [ + "sha256:5053fc5ca7b8a281081274702ebf1584e341f40a68e6ab8f6b4b79f4b3fdf18e", + "sha256:8e8226f15c0b25565aa391797963b78c95930e12efc40e905153130783e766be" + ], + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==0.1.0" + }, + "packaging": { + "hashes": [ + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + ], + "markers": "python_version >= '3.6'", + "version": "==21.3" + }, "pillow": { "hashes": [ - "sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97", - "sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049", - "sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c", - "sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae", - "sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28", - "sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030", - "sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56", - "sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976", - "sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e", - "sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e", - "sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f", - "sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b", - "sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a", - "sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e", - "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa", - "sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7", - "sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00", - "sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838", - "sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360", - "sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b", - "sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a", - "sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd", - "sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4", - "sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70", - "sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204", - "sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc", - "sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b", - "sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669", - "sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7", - "sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e", - "sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c", - "sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092", - "sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c", - "sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5", - "sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac" + "sha256:01ce45deec9df310cbbee11104bae1a2a43308dd9c317f99235b6d3080ddd66e", + "sha256:0c51cb9edac8a5abd069fd0758ac0a8bfe52c261ee0e330f363548aca6893595", + "sha256:17869489de2fce6c36690a0c721bd3db176194af5f39249c1ac56d0bb0fcc512", + "sha256:21dee8466b42912335151d24c1665fcf44dc2ee47e021d233a40c3ca5adae59c", + "sha256:25023a6209a4d7c42154073144608c9a71d3512b648a2f5d4465182cb93d3477", + "sha256:255c9d69754a4c90b0ee484967fc8818c7ff8311c6dddcc43a4340e10cd1636a", + "sha256:35be4a9f65441d9982240e6966c1eaa1c654c4e5e931eaf580130409e31804d4", + "sha256:3f42364485bfdab19c1373b5cd62f7c5ab7cc052e19644862ec8f15bb8af289e", + "sha256:3fddcdb619ba04491e8f771636583a7cc5a5051cd193ff1aa1ee8616d2a692c5", + "sha256:463acf531f5d0925ca55904fa668bb3461c3ef6bc779e1d6d8a488092bdee378", + "sha256:4fe29a070de394e449fd88ebe1624d1e2d7ddeed4c12e0b31624561b58948d9a", + "sha256:55dd1cf09a1fd7c7b78425967aacae9b0d70125f7d3ab973fadc7b5abc3de652", + "sha256:5a3ecc026ea0e14d0ad7cd990ea7f48bfcb3eb4271034657dc9d06933c6629a7", + "sha256:5cfca31ab4c13552a0f354c87fbd7f162a4fafd25e6b521bba93a57fe6a3700a", + "sha256:66822d01e82506a19407d1afc104c3fcea3b81d5eb11485e593ad6b8492f995a", + "sha256:69e5ddc609230d4408277af135c5b5c8fe7a54b2bdb8ad7c5100b86b3aab04c6", + "sha256:6b6d4050b208c8ff886fd3db6690bf04f9a48749d78b41b7a5bf24c236ab0165", + "sha256:7a053bd4d65a3294b153bdd7724dce864a1d548416a5ef61f6d03bf149205160", + "sha256:82283af99c1c3a5ba1da44c67296d5aad19f11c535b551a5ae55328a317ce331", + "sha256:8782189c796eff29dbb37dd87afa4ad4d40fc90b2742704f94812851b725964b", + "sha256:8d79c6f468215d1a8415aa53d9868a6b40c4682165b8cb62a221b1baa47db458", + "sha256:97bda660702a856c2c9e12ec26fc6d187631ddfd896ff685814ab21ef0597033", + "sha256:a325ac71914c5c043fa50441b36606e64a10cd262de12f7a179620f579752ff8", + "sha256:a336a4f74baf67e26f3acc4d61c913e378e931817cd1e2ef4dfb79d3e051b481", + "sha256:a598d8830f6ef5501002ae85c7dbfcd9c27cc4efc02a1989369303ba85573e58", + "sha256:a5eaf3b42df2bcda61c53a742ee2c6e63f777d0e085bbc6b2ab7ed57deb13db7", + "sha256:aea7ce61328e15943d7b9eaca87e81f7c62ff90f669116f857262e9da4057ba3", + "sha256:af79d3fde1fc2e33561166d62e3b63f0cc3e47b5a3a2e5fea40d4917754734ea", + "sha256:c24f718f9dd73bb2b31a6201e6db5ea4a61fdd1d1c200f43ee585fc6dcd21b34", + "sha256:c5b0ff59785d93b3437c3703e3c64c178aabada51dea2a7f2c5eccf1bcf565a3", + "sha256:c7110ec1701b0bf8df569a7592a196c9d07c764a0a74f65471ea56816f10e2c8", + "sha256:c870193cce4b76713a2b29be5d8327c8ccbe0d4a49bc22968aa1e680930f5581", + "sha256:c9efef876c21788366ea1f50ecb39d5d6f65febe25ad1d4c0b8dff98843ac244", + "sha256:de344bcf6e2463bb25179d74d6e7989e375f906bcec8cb86edb8b12acbc7dfef", + "sha256:eb1b89b11256b5b6cad5e7593f9061ac4624f7651f7a8eb4dfa37caa1dfaa4d0", + "sha256:ed742214068efa95e9844c2d9129e209ed63f61baa4d54dbf4cf8b5e2d30ccf2", + "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97", + "sha256:fb89397013cf302f282f0fc998bb7abf11d49dcff72c8ecb320f76ea6e2c5717" ], - "index": "pypi", - "version": "==9.0.1" + "markers": "python_version >= '3.7'", + "version": "==9.1.0" }, "pygments": { "hashes": [ @@ -227,6 +285,41 @@ "markers": "python_version >= '3.5'", "version": "==2.11.2" }, + "pyparsing": { + "hashes": [ + "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954", + "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06" + ], + "markers": "python_full_version >= '3.6.8'", + "version": "==3.0.8" + }, + "pyrsistent": { + "hashes": [ + "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c", + "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc", + "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e", + "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26", + "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec", + "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286", + "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045", + "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec", + "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8", + "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c", + "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca", + "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22", + "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a", + "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96", + "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc", + "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1", + "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07", + "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6", + "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b", + "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5", + "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6" + ], + "markers": "python_version >= '3.7'", + "version": "==0.18.1" + }, "pytz": { "hashes": [ "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c", @@ -296,7 +389,6 @@ "sha256:f1a37bbd36b050813673e62ae6464467548628690bf4d48a938170e121e8616e", "sha256:f31c82d06ba2dbf33c20db9550157e80bb0c4cbd24575c098f0831d1d2e3c5df" ], - "index": "pypi", "version": "==1.1.0" }, "requests": { @@ -330,9 +422,16 @@ "sha256:d63e193a2f932a786ae82068aa76d1d126fcdff8582094caff9e5e66c4dcc124", "sha256:e18fe1a610fb105273bb369f61c2b0bd9e66a3f0792e27e4cac44e42ace1968b" ], - "index": "pypi", "version": "==1.2.0" }, + "soupsieve": { + "hashes": [ + "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759", + "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d" + ], + "markers": "python_version >= '3.6'", + "version": "==2.3.2.post1" + }, "typing-extensions": { "hashes": [ "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42", @@ -351,20 +450,19 @@ }, "urllib3": { "hashes": [ - "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed", - "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c" + "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", + "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.8" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", + "version": "==1.26.9" }, "xmlschema": { "hashes": [ - "sha256:3ce6fe408a8c0a0ca5917cbe6181a933dfb5cfade9714eeb07b6335f9aff7b10", - "sha256:a7ba52b774a87b59c6428cd9e3601210cbb226552208015bd40800698a6500ad" + "sha256:be1eedce6a4b911fd3a7f4060d0811951820a13410e61f0454b30e9f4e7cf197", + "sha256:dbd68bded2fef00c19cf37110ca0565eca34cf0b6c9e1d3b62ad0de8cbb582ca" ], - "index": "pypi", - "version": "==1.9.2" + "markers": "python_version >= '3.7'", + "version": "==1.10.0" } - }, - "develop": {} + } } diff --git a/docs/Setup.md b/docs/Setup.md index 74d81e77..21f460a7 100644 --- a/docs/Setup.md +++ b/docs/Setup.md @@ -17,28 +17,24 @@ pip install --user pipenv ``` Install dependencies ```shell -pipenv install +pipenv install --dev ``` ## Environment Variables -- OUT_DIR: Path to put before all links and static files, see below for recommended values +- URL_PREFIX: Path to put before all links and static files, see below for recommended values - Production: "/" - Local Build: "" (set as empty string) - PyCharm Development Server: "/outer-wilds-new-horizons/docs/out/" -- BASE_URL: Base url of the website we're hosting on - - Local: Leave blank - - Local (but wanting to test open-graph/twitter): "https://nh.outerwildsmods.com/" - - Production: "https://nh.outerwildsmods.com/" ## Copy Schemas -Create a folder called `schemas` in the content folder and copy all schemas to generate into it, make sure not to add this folder to git. +Create a folder called `schemas` in the `docs/content/pages/` folder and copy all schemas to generate into it, make sure not to add this folder to git. Production build automatically copies over schemas. ## Generating -Run `generate.py` with pipenv +Run `generate` with pipenv ```shell -pipenv run python generate.py +pipenv run python -m menagerie generate ``` ## Opening diff --git a/docs/config.json b/docs/config.json new file mode 100644 index 00000000..d6bbdd71 --- /dev/null +++ b/docs/config.json @@ -0,0 +1,56 @@ +{ + "$schema": "https://raw.githubusercontent.com/Bwc9876/menagerie/master/menagerie/config_schema.json", + "cache_enabled": false, + "base_url": "https://nh.outerwildsmods.com/", + "themes": { + "bootstrap": "https://bootswatch.com/5/darkly/bootstrap.min.css", + "highlight_js": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.4.0/styles/github-dark-dimmed.min.css", + "navbar_color": "dark" + }, + "styles": { + "base": "styles/base.css", + "schema": "styles/schema.css" + }, + "brand": { + "app_name": "New Horizons", + "favicon_folder": "fav/", + "navbar_icon": "images/icon.webp", + "navbar_icon_size": [29, 29], + "socials": [ + { + "name": "Discord", + "link": "https://discord.gg/wusTQYbYTc", + "icon": "discord" + }, + { + "name": "GitHub", + "link": "https://github.com/xen-42/outer-wilds-new-horizons", + "icon": "github" + }, + { + "name": "Patreon", + "link": "https://patreon.com/ownh", + "icon": "coin" + } + ], + "meta": { + "description": "Documentation on how to use the New Horizons planet creation tool for Outer Wilds.", + "keywords": ["New Horizons", "Outer Wilds", "Modding", "C#", "Unity"], + "categories": ["games", "utilities"], + "image": "images/home/home_logo.webp", + "image_alt": "The New Horizons Logo", + "theme_color": "#303030", + "bg_color": "#1a1a1a" + }, + "footer": { + "show_made_with": false, + "links": [ + { + "link": "https://github.com/xen-42/outer-wilds-new-horizons/issues/new/choose", + "text": "Report an issue", + "external": true + } + ] + } + } +} \ No newline at end of file diff --git a/docs/content/base/base.jinja2 b/docs/content/base/base.jinja2 deleted file mode 100644 index 46f05979..00000000 --- a/docs/content/base/base.jinja2 +++ /dev/null @@ -1,80 +0,0 @@ -{% from 'base/macros.jinja2' import external_link, is_active_page, nav_item, defer_css with context %} - - - - {% include "base/meta.jinja2" %} - - {{ defer_css("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css") }} - - - - - {% block resources %} {% endblock %} - - -
- -
-
-
-
- {% block content %} {% endblock %} -
-
-
-
-
-
-

Last Generated: {{ ''|gen_time }}

-
- -
- {{ external_link('Report An Issue', "https://github.com/xen-42/outer-wilds-new-horizons/issues/new/choose", 'link-light') }} -
-
-
- - diff --git a/docs/content/base/macros.jinja2 b/docs/content/base/macros.jinja2 deleted file mode 100644 index e1a70272..00000000 --- a/docs/content/base/macros.jinja2 +++ /dev/null @@ -1,12 +0,0 @@ -{% macro external_link(display_name, link, class) %}{{ display_name|safe }}{% endmacro %} - -{% macro is_active_page(title) %}{% if title == page.title %}active{% endif %}{% endmacro %} - -{% macro nav_item(title, href) %}{% endmacro %} - -{% macro badge(type, content, classes) %}{{ content|safe }}{% endmacro %} - -{% macro defer_css(link) %} - - -{% endmacro %} diff --git a/docs/content/base/meta.jinja2 b/docs/content/base/meta.jinja2 deleted file mode 100644 index 2f9a1d82..00000000 --- a/docs/content/base/meta.jinja2 +++ /dev/null @@ -1,63 +0,0 @@ -{# Macros #} -{% macro og(name, content) %}{% endmacro %} -{% macro tw(name, content) %}{% endmacro %} -{% macro fav(filename) %}{{ ("fav/" + filename)|static }}{% endmacro %} - -{# Variable Declarations #} -{% if page.title|lower == 'home' %} - {% set title="New Horizons Documentation" %} -{% else %} - {% set title=page.title + " - New Horizons Documentation" %} -{% endif %} -{% set desc="Documentation for creating planets with the New Horizons mod for Outer Wilds" %} -{% if page.description %} - {% set desc=page.description %} -{% endif %} -{% set img="images/home/home_logo.webp"|static|full_url %} -{% set canonical=page.title|route|full_url %} -{% set theme_color="#222222" %} - -{# Meta Info #} - - - -{{ title }} - - - - -{# OpenGraph Info #} -{{ og("type", "website") }} -{{ og("title", title) }} -{{ og("description", desc) }} -{{ og("url", canonical) }} -{{ og("image", img) }} -{{ og("image:alt", "The New Horizons Logo") }} - -{# Twitter Info #} -{{ tw("title", title) }} -{{ tw("description", desc) }} -{{ tw("card", "summary_large_image") }} -{{ tw("image", img) }} - - -{# Favicons #} - - - - - - - - - - - - - - - - - - - diff --git a/docs/content/base/page_template.jinja2 b/docs/content/base/page_template.jinja2 deleted file mode 100644 index 7eab83dc..00000000 --- a/docs/content/base/page_template.jinja2 +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "base/base.jinja2" %} - -{% from "base/macros.jinja2" import defer_css %} - -{% set br="lg" %} -{% set col_num=3 %} - -{% block resources %} - {{ defer_css("https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/styles/github-dark-dimmed.min.css") }} - -{% endblock %} - -{% block content %} -
- {% if page.render_toc %} -
- -
-
- {% endif %} -
- {{ rendered|safe }} -
-
-{% endblock %} diff --git a/docs/content/base/schema/json/badge_type.jinja2 b/docs/content/base/schema/json/badge_type.jinja2 deleted file mode 100644 index c34be479..00000000 --- a/docs/content/base/schema/json/badge_type.jinja2 +++ /dev/null @@ -1,14 +0,0 @@ -{% if type_name == "string" %} - {% if schema.kw_min_length %} - {{ restriction("Must be at least " ~ schema.kw_min_length.literal ~ " characters long", "min-length", schema.kw_min_length.html_id) }} - {% endif %} - {% if schema.kw_max_length %} - {{ restriction("Must be at most " ~ schema.kw_max_length.literal ~ " characters long", "max-length", schema.kw_max_length.html_id) }} - {% endif %} -{% endif %} -{% if type_name in ["integer", "number"] %} - {% set restriction_text = (schema | get_numeric_restrictions_text("", "")) %} - {% if restriction_text %} - {{ restriction(schema | get_numeric_restrictions_text("", ""), "numeric", schema.html_id ~ "_number") }} - {% endif %} -{% endif %} diff --git a/docs/content/base/schema/json/breadcrumbs.jinja2 b/docs/content/base/schema/json/breadcrumbs.jinja2 deleted file mode 100644 index c3c8a92d..00000000 --- a/docs/content/base/schema/json/breadcrumbs.jinja2 +++ /dev/null @@ -1,13 +0,0 @@ - \ No newline at end of file diff --git a/docs/content/base/schema/json/content.jinja2 b/docs/content/base/schema/json/content.jinja2 deleted file mode 100644 index 0a6f69a1..00000000 --- a/docs/content/base/schema/json/content.jinja2 +++ /dev/null @@ -1,122 +0,0 @@ -{% from "base/schema/json/macro_restriction.jinja2" import restriction with context %} -{% from "base/macros.jinja2" import badge %} - -{% macro tabbed_section(operator, current_node) %} - {% include "base/schema/json/tabbed_section.jinja2" %} -{% endmacro %} - -{% macro content(schema, skip_headers=False) %} - {% set keys = schema.keywords %} - - {# Resolve type #} - {% set type_name = schema.type_name %} - - {% if not skip_headers %} - {% if config.show_breadcrumbs %} - {% include "base/schema/json/breadcrumbs.jinja2" %} - {% endif %} - - {# Display type #} - {% if not schema is combining %} -
-
- {{ badge("secondary", "Type: " + type_name) }} -
-
- {% endif %} - - {# Display default #} - {% set default_value = schema.default_value %} - {% if default_value %} -
-
- {{ badge("secondary", "Default: " + default_value) }} -
-
- {% endif %} -
- - {% set description = (schema | get_description) %} - {% include "base/schema/json/section_description.jinja2" %} - {% endif %} - - - {% if schema.should_be_a_link(config) %} - Same definition as {{ schema.links_to.link_name }} - {% elif schema.refers_to %} - {{ content(schema.refers_to_merged, True) }} - {% else %} - {# Handle having oneOf or allOf with only one condition #} - {% if schema.kw_all_of and (schema.kw_all_of.array_items | length) == 1 %} - {{ content(schema.kw_all_of.array_items[0]) }} - {% elif schema.kw_any_of and (schema.kw_any_of.array_items | length) == 1 %} - {{ content(schema.kw_any_of.array_items[0]) }} - {% else %} - {% if schema.explicit_no_additional_properties %} - {{ badge("info", "No Additional Properties") }} - {% endif %} - - {# Combining: allOf, anyOf, oneOf, not #} - {% if schema.kw_all_of %} -
{{ tabbed_section("allOf", schema.kw_all_of) }}
- {% endif %} - {% if schema.kw_any_of %} -
{{ tabbed_section("anyOf", schema.kw_any_of) }}
- {% endif %} - {% if schema.kw_one_of %} -
{{ tabbed_section("oneOf", schema.kw_one_of) }}
- {% endif %} - {% if schema.kw_not %} - {% include "base/schema/json/section_not.jinja2" %} - {% endif %} - - {# Enum and const #} - {% if schema.kw_enum %} -
-

Must be one of:

-
    - {% for enum_choice in schema.kw_enum.array_items %} -
  • {{ enum_choice.literal | python_to_json }}
  • - {% endfor %} -
-
- {% endif %} - {% if schema.kw_const %} - Specific value: {{ schema.kw_const.raw | python_to_json }} - {% endif %} - - {# Pattern (Regular Expression) #} - {% if schema.kw_pattern %} - Must match regular expression: {{ schema.kw_pattern.literal | escape }} - {% endif %} - - {# Conditional subschema, or if-then-else section #} - {% if schema.has_conditional %} - {% include "base/schema/json/section_conditional_subschema.jinja2" %} - {% endif %} - - {# Required properties that are not defined under "properties". They will only be listed #} - {% include "base/schema/json/section_undocumented_required_properties.jinja2" %} - - {# Show the requested type(s) #} - {% include "base/schema/json/badge_type.jinja2" %} - - {# Show array restrictions #} - {% if type_name.startswith("array") %} - {% include "base/schema/json/section_array.jinja2" %} - {% endif %} - - {# Display examples #} - {% set examples = schema.examples %} - {% if examples %} - {% include "base/schema/json/section_examples.jinja2" %} - {% endif %} - - {# Properties, pattern properties, additional properties #} - {% for sub_property in schema.iterate_properties %} - {% include "base/schema/json/section_properties.jinja2" %} - {% endfor %} - - {% endif %} - {% endif %} -{% endmacro %} \ No newline at end of file diff --git a/docs/content/base/schema/json/macro_restriction.jinja2 b/docs/content/base/schema/json/macro_restriction.jinja2 deleted file mode 100644 index 3291123f..00000000 --- a/docs/content/base/schema/json/macro_restriction.jinja2 +++ /dev/null @@ -1,5 +0,0 @@ -{% from "base/macros.jinja2" import badge %} - -{% macro restriction(inner_text, css_class_name, html_id) %} -

{{ badge("dark", inner_text|safe, 'p-1') }}

-{% endmacro %} \ No newline at end of file diff --git a/docs/content/base/schema/json/schema_base.jinja2 b/docs/content/base/schema/json/schema_base.jinja2 deleted file mode 100644 index 90d33306..00000000 --- a/docs/content/base/schema/json/schema_base.jinja2 +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "base/base.jinja2" %} -{% from 'base/schema/json/content.jinja2' import content with context %} - -{% block resources %} - {% include "base/schema/schema_includes.jinja2" %} -{% endblock %} - -{% block onLoad %}anchorOnLoad();{% endblock %} - -{% block content %} -
-
-

{{ title|title }}

-
-
-
-
- {{ content(schema) }} -
-
-{% endblock %} diff --git a/docs/content/base/schema/json/section_array.jinja2 b/docs/content/base/schema/json/section_array.jinja2 deleted file mode 100644 index ecaa218f..00000000 --- a/docs/content/base/schema/json/section_array.jinja2 +++ /dev/null @@ -1,36 +0,0 @@ -{% if schema.kw_min_items %} - {{ restriction("Must contain a minimum of " ~ schema.kw_min_items.literal ~ " Items", "min-items", schema.kw_min_items.html_id) }} -{% endif %} -{% if schema.kw_max_items %} - {{ restriction("Must contain a maximum of " ~ schema.kw_max_items.literal ~ " Items", "max-items", schema.kw_max_items.html_id) }} -{% endif %} -{% if schema.kw_unique_items and schema.kw_unique_items.literal == True %} - {{ restriction("All items must be unique", "unique-items", schema.kw_unique_items.html_id) }} -{% endif %} -{% if schema.array_items_def %} -

Each item of this array must be:

-
-
- {{ content(schema.array_items_def) }} -
-
-{% endif %} -{% if schema.tuple_validation_items %} -

Tuple Validation

- {% for item in schema.tuple_validation_items %} -
Item at {{ loop.index }} must be:
-
-
- {{ content(item) }} -
-
- {% endfor %} -{% endif %} -{% if schema.kw_contains and schema.kw_contains.literal != {} %} -

At least one of the items must be:

-
-
- {{ content(schema.kw_contains) }} -
-
-{% endif %} \ No newline at end of file diff --git a/docs/content/base/schema/json/section_conditional_subschema.jinja2 b/docs/content/base/schema/json/section_conditional_subschema.jinja2 deleted file mode 100644 index 973f8cfa..00000000 --- a/docs/content/base/schema/json/section_conditional_subschema.jinja2 +++ /dev/null @@ -1,58 +0,0 @@ -

- -

-

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. - Otherwise, the conditions in the "Else" tab should be respected.

- - -
- {% set tab_id = schema.kw_if.html_id %} -
- {{ content(schema.kw_if) }} -
- - {% if schema.kw_then %} - {% set tab_id = schema.kw_then.html_id %} -
- {{ content(schema.kw_then) }} -
- {%- endif -%} - - {%- if schema.kw_else -%} - {% set tab_id = schema.kw_else.html_id %} -
- {{ content(schema.kw_else) }} -
- {%- endif -%} -
\ No newline at end of file diff --git a/docs/content/base/schema/json/section_description.jinja2 b/docs/content/base/schema/json/section_description.jinja2 deleted file mode 100644 index 2e90dc71..00000000 --- a/docs/content/base/schema/json/section_description.jinja2 +++ /dev/null @@ -1,20 +0,0 @@ -{# Display description #} -{% if description %} -
-
- {% if not config.collapse_long_descriptions or description is description_short %} - {{ description }} - {% else %} -
- {{ description }} -
-
- -
- {% endif %} -
-
-{% endif %} diff --git a/docs/content/base/schema/json/section_examples.jinja2 b/docs/content/base/schema/json/section_examples.jinja2 deleted file mode 100644 index d5b40777..00000000 --- a/docs/content/base/schema/json/section_examples.jinja2 +++ /dev/null @@ -1,18 +0,0 @@ -
-
Example{% if examples|length > 1 %}s{% endif %}:
-
- -{% for example in examples %} - {% set example_id = schema.html_id ~ "_ex" ~ loop.index %} - {% set example_is_long = example is not description_short %} - {% if example_is_long %} - - {% endif %} -
- {% if not examples_as_yaml %} - {{ example | highlight_json_example | safe }} - {% else %} - {{ example | highlight_yaml_example | safe }} - {% endif %} -
-{% endfor %} diff --git a/docs/content/base/schema/json/section_not.jinja2 b/docs/content/base/schema/json/section_not.jinja2 deleted file mode 100644 index ed0f5222..00000000 --- a/docs/content/base/schema/json/section_not.jinja2 +++ /dev/null @@ -1,8 +0,0 @@ -
-

Must not be:

-
-
- {{ content(schema.kw_not) }} -
-
-
\ No newline at end of file diff --git a/docs/content/base/schema/json/section_properties.jinja2 b/docs/content/base/schema/json/section_properties.jinja2 deleted file mode 100644 index 56fb851c..00000000 --- a/docs/content/base/schema/json/section_properties.jinja2 +++ /dev/null @@ -1,64 +0,0 @@ -{% from "base/macros.jinja2" import badge %} -{% set html_id = sub_property.html_id %} -
-
-
-
-

- -

-
-
- {% if sub_property.is_pattern_property %} -

- -

-

All property whose name matches the following regular expression must respect the - following - conditions

- Property name regular expression: {{ sub_property.property_name | escape }} -
- {% endif %} - - {% if sub_property.is_additional_properties %} - {% if sub_property.is_additional_properties_schema %} -

Each additional property must conform to the following - schema

- {% else %} -

Additional Properties of any type are allowed.

- {% endif %} - {% endif %} - - {{ content(sub_property) }} -
-
-
-
-
-
diff --git a/docs/content/base/schema/json/section_undocumented_required_properties.jinja2 b/docs/content/base/schema/json/section_undocumented_required_properties.jinja2 deleted file mode 100644 index 7a2bc74f..00000000 --- a/docs/content/base/schema/json/section_undocumented_required_properties.jinja2 +++ /dev/null @@ -1,11 +0,0 @@ -{% set undocumented_required_properties = schema | get_undocumented_required_properties %} -{% if undocumented_required_properties %} -
-

The following properties are required:

-
    - {% for required_property in undocumented_required_properties %} -
  • {{ required_property }}
  • - {% endfor %} -
-
-{% endif %} \ No newline at end of file diff --git a/docs/content/base/schema/json/tabbed_section.jinja2 b/docs/content/base/schema/json/tabbed_section.jinja2 deleted file mode 100644 index c4949ef4..00000000 --- a/docs/content/base/schema/json/tabbed_section.jinja2 +++ /dev/null @@ -1,25 +0,0 @@ -

- -

-{% set tab_label = "Option" %} -{% if operator == "allOf" %} - {% set tab_label = "Requirement" %} -{% endif %} - -
- {% for node in current_node.array_items %} -
- {{ content(node) }} -
- {% endfor %} -
\ No newline at end of file diff --git a/docs/content/base/schema/schema_includes.jinja2 b/docs/content/base/schema/schema_includes.jinja2 deleted file mode 100644 index 8bae06bb..00000000 --- a/docs/content/base/schema/schema_includes.jinja2 +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/content/base/schema/xml/schema_base.jinja2 b/docs/content/base/schema/xml/schema_base.jinja2 deleted file mode 100644 index f6f390de..00000000 --- a/docs/content/base/schema/xml/schema_base.jinja2 +++ /dev/null @@ -1,99 +0,0 @@ -{% extends "base/base.jinja2" %} - -{% from "base/macros.jinja2" import badge %} - -{% macro body(element, trail) %} - - {% if element.occurs[0] != 1 or element.occurs[1] != 1 %} -
-
- {{ badge("secondary", element.occurs|occurs_text) }} -
-
- {% endif %} -
-
- {{ badge("secondary", "Type: " + element.type|name) }} -
-
-
-
-
- {{ element|get_desc }} -
-
- {% if element.type.has_complex_content() %} - {% for child in element.type.content|children %} - {{ render(child, trail) }} - {% endfor %} - {% endif %} -{% endmacro %} - -{% macro render(element, trail) %} -
-
- {% set trail=trail+"-"+element.name %} - {% set html_id=trail %} -
-
-

- -

-
-
- {% if element.parent != None and element.type.name == element.parent.parent.name %} - {{ badge("info", "Recursive Reference") }} - {% else %} - {{ body(element, trail) }} - {% endif %} -
-
-
-
-
-
-{% endmacro %} - -{% block resources %} - {% include "base/schema/schema_includes.jinja2" %} -{% endblock %} - -{% block onLoad %}anchorOnLoad();{% endblock %} - -{% block content %} -
-
-

{{ page.title|title }}

-
-
-
-
- {% for element in schema.elements.values() %} - {% for child in element.type.content %} - {{ render(child, element.name) }} - {% endfor %} - {% endfor %} -
-
-{% endblock %} diff --git a/docs/content/browserconfig.jinja2 b/docs/content/browserconfig.jinja2 deleted file mode 100644 index f2c5238d..00000000 --- a/docs/content/browserconfig.jinja2 +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - #222222 - - - diff --git a/docs/content/pages/api.md b/docs/content/pages/api.md index 84e887d4..b87fb847 100644 --- a/docs/content/pages/api.md +++ b/docs/content/pages/api.md @@ -1,5 +1,5 @@ Title: API -Sort-Priority: 40 +Sort_Priority: 40 ## How to use the API diff --git a/docs/content/pages/details.md b/docs/content/pages/details.md index 8556f458..63064806 100644 --- a/docs/content/pages/details.md +++ b/docs/content/pages/details.md @@ -1,5 +1,5 @@ Title: Detailing -Sort-Priority: 90 +Sort_Priority: 90 ## Details/Scatterer diff --git a/docs/content/pages/dialogue.md b/docs/content/pages/dialogue.md index 61b9701d..f2d135a0 100644 --- a/docs/content/pages/dialogue.md +++ b/docs/content/pages/dialogue.md @@ -1,5 +1,5 @@ Title: Dialogue -Sort-Priority: 50 +Sort_Priority: 50 ## Dialogue diff --git a/docs/content/pages/faq.jinja2 b/docs/content/pages/faq.jinja2 index c688343d..c5b95209 100644 --- a/docs/content/pages/faq.jinja2 +++ b/docs/content/pages/faq.jinja2 @@ -1,5 +1,6 @@ {#~ Title:FAQ ~#} -{#~ Sort-Priority:95 ~#} +{#~ Sort_Priority:95 ~#} +{#~ Render_TOC:False ~#} {% macro faq(id, q, a) %} @@ -38,7 +39,7 @@ faq( "why-no-planet", "Why doesn't my planet show up in game?", - "Have you checked the logs for errors? Are you using a program like [VSCode](https://code.visualstudio.com/){ target='_blank' } to write your configs that validates them against our schema to catch your errors? Do you incrementally test each new planet that you add, or did you write 10 json files and then try them all at once? If you're still not sure, come by our [Discord channel](https://discord.gg/9vE5aHxcF9){ target='_blank' } (`#nh-addon-discussion`) and we'll try to help out!" + "Have you checked the logs for errors? Are you using a program like [VSCode](https://code.visualstudio.com/){ target='_blank' } to write your configs that validates them against our schema to catch your errors? Do you incrementally test each new planet that you add, or did you write 10 json files and then try them all at once? If you're still not sure, come by our [Discord channel](https://discord.gg/wusTQYbYTc){ target='_blank' } (`#nh-addon-discussion`) and we'll try to help out!" ) }} {{ diff --git a/docs/content/pages/home.md b/docs/content/pages/home.md index e0ee28d7..767b4ee9 100644 --- a/docs/content/pages/home.md +++ b/docs/content/pages/home.md @@ -1,6 +1,6 @@ Title: Home -Out-File: index -Sort-Priority: 100 +Out_File: index +Sort_Priority: 100 ![New Horizons Logo]({{ 'images/home/home_logo.webp'|static }}) @@ -19,12 +19,14 @@ Planets are created using a JSON file format structure, and placed in a folder c it) in the location where New Horizons is installed (by default this folder doesn't exist, you have to create it within the xen.NewHorizons directory). +You may want to get [VSCode](https://code.visualstudio.com/){ target="_blank" } if you are unfamiliar with the JSON language, as it will help highlight common errors. + To locate this directory, click the "â‹®" symbol next to "New Horizons" in the Outer Wilds Mod Manager and then click " show in explorer" in the pop-up. -![Click the three dots in the mod manager]({{ 'images/home/mod_manager_dots.webp'|static }}) +![Click the three dots in the mod manager]({{ "images/home/mod_manager_dots.webp"|static }}) -![Create a new folder named "planets"]({{ 'images/home/create_planets.webp'|static }}) +![Create a new folder named "planets"]({{ "images/home/create_planets.webp"|static }}) Now that you have created your planets folder, this is where you will put your planet config files. A config file will look something like this: @@ -116,6 +118,11 @@ it). Check out the rest of the site for how to format planet, star system, dialogue, ship log, and translation files! +## Publishing Your Mod + +Once your mod is complete, you can use the [addon creation tool](https://outerwildsmods.com/custom-worlds/create/){ target="_blank" } to upload your mod to the database. +Alternatively, you can use the [planet creation template](https://github.com/xen-42/ow-new-horizons-config-template#readme){ target="_blank" } GitHub template if you're familiar with Git and GitHub + ## Helpful Resources The texturemap/heightmap feature was inspired by the KSP mod Kopernicus. A lot of the same techniques that apply to diff --git a/docs/content/pages/ship_log.md b/docs/content/pages/ship_log.md index e0cb9894..112d6109 100644 --- a/docs/content/pages/ship_log.md +++ b/docs/content/pages/ship_log.md @@ -1,8 +1,6 @@ Title: Ship Log Description: A guide to editing the ship log in New Horizons -Sort-Priority: 70 - -{% macro image(name) %}{{ ("images/ship_log/" + name)|static }}{% endmacro %} +Sort_Priority: 70 # Intro Welcome! this page outlines how to create a custom ship log. @@ -35,7 +33,7 @@ An entry is a card you see in rumor mode, it represents a specific area or conce village or the southern observatory on Brittle Hollow. An entry is split up into facts, a fact can either be a rumor fact or an explore fact. -![entryExample]({{ image("entry_example.webp") }}) +![entryExample]({{ "images/ship_log/entry_example.webp"|static }}) *In red you can see an entry, in green you can see the entry's facts* ### Curiosities @@ -44,14 +42,14 @@ Curiosities are entries that represent big ideas in the story, such as the ATP o Non-curiosity entries have a Curiosity attribute that can be set to make the color of that entry match the color of the curiosity (Like how everything regarding the Vessel is red) -![curiosityExample]({{ image("curiosity_example.webp") }}) +![curiosityExample]({{ "images/ship_log/curiosity_example.webp"|static }}) *The Ash Twin Project is an example of a curiosity (internally it's called TIME_LOOP)* ### Child Entries Entries can be children of other entries, meaning they'll be smaller. -![childEntryExample]({{ image("child_entry_example.webp") }}) +![childEntryExample]({{ "images/ship_log/child_entry_example.webp"|static }}) *The murals at the old settlement on Brittle Hollow are examples of child entries* ## Rumor Facts @@ -59,13 +57,13 @@ Entries can be children of other entries, meaning they'll be smaller. A rumor fact represents the information you might hear about a specific area or concept, usually, you get these through dialogue or maybe by observing a faraway planet. -![rumorFactExample]({{ image("rumor_example.webp") }}) +![rumorFactExample]({{ "images/ship_log/rumor_example.webp"|static }}) ## Explore Facts Explore facts represent the information you learn about a specific area or concept. -![exploreFactExample]({{ image("explore_example.webp") }}) +![exploreFactExample]({{ "images/ship_log/explore_example.webp"|static }}) # The XML @@ -203,7 +201,7 @@ For example, if I want to change an entry with the ID of `EXAMPLE_ENTRY` and ano } ``` -![autoDetectiveMode]({{ image("auto_rumor_mode.webp") }}) +![autoDetectiveMode]({{ "images/ship_log/auto_rumor_mode.webp"|static }}) *A set of entries laid out with auto mode* ## Images @@ -254,7 +252,7 @@ Colors for each curiosity is given in a list, so if I wanted the curiosity `EXAM } ``` -![curiosityColorChange]({{ image("change_color.webp") }}) +![curiosityColorChange]({{ "images/ship_log/change_color.webp"|static }}) *The curiosity's color is changed to blue* # Map Mode Options @@ -272,7 +270,7 @@ those planets are put in a column, then, each planet orbiting *those* planets ar are. The order of each planet is determined by their semi-major axis, if two planets have the same semi-major axis then they're sorted by order loaded in. -![autoMapMode]({{ image("auto_map_mode.webp") }}) +![autoMapMode]({{ "images/ship_log/auto_map_mode.webp"|static }}) *An example system laid out with auto mode* #### Offset @@ -345,7 +343,7 @@ second row (you can't select the sun, so it doesn't have a row or column). So, b We say this planet is to the right of the sun station (putting in a position that is already occupied will override what is in that position). -![navigationIndices]({{ image("map_indices.webp") }}) +![navigationIndices]({{ "images/ship_log/map_indices.webp"|static }}) #### Overriding Vanilla Planets @@ -576,4 +574,4 @@ Adding an entry location is similar to adding a Reveal Volume: } ``` -![entryLocationExample]({{ image("entry_position.webp") }}) +![entryLocationExample]({{ "images/ship_log/entry_position.webp"|static }}) diff --git a/docs/content/pages/translation.md b/docs/content/pages/translation.md index e6472c3c..4b80fee4 100644 --- a/docs/content/pages/translation.md +++ b/docs/content/pages/translation.md @@ -1,5 +1,5 @@ Title: Translations -Sort-Priority: 60 +Sort_Priority: 60 ## Translations diff --git a/docs/content/pages/update_existing.md b/docs/content/pages/update_existing.md index 5da39ed3..b0eaf921 100644 --- a/docs/content/pages/update_existing.md +++ b/docs/content/pages/update_existing.md @@ -1,5 +1,5 @@ Title: Update Planets -Sort-Priority: 80 +Sort_Priority: 80 ## Update Existing Planets diff --git a/docs/content/robots.jinja2 b/docs/content/robots.jinja2 deleted file mode 100644 index 1d0b0099..00000000 --- a/docs/content/robots.jinja2 +++ /dev/null @@ -1,4 +0,0 @@ -User-Agent: * -Allow: / - -Sitemap: {{ "/sitemap.xml"|full_url }} diff --git a/docs/content/sitemap.jinja2 b/docs/content/sitemap.jinja2 deleted file mode 100644 index 41aaae20..00000000 --- a/docs/content/sitemap.jinja2 +++ /dev/null @@ -1,11 +0,0 @@ - - - {% for item in content %} - - {{ item.out_path|string|replace('\\', '/')|full_url }} - {{ item.sort_priority / 100 }} - - {% endfor %} - diff --git a/docs/content/static/fav/manifest.webmanifest b/docs/content/static/fav/manifest.webmanifest deleted file mode 100644 index be7833ff..00000000 --- a/docs/content/static/fav/manifest.webmanifest +++ /dev/null @@ -1,49 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/web-manifest-combined.json", - "name": "New Horizons Docs", - "short_name": "NH Docs", - "categories": ["games", "utilities"], - "start_url": ".", - "theme_color": "#333333", - "background_color": "#222222", - "lang": "en-US", - "description": "Documentation for creating planets with the New Horizons mod for Outer Wilds", - "icons": [ - { - "src": "/fav/android-icon-36x36.png", - "sizes": "36x36", - "type": "image/png", - "density": "0.75" - }, - { - "src": "/fav/android-icon-48x58.png", - "sizes": "48x48", - "type": "image/png", - "density": "1.0" - }, - { - "src": "/fav/android-icon-72x72.png", - "sizes": "72x72", - "type": "image/png", - "density": "1.5" - }, - { - "src": "/fav/android-icon-96x96.png", - "sizes": "96x96", - "type": "image/png", - "density": "2.0" - }, - { - "src": "/fav/android-icon-144x144.png", - "sizes": "144x144", - "type": "image/png", - "density": "3.0" - }, - { - "src": "/fav/android-icon-192x192.png", - "sizes": "192x192", - "type": "image/png", - "density": "4.0" - } - ] -} \ No newline at end of file diff --git a/docs/content/static/styles/base.css b/docs/content/static/styles/base.css index 6992d93e..f7f21f6c 100644 --- a/docs/content/static/styles/base.css +++ b/docs/content/static/styles/base.css @@ -21,8 +21,7 @@ pre > code { background: #555; } -.accordion-button:not(.collapsed) { - color: #effff7 !important; +.accordion-button { background-color: #2b2b2b !important; } @@ -48,3 +47,7 @@ pre > code { .accordion-item { border: 1px solid rgba(0, 0, 0, 0.4); } + +.accordion-body { + background-color: #353535 !important; +} diff --git a/docs/generate.py b/docs/generate.py deleted file mode 100644 index 695ab116..00000000 --- a/docs/generate.py +++ /dev/null @@ -1,101 +0,0 @@ -import os -from datetime import datetime -from pathlib import Path -from shutil import rmtree - -from jinja2 import Environment, select_autoescape, FileSystemLoader -from markdown import Markdown - -from lib.Content.CSSStaticItem import CSSStaticItem -from lib.Content.HTMLPage import HTMLPage -from lib.Content.ImageStaticItem import ImageStaticItem -from lib.Content.JSONSchema import JSONSchema -from lib.Content.JSStaticItem import JSStaticItem -from lib.Content.MDPage import MDPage -from lib.Content.MetaItem import MetaItem, MinifiedMetaItem -from lib.Content.StaticItem import StaticItem -from lib.Content.XMLSchema import XMLSchema - -print("Setup") - -OUT_DIR = os.getenv("OUT_DIR", "/") -BASE_URL = os.getenv("BASE_URL", "") - -GEN_TIME = datetime.now().strftime("%d/%m/%Y") - -env = Environment( - loader=FileSystemLoader("content/"), - autoescape=select_autoescape(['jinja2']) -) - -env.globals['OUT_DIR'] = OUT_DIR - -static_scanners = (JSStaticItem, CSSStaticItem, ImageStaticItem) -static_extensions = {} -for scanner in static_scanners: - for ext in scanner.extensions: - static_extensions['.' + ext] = scanner -page_scanners = (MDPage, HTMLPage) -schema_scanners = (JSONSchema, XMLSchema) -meta_files = [MinifiedMetaItem(Path('browserconfig.jinja2'), '.xml'), - MinifiedMetaItem(Path('sitemap.jinja2'), '.xml'), - MetaItem(Path('robots.jinja2'), '.txt')] - -router = {} - -filter_md = Markdown(extensions=['extra'], output_format='html5') - -env.filters.update({ - 'upper_first': lambda x: x[0].upper() + x[1:], - 'static': lambda path: str(Path(OUT_DIR, path).as_posix()), - 'route': lambda title: router.get(title.lower(), "#"), - 'full_url': lambda relative: BASE_URL + (relative[1:] if relative[0] == "/" else relative), - 'gen_time': lambda x: GEN_TIME, - 'simple_md': lambda s: filter_md.convert(s), - 'inline_md': lambda s: filter_md.convert(s)[3:-4].replace("", "").replace("", "") -}) - -MetaItem.initialize(env) -MinifiedMetaItem.initialize(env) - -pages = [] -schemas = [] -static_files = [] - -print("Clearing Old Output") - -if Path("out/").exists(): - rmtree("out/", ignore_errors=True) - -static_files = [static_extensions.get(f.suffix, StaticItem)(f) for f in Path('content/static/').glob("**/*.*")] - -print("Scanning For Files") - -for scanner in page_scanners: - new_pages = scanner.initialize(env) - for page in new_pages: - page.add_route(router, OUT_DIR) - pages += new_pages - -for scanner in schema_scanners: - new_schemas = scanner.initialize(env) - for schema in new_schemas: - schema.add_route(router, OUT_DIR) - schemas += new_schemas - -content = pages + schemas -hide_content = meta_files + static_files - -print("Generating Pages") - -pages.sort(key=lambda p: p.sort_priority, reverse=True) -schemas.sort(key=lambda s: s.title) - -for item in content: - item.generate(pages=pages, schemas=schemas) - -for meta_file in hide_content: - meta_file.env = env - meta_file.generate(content=content) - -print("Done") diff --git a/docs/lib/BootstrapExtension.py b/docs/lib/BootstrapExtension.py deleted file mode 100644 index 3d48277d..00000000 --- a/docs/lib/BootstrapExtension.py +++ /dev/null @@ -1,42 +0,0 @@ -from os import getenv -from pathlib import Path - -from markdown import Extension -from markdown.treeprocessors import Treeprocessor - -from lib.Content.ImageStaticItem import ImageStaticItem - - -class BootstrapExtension(Extension): - def extendMarkdown(self, md, md_globals): - md.registerExtension(self) - self.processor = BootstrapTreeProcessor() - self.processor.md = md - self.processor.config = self.getConfigs() - md.treeprocessors.add('bootstrap', self.processor, '_end') - - -classes = { - 'img': "img-fluid rounded mx-auto d-flex", - 'table': "table-striped" -} - - -def process(node): - if node.tag in classes.keys(): - node.set("class", classes[node.tag]) - if node.tag == 'img' and "{{" not in node.get('src'): - size = ImageStaticItem.get_size(str(Path(node.get('src')).relative_to(getenv('OUT_DIR')).as_posix())) - node.set('width', str(size[0])) - node.set('height', str(size[1])) - for child in node: - process(child) - - -class BootstrapTreeProcessor(Treeprocessor): - - def run(self, node): - for child in node: - process(child) - return node - \ No newline at end of file diff --git a/docs/lib/Content/AbstractItem.py b/docs/lib/Content/AbstractItem.py deleted file mode 100644 index 91db0905..00000000 --- a/docs/lib/Content/AbstractItem.py +++ /dev/null @@ -1,58 +0,0 @@ -from abc import ABC -from pathlib import Path - -from htmlmin import minify -from jinja2 import Environment - - -class AbstractItem(ABC): - - output_ext: str = '.html' - env: Environment - in_path: Path - out_path: Path - root_dir: Path - - def __init__(self, in_path: Path, ext: str = None): - self.env = None - if ext is not None: - self.output_ext = ext - self.in_path = in_path - self.out_path = Path('out/', in_path.name).with_suffix(self.output_ext) - - @classmethod - def initialize(cls, env: Environment) -> list: - raise NotImplementedError() - - def render(self, **context) -> str: - raise NotImplementedError() - - def _save(self, rendered: str): - self.out_path.parent.mkdir(mode=511, parents=True, exist_ok=True) - with self.out_path.open(mode='w+', encoding='utf-8') as file: - file.write(rendered) - - def generate(self, **context) -> None: - print("Building:", self.in_path, "->", self.out_path) - self._save(self.render(**context)) - - def add_route(self, routes, out_dir): - pass - - -class MinifyMixin(AbstractItem, ABC): - - MINIFY_SETTINGS = { - 'remove_empty_space': True, - 'keep_pre': True, - 'remove_optional_attribute_quotes': False - } - - def _save(self, rendered: str): - rendered = minify(rendered, **self.MINIFY_SETTINGS) - super(MinifyMixin, self)._save(rendered) - - - - - diff --git a/docs/lib/Content/AbstractSchemaItem.py b/docs/lib/Content/AbstractSchemaItem.py deleted file mode 100644 index 82cf6ea2..00000000 --- a/docs/lib/Content/AbstractSchemaItem.py +++ /dev/null @@ -1,24 +0,0 @@ -from abc import ABC -from pathlib import Path - -from jinja2 import Template, Environment - -from lib.Content.AbstractTemplatedItem import AbstractTemplatedItem - - -class AbstractSchemaItem(AbstractTemplatedItem, ABC): - root_dir = Path('schemas/') - - def __init__(self, in_path: Path): - super().__init__(in_path) - self.out_path = Path('out/schemas/', self.out_path.relative_to('out')) - - @classmethod - def initialize(cls, env: Environment): - new_pages = super(AbstractSchemaItem, cls).initialize(env) - for page in new_pages: - page.out_path = page.out_path.with_stem(page.title.replace(" ", "_").lower()) - return new_pages - - def render(self, template: Template, **context): - raise NotImplementedError() diff --git a/docs/lib/Content/AbstractTemplatedItem.py b/docs/lib/Content/AbstractTemplatedItem.py deleted file mode 100644 index 3edce396..00000000 --- a/docs/lib/Content/AbstractTemplatedItem.py +++ /dev/null @@ -1,53 +0,0 @@ -from abc import ABC -from itertools import chain -from pathlib import Path - -from jinja2 import Template, Environment - -from lib.Content.AbstractItem import AbstractItem, MinifyMixin - - -class AbstractTemplatedItem(MinifyMixin, AbstractItem, ABC): - extensions: tuple[str] - title: str = None - description: str | None = None - sort_priority: int = None - render_toc: bool = False - table_of_contents: dict = {} - meta: dict = { - 'title': None, - 'description': None, - 'sort_priority': 10 - } - - def load_metadata(self): - self.title = self.meta['title'] if self.meta['title'] is not None else self.in_path.stem - self.description = self.meta['description'] - self.sort_priority = int(self.meta['sort_priority']) - - @classmethod - def initialize(cls, env: Environment): - pages = [] - file_paths = list(chain(*[Path('content/', cls.root_dir).glob(f'**/*.{ext}') for ext in cls.extensions])) - for path in file_paths: - new_page = cls(path) - new_page.env = env - new_page.load_metadata() - pages.append(new_page) - return pages - - def inner_render(self, template: Template, **context): - return template.render(**context) - - def render(self, **context): - container = self.env.get_template('base/page_template.jinja2') - template = self.env.get_template(str(self.in_path.relative_to(Path('content/')).as_posix())) - context.update({ - 'page': self, - 'rendered': self.inner_render(template, **context), - 'render_toc': self.render_toc - }) - return container.render(**context) - - def add_route(self, router, out_dir): - router[self.title.lower()] = out_dir + str(self.out_path.relative_to('out/')) diff --git a/docs/lib/Content/CSSStaticItem.py b/docs/lib/Content/CSSStaticItem.py deleted file mode 100644 index c4248fb0..00000000 --- a/docs/lib/Content/CSSStaticItem.py +++ /dev/null @@ -1,11 +0,0 @@ -from rcssmin import cssmin - -from lib.Content.StaticItem import MinifiedStaticItem - - -class CSSStaticItem(MinifiedStaticItem): - - extensions = ('css',) - - def minify(self, content): - return cssmin(content) diff --git a/docs/lib/Content/HTMLPage.py b/docs/lib/Content/HTMLPage.py deleted file mode 100644 index 9906bf4e..00000000 --- a/docs/lib/Content/HTMLPage.py +++ /dev/null @@ -1,18 +0,0 @@ -import re -from pathlib import Path - -from lib.Content.AbstractTemplatedItem import AbstractTemplatedItem - - -class HTMLPage(AbstractTemplatedItem): - - def load_metadata(self): - with self.in_path.open(mode='r', encoding='utf-8') as file: - content = file.read() - for match in re.findall(r"{#~(.*?)~#}", content, re.MULTILINE): - seperated = match.strip().split(':') - self.meta[seperated[0].lower().replace('-', '_')] = seperated[1] - super(HTMLPage, self).load_metadata() - - root_dir = Path("pages/") - extensions = ('html', 'jinja2', 'jinja') diff --git a/docs/lib/Content/ImageStaticItem.py b/docs/lib/Content/ImageStaticItem.py deleted file mode 100644 index a81209a8..00000000 --- a/docs/lib/Content/ImageStaticItem.py +++ /dev/null @@ -1,21 +0,0 @@ -from pathlib import Path - -from PIL import Image - -from lib.Content.StaticItem import StaticItem - - -class ImageStaticItem(StaticItem): - - extensions = ('png', 'jpg', 'jpeg', 'webp') - - sizes = {} - - @classmethod - def get_size(cls, stem): - return cls.sizes.get(stem, (0, 0)) - - def __init__(self, path: Path): - super().__init__(path) - with Image.open(self.in_path) as img: - self.sizes[str(self.out_path.relative_to('out/').as_posix())] = img.size diff --git a/docs/lib/Content/JSONSchema.py b/docs/lib/Content/JSONSchema.py deleted file mode 100644 index 679436b7..00000000 --- a/docs/lib/Content/JSONSchema.py +++ /dev/null @@ -1,58 +0,0 @@ -import json -import os -import sys -from pathlib import Path - -from json_schema_for_humans.generate import generate_schemas_doc -from json_schema_for_humans.generation_configuration import GenerationConfiguration -from json_schema_for_humans.schema.schema_to_render import SchemaToRender -from json_schema_for_humans.template_renderer import TemplateRenderer - -from lib.Content.AbstractSchemaItem import AbstractSchemaItem - -SCHEMA_SETTINGS = GenerationConfiguration() -SCHEMA_SETTINGS.link_to_reused_ref = False -SCHEMA_SETTINGS.minify = False - - -class NoPrint: - def __enter__(self): - self._original_stdout = sys.stdout - sys.stdout = open(os.devnull, 'w') - - def __exit__(self, exc_type, exc_val, exc_tb): - sys.stdout.close() - sys.stdout = self._original_stdout - - -class JSONSchema(AbstractSchemaItem): - extensions = ('json',) - - def load_metadata(self): - self.meta['sort_priority'] = 10 - with self.in_path.open(mode='r', encoding='utf-8') as file: - self.meta['title'] = json.load(file).get('title', self.in_path.stem) - self.meta['description'] = "Schema for a " + self.meta['title'] + " in New Horizons" - super(JSONSchema, self).load_metadata() - - def render(self, **context): - context.update({ - 'page': self - }) - dumb_renderer = TemplateRenderer(SCHEMA_SETTINGS) - self.env.filters.update(dumb_renderer.template.environment.filters) - self.env.tests.update(dumb_renderer.template.environment.tests) - self.env.globals.update(dumb_renderer.template.environment.globals) - schemas = [SchemaToRender(self.in_path, None, None)] - schema_template = self.env.get_template(str(Path('base/schema/json/schema_base.jinja2').as_posix())) - template_renderer = TemplateRenderer(SCHEMA_SETTINGS, schema_template) - template_renderer.render = lambda inter: self.template_override(template_renderer, inter, **context) - with NoPrint(): - rendered = generate_schemas_doc(schemas, template_renderer) - return rendered[str(self.in_path.name)] - - def template_override(self, template: TemplateRenderer, intermediate_schema, **context): - template.template.environment.loader = self.env.loader - rendered = template.template.render(schema=intermediate_schema, config=SCHEMA_SETTINGS, - title=self.title + " Schema", **context) - return rendered diff --git a/docs/lib/Content/JSStaticItem.py b/docs/lib/Content/JSStaticItem.py deleted file mode 100644 index 5eea586b..00000000 --- a/docs/lib/Content/JSStaticItem.py +++ /dev/null @@ -1,13 +0,0 @@ -from rjsmin import jsmin - -from lib.Content.StaticItem import MinifiedStaticItem - - -class JSStaticItem(MinifiedStaticItem): - - extensions = ('js',) - - def minify(self, content): - return jsmin(content) - - diff --git a/docs/lib/Content/MDPage.py b/docs/lib/Content/MDPage.py deleted file mode 100644 index c76807a3..00000000 --- a/docs/lib/Content/MDPage.py +++ /dev/null @@ -1,43 +0,0 @@ -from pathlib import Path - -from markdown import Markdown - -from lib.Content.AbstractTemplatedItem import AbstractTemplatedItem -from lib.BootstrapExtension import BootstrapExtension - - -class MDPage(AbstractTemplatedItem): - root_dir = Path("pages/") - extensions = ('md', 'markdown') - - MARKDOWN_SETTINGS = { - 'extensions': ['extra', 'toc', 'meta', BootstrapExtension()], - 'output-format': 'html5' - } - - def load_metadata(self): - md = self.__get_md() - with self.in_path.open(mode='r', encoding='utf-8') as file: - md.convert(file.read()) - - self.meta['title'] = md.Meta.get('title')[0] - self.meta['description'] = md.Meta.get('description', [None])[0] - self.render_toc = md.Meta.get('toc', ['True'])[0].strip().lower() == "true" - if self.render_toc: - self.table_of_contents = md.toc_tokens - raw_priority = md.Meta.get('sort-priority') - if raw_priority is not None: - self.meta['sort_priority'] = int(raw_priority[0]) - out_name = md.Meta.get('out-file', None) - if out_name is not None: - self.out_path = self.out_path.with_stem(out_name[0]) - super(MDPage, self).load_metadata() - - def __get_md(self): - return Markdown(**self.MARKDOWN_SETTINGS) - - def inner_render(self, template, **context): - rendered_markdown = super(MDPage, self).inner_render(template, **context) - md = self.__get_md() - return md.convert(rendered_markdown) - diff --git a/docs/lib/Content/MetaItem.py b/docs/lib/Content/MetaItem.py deleted file mode 100644 index e366e3f2..00000000 --- a/docs/lib/Content/MetaItem.py +++ /dev/null @@ -1,18 +0,0 @@ -from jinja2 import Environment - -from lib.Content.AbstractItem import AbstractItem, MinifyMixin - - -class MetaItem(AbstractItem): - - @classmethod - def initialize(cls, env: Environment) -> list: - cls.env = env - - def render(self, **context) -> str: - template = self.env.get_template(str(self.in_path.as_posix())) - return template.render(**context) - - -class MinifiedMetaItem(MinifyMixin, MetaItem): - pass diff --git a/docs/lib/Content/StaticItem.py b/docs/lib/Content/StaticItem.py deleted file mode 100644 index 7209a843..00000000 --- a/docs/lib/Content/StaticItem.py +++ /dev/null @@ -1,36 +0,0 @@ -from abc import ABC -from pathlib import Path - - -class StaticItem: - - extensions = ('',) - - def __init__(self, path: Path): - self.in_path = path - self.out_path = Path('out/', path.relative_to('content/static/')) - self.out_path.parent.mkdir(parents=True, exist_ok=True) - - def generate(self, **kwargs): - print("Building:", str(self.in_path), "->", str(self.out_path)) - with self.in_path.open(mode='rb') as file: - content = file.read() - with self.out_path.open(mode='wb+') as file: - file.write(content) - - -class MinifiedStaticItem(StaticItem, ABC): - - def __init__(self, path: Path): - super().__init__(path) - self.out_path = self.out_path.with_stem(self.out_path.stem + '.min') - - def minify(self, content): - raise NotImplementedError() - - def generate(self, **kwargs): - print("Building:", str(self.in_path), "->", str(self.out_path)) - with self.in_path.open(mode='r') as file: - content = file.read() - with self.out_path.open(mode='w+') as file: - file.write(self.minify(content)) diff --git a/docs/lib/Content/XMLSchema.py b/docs/lib/Content/XMLSchema.py deleted file mode 100644 index bc81a355..00000000 --- a/docs/lib/Content/XMLSchema.py +++ /dev/null @@ -1,93 +0,0 @@ -import os - -import xmlschema -from jinja2 import Environment, UndefinedError -from xmlschema import XsdElement -from xmlschema.extras.codegen import AbstractGenerator, filter_method - -__all__ = ('XMLSchema',) - -from lib.Content.AbstractSchemaItem import AbstractSchemaItem - - -def children(group): - child = [child for child in group if child.__class__.__name__ == "XsdElement"] - for child_list in [children(inner_group) for inner_group in group if inner_group.__class__.__name__ == "XsdGroup"]: - child += child_list - return child - - -def ancestry(element): - if element.parent is None: - print(element.name) - return [element.name] - else: - if element.name is None: - return ancestry(element.parent) - else: - return [element.name] + ancestry(element.parent) - - -class HTMLConverter(AbstractGenerator): - formal_language = "html" - searchpaths = [os.getcwd() + "/content/"] - - @staticmethod - @filter_method - def children(group): - return children(group) - - @staticmethod - @filter_method - def id_path(element): - return '-'.join(reversed(ancestry(element))) - - @staticmethod - @filter_method - def split(string, delim): - return string.split(delim) - - @staticmethod - @filter_method - def get_desc(element: XsdElement): - try: - return str(element.annotation.documentation[0].text.strip()) - except (UndefinedError, AttributeError): - return "" - - @staticmethod - @filter_method - def occurs_text(occurs): - words = { - 0: "Zero", - 1: "One", - None: "Many" - } - return "Appears " + words[occurs[0]] + " To " + words[occurs[1]] + " " + ("Time" if occurs[1] == 1 else "Times") - - def setup(self, other: Environment): - other.filters.update(self._env.filters) - other.globals.update(self._env.filters) - self._env = other - - -class XMLSchema(AbstractSchemaItem): - extensions = ('xsd', 'xml') - - def load_metadata(self): - with self.in_path.open(mode='r', encoding='utf-8') as file: - file.readline() - line = file.readline() - if len(line.strip()) != 0 and '' in line: - self.meta['title'] = line.replace('', '').strip() - super(XMLSchema, self).load_metadata() - - def render(self, **context): - context.update({ - 'page': self - }) - with self.in_path.open(mode='r', encoding='utf-8') as file: - schema = xmlschema.XMLSchema(file) - converter = HTMLConverter(schema) - converter.setup(self.env) - return converter.render('base/schema/xml/schema_base.jinja2', global_vars=context)[0] diff --git a/docs/lib/__init__.py b/docs/lib/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/lib/utils.py b/docs/lib/utils.py deleted file mode 100644 index adf0c434..00000000 --- a/docs/lib/utils.py +++ /dev/null @@ -1,19 +0,0 @@ -import re - - -def camel_to_pretty(raw): - return ' '.join(re.findall(r'[A-Z](?:[a-z]+|[A-Z]*(?=[A-Z]|$))', raw)) - - -def pretty_title(raw: str) -> str: - if '_' in raw: - return ' '.join(x[0].upper() + x[1:] for x in raw.split('_')) - elif any(x.isupper() for x in raw): - if raw[0].islower(): - new_raw = raw[0].upper() + raw[1:] - else: - new_raw = raw - return camel_to_pretty(new_raw) - - - From f221760ac885ae7ba572b9a73696c36bdfe34878 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 16 Apr 2022 12:41:48 -0400 Subject: [PATCH 07/19] Add `childrenToDestroy` to schema.json --- NewHorizons/schema.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NewHorizons/schema.json b/NewHorizons/schema.json index aa55804d..d2b9af06 100644 --- a/NewHorizons/schema.json +++ b/NewHorizons/schema.json @@ -129,6 +129,11 @@ "description": "`true` if you want to delete this planet", "default": false }, + "childrenToDestroy": { + "type": "string", + "description": "A list of paths to child GameObjects to destroy on this planet", + "default": [] + }, "Base": { "type": "object", "properties": { From c8b83dbe69262108ca038e2d9e2fc2045be71fa1 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 16 Apr 2022 13:55:18 -0400 Subject: [PATCH 08/19] Update embeds to work on docs --- docs/Pipfile.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/Pipfile.lock b/docs/Pipfile.lock index a884708f..2ad21c1c 100644 --- a/docs/Pipfile.lock +++ b/docs/Pipfile.lock @@ -114,7 +114,7 @@ "sha256:66784a3d37c8f730588524cc8f103448847533f067ba8b5d76e7667675ee31f1", "sha256:ed900db6b19b41bf681513c48ae5e403632878745775ddfc8d5b73438d2930fe" ], - "markers": "python_version >= '3.7' and python_version < '4.0'", + "markers": "python_version >= '3.7' and python_version < '4'", "version": "==0.40.2" }, "jsonschema": { @@ -138,7 +138,7 @@ "sha256:8f4ac8d9a124ab408c67361090ed512deda746c04362c36c2ec16190c720c2b0", "sha256:91113caf23aa662570fe21984f08fe74f814695c0a0ea8e863a8b4c4f63f9f6e" ], - "markers": "python_version >= '3.5' and python_version < '4.0'", + "markers": "python_version >= '3.5' and python_version < '4'", "version": "==2.4.2" }, "markupsafe": { @@ -204,11 +204,11 @@ }, "menagerie-docs": { "hashes": [ - "sha256:4b5cdeb5a32bc1b9ce123f9a3d23b5504701a07be293d5408ff9a36bde32e61a", - "sha256:8e382e2d91a7e57783cf4f25f069893f18c22b98ffae4d9f195edaa63b4e08fa" + "sha256:3e523c40229471bf15b78823600163358fa60c19ac3de1a1efb0b4802a9c6a3b", + "sha256:dc0de91203764987005f4528c75d89408f5b73961cf237bda46fb4932ac22c95" ], "index": "pypi", - "version": "==0.0.3" + "version": "==0.0.4" }, "mypy-extensions": { "hashes": [ @@ -222,7 +222,7 @@ "sha256:5053fc5ca7b8a281081274702ebf1584e341f40a68e6ab8f6b4b79f4b3fdf18e", "sha256:8e8226f15c0b25565aa391797963b78c95930e12efc40e905153130783e766be" ], - "markers": "python_version >= '3.8' and python_version < '4.0'", + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.1.0" }, "packaging": { @@ -453,7 +453,7 @@ "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.26.9" }, "xmlschema": { From 992593a09bac4a6eb7024dd2d0734db524278ec0 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 16 Apr 2022 14:13:10 -0400 Subject: [PATCH 09/19] Update embeds to work on docs but fr this time --- docs/Pipfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Pipfile.lock b/docs/Pipfile.lock index 2ad21c1c..7ff9fbaa 100644 --- a/docs/Pipfile.lock +++ b/docs/Pipfile.lock @@ -114,7 +114,7 @@ "sha256:66784a3d37c8f730588524cc8f103448847533f067ba8b5d76e7667675ee31f1", "sha256:ed900db6b19b41bf681513c48ae5e403632878745775ddfc8d5b73438d2930fe" ], - "markers": "python_version >= '3.7' and python_version < '4'", + "markers": "python_version >= '3.7' and python_version < '4.0'", "version": "==0.40.2" }, "jsonschema": { @@ -138,7 +138,7 @@ "sha256:8f4ac8d9a124ab408c67361090ed512deda746c04362c36c2ec16190c720c2b0", "sha256:91113caf23aa662570fe21984f08fe74f814695c0a0ea8e863a8b4c4f63f9f6e" ], - "markers": "python_version >= '3.5' and python_version < '4'", + "markers": "python_version >= '3.5' and python_version < '4.0'", "version": "==2.4.2" }, "markupsafe": { @@ -222,7 +222,7 @@ "sha256:5053fc5ca7b8a281081274702ebf1584e341f40a68e6ab8f6b4b79f4b3fdf18e", "sha256:8e8226f15c0b25565aa391797963b78c95930e12efc40e905153130783e766be" ], - "markers": "python_version >= '3.8' and python_version < '4'", + "markers": "python_version >= '3.8' and python_version < '4.0'", "version": "==0.1.0" }, "packaging": { @@ -453,7 +453,7 @@ "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", "version": "==1.26.9" }, "xmlschema": { From 13ae41cf7751ef5bded768070ab224d4cc22f4f3 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 16 Apr 2022 14:16:35 -0400 Subject: [PATCH 10/19] Update embeds to work on docs but fr fr this time --- docs/Pipfile.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/Pipfile.lock b/docs/Pipfile.lock index 7ff9fbaa..a659d981 100644 --- a/docs/Pipfile.lock +++ b/docs/Pipfile.lock @@ -114,7 +114,7 @@ "sha256:66784a3d37c8f730588524cc8f103448847533f067ba8b5d76e7667675ee31f1", "sha256:ed900db6b19b41bf681513c48ae5e403632878745775ddfc8d5b73438d2930fe" ], - "markers": "python_version >= '3.7' and python_version < '4.0'", + "markers": "python_version >= '3.7' and python_version < '4'", "version": "==0.40.2" }, "jsonschema": { @@ -138,7 +138,7 @@ "sha256:8f4ac8d9a124ab408c67361090ed512deda746c04362c36c2ec16190c720c2b0", "sha256:91113caf23aa662570fe21984f08fe74f814695c0a0ea8e863a8b4c4f63f9f6e" ], - "markers": "python_version >= '3.5' and python_version < '4.0'", + "markers": "python_version >= '3.5' and python_version < '4'", "version": "==2.4.2" }, "markupsafe": { @@ -204,11 +204,11 @@ }, "menagerie-docs": { "hashes": [ - "sha256:3e523c40229471bf15b78823600163358fa60c19ac3de1a1efb0b4802a9c6a3b", - "sha256:dc0de91203764987005f4528c75d89408f5b73961cf237bda46fb4932ac22c95" + "sha256:86474264ca3f3aa289bf22e4f2b0287ba29c946bd54e34a1f6c77d549c3c23ad", + "sha256:adee872cde3616c2bab6b8e4ad15f3aac95dbc9340ff02377a21d257ec5fa108" ], "index": "pypi", - "version": "==0.0.4" + "version": "==0.0.5" }, "mypy-extensions": { "hashes": [ @@ -222,7 +222,7 @@ "sha256:5053fc5ca7b8a281081274702ebf1584e341f40a68e6ab8f6b4b79f4b3fdf18e", "sha256:8e8226f15c0b25565aa391797963b78c95930e12efc40e905153130783e766be" ], - "markers": "python_version >= '3.8' and python_version < '4.0'", + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==0.1.0" }, "packaging": { @@ -453,7 +453,7 @@ "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.26.9" }, "xmlschema": { From 4cda6059c2f11274e7db2f7ac02b7600aff7a5f4 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sun, 17 Apr 2022 20:12:17 -0400 Subject: [PATCH 11/19] Change embed color --- docs/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.json b/docs/config.json index d6bbdd71..673c1b7d 100644 --- a/docs/config.json +++ b/docs/config.json @@ -39,7 +39,7 @@ "categories": ["games", "utilities"], "image": "images/home/home_logo.webp", "image_alt": "The New Horizons Logo", - "theme_color": "#303030", + "theme_color": "#ffab8a", "bg_color": "#1a1a1a" }, "footer": { From dc8c72e48050a2d270806a2c2f73e17ef270b7da Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 18 Apr 2022 13:50:07 +0200 Subject: [PATCH 12/19] Use draft-07 schema, fix bools, formatting --- NewHorizons/schema.json | 52 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/NewHorizons/schema.json b/NewHorizons/schema.json index d2b9af06..21cb4644 100644 --- a/NewHorizons/schema.json +++ b/NewHorizons/schema.json @@ -1,5 +1,5 @@ { - "$schema": "https://json-schema.org/draft/2020-12/schema", + "$schema": "https://json-schema.org/draft-07/schema", "$docs": { "title": "Celestial Body Schema", "description": "Schema for a celestial body in New Horizons" @@ -222,7 +222,7 @@ }, "cloudTint": { "$ref": "#/$defs/color", - "description" : "Colour of the cloud layer. Only relevant if \"cloud\" has a value" + "description": "Colour of the cloud layer. Only relevant if \"cloud\" has a value" }, "cloud": { "type": "string", @@ -254,7 +254,7 @@ "type": "number", "minimum": 0, "maximum": 1, - "description" : "How dense the fog is, if you put fog." + "description": "How dense the fog is, if you put fog." }, "fogSize": { "type": "number", @@ -272,7 +272,7 @@ "hasOxygen": { "type": "boolean", "default": false, - "description" : "Lets you survive on the planet without a suit." + "description": "Lets you survive on the planet without a suit." }, "hasAtmosphere": { "type": "boolean", @@ -372,7 +372,7 @@ "type": "number", "default": 0, "minimum": 0, - "description" : "Inner radius of the disk " + "description": "Inner radius of the disk " }, "outerRadius": { "type": "number", @@ -382,11 +382,11 @@ "inclination": { "type": "number", "default": 0, - "description" : "Angle between the rings and the equatorial plane of the planet." + "description": "Angle between the rings and the equatorial plane of the planet." }, "longitudeOfAscendingNode": { "$ref": "#/$defs/angle", - "description" : "Angle defining the point where the rings rise up from the planet's equatorial plane if inclination is nonzero." + "description": "Angle defining the point where the rings rise up from the planet's equatorial plane if inclination is nonzero." }, "texture": { "type": "string", @@ -395,11 +395,11 @@ "rotationSpeed": { "type": "number", "default": 0, - "description" : "Allows the rings to rotate." + "description": "Allows the rings to rotate." }, "curve": { "$ref": "#/$defs/curve", - "description" : "Allows the rings to grow/shrink with time." + "description": "Allows the rings to grow/shrink with time." } } }, @@ -417,12 +417,12 @@ "minHeight": { "type": "number", "minimum": 0, - "description" : "The lowest points on your planet will be at this height." + "description": "The lowest points on your planet will be at this height." }, "maxHeight": { "type": "number", "minimum": 0, - "description" : "The highest points on your planet will be at this height." + "description": "The highest points on your planet will be at this height." } } }, @@ -444,11 +444,11 @@ }, "inclination": { "$ref": "#/$defs/angle", - "description" : "Angle between the rings and the equatorial plane of the planet." + "description": "Angle between the rings and the equatorial plane of the planet." }, "longitudeOfAscendingNode": { "$ref": "#/$defs/angle", - "description" : "Angle defining the point where the rings rise up from the planet's equatorial plane if inclination is nonzero." + "description": "Angle defining the point where the rings rise up from the planet's equatorial plane if inclination is nonzero." }, "randomSeed": { "type": "integer", @@ -467,7 +467,7 @@ "type": "number", "default": 2000, "minimum": 0, - "description" : "Radius of the star." + "description": "Radius of the star." }, "tint": { "$ref": "#/$defs/color", @@ -490,11 +490,11 @@ "hasAtmosphere": { "type": "boolean", "default": true, - "description" : "The default sun has its own atmosphere that is different from regular planets. If you want that, set this to true." + "description": "The default sun has its own atmosphere that is different from regular planets. If you want that, set this to true." }, "curve": { "$ref": "#/$defs/curve", - "description" : "Allows the star to shrink/grow over time." + "description": "Allows the star to shrink/grow over time." } } }, @@ -615,7 +615,11 @@ "properties": { "revealOn": { "type": "string", - "enum": [ "enter", "observe", "snapshot" ], + "enum": [ + "enter", + "observe", + "snapshot" + ], "description": "'enter', 'observe', or 'snapshot' what needs to be done to the volume to unlock the facts" }, "reveals": { @@ -657,7 +661,7 @@ "description": "The ID of the entry this location is for" }, "cloaked": { - "type": "bool", + "type": "boolean", "description": "Whether this entry location is in a cloaking field", "default": false }, @@ -688,7 +692,7 @@ "properties": { "playerSpawnPoint": { "$ref": "#/$defs/vector3", - "description" : "If you want the player to spawn on the new body, set a value for this. Press \"P\" in game with Debug mode on to have the game log the position you're looking at to find a good value for this." + "description": "If you want the player to spawn on the new body, set a value for this. Press \"P\" in game with Debug mode on to have the game log the position you're looking at to find a good value for this." }, "shipSpawnPoint": { "$ref": "#/$defs/vector3" @@ -696,7 +700,7 @@ "startWithSuit": { "type": "boolean", "default": false, - "description" : "If you spawn on a planet with no oxygen, you probably want to set this to true ;)" + "description": "If you spawn on a planet with no oxygen, you probably want to set this to true ;)" } } }, @@ -713,11 +717,11 @@ }, "frequency": { "type": "string", - "description" : "The frequency ID of the signal. The built-in game values are \"Default\", \"Traveler\", \"Quantum\", \"EscapePod\", \"Statue\", \"WarpCore\", \"HideAndSeek\", and \"Radio\". You can also put a custom value." + "description": "The frequency ID of the signal. The built-in game values are \"Default\", \"Traveler\", \"Quantum\", \"EscapePod\", \"Statue\", \"WarpCore\", \"HideAndSeek\", and \"Radio\". You can also put a custom value." }, "name": { "type": "string", - "description" : "The unique ID of the signal." + "description": "The unique ID of the signal." }, "audioClip": { "type": "string", @@ -768,7 +772,7 @@ "type": "number", "default": 0, "minimum": 0, - "description" : "Radius of the singularity. Note that this isn't the same as the event horizon, but includes the entire volume that has warped effects in it." + "description": "Radius of the singularity. Note that this isn't the same as the event horizon, but includes the entire volume that has warped effects in it." }, "pairedSingularity": { "type": "string", @@ -919,7 +923,7 @@ "default": 1 }, "invisibleWhenHidden": { - "type": "bool", + "type": "boolean", "description": "Hide the planet completely if unexplored instead of showing an outline.", "default": false }, From e123fdc12a6b0f4cbb82d4ad180dce226a6db3b2 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 18 Apr 2022 12:21:18 -0400 Subject: [PATCH 13/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c8354f80..86391095 100644 --- a/README.md +++ b/README.md @@ -66,10 +66,10 @@ Join the [Outer Wilds Modding Discord](https://discord.gg/MvbCbBz6Q6) if you hav ## Credits Main authors: - xen (New Horizons v0.1.0 onwards) +- [Bwc9876](https://github.com/Bwc9876) (New Horizons v0.9.0 onwards) - [Mister_Nebula](https://github.com/misternebula) ([Marshmallow](https://github.com/misternebula/Marshmallow) v0.1 to v1.1.0) New Horizons was made with help from: -- [Bwc9876](https://github.com/Bwc9876): Set up ship log entries and QOL debug options in v0.9.x, and set up the website. - [Nageld](https://github.com/Nageld): Set up xml reading for custom dialogue in v0.8.0 - [jtsalomo](https://github.com/jtsalomo): Implemented [OW_CommonResources](https://github.com/PacificEngine/OW_CommonResources) support introduced in v0.5.0 - [Raicuparta](https://github.com/Raicuparta): Integrated the [New Horizons Template](https://github.com/xen-42/ow-new-horizons-config-template) into the Outer Wilds Mods website From 1afca810a8ff5c92fedffecf55b37de38c61480f Mon Sep 17 00:00:00 2001 From: Ben C Date: Tue, 19 Apr 2022 18:56:00 -0400 Subject: [PATCH 14/19] Fix schema `minOccurs` --- NewHorizons/dialogue_schema.xsd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/NewHorizons/dialogue_schema.xsd b/NewHorizons/dialogue_schema.xsd index ea02785a..2828d50f 100644 --- a/NewHorizons/dialogue_schema.xsd +++ b/NewHorizons/dialogue_schema.xsd @@ -138,35 +138,35 @@ - + Require a persistent condition to be met to show this option - + Hide this option if a persistent condition has been met - + Require a (single-loop) condition to be met to show this option - + Hide this option if a (single-loop) condition has been met - + Require a ship log fact to be known to show this option @@ -180,14 +180,14 @@ - + Set a condition when this option is chosen - + Cancel a condition when this option is chosen From e016aa3de7f0ca2fb02769a87d3c68c3bb943524 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 20 Apr 2022 22:12:00 -0400 Subject: [PATCH 15/19] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 86391095..d29ced0e 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Check the ship's log for how to use your warp drive to travel between star syste - [Incompatible mods](#incompatible-mods) - [Roadmap](#roadmap) +- [Development](#development) - [Contact](#contact) - [Credits](#credits) @@ -60,6 +61,10 @@ Check the ship's log for how to use your warp drive to travel between star syste - Implement custom Nomai scrolls - Implement custom translatable writing +## Development +If you want to help (please dear god help us) then check out the [contact](#contact) info below. +The Unity project we use to make asset bundles for this mod is [here](https://github.com/xen-42/new-horizons-unity). + ## Contact Join the [Outer Wilds Modding Discord](https://discord.gg/MvbCbBz6Q6) if you have any questions or just want to chat about modding! Theres a New Horizons category there dedicated to discussion of this mod. From 8caeda80359e287a4a8c7e1f013913b2361095eb Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 20 Apr 2022 22:15:23 -0400 Subject: [PATCH 16/19] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d29ced0e..efc75e92 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Check the ship's log for how to use your warp drive to travel between star syste ## Development If you want to help (please dear god help us) then check out the [contact](#contact) info below. + The Unity project we use to make asset bundles for this mod is [here](https://github.com/xen-42/new-horizons-unity). ## Contact From 1315ce0fb1eadaa24554456741c33a6b453d4986 Mon Sep 17 00:00:00 2001 From: Ben C Date: Wed, 20 Apr 2022 22:31:02 -0400 Subject: [PATCH 17/19] Changed color space to `linear` --- NewHorizons/AssetBundle/AssetBundle | Bin 1029 -> 1029 bytes NewHorizons/AssetBundle/AssetBundle.manifest | 2 +- NewHorizons/AssetBundle/shader | Bin 27760 -> 27576 bytes NewHorizons/AssetBundle/shader.manifest | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NewHorizons/AssetBundle/AssetBundle b/NewHorizons/AssetBundle/AssetBundle index b0ee697805ba4378b1a163fb8547b9beee5efba2..e0ce1ba7e3a5bcc2b07d9c22907d82789e1b2f21 100644 GIT binary patch delta 46 zcmV+}0MY-22!#l+-vcK9UPpt4e(^7d#v52DEhhKHqvj91_*R7k-|Am+@lUII|BJHg E2m31*YXATM delta 46 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 literal 27760 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 Date: Wed, 20 Apr 2022 22:48:04 -0400 Subject: [PATCH 18/19] Fix bundle --- NewHorizons/AssetBundle/AssetBundle | Bin 1029 -> 1029 bytes NewHorizons/AssetBundle/AssetBundle.manifest | 2 +- NewHorizons/AssetBundle/shader | Bin 27576 -> 27575 bytes NewHorizons/AssetBundle/shader.manifest | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NewHorizons/AssetBundle/AssetBundle b/NewHorizons/AssetBundle/AssetBundle index e0ce1ba7e3a5bcc2b07d9c22907d82789e1b2f21..b0ee697805ba4378b1a163fb8547b9beee5efba2 100644 GIT binary patch delta 46 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 delta 21189 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 Date: Wed, 20 Apr 2022 22:57:02 -0400 Subject: [PATCH 19/19] Update manifest.json --- NewHorizons/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewHorizons/manifest.json b/NewHorizons/manifest.json index 545c4307..c329c231 100644 --- a/NewHorizons/manifest.json +++ b/NewHorizons/manifest.json @@ -3,7 +3,7 @@ "author": "xen, Idiot, & Book", "name": "New Horizons", "uniqueName": "xen.NewHorizons", - "version": "0.10.2", + "version": "0.10.3", "owmlVersion": "2.1.0", "dependencies": [ "PacificEngine.OW_CommonResources" ], "conflicts": [ "Raicuparta.QuantumSpaceBuddies", "Vesper.OuterWildsMMO", "Vesper.AutoResume" ],