You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2022/08/12 01:08:39 UTC

[apisix-website] branch master updated: feat: use webp blog images source (#1284)

This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 3fbd5aca0d0 feat: use webp blog images source (#1284)
3fbd5aca0d0 is described below

commit 3fbd5aca0d0eba96bc258b5e8f1c60ed1abb927d
Author: Young <is...@outlook.com>
AuthorDate: Fri Aug 12 09:08:34 2022 +0800

    feat: use webp blog images source (#1284)
---
 blog/package.json                     |  1 +
 blog/src/theme/BlogPostPage/index.tsx | 50 ++++++++++++++++++++++++++++++-----
 yarn.lock                             |  5 ++++
 3 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/blog/package.json b/blog/package.json
index 0f5a29e8089..acd045020f4 100644
--- a/blog/package.json
+++ b/blog/package.json
@@ -53,6 +53,7 @@
     "react-use": "^17.4.0",
     "reading-time": "^1.5.0",
     "sass": "^1.53.0",
+    "srcset": "^5.0.0",
     "styled-components": "^5.3.3",
     "three": "^0.131.3",
     "video.js": "^7.19.2"
diff --git a/blog/src/theme/BlogPostPage/index.tsx b/blog/src/theme/BlogPostPage/index.tsx
index 1557f38b8cf..aaeeaebc0ba 100644
--- a/blog/src/theme/BlogPostPage/index.tsx
+++ b/blog/src/theme/BlogPostPage/index.tsx
@@ -17,16 +17,54 @@ import type { ImageProps } from 'rc-image';
 import Image from 'rc-image';
 // eslint-disable-next-line import/no-extraneous-dependencies
 import { MDXProvider } from '@mdx-js/react';
-import { LazyLoadComponent } from 'react-lazy-load-image-component';
+import { parseSrcset, stringifySrcset } from 'srcset';
 import BlogPostPaginator from '../BlogPostPaginator';
 
+const urlParse = (url: string) => {
+  const urlParseArr = url.split('/');
+  const name = urlParseArr.at(-1) as string;
+  return {
+    host: urlParseArr.slice(0, 3).join('/'),
+    folderPath: urlParseArr.slice(3, -1).join('/'),
+    name,
+    ext: name.split('.').at(-1) as string,
+  };
+};
+
 const components = {
   ...MDXComponents,
-  img: (props: ImageProps) => (
-    <LazyLoadComponent>
-      <Image {...props} preview={{ mask: 'Click to Preview' }} />
-    </LazyLoadComponent>
-  ),
+  img: (props: ImageProps) => {
+    const { src, srcSet } = props;
+    const isFromCDN = src?.includes('static.apis');
+    let otherProps = {};
+
+    if (isFromCDN && src) {
+      const u = urlParse(src);
+      const webpSrc = `${u.host}/apisix-webp/${u.folderPath}/${u.name.replace(u.ext, 'webp')}`;
+      otherProps = {
+        src: webpSrc,
+        type: 'image/webp',
+        srcSet: stringifySrcset([
+          ...parseSrcset(srcSet || ''),
+          {
+            url: webpSrc,
+          }, {
+            url: src,
+          },
+        ]),
+        placeholder: <Image
+          {...props}
+          src={`${u.host}/apisix-thumbnail/${u.folderPath}/${u.name.replace(u.ext, 'webp')}`}
+          srcSet={`${u.host}/apisix-thumbnail/${u.folderPath}/${u.name}`}
+          preview={false}
+        />,
+      };
+    }
+
+    return (
+      <Image {...props} {...otherProps} preview={{ mask: 'Click to Preview' }} loading="lazy" />
+    );
+  },
 };
 
 const BlogPostPage = (props: Props): JSX.Element => {
diff --git a/yarn.lock b/yarn.lock
index 6d59973c8be..a4850b5ff96 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10971,6 +10971,11 @@ sprintf-js@~1.0.2:
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
 
+srcset@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/srcset/-/srcset-5.0.0.tgz#9df6c3961b5b44a02532ce6ae4544832609e2e3f"
+  integrity sha512-SqEZaAEhe0A6ETEa9O1IhSPC7MdvehZtCnTR0AftXk3QhY2UNgb+NApFOUPZILXk/YTDfFxMTNJOBpzrJsEdIA==
+
 stable@^0.1.8:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"