mirror of
https://github.com/godotengine/godot-docs.git
synced 2025-12-31 17:49:03 +03:00
Add JavaScript-based redirects to supplement Read the Docs redirects
Read the Docs redirects don't reliably apply when there is a large amount of redirects defined. While this JavaScript-based solution is not as seamless, it has no limit on how many redirects can be defined.
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
// Handle page scroll and adjust sidebar accordingly.
|
// Handle page scroll and adjust sidebar accordingly.
|
||||||
|
|
||||||
// Each page has two scrolls: the main scroll, which is moving the content of the page;
|
// Each page has two scrolls: the main scroll, which is moving the content of the page;
|
||||||
@@ -298,6 +297,37 @@ const registerGiscus = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(() => {
|
$(document).ready(() => {
|
||||||
|
const httpResponseStatus = window.performance.getEntries()[0].responseStatus;
|
||||||
|
if (httpResponseStatus === 404) {
|
||||||
|
// Check for redirects if on a currently invalid page.
|
||||||
|
// This is done in JavaScript, as we exceed Read the Docs' limit for the amount of redirects configurable.
|
||||||
|
// When testing this feature on a local web server, replace the URL below with just `/_static/redirects.csv`.
|
||||||
|
fetch("/en/latest/_static/redirects.csv")
|
||||||
|
.then(response => response.text())
|
||||||
|
.then(csvText => {
|
||||||
|
const lines = csvText.trim().split('\n');
|
||||||
|
for (const line of lines) {
|
||||||
|
if (!line.trim()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const [from, to] = line.split(',').map(s => s.trim());
|
||||||
|
if (from && to) {
|
||||||
|
if (window.location.pathname.endsWith(from)) {
|
||||||
|
if (to.startsWith('https://')) {
|
||||||
|
window.location.replace(to);
|
||||||
|
} else {
|
||||||
|
const newUrl = window.location.href.replace(window.location.pathname, to);
|
||||||
|
window.location.replace(newUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error("Couldn't fetch redirects list:", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the search match highlights from the page, and adjust the URL in the
|
// Remove the search match highlights from the page, and adjust the URL in the
|
||||||
// navigation history.
|
// navigation history.
|
||||||
const url = new URL(location.href);
|
const url = new URL(location.href);
|
||||||
|
|||||||
@@ -431,20 +431,20 @@ source,destination
|
|||||||
/contributing/workflow/testing_pull_requests.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/testing.html
|
/contributing/workflow/testing_pull_requests.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/testing.html
|
||||||
/contributing/development/core_and_modules/2d_coordinate_systems.html,/engine_details/architecture/2d_coordinate_systems.html
|
/contributing/development/core_and_modules/2d_coordinate_systems.html,/engine_details/architecture/2d_coordinate_systems.html
|
||||||
/contributing/development/core_and_modules/common_engine_methods_and_macros.html,/engine_details/architecture/common_engine_methods_and_macros.html
|
/contributing/development/core_and_modules/common_engine_methods_and_macros.html,/engine_details/architecture/common_engine_methods_and_macros.html
|
||||||
/contributing/development/core_and_modules/core_types.html,//architecture/core_types.html
|
/contributing/development/core_and_modules/core_types.html,/engine_details/architecture/core_types.html
|
||||||
/contributing/development/core_and_modules/custom_audiostreams.html,//architecture/custom_audiostreams.html
|
/contributing/development/core_and_modules/custom_audiostreams.html,/engine_details/architecture/custom_audiostreams.html
|
||||||
/contributing/development/core_and_modules/custom_godot_servers.html,//architecture/custom_godot_servers.html
|
/contributing/development/core_and_modules/custom_godot_servers.html,/engine_details/architecture/custom_godot_servers.html
|
||||||
/contributing/development/core_and_modules/custom_modules_in_cpp.html,//architecture/custom_modules_in_cpp.html
|
/contributing/development/core_and_modules/custom_modules_in_cpp.html,/engine_details/architecture/custom_modules_in_cpp.html
|
||||||
/contributing/development/core_and_modules/custom_platform_ports.html,//architecture/custom_platform_ports.html
|
/contributing/development/core_and_modules/custom_platform_ports.html,/engine_details/architecture/custom_platform_ports.html
|
||||||
/contributing/development/core_and_modules/custom_resource_format_loaders.html,//architecture/custom_resource_format_loaders.html
|
/contributing/development/core_and_modules/custom_resource_format_loaders.html,/engine_details/architecture/custom_resource_format_loaders.html
|
||||||
/contributing/development/core_and_modules/godot_architecture_diagram.html,//architecture/godot_architecture_diagram.html
|
/contributing/development/core_and_modules/godot_architecture_diagram.html,/engine_details/architecture/godot_architecture_diagram.html
|
||||||
/contributing/development/core_and_modules/index.html,//architecture/index.html
|
/contributing/development/core_and_modules/index.html,/engine_details/architecture/index.html
|
||||||
/contributing/development/core_and_modules/inheritance_class_tree.html,//architecture/inheritance_class_tree.html
|
/contributing/development/core_and_modules/inheritance_class_tree.html,/engine_details/architecture/inheritance_class_tree.html
|
||||||
/contributing/development/core_and_modules/internal_rendering_architecture.html,//architecture/internal_rendering_architecture.html
|
/contributing/development/core_and_modules/internal_rendering_architecture.html,/engine_details/architecture/internal_rendering_architecture.html
|
||||||
/contributing/development/core_and_modules/object_class.html,//architecture/object_class.html
|
/contributing/development/core_and_modules/object_class.html,/engine_details/architecture/object_class.html
|
||||||
/contributing/development/core_and_modules/scripting_development.html,//architecture/scripting_development.html
|
/contributing/development/core_and_modules/scripting_development.html,/engine_details/architecture/scripting_development.html
|
||||||
/contributing/development/core_and_modules/unit_testing.html,//architecture/unit_testing.html
|
/contributing/development/core_and_modules/unit_testing.html,/engine_details/architecture/unit_testing.html
|
||||||
/contributing/development/core_and_modules/variant_class.html,//architecture/variant_class.html
|
/contributing/development/core_and_modules/variant_class.html,/engine_details/architecture/variant_class.html
|
||||||
/contributing/documentation/class_reference_primer.html,engine_details/class_reference/index.html
|
/contributing/documentation/class_reference_primer.html,engine_details/class_reference/index.html
|
||||||
/contributing/development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html,
|
/contributing/development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html,
|
||||||
/contributing/development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
|
/contributing/development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
|
||||||
|
Can't render this file because it has a wrong number of fields in line 449.
|
@@ -21,19 +21,26 @@ To interact with the Read the Docs API, a valid API key must be set as
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Let's say we recently renamed some files in the Git branch `3.4` (compared to the `stable` branch), and now we want to create redirects for these.
|
Let's say we recently renamed some files in the Git branch `3.4` (compared to the `stable` branch),
|
||||||
For this, we would (after setting up the API token and requirements, see Setup above):
|
and now we want to create redirects for these. For this, we would (after setting up the API token
|
||||||
|
and requirements, see Setup above):
|
||||||
|
|
||||||
> python convert_git_renames_to_csv.py stable 3.4
|
```
|
||||||
|
python convert_git_renames_to_csv.py stable 3.4
|
||||||
|
```
|
||||||
|
|
||||||
This should output a list of the redirects to create. Let's append these to the redirects file:
|
This should output a list of the redirects to create. Let's append these to the redirects file:
|
||||||
|
|
||||||
> python convert_git_renames_to_csv.py stable 3.4 >> redirects.csv
|
```
|
||||||
|
python convert_git_renames_to_csv.py stable 3.4 >> ../../_tools/redirects.csv
|
||||||
|
```
|
||||||
|
|
||||||
After this, redirects for renamed files should have been appended to `redirects.csv`. You may want to double-check that!
|
After this, redirects for renamed files should have been appended to `../../_tools/redirects.csv`.
|
||||||
Now let's submit these to ReadTheDocs and create redirects there:
|
You may want to double-check that! Now let's submit these to ReadTheDocs and create redirects there:
|
||||||
|
|
||||||
> python create_redirects.py
|
```
|
||||||
|
python create_redirects.py
|
||||||
|
```
|
||||||
|
|
||||||
And that should be it!
|
And that should be it!
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ def parse_command_line_args():
|
|||||||
"-f",
|
"-f",
|
||||||
"--file",
|
"--file",
|
||||||
metavar="file",
|
metavar="file",
|
||||||
default="redirects.csv",
|
default="../../_static/redirects.csv",
|
||||||
type=str,
|
type=str,
|
||||||
help="Path to a CSV file used to keep a list of redirects, containing two columns: source and destination.",
|
help="Path to a CSV file used to keep a list of redirects, containing two columns: source and destination.",
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user