Skip to content

Commit 5850059

Browse files
saundefinedderickr
authored andcommitted
Should work with disabled js
1 parent 8892505 commit 5850059

File tree

3 files changed

+96
-112
lines changed

3 files changed

+96
-112
lines changed

downloads-get-instructions.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
<?php
2-
if ($_GET['os'] === 'windows' && $_GET['osvariant'] === 'windows-wsl') {
3-
$_GET['os'] = 'linux';
4-
$_GET['osvariant'] = 'linux-deb-bookworm';
5-
$_GET['multiversion'] = 'true';
2+
if ($options['os'] === 'windows' && $options['osvariant'] === 'windows-wsl') {
3+
$options['os'] = 'linux';
4+
$options['osvariant'] = 'linux-deb-bookworm';
5+
$options['multiversion'] = 'true';
66
}
7-
if ($_GET['os'] === 'osx') {
8-
$version = match($_GET['version']) {
7+
if ($options['os'] === 'osx') {
8+
$version = match($options['version']) {
99
'php84' => '@8.4',
1010
'php83' => '@8.3',
1111
'php82' => '@8.2',
1212
'php81' => '@8.1',
1313
default => ''
1414
};
1515

16-
$versionDir = match($_GET['version']) {
16+
$versionDir = match($options['version']) {
1717
'php84' => '8.4',
1818
'php83' => '8.3',
1919
'php82' => '8.2',
@@ -56,8 +56,8 @@
5656
}
5757
?>
5858
<?php
59-
if ($_GET['os'] === 'linux' && str_starts_with($_GET['osvariant'], 'linux-deb')) {
60-
if ($_GET['version'] === 'default' && $_GET['multiversion'] != 'true') {
59+
if ($options['os'] === 'linux' && str_starts_with($options['osvariant'], 'linux-deb')) {
60+
if ($options['version'] === 'default' && $options['multiversion'] != 'true') {
6161
echo <<<ENDAPT
6262
<p>
6363
On the command line shell, enter:
@@ -68,7 +68,7 @@
6868
</pre></div>
6969
ENDAPT;
7070
} else {
71-
$version = match($_GET['version']) {
71+
$version = match($options['version']) {
7272
'php84' => '8.4',
7373
'php83' => '8.3',
7474
'php82' => '8.2',
@@ -94,4 +94,4 @@
9494
There are no instructions yet.
9595
</p>
9696

97-
<?php var_dump($_GET); ?>
97+
<?php var_dump($options); ?>

downloads.php

Lines changed: 85 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -35,82 +35,116 @@
3535
],
3636
],
3737
"current" => "downloads",
38-
"js_files" => [
39-
"/js/version-choice.js",
40-
],
4138
],
4239
);
4340

44-
function option(string $id, string $value, string $desc)
41+
function option(string $value, string $desc, $attributes = []): string
4542
{
46-
$selected = '';
47-
if (array_key_exists($id, $_GET) && $_GET[$id] === $value) {
48-
$selected = ' selected';
49-
}
43+
return '<option value="' . $value . '"' . implode(' ', array_keys(array_filter($attributes))) . '>' . $desc . '</option>';
44+
}
5045

51-
echo <<<ENDOPT
52-
<option value="{$value}"{$selected}>{$desc}</option>
46+
$usage = [
47+
'web' => 'Web Development',
48+
'cli' => 'Command Line Libraries',
49+
'fw-drupal' => 'Drupal',
50+
'fw-laravel' => 'Laravel',
51+
'fw-symfony' => 'Symfony',
52+
];
53+
54+
$os = [
55+
'linux' => [
56+
'name' => 'Linux',
57+
'variants' => [
58+
'linux-deb-buster' => 'Debian Buster',
59+
'linux-deb-bullseye' => 'Debian Bullseye',
60+
'linux-deb-bookworm' => 'Debian Bookworm',
61+
'linux-rpm-fedora41' => 'Fedora 41',
62+
'linux-rpm-fedora42' => 'Fedora 42',
63+
'linux-rpm-redhat' => 'RedHat',
64+
],
65+
],
66+
'osx' => [
67+
'name' => 'macOS',
68+
'variants' => [
69+
'osx-latest' => 'macOS Latest',
70+
],
71+
],
72+
'windows' => [
73+
'name' => 'Windows',
74+
'variants' => [
75+
'windows-wsl' => 'Windows with WSL',
76+
'windows-normal' => 'Windows without WSL',
77+
],
78+
],
79+
];
80+
81+
$defaults = [
82+
'os' => 'linux',
83+
'version' => 'php84',
84+
'usage' => 'web',
85+
];
5386

54-
ENDOPT;
87+
$options = array_merge($defaults, $_GET);
88+
if (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants'])) {
89+
$options['osvariant'] = array_key_first($os[$options['os']]['variants']);
5590
}
5691
?>
5792
<h1>Downloads &amp; Installation Instructions</h1>
5893

59-
<form class="instructions-form">
94+
<form class="instructions-form" id="instructions-form">
6095
<div class="instructions-row">
6196
I want to use PHP for
6297
<select id="usage" name="usage">
63-
<?= option('usage', 'web', 'Web Development'); ?>
64-
<?= option('usage', 'cli', 'Command Line Libraries'); ?>
65-
<?= option('usage', 'fw-drupal', 'Drupal'); ?>
66-
<?= option('usage', 'fw-laravel', 'Laravel'); ?>
67-
<?= option('usage', 'fw-symfony', 'Symfony'); ?>
98+
<?php foreach ($usage as $value => $description) { ?>
99+
<?= option($value, $description); ?>
100+
<?php } ?>
68101
</select>.
69102
</div>
70103

71104
<div class="instructions-row">
72105
I work with
73106
<select id="os" name="os">
74-
<?= option('os', 'linux', 'Linux'); ?>
75-
<?= option('os', 'osx', 'OSX'); ?>
76-
<?= option('os', 'windows', 'Windows'); ?>
107+
<?php foreach ($os as $value => $item) { ?>
108+
<?= option($value, $item['name'], [
109+
'selected' => array_key_exists('os', $options) && $options['os'] === $value,
110+
]); ?>
111+
<?php } ?>
77112
</select>
78-
<select id="osvariant" name="osvariant">
79-
<?= option('osvariant', 'linux-deb-buster', 'Debian Buster'); ?>
80-
<?= option('osvariant', 'linux-deb-bullseye', 'Debian Bullseye'); ?>
81-
<?= option('osvariant', 'linux-deb-bookworm', 'Debian Bookworm'); ?>
82-
<?= option('osvariant', 'linux-rpm-fedora41', 'Fedora 41'); ?>
83-
<?= option('osvariant', 'linux-rpm-fedora42', 'Fedora 42'); ?>
84-
<?= option('osvariant', 'linux-rpm-redhat', 'RedHat'); ?>
85-
<?= option('osvariant', 'osx-latest', 'Latest'); ?>
86-
<?= option('osvariant', 'windows-wsl', 'with WSL'); ?>
87-
<?= option('osvariant', 'windows-normal', 'without WSL'); ?>
88-
</select>,
113+
114+
<?php if (array_key_exists('os', $options) && array_key_exists('osvariant', $options)) { ?>
115+
<select id="osvariant" name="osvariant">
116+
<?php foreach ($os[$options['os']]['variants'] as $value => $description) { ?>
117+
<?= option($value, $description, [
118+
'selected' => $options['osvariant'] === $value,
119+
]); ?>
120+
<?php } ?>
121+
</select>
122+
<?php } ?>,
89123
and use
90124
<select id="version" name="version">
91-
<?= option('version', 'php84', 'version 8.4'); ?>
92-
<?= option('version', 'php83', 'version 8.3'); ?>
93-
<?= option('version', 'php82', 'version 8.2'); ?>
94-
<?= option('version', 'php81', 'version 8.1'); ?>
95-
<?= option('version', 'default', 'OS default version'); ?>
125+
<?= option('php84', 'version 8.4'); ?>
126+
<?= option('php83', 'version 8.3'); ?>
127+
<?= option('php82', 'version 8.2'); ?>
128+
<?= option('php81', 'version 8.1'); ?>
129+
<?= option('default', 'OS default version'); ?>
96130
</select>
97131
</div>
98132

99133
<label for="multiversion" class="instructions-label">
100134
I want to be able to use multiple PHP versions:
101135
<input type="checkbox" id="multiversion" name="multiversion" value="Y"
102-
<?= array_key_exists('multiversion', $_GET) && $_GET['multiversion'] === 'Y' ? 'checked' : '' ?>/>
136+
<?= array_key_exists('multiversion', $options) && $options['multiversion'] === 'Y' ? 'checked' : '' ?>/>
103137
</label>
104138

105139
<label for="source" class="instructions-label">
106140
I want to compile everything from source:
107141
<input type="checkbox" id="source" name="source" value="Y"
108-
<?= array_key_exists('source', $_GET) && $_GET['source'] === 'Y' ? 'checked' : '' ?>/>
142+
<?= array_key_exists('source', $options) && $options['source'] === 'Y' ? 'checked' : '' ?>/>
109143
</label>
110144

111-
<div>
112-
<button type="submit" class="button">Get Instructions</button>
113-
</div>
145+
<noscript>
146+
<button type="submit" class="button">Update Instructions</button>
147+
</noscript>
114148
</form>
115149

116150
<h2>Instructions</h2>
@@ -156,5 +190,15 @@ function option(string $id, string $value, string $desc)
156190
</a>
157191
</p>
158192

193+
<script>
194+
window.onload = function () {
195+
let form = document.getElementById("instructions-form")
196+
197+
form.addEventListener('change', function () {
198+
form.submit();
199+
});
200+
}
201+
</script>
202+
159203
<?php
160204
site_footer(['sidebar' => $SIDEBAR_DATA]);

js/version-choice.js

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)