diff --git a/.gitignore b/.gitignore
index 5a210bb73..b9f279805 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,8 +6,13 @@ npm-debug.log
/vendor/
/caches/
+/play.pokemonshowdown.com/dirindex/webfonts/
+/play.pokemonshowdown.com/dirindex/fontawesome5*
+
/play.pokemonshowdown.com/sprites/
/play.pokemonshowdown.com/audio/
+
+# built from other sources
/play.pokemonshowdown.com/index.php
/play.pokemonshowdown.com/index.html
/play.pokemonshowdown.com/index-test.html
diff --git a/play.pokemonshowdown.com/dirindex/dirindex.php b/play.pokemonshowdown.com/dirindex/dirindex.php
index 7ca1dfbbe..b92bdfd7e 100644
--- a/play.pokemonshowdown.com/dirindex/dirindex.php
+++ b/play.pokemonshowdown.com/dirindex/dirindex.php
@@ -1,5 +1,7 @@
'*.png',
'/sprites/afd-shiny/' => '*.png',
@@ -36,38 +38,104 @@ $at_root = ($rel_dir === '/');
$up = null;
function get_icon(string $file, bool $is_dir) {
+ global $fa5pro;
+ if ($fa5pro) return get_icon_fa5pro($file, $is_dir);
+
if ($is_dir) {
- return 'folder-open';
+ return 'fa fa-folder-open';
} else {
$info = pathinfo($file);
$ext = strtolower($info['extension'] ?? '.');
- if ($ext === 'jpg' || $ext === 'jpeg' || $ext === 'png' || $ext === 'gif' || $ext === 'bmp' || $ext === 'webp' || $ext === 'svg') {
- return 'picture-o';
+ if ($ext === 'jpg' || $ext === 'jpeg' || $ext === 'png' || $ext === 'bmp' || $ext === 'webp' || $ext === 'svg') {
+ return 'fa fa-picture-o';
+ } else if ($ext === 'gif') {
+ return 'fa fa-film';
} else if ($ext === 'mp4' || $ext === 'webm' || $ext === 'mkv' || $ext === 'avi' || $ext === 'mov') {
- return 'video-camera';
+ return 'fa fa-video-camera';
} else if ($ext === 'mp3' || $ext === 'ogg' || $ext === 'wav' || $ext === 'flac' || $ext === 'aac') {
- return 'volume-up';
+ return 'fa fa-volume-up';
} else if ($ext === 'zip' || $ext === 'tar' || $ext === 'gz') {
- return 'file-archive-o';
+ return 'fa fa-file-archive-o';
} else if ($ext === 'txt' || $ext === 'md') {
- return 'file-text-o';
+ return 'fa fa-file-text-o icon-' . $ext;
} else if ($ext === 'html' || $ext === 'php') {
- return 'file-code-o';
- } else if ($ext === 'c' || $ext === 'cpp' || $ext === 'h' || $ext === 'hpp' || $ext === 'py' || $ext === 'js' || $ext === 'ts' || $ext === 'jsx' || $ext === 'tsx' || $ext === 'json' || $ext === 'xml' || $ext === 'css' || $ext === 'java' || $ext === 'rb' || $ext === 'go' || $ext === 'swift' || $ext === 'rs' || $ext === 'map') {
- return 'code';
+ return 'fa fa-file-code-o icon-' . $ext;
+ } else if ($ext === 'js' || $ext === 'ts' || $ext === 'jsx' || $ext === 'tsx' || $ext === 'json') {
+ return 'fa fa-code icon-' . substr($ext, 0, 2);
+ } else if ($ext === 'mts' || $ext === 'cts' || $ext === 'mjs' || $ext === 'cjs') {
+ return 'fa fa-code icon-' . substr($ext, 1, 2);
+ } else if ($ext === 'c' || $ext === 'cpp' || $ext === 'h' || $ext === 'hpp' || $ext === 'py' || $ext === 'xml' || $ext === 'java' || $ext === 'rb' || $ext === 'go' || $ext === 'swift' || $ext === 'rs' || $ext === 'map' || $ext === 'csv') {
+ return 'fa fa-code';
+ } else if ($ext === 'css') {
+ return 'fa fa-code icon-' . $ext;
} else if ($ext === 'woff' || $ext === 'woff2' || $ext === 'ttf' || $ext === 'otf' || $ext === 'eot') {
- return 'font';
+ return 'fa fa-font';
} else if ($ext === 'pdf') {
- return 'file-pdf-o';
+ return 'fa fa-file-pdf-o';
} else if ($ext === 'doc' || $ext === 'docx' || $ext === 'odt') {
- return 'file-word-o';
+ return 'fa fa-file-word-o';
} else if ($ext === 'xls' || $ext === 'xlsx' || $ext === 'ods') {
- return 'file-excel-o';
+ return 'fa fa-file-excel-o';
} else if ($ext === 'ppt' || $ext === 'pptx' || $ext === 'odp') {
- return 'file-powerpoint-o';
+ return 'fa fa-file-powerpoint-o';
+ } else if ($ext === 'epub' || $ext === 'mobi') {
+ return 'fa fa-book';
+ } else if ($ext === 'exe' || $ext === 'dmg') {
+ return 'fa fa-window-maximize';
}
}
- return 'file-o';
+ return 'fa fa-file-o';
+}
+
+function get_icon_fa5pro(string $file, bool $is_dir) {
+ if ($is_dir) {
+ return 'fad fa-folder-open';
+ } else {
+ $info = pathinfo($file);
+ $ext = strtolower($info['extension'] ?? '.');
+ if ($ext === 'jpg' || $ext === 'jpeg' || $ext === 'png' || $ext === 'bmp' || $ext === 'webp' || $ext === 'svg') {
+ return 'fad fa-image';
+ } else if ($ext === 'gif') {
+ return 'fad fa-film';
+ } else if ($ext === 'mp4' || $ext === 'webm' || $ext === 'mkv' || $ext === 'avi' || $ext === 'mov') {
+ return 'fas fa-video';
+ } else if ($ext === 'mp3' || $ext === 'ogg' || $ext === 'wav' || $ext === 'flac' || $ext === 'aac') {
+ return 'fas fa-volume';
+ } else if ($ext === 'zip' || $ext === 'tar' || $ext === 'gz') {
+ return 'fad fa-file-archive';
+ } else if ($ext === 'txt' || $ext === 'md') {
+ return 'fad fa-file-alt icon-' . $ext;
+ } else if ($ext === 'html' || $ext === 'php') {
+ return 'fad fa-file-code icon-' . $ext;
+ } else if ($ext === 'js' || $ext === 'ts' || $ext === 'jsx' || $ext === 'tsx' || $ext === 'json') {
+ return 'fad fa-code icon-' . substr($ext, 0, 2);
+ } else if ($ext === 'mts' || $ext === 'cts' || $ext === 'mjs' || $ext === 'cjs') {
+ return 'fad fa-code icon-' . substr($ext, 1, 2);
+ } else if ($ext === 'css') {
+ return 'fad fa-code icon-' . $ext;
+ } else if ($ext === 'c' || $ext === 'cpp' || $ext === 'h' || $ext === 'hpp' || $ext === 'py' || $ext === 'xml' || $ext === 'css' || $ext === 'java' || $ext === 'rb' || $ext === 'go' || $ext === 'swift' || $ext === 'rs' || $ext === 'map') {
+ return 'fa fa-code';
+ } else if ($ext === 'woff' || $ext === 'woff2' || $ext === 'ttf' || $ext === 'otf' || $ext === 'eot') {
+ return 'fad fa-font-case';
+ } else if ($ext === 'pdf') {
+ return 'fad fa-file-pdf';
+ } else if ($ext === 'csv') {
+ return 'fad fa-file-csv';
+ } else if ($ext === 'doc' || $ext === 'docx' || $ext === 'odt') {
+ return 'fad fa-file-word';
+ } else if ($ext === 'xls' || $ext === 'xlsx' || $ext === 'ods') {
+ return 'fad fa-file-excel';
+ } else if ($ext === 'ppt' || $ext === 'pptx' || $ext === 'odp') {
+ return 'fad fa-file-powerpoint';
+ } else if ($ext === 'epub' || $ext === 'mobi') {
+ return 'fad fa-book';
+ } else if ($ext === 'exe') {
+ return 'fad fa-window-alt';
+ } else if ($ext === 'dmg') {
+ return 'fad fa-window';
+ }
+ }
+ return 'fad fa-file';
}
foreach ($files as $file) {
@@ -78,7 +146,7 @@ foreach ($files as $file) {
$is_dir = is_dir($path);
$ext = '';
- $type = get_icon($file, $is_dir);
+ $icon = get_icon($file, $is_dir);
if (!$is_dir) {
$info = pathinfo($file);
$ext = strtolower($info['extension'] ?? '.');
@@ -101,7 +169,7 @@ foreach ($files as $file) {
$next = [
'name' => htmlentities($file),
'mtime' => date('Y-m-d H:i:s', filemtime($path)),
- 'type' => $type,
+ 'icon' => $icon,
'size' => $size,
'ext' => $ext,
'size_text' => $size_text,
@@ -155,6 +223,9 @@ if ($sort_by === 'name' || $sort_by === 'N') {
+
+
+