Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/treetrek.git

Renders SVG inline

Author Dave Jarvis <email>
Date 2026-02-09 12:32:08 GMT-0800
Commit bc1214d2448d7b23eaf53452aba1c0896853d7e7
Parent 43046d2
FilePage.php
private function renderBlob($targetHash) {
$repoParam = '&repo=' . urlencode($this->currentRepo['safe_name']);
-
$size = $this->git->getObjectSize($targetHash);
$buffer = '';
$this->git->stream($targetHash, function($d) use (&$buffer) {
if (strlen($buffer) < 12) $buffer .= $d;
});
$filename = $_GET['name'] ?? '';
$category = MediaTypeSniffer::isCategory($buffer, $filename);
- $mimeType = MediaTypeSniffer::isMediaType($buffer, $filename);
+ $mediaType = MediaTypeSniffer::isMediaType($buffer, $filename);
$this->renderBreadcrumbs($targetHash, 'File');
- // UPDATED: Handle empty files
if ($size === 0) {
$this->renderDownloadState($targetHash, "This file is empty.");
return;
}
$rawUrl = '?action=raw&hash=' . $targetHash . $repoParam . '&name=' . urlencode($filename);
- if ($category === MediaTypeSniffer::CAT_VIDEO) {
+ if ($category === MediaTypeSniffer::CAT_IMAGE) {
+ echo '<div class="blob-content" style="text-align:center; padding: 20px; background: #f6f8fa;">';
+ echo '<img src="' . $rawUrl . '" style="max-width: 100%; border: 1px solid #dfe2e5;">';
+ echo '</div>';
+ } elseif ($category === MediaTypeSniffer::CAT_VIDEO) {
echo '<div class="blob-content" style="text-align:center; padding: 20px; background: #000;">';
echo '<video controls style="max-width: 100%; max-height: 80vh;">';
- echo '<source src="' . $rawUrl . '" type="' . $mimeType . '">';
- echo 'Your browser does not support the video element.';
+ echo '<source src="' . $rawUrl . '" type="' . $mediaType . '">';
echo '</video>';
echo '</div>';
-
} elseif ($category === MediaTypeSniffer::CAT_AUDIO) {
echo '<div class="blob-content" style="text-align:center; padding: 40px; background: #f6f8fa;">';
echo '<audio controls style="width: 100%; max-width: 600px;">';
- echo '<source src="' . $rawUrl . '" type="' . $mimeType . '">';
- echo 'Your browser does not support the audio element.';
+ echo '<source src="' . $rawUrl . '" type="' . $mediaType . '">';
echo '</audio>';
- echo '</div>';
-
- } elseif ($category === MediaTypeSniffer::CAT_IMAGE) {
- echo '<div class="blob-content" style="text-align:center; padding: 20px; background: #f6f8fa;">';
- echo '<img src="' . $rawUrl . '" style="max-width: 100%; border: 1px solid #dfe2e5;">';
echo '</div>';
-
} elseif ($category === MediaTypeSniffer::CAT_TEXT) {
if ($size > 524288) {
$this->renderDownloadState($targetHash, "File is too large to display (" . $this->formatSize($size) . ").");
} else {
$content = '';
$this->git->stream($targetHash, function($d) use (&$content) { $content .= $d; });
echo '<div class="blob-content"><pre class="blob-code">' . htmlspecialchars($content) . '</pre></div>';
}
-
} else {
$this->renderDownloadState($targetHash, "This is a binary file.");
RawPage.php
<?php
-
class RawPage implements Page {
private $git;
public function render() {
- while (ob_get_level()) ob_end_clean();
+ $filename = $_GET['name'] ?? 'file';
+ $buffer = '';
+ // Get the exact size from git for the header
$size = $this->git->getObjectSize($this->hash);
- $filename = $_GET['name'] ?? 'file';
- $buffer = '';
$this->git->stream($this->hash, function($d) use (&$buffer) {
if (strlen($buffer) < 12) $buffer .= $d;
});
- $mime = MediaTypeSniffer::isMediaType($buffer, $filename);
- if (!$mime) $mime = 'application/octet-stream';
+ $mediaType = MediaTypeSniffer::isMediaType($buffer, $filename);
- header('Content-Type: ' . $mime);
- header('Content-Length: ' . $size);
- header('Content-Disposition: inline; filename="' . basename($filename) . '"');
+ header("Content-Type: " . $mediaType);
+ header("Content-Length: " . $size);
+ header("Content-Disposition: inline; filename=\"" . addslashes($filename) . "\"");
- $this->git->stream($this->hash, function($data) {
- echo $data;
+ $this->git->stream($this->hash, function($d) {
+ echo $d;
});
-
exit;
}
Delta 17 lines added, 28 lines removed, 11-line decrease