diff --git a/caxton b/caxton index 8cfca9d..635abc8 100755 --- a/caxton +++ b/caxton @@ -62,6 +62,7 @@ $middlewares = [ Middleware\ScanFiles::class, Middleware\CopyStaticFiles::class, Middleware\BuildContentFiles::class, + Middleware\GenerateSiteMap::class, ]; $action = fn (Site $site): Site => $site; diff --git a/src/File.php b/src/File.php new file mode 100644 index 0000000..8606517 --- /dev/null +++ b/src/File.php @@ -0,0 +1,63 @@ +extensions = str_replace('.', '\.', Config::instance()->get('blade.extensions')); + } + + public function sourcePath(): string + { + return $this->sourcePath; + } + + public function outputPath(): string + { + foreach (Site::instance()->maps() as $map) { + if (str_starts_with($this->outputPath, $map['path'])) { + return str_replace($map['path'], $map['url'], $this->outputPath); + } + } + + return $this->outputPath; + } + + public function url(): string + { + foreach (Site::instance()->maps() as $map) { + if (str_starts_with($this->outputPath, $map['path'])) { + return str_replace($map['path'], $map['url'], $this->outputPath); + } + } + + return $this->outputPath; + } + + public function fullUrl(): string + { + return Config::instance()->get('base_url') . '/' . $this->url(); + } + + public function data(): array + { + return $this->data; + } + + public function type(): string + { + return mime_content_type(Config::instance()->get('paths.output') . '/' . $this->outputPath()); + } + + public function lastModified(): ?Carbon + { + return Carbon::createFromTimestamp(filemtime(Config::instance()->get('paths.output') . '/' . $this->outputPath())); + } +} \ No newline at end of file diff --git a/src/Middleware/BuildContentFiles.php b/src/Middleware/BuildContentFiles.php index 28426f9..3e19c0b 100644 --- a/src/Middleware/BuildContentFiles.php +++ b/src/Middleware/BuildContentFiles.php @@ -6,7 +6,7 @@ use SavvyWombat\Caxton\Config; use SavvyWombat\Caxton\Markdown\MarkdownConverter; use SavvyWombat\Caxton\Site; -use SavvyWombat\Caxton\SourceFile; +use SavvyWombat\Caxton\File; class BuildContentFiles implements Middleware { @@ -29,7 +29,7 @@ public function run(Site $site, callable $next): Site return $next($site); } - protected function buildFromTemplate(SourceFile $sourceFile, string $outputPath) + protected function buildFromTemplate(File $sourceFile, string $outputPath) { $extensions = str_replace('.', '\.', Config::instance()->get('blade.extensions')); diff --git a/src/Middleware/GenerateSiteMap.php b/src/Middleware/GenerateSiteMap.php index e4d0d5e..1e21690 100644 --- a/src/Middleware/GenerateSiteMap.php +++ b/src/Middleware/GenerateSiteMap.php @@ -5,7 +5,7 @@ use SavvyWombat\Caxton\Blade\ViewFactory; use SavvyWombat\Caxton\Config; use SavvyWombat\Caxton\File; -use SavvyWombat\Caxton\FileList; +use SavvyWombat\Caxton\Site; /** * Builds a sitemap file to assist search engine discovery. @@ -14,19 +14,19 @@ */ class GenerateSiteMap implements Middleware { - public function run (FileList $files, $next): FileList + public function run (Site $site, $next): Site { $sitemap = ViewFactory::instance()->make( 'sitemap', [ - 'files' => $files, + 'files' => $site->sourceFiles(), ] )->render(); file_put_contents(Config::instance()->get('paths.output') . '/sitemap.xml', $sitemap); - $files->add(new File('/sitemap.xml')); + $site->addFile(new File('/sitemap.xml', '/sitemap.xml')); - return $next($files); + return $next($site); } } diff --git a/src/Middleware/ScanFiles.php b/src/Middleware/ScanFiles.php index 989b6a6..85e29ee 100644 --- a/src/Middleware/ScanFiles.php +++ b/src/Middleware/ScanFiles.php @@ -6,7 +6,7 @@ use SavvyWombat\Caxton\ContentFileFilter; use SavvyWombat\Caxton\Markdown\MarkdownConverter; use SavvyWombat\Caxton\Site; -use SavvyWombat\Caxton\SourceFile; +use SavvyWombat\Caxton\File; class ScanFiles implements Middleware { @@ -48,7 +48,7 @@ protected function scanPublicFiles(): void ); $this->site->addFile( - new SourceFile($sourcePath, $outputPath) + new File($sourcePath, $outputPath) ); } } @@ -91,7 +91,7 @@ protected function scanContentFiles(): void } $this->site->addFile( - new SourceFile($sourcePath, $outputPath, $data) + new File($sourcePath, $outputPath, $data) ); } } diff --git a/src/Site.php b/src/Site.php index 9eccd01..ccc4279 100644 --- a/src/Site.php +++ b/src/Site.php @@ -18,7 +18,7 @@ public static function instance(): Site return self::$instance; } - public function addFile(SourceFile $file): void + public function addFile(File $file): void { $this->sourceFiles[] = $file; } diff --git a/src/SourceFile.php b/src/SourceFile.php deleted file mode 100644 index 99031f7..0000000 --- a/src/SourceFile.php +++ /dev/null @@ -1,34 +0,0 @@ -sourcePath; - } - - public function outputPath(): string - { - foreach (Site::instance()->maps() as $map) { - if (str_starts_with($this->outputPath, $map['path'])) { - return str_replace($map['path'], $map['url'], $this->outputPath); - } - } - - return $this->outputPath; - } - - public function data(): array - { - return $this->data; - } -} \ No newline at end of file