Skip to content

Commit

Permalink
Add more client-side fragment redirects for old get started pages (fl…
Browse files Browse the repository at this point in the history
…utter#10357)

This adds redirects from the `/get-started/install/<platform>` pages if
a fragment (`#link-target-fragment`) from the old page format is
specified. These JS based redirects are necessary as fragments aren't
sent to the server, so Firebase redirects won't work.

We likely won't maintain these indefinitely, but a lot of links
referencing these still exist in old versions of tools and the internet,
so we can keep them for the foreseeable future.

Fixes flutter#10271
  • Loading branch information
parlough authored and Tony Sansone committed Apr 5, 2024
1 parent a9e5a95 commit 66b9ab2
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 0 deletions.
53 changes: 53 additions & 0 deletions src/assets/js/temp/chromeos-install-redirector.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
const oldToNew = {
'configuring-web-app-support': '/get-started/install/chromeos/web',

'android-setup-without-android-studio': '/get-started/install/chromeos/android?tab=download#configure-android-development',
'android-setup': '/get-started/install/chromeos/android?tab=download#configure-android-development',
'configuring-android-app-support': '/get-started/install/chromeos/android?tab=download#configure-android-development',
'set-up-your-android-device': '/get-started/install/chromeos/android#configure-your-target-android-device',
'set-up-the-android-emulator': '/get-started/install/chromeos/android#configure-your-target-android-device',
'agree-to-android-licenses': '/get-started/install/chromeos/android#agree-to-android-licenses',
};

function handleRedirect() {
const rawOldFragment = window.location.hash;

// If no fragment was specified, don't do anything.
if (!rawOldFragment) {
return;
}

const oldFragmentWithHash = rawOldFragment.trim().toLowerCase();

// If the fragment is empty, don't do anything.
if (oldFragmentWithHash.length === 0) {
return;
}

const oldFragment = oldFragmentWithHash.substring(1);

// If the fragment did not exist, don't do anything.
if (!(oldFragment in oldToNew)) {
return;
}

const newDestination = oldToNew[oldFragment];

// If the desired destination exists, go there.
// Otherwise, don't go anywhere.
fetch(newDestination)
.then((response) => {
if (response.status === 200) {
window.location.replace(newDestination);
}
}).catch((_) => {
});
}

const currentLocation = window.location.pathname;

if (currentLocation.includes('/get-started/install/chromeos') &&
currentLocation.split('/')
.filter(value => value.trim().length !== 0).length === 3) {
handleRedirect();
}
53 changes: 53 additions & 0 deletions src/assets/js/temp/linux-install-redirector.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
const oldToNew = {
'linux-setup': '/get-started/install/linux/desktop',

'android-setup': '/get-started/install/linux/android#configure-android-development',
'set-up-your-android-device': '/get-started/install/linux/android#configure-your-target-android-device',
'set-up-the-android-emulator': '/get-started/install/linux/android#configure-your-target-android-device',
'agree-to-android-licenses': '/get-started/install/linux/android#agree-to-android-licenses',

'update-your-path': '/get-started/install/linux/android?tab=download#add-flutter-to-your-path'
};

function handleRedirect() {
const rawOldFragment = window.location.hash;

// If no fragment was specified, don't do anything.
if (!rawOldFragment) {
return;
}

const oldFragmentWithHash = rawOldFragment.trim().toLowerCase();

// If the fragment is empty, don't do anything.
if (oldFragmentWithHash.length === 0) {
return;
}

const oldFragment = oldFragmentWithHash.substring(1);

// If the fragment did not exist, don't do anything.
if (!(oldFragment in oldToNew)) {
return;
}

const newDestination = oldToNew[oldFragment];

// If the desired destination exists, go there.
// Otherwise, don't go anywhere.
fetch(newDestination)
.then((response) => {
if (response.status === 200) {
window.location.replace(newDestination);
}
}).catch((_) => {
});
}

const currentLocation = window.location.pathname;

if (currentLocation.includes('/get-started/install/linux') &&
currentLocation.split('/')
.filter(value => value.trim().length !== 0).length === 3) {
handleRedirect();
}
2 changes: 2 additions & 0 deletions src/assets/js/temp/macos-install-redirector.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ const oldToNew = {
'set-up-your-android-device': '/get-started/install/macos/mobile-android#configure-your-target-android-device',
'set-up-the-android-emulator': '/get-started/install/macos/mobile-android#configure-your-target-android-device',
'agree-to-android-licenses': '/get-started/install/macos/mobile-android#agree-to-android-licenses',

'update-your-path': '/get-started/install/macos/mobile-ios?tab=download#add-flutter-to-your-path',
};

function handleRedirect() {
Expand Down
2 changes: 2 additions & 0 deletions src/assets/js/temp/windows-install-redirector.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const oldToNew = {
'set-up-the-android-emulator': '/get-started/install/windows/mobile#configure-your-target-android-device',
'agree-to-android-licenses': '/get-started/install/windows/mobile#agree-to-android-licenses',
'android-setup': '/get-started/install/windows/mobile#configure-android-development',

'update-your-path': '/get-started/install/windows/mobile?tab=download#update-your-windows-path-variable',
};

function handleRedirect() {
Expand Down
1 change: 1 addition & 0 deletions src/get-started/install/chromeos/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: Choose your first type of app
description: Configure your system to develop Flutter on ChromeOS.
short-title: ChromeOS
target-list: [Android, Web]
js: [{url: '/assets/js/temp/chromeos-install-redirector.js'}]
---

{% assign os = 'chromeos' -%}
Expand Down
1 change: 1 addition & 0 deletions src/get-started/install/linux/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: Choose your first type of app
description: Configure your system to develop Flutter on Linux.
short-title: Linux
target-list: [Desktop, Android, Web]
js: [{url: '/assets/js/temp/linux-install-redirector.js'}]
---

{% assign os = 'linux' -%}
Expand Down

0 comments on commit 66b9ab2

Please sign in to comment.