Fix image in meta and other details

This commit is contained in:
prototypa
2022-08-25 00:46:15 -04:00
parent b9b8feac44
commit 0a7b84b816
13 changed files with 67 additions and 49 deletions

View File

@ -1,4 +1,6 @@
import * as url from "url"; import path from "path";
import { fileURLToPath } from "url";
import { defineConfig } from "astro/config"; import { defineConfig } from "astro/config";
import tailwind from "@astrojs/tailwind"; import tailwind from "@astrojs/tailwind";
@ -7,7 +9,7 @@ import image from "@astrojs/image";
import { SITE } from "./src/config.mjs"; import { SITE } from "./src/config.mjs";
const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); const __dirname = path.dirname(fileURLToPath(import.meta.url));
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
@ -30,7 +32,7 @@ export default defineConfig({
vite: { vite: {
resolve: { resolve: {
alias: { alias: {
"~/": `${__dirname}src/`, "~": path.resolve(__dirname, "./src"),
}, },
}, },
}, },

View File

@ -18,7 +18,7 @@ const {
const image = const image =
typeof _image === "string" typeof _image === "string"
? new URL(_image, Astro.site) ? new URL(_image, Astro.site)
: typeof _image["src"] !== "undefined" : _image && typeof _image["src"] !== "undefined"
? new URL(getRelativeUrlByFilePath(_image.src), Astro.site) ? new URL(getRelativeUrlByFilePath(_image.src), Astro.site)
: null; : null;
--- ---

View File

@ -16,7 +16,7 @@ const {
let picture = null; let picture = null;
try { try {
picture = await getPicture({ picture = src && await getPicture({
src, src,
widths, widths,
formats, formats,
@ -24,7 +24,6 @@ try {
}) })
} }
catch (e) { catch (e) {
console.log(e);
} }
const { image = {}, sources = [] } = picture || {} const { image = {}, sources = [] } = picture || {}

View File

@ -24,14 +24,18 @@ const { post } = Astro.props;
{post.title} {post.title}
</h1> </h1>
<Picture {
src={post.image} post.image && (
class="max-w-full lg:max-w-6xl mx-auto mt-4 mb-6 sm:rounded-md bg-gray-400 dark:bg-slate-700" <Picture
widths={[400, 768, 900]} src={post.image}
sizes="(max-width: 767px) 400px, (max-width: 900px) 768px, 900px" class="max-w-full lg:max-w-6xl mx-auto mt-4 mb-6 sm:rounded-md bg-gray-400 dark:bg-slate-700"
alt={post.description} widths={[400, 900]}
aspectRatio="16:9" sizes="(max-width: 900px) 400px, 900px"
/> alt={post.description}
aspectRatio="16:9"
/>
)
}
</header> </header>
<div <div
class="container mx-auto px-4 sm:px-6 max-w-3xl prose prose-lg lg:prose-xl dark:prose-invert dark:prose-headings:text-slate-300 prose-md prose-headings:leading-tighter prose-headings:tracking-tighter prose-headings:font-bold prose-a:text-blue-600 dark:prose-a:text-blue-400 prose-img:rounded-md prose-img:shadow-lg mt-8" class="container mx-auto px-4 sm:px-6 max-w-3xl prose prose-lg lg:prose-xl dark:prose-invert dark:prose-headings:text-slate-300 prose-md prose-headings:leading-tighter prose-headings:tracking-tighter prose-headings:font-bold prose-a:text-blue-600 dark:prose-a:text-blue-400 prose-img:rounded-md prose-img:shadow-lg mt-8"

View File

@ -25,8 +25,7 @@ const {} = Astro.props;
<Picture <Picture
src={import("~/assets/images/steps.jpg")} src={import("~/assets/images/steps.jpg")}
class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700" class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700"
widths={[400, 768]} widths={[400]}
sizes="(max-width: 767px) 400px, 768px"
alt="Post 2 Image" alt="Post 2 Image"
aspectRatio="16:9" aspectRatio="16:9"
/> />
@ -49,8 +48,7 @@ const {} = Astro.props;
<Picture <Picture
src={import("~/assets/images/colors.jpg")} src={import("~/assets/images/colors.jpg")}
class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700" class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700"
widths={[400, 768]} widths={[400]}
sizes="(max-width: 767px) 400px, 768px"
alt="Post 1 Image" alt="Post 1 Image"
aspectRatio="16:9" aspectRatio="16:9"
/> />
@ -72,8 +70,7 @@ const {} = Astro.props;
<Picture <Picture
src={import("~/assets/images/tools.jpg")} src={import("~/assets/images/tools.jpg")}
class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700" class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700"
widths={[400, 768]} widths={[400]}
sizes="(max-width: 767px) 400px, 768px"
alt="Post 3 Image" alt="Post 3 Image"
aspectRatio="16:9" aspectRatio="16:9"
/> />
@ -95,8 +92,7 @@ const {} = Astro.props;
<Picture <Picture
src={import("~/assets/images/hero.jpg")} src={import("~/assets/images/hero.jpg")}
class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700" class="object-cover w-full h-64 mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700"
widths={[400, 768]} widths={[400]}
sizes="(max-width: 767px) 400px, 768px"
alt="Post 2 Image" alt="Post 2 Image"
aspectRatio="16:9" aspectRatio="16:9"
/> />

View File

@ -2,12 +2,12 @@
import Layout from "~/layouts/PageLayout.astro"; import Layout from "~/layouts/PageLayout.astro";
import { SITE } from "~/config.mjs"; import { SITE } from "~/config.mjs";
import { getPosts } from "~/utils/getPosts"; import { fetchPosts } from "~/utils/fetchPosts";
import BlogList from "~/components/widgets/BlogList.astro"; import BlogList from "~/components/widgets/BlogList.astro";
export async function getStaticPaths({ paginate }) { export async function getStaticPaths({ paginate }) {
const posts = await getPosts(); const posts = await fetchPosts();
return paginate(posts, { return paginate(posts, {
pageSize: SITE.postsPerPage, pageSize: SITE.postsPerPage,

View File

@ -1,13 +1,13 @@
--- ---
import { SITE } from "~/config.mjs"; import { SITE } from "~/config.mjs";
import { getPosts } from "~/utils/getPosts"; import { fetchPosts } from "~/utils/fetchPosts";
import { findImage } from "~/utils/findImage"; import { findImage } from "~/utils/findImage";
import Layout from "~/layouts/PageLayout.astro"; import Layout from "~/layouts/PageLayout.astro";
import BlogPost from "~/components/widgets/BlogPost.astro"; import BlogPost from "~/components/widgets/BlogPost.astro";
export async function getStaticPaths() { export async function getStaticPaths() {
const posts = await getPosts(); const posts = await fetchPosts();
return posts.map((post) => ({ return posts.map((post) => ({
params: { slug: post.slug }, params: { slug: post.slug },

View File

@ -1,9 +1,9 @@
import rss from "@astrojs/rss"; import rss from "@astrojs/rss";
import { SITE } from "~/config.mjs"; import { SITE } from "~/config.mjs";
import { getPosts } from "~/utils/getPosts"; import { fetchPosts } from "~/utils/fetchPosts";
const posts = await getPosts(); const posts = await fetchPosts();
export const get = () => export const get = () =>
rss({ rss({

View File

@ -18,7 +18,7 @@ const load = async function () {
let _posts; let _posts;
export const getPosts = async () => { export const fetchPosts = async () => {
_posts = _posts || load(); _posts = _posts || load();
return await _posts; return await _posts;

View File

@ -1,19 +1,22 @@
import { getAllImages } from "~/utils/getAllImages"; import { getAllImages } from "~/utils/getAllImages";
export const findImage = async (imageRoute) => { export const findImage = async (imagePath) => {
if (typeof imagePath !== "string") {
return null;
}
if (imagePath.startsWith("http://") || imagePath.startsWith("https://")) {
return imagePath;
}
if (!imagePath.startsWith("~/assets")) {
return null;
} // For now only consume images using ~/assets alias (or absolute)
const images = await getAllImages(); const images = await getAllImages();
const key = imagePath.replace("~/", "/src/");
const key = imageRoute.replace("~/", "/src/"); return typeof images[key] === "function"
? (await images[key]())["default"]
const image = : null;
typeof imageRoute === "string" &&
(imageRoute.startsWith("/") ||
imageRoute.startsWith("http://") ||
imageRoute.startsWith("https://"))
? imageRoute
: typeof images[key] === "function"
? (await images[key]())["default"]
: null;
return image;
}; };

View File

@ -1,6 +1,8 @@
const load = async function () { const load = async function () {
const images = import.meta.glob("~/assets/images/*"); let images = [];
try {
images = import.meta.glob("~/assets/images/*");
} catch (e) {}
return images; return images;
}; };
@ -8,6 +10,5 @@ let _images;
export const getAllImages = async () => { export const getAllImages = async () => {
_images = _images || load(); _images = _images || load();
return await _images; return await _images;
}; };

View File

@ -0,0 +1,12 @@
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
export const getProjectRootDir = () => {
const mode = import.meta.env.MODE;
return mode === "production"
? path.join(__dirname, "../")
: path.join(__dirname, "../../");
};

View File

@ -1,10 +1,11 @@
import * as url from "url"; import path from "path";
import { getProjectRootDir } from "./getProjectRootDir";
const __src = url.fileURLToPath(new URL("../", import.meta.url)); const __srcFolder = path.join(getProjectRootDir(), "/src");
export const getRelativeUrlByFilePath = (filepath) => { export const getRelativeUrlByFilePath = (filepath) => {
if (filepath) { if (filepath) {
return "/" + filepath.substring(__src.length); return filepath.replace(__srcFolder, "");
} }
return null; return null;