diff --git a/src/app/notes/Paper.tsx b/src/app/notes/Paper.tsx index f6cea61f29..d060c956ea 100644 --- a/src/app/notes/Paper.tsx +++ b/src/app/notes/Paper.tsx @@ -6,7 +6,7 @@ export const Paper: Component = ({ children }) => { className={clsx( 'relative bg-base-100 md:col-start-1 lg:col-auto', '-m-4 p-[2rem_1rem] lg:m-0 lg:p-[30px_45px]', - 'rounded-[0_6px_6px_0] border border-[#bbb3]', + 'rounded-[0_6px_6px_0] border border-[#bbb3] shadow-sm dark:shadow-[#333]', 'note-layout-main', )} > diff --git a/src/app/notes/[id]/page.module.css b/src/app/notes/[id]/page.module.css new file mode 100644 index 0000000000..c485b6a2d9 --- /dev/null +++ b/src/app/notes/[id]/page.module.css @@ -0,0 +1,36 @@ +.with-indent { + :global { + ul .indent, + .paragraph .indent { + border-bottom: 1px solid #00b8bb41; + } + + .paragraph:not(:nth-child(1)) > span.indent { + &:nth-child(1) { + margin-left: 2rem; + } + } + + main { + > p:first-child { + margin-bottom: 2rem; + } + + .paragraph:first-child::first-letter { + float: left; + font-size: 2.4em; + margin: 0 0.2em 0 0; + } + } + } +} + +.with-serif { + :global { + main { + @apply font-serif; + + font-size: 16px; + } + } +} diff --git a/src/app/notes/[id]/page.tsx b/src/app/notes/[id]/page.tsx index f9fc168593..4a4ebb1857 100644 --- a/src/app/notes/[id]/page.tsx +++ b/src/app/notes/[id]/page.tsx @@ -2,8 +2,10 @@ import { useEffect } from 'react' import { Balancer } from 'react-wrap-balancer' +import clsx from 'clsx' import dayjs from 'dayjs' import { useParams } from 'next/navigation' +import type { MarkdownToJSX } from '~/components/ui/markdown' import { PageDataHolder } from '~/components/common/PageHolder' import { useSetHeaderMetaInfo } from '~/components/layout/header/internal/hooks' @@ -16,6 +18,8 @@ import { ArticleElementProvider } from '~/providers/article/article-element-prov import { useSetCurrentNoteId } from '~/providers/note/current-note-id-provider' import { NoteLayoutRightSidePortal } from '~/providers/note/right-side-provider' +import styles from './page.module.css' + const PageImpl = () => { const { id } = useParams() as { id: string } const { data } = useNoteByNidQuery(id) @@ -52,7 +56,9 @@ const PageImpl = () => { .format('YYYY 年 M 月 D 日 dddd') return ( -
+

{note.title} @@ -66,7 +72,7 @@ const PageImpl = () => {

- + @@ -77,6 +83,17 @@ const PageImpl = () => { ) } +const Markdownrenderers: { [name: string]: Partial } = { + text: { + react(node, _, state) { + return ( + + {node.content} + + ) + }, + }, +} export default PageDataHolder(PageImpl, () => { const { id } = useParams() as { id: string } return useNoteByNidQuery(id) diff --git a/src/components/common/Lazyload.tsx b/src/components/common/Lazyload.tsx new file mode 100644 index 0000000000..b82e090696 --- /dev/null +++ b/src/components/common/Lazyload.tsx @@ -0,0 +1,23 @@ +import React from 'react' +import { useInView } from 'react-intersection-observer' +import type { FC, PropsWithChildren } from 'react' +import type { IntersectionOptions } from 'react-intersection-observer' + +export type LazyLoadProps = { + offset?: number + placeholder?: React.ReactNode +} & IntersectionOptions +export const LazyLoad: FC = (props) => { + const { placeholder = null, offset = 0, ...rest } = props + const { ref, inView } = useInView({ + triggerOnce: true, + rootMargin: `${offset || 0}px`, + ...rest, + }) + return ( + <> + + {!inView ? placeholder : props.children} + + ) +} diff --git a/src/components/ui/image/LazyImage.tsx b/src/components/ui/image/LazyImage.tsx new file mode 100644 index 0000000000..2b8c49469e --- /dev/null +++ b/src/components/ui/image/LazyImage.tsx @@ -0,0 +1,271 @@ +import React, { + forwardRef, + memo, + useCallback, + useEffect, + useImperativeHandle, + useMemo, + useRef, + useState, +} from 'react' +import { clsx } from 'clsx' +import mediumZoom from 'medium-zoom' +import type { + CSSProperties, + DetailedHTMLProps, + FC, + ImgHTMLAttributes, +} from 'react' + +import styles from './index.module.css' +import { useCalculateNaturalSize } from './use-calculate-size' + +interface ImageProps { + defaultImage?: string + src: string + alt?: string + height?: number | string + width?: number | string + backgroundColor?: string + popup?: boolean + overflowHidden?: boolean + getParentElWidth?: ((parentElementWidth: number) => number) | number + showErrorMessage?: boolean +} + +const Image: FC< + { + popup?: boolean + height?: number | string + width?: number | string + loaderFn: () => void + loaded: boolean + } & Pick< + DetailedHTMLProps, HTMLImageElement>, + 'src' | 'alt' + > +> = memo(({ src, alt, height, width, popup = false, loaded, loaderFn }) => { + const imageRef = useRef(null) + + useEffect(() => { + if (!popup) { + return + } + const $image = imageRef.current + if ($image) { + const zoom = mediumZoom($image, { + background: 'var(--light-bg)', + }) + + return () => { + zoom.detach(zoom.getImages()) + } + } + }, [popup]) + + useEffect(() => { + loaderFn() + }, [loaderFn]) + + return ( + <> +
+ {alt} +
+ + ) +}) + +const onImageAnimationEnd: React.AnimationEventHandler = ( + e, +) => { + ;(e.target as HTMLElement).dataset.animated = '1' +} + +export type ImageLazyRef = { status: 'loading' | 'loaded' } + +export const LazyImage = memo( + forwardRef< + ImageLazyRef, + ImageProps & + DetailedHTMLProps, HTMLImageElement> + >((props, ref) => { + const { + defaultImage, + src, + alt, + height, + width, + backgroundColor = 'rgb(111,111,111)', + popup = false, + style, + overflowHidden = false, + getParentElWidth = (w) => w, + showErrorMessage, + ...rest + } = props + useImperativeHandle(ref, () => { + return { + status: loaded ? 'loaded' : ('loading' as any), + } + }) + const realImageRef = useRef(null) + const placeholderRef = useRef(null) + + const wrapRef = useRef(null) + const [calculatedSize, calculateDimensions] = useCalculateNaturalSize() + + const [loaded, setLoad] = useState(false) + const loaderFn = useCallback(() => { + if (!src || loaded) { + return + } + + const image = new window.Image() + image.src = src as string + // FIXME + const parentElement = wrapRef.current?.parentElement?.parentElement + + if (!height && !width) { + calculateDimensions( + image, + typeof getParentElWidth == 'function' + ? getParentElWidth( + parentElement + ? parseFloat(getComputedStyle(parentElement).width) + : 0, + ) + : getParentElWidth, + ) + } + + image.onload = () => { + setLoad(true) + try { + if (placeholderRef && placeholderRef.current) { + placeholderRef.current.classList.add('hide') + } + + // eslint-disable-next-line no-empty + } catch {} + } + if (showErrorMessage) { + image.onerror = () => { + try { + if (placeholderRef && placeholderRef.current) { + placeholderRef.current.innerHTML = `

图片加载失败!
+ ${escapeHTMLTag(image.src)}

` + } + // eslint-disable-next-line no-empty + } catch {} + } + } + }, [ + src, + loaded, + height, + width, + calculateDimensions, + getParentElWidth, + backgroundColor, + showErrorMessage, + ]) + const memoPlaceholderImage = useMemo( + () => ( + + ), + [backgroundColor, height, width], + ) + + const imageWrapperStyle = useMemo( + () => ({ + height: loaded ? undefined : height || calculatedSize.height, + width: loaded ? undefined : width || calculatedSize.width, + + ...(overflowHidden ? { overflow: 'hidden', borderRadius: '3px' } : {}), + }), + [ + calculatedSize.height, + calculatedSize.width, + height, + loaded, + overflowHidden, + width, + ], + ) + return ( +
+ {defaultImage ? ( + {alt} + ) : ( +
+ + {alt} + {!loaded && memoPlaceholderImage} + +
+ )} + {alt &&
{alt}
} +
+ ) + }), +) + +const PlaceholderImage = memo( + forwardRef< + HTMLDivElement, + { ref: any; className?: string } & Partial + >((props, ref) => { + const { backgroundColor, height, width } = props + return ( +
+ ) + }), +) diff --git a/src/components/ui/image/ZoomedImage.tsx b/src/components/ui/image/ZoomedImage.tsx index f018cffbba..95b6dd99ec 100644 --- a/src/components/ui/image/ZoomedImage.tsx +++ b/src/components/ui/image/ZoomedImage.tsx @@ -1,26 +1,89 @@ -import type { ImageProps } from 'next/image' +'use client' + +import { useCallback, useState } from 'react' +import { tv } from 'tailwind-variants' +import type { ReactNode } from 'react' + +import { LazyLoad } from '~/components/common/Lazyload' +import { useIsUnMounted } from '~/hooks/common/use-is-unmounted' + +import { Divider } from '../divider' type TImageProps = { - className?: string - src?: string - width?: number | string - height?: number | string - 'original-src'?: string - imageRef?: React.MutableRefObject + src: string + alt?: string + title?: string + accent?: string +} + +type BaseImageProps = { zoom?: boolean - accentColor?: string -} & React.HTMLAttributes & - ImageProps + placeholder?: ReactNode +} -export const Image: React.FC = ({ alt, src }) => { - return null +export enum ImageLoadStatus { + Loading = 'loading', + Loaded = 'loaded', + Error = 'error', +} + +const styles = tv({ + base: '', + variants: { + status: { + loading: 'hidden opacity-0', + loaded: 'opacity-100 block', + error: 'hidden opacity-0', + }, + }, +}) +export const ImageLazy: Component = ({ + alt, + src, + title, + accent, + placeholder, +}) => { + const figcaption = title || alt + const [imageLoadStatus, setImageLoadStatus] = useState( + ImageLoadStatus.Loading, + ) + const isUnmount = useIsUnMounted() + const setImageLoadStatusSafe = useCallback( + (status: ImageLoadStatus) => { + if (!isUnmount.current) { + setImageLoadStatus(status) + } + }, + [isUnmount], + ) + return ( + +
+ {alt} setImageLoadStatusSafe(ImageLoadStatus.Loaded)} + onError={() => setImageLoadStatusSafe(ImageLoadStatus.Error)} + className={styles({ + status: imageLoadStatus, + })} + /> +
+ + {figcaption} +
+
+
+ ) } -export const ZoomedImage: React.FC = (props) => { +export const ZoomedImage: Component = (props) => { console.log(props) return ( - + ) } diff --git a/src/components/ui/image/use-calculate-size.tsx b/src/components/ui/image/use-calculate-size.tsx new file mode 100644 index 0000000000..07de70462d --- /dev/null +++ b/src/components/ui/image/use-calculate-size.tsx @@ -0,0 +1,50 @@ +import { useCallback, useReducer } from 'react' + +import { calculateDimensions } from '~/lib/calc-image' + +const initialState = { height: 0, width: 0 } +type Action = { type: 'set'; height: number; width: number } | { type: 'reset' } +export const useCalculateNaturalSize = () => { + const [state, dispatch] = useReducer( + (state: typeof initialState, payload: Action) => { + switch (payload.type) { + case 'set': + return { + height: payload.height, + width: payload.width, + } + case 'reset': + return initialState + default: + return state + } + }, + initialState, + ) + + const calculateOnImageEl = useCallback( + (imageEl: HTMLImageElement, parentElWidth?: number) => { + if (!parentElWidth || !imageEl) { + return + } + + const w = imageEl.naturalWidth, + h = imageEl.naturalHeight + if (w && h) { + const calculated = calculateDimensions(w, h, { + height: Infinity, + width: +parentElWidth, + }) + + dispatch({ + type: 'set', + height: calculated.height, + width: calculated.width, + }) + } + }, + [], + ) + + return [state, calculateOnImageEl] as const +} diff --git a/src/components/ui/markdown/Markdown.tsx b/src/components/ui/markdown/Markdown.tsx index 134b189735..9167eabdfd 100644 --- a/src/components/ui/markdown/Markdown.tsx +++ b/src/components/ui/markdown/Markdown.tsx @@ -1,19 +1,10 @@ /* eslint-disable react-hooks/rules-of-hooks */ -import React, { - createElement, - memo, - useEffect, - useMemo, - useRef, - useState, -} from 'react' +import React, { memo, useMemo, useRef } from 'react' import { clsx } from 'clsx' import { compiler } from 'markdown-to-jsx' import type { MarkdownToJSX } from 'markdown-to-jsx' import type { FC, PropsWithChildren } from 'react' -import { range } from '~/lib/_' - import styles from './index.module.css' import { CommentAtRule } from './parsers/comment-at' import { ContainerRule } from './parsers/container' @@ -25,6 +16,7 @@ import { SpoilderRule } from './parsers/spoiler' import { MParagraph, MTableBody, MTableHead, MTableRow } from './renderers' import { MDetails } from './renderers/collapse' import { MFootNote } from './renderers/footnotes' +import { ZoomedImage } from '../image' export interface MdProps { value?: string @@ -37,7 +29,7 @@ export interface MdProps { > codeBlockFully?: boolean className?: string - tocSlot?: (props: { headings: HTMLElement[] }) => JSX.Element | null + as?: React.ElementType } export const Markdown: FC = @@ -52,30 +44,12 @@ export const Markdown: FC = overrides, extendsRules, additionalParserRules, + as: As = 'div', ...rest } = props const ref = useRef(null) - const [headings, setHeadings] = useState([]) - - useEffect(() => { - if (!ref.current) { - return - } - - const $headings = ref.current.querySelectorAll( - range(1, 6) - .map((i) => `h${i}`) - .join(','), - ) as NodeListOf - - setHeadings(Array.from($headings)) - - return () => { - setHeadings([]) - } - }, [value, props.children]) const node = useMemo(() => { if (!value && typeof props.children != 'string') return null @@ -92,6 +66,7 @@ export const Markdown: FC = // FIXME: footer tag in raw html will renders not as expected, but footer tag in this markdown lib will wrapper as linkReferer footnotes footer: MFootNote, details: MDetails, + img: ZoomedImage, // for custom react component // LinkCard, @@ -163,20 +138,17 @@ export const Markdown: FC = ]) return ( -
- {className ?
{node}
: node} - - {props.tocSlot ? createElement(props.tocSlot, { headings }) : null} -
+ {node} + ) }) diff --git a/src/lib/calc-image.tsx b/src/lib/calc-image.tsx new file mode 100644 index 0000000000..7f7f0f50ed --- /dev/null +++ b/src/lib/calc-image.tsx @@ -0,0 +1,29 @@ +export const calculateDimensions = ( + width: number, + height: number, + max: { width: number; height: number }, +) => { + const { height: maxHeight, width: maxWidth } = max + const wRatio = maxWidth / width + const hRatio = maxHeight / height + let ratio = 1 + if (maxWidth == Infinity && maxHeight == Infinity) { + ratio = 1 + } else if (maxWidth == Infinity) { + if (hRatio < 1) ratio = hRatio + } else if (maxHeight == Infinity) { + if (wRatio < 1) ratio = wRatio + } else if (wRatio < 1 || hRatio < 1) { + ratio = wRatio <= hRatio ? wRatio : hRatio + } + if (ratio < 1) { + return { + width: width * ratio, + height: height * ratio, + } + } + return { + width, + height, + } +} diff --git a/src/lib/fonts.ts b/src/lib/fonts.ts index 1d20aa064c..e00690eaa4 100644 --- a/src/lib/fonts.ts +++ b/src/lib/fonts.ts @@ -1,4 +1,4 @@ -import { Manrope, Noto_Serif } from 'next/font/google' +import { Manrope, Noto_Serif_SC } from 'next/font/google' const sansFont = Manrope({ subsets: ['latin'], @@ -6,7 +6,7 @@ const sansFont = Manrope({ variable: '--font-sans', display: 'swap', }) -const serifFont = Noto_Serif({ +const serifFont = Noto_Serif_SC({ subsets: ['latin'], weight: ['400'], variable: '--font-serif', diff --git a/src/providers/article/article-element-provider.tsx b/src/providers/article/article-element-provider.tsx index 6caf898a7a..a0e5a3f588 100644 --- a/src/providers/article/article-element-provider.tsx +++ b/src/providers/article/article-element-provider.tsx @@ -1,5 +1,6 @@ -import { useEffect, useRef } from 'react' +import { memo, useEffect, useRef } from 'react' import { createContextState } from 'foxact/create-context-state' +import { useIsomorphicLayoutEffect } from 'foxact/use-isomorphic-layout-effect' import { clsxm } from '~/utils/helper' @@ -9,6 +10,15 @@ const [ useSetArticleElement, ] = createContextState(undefined as any) +const [ + ArticleElementSizeProviderInternal, + useArticleElementSize, + useSetArticleElementSize, +] = createContextState({ + h: 0, + w: 0, +}) + const [ IsEOArticleElementProviderInternal, useIsEOArticleElement, @@ -18,23 +28,50 @@ const [ const ArticleElementProvider: Component = ({ children, className }) => { return ( - - {children} - + + + + {children} + + ) } +const ArticleElementResizeObserver = () => { + const setSize = useSetArticleElementSize() + const $article = useArticleElement() + useIsomorphicLayoutEffect(() => { + if (!$article) return + const { height, width } = $article.getBoundingClientRect() + setSize({ h: height, w: width }) + + const observer = new ResizeObserver((entries) => { + const entry = entries[0] + const { height, width } = entry.contentRect + setSize({ h: height, w: width }) + }) + observer.observe($article) + return () => { + observer.unobserve($article) + observer.disconnect() + } + }, [$article]) + + return null +} -const Content: Component = ({ children, className }) => { - const setter = useSetArticleElement() +const Content: Component = memo(({ children, className }) => { + const setElement = useSetArticleElement() return ( -
+
{children}
) -} +}) + +Content.displayName = 'ArticleElementProviderContent' const EOADetector: Component = () => { const ref = useRef(null) @@ -67,4 +104,5 @@ export { useSetArticleElement, useArticleElement, useIsEOArticleElement, + useArticleElementSize, } diff --git a/src/styles/tailwindcss.css b/src/styles/tailwindcss.css index 69be745858..6cf7868a99 100644 --- a/src/styles/tailwindcss.css +++ b/src/styles/tailwindcss.css @@ -29,3 +29,7 @@ html.noise body::before { background-image: url('data:image/png;base64,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'); background-repeat: repeat; } + +* { + tab-size: 2; +} diff --git a/src/utils/helper.ts b/src/utils/helper.ts index 4c6b33b1b0..a158d8be4d 100644 --- a/src/utils/helper.ts +++ b/src/utils/helper.ts @@ -4,3 +4,16 @@ import { twMerge } from 'tailwind-merge' export const clsxm = (...args: any[]) => { return twMerge(clsx(args)) } + +export const escapeHTMLTag = (html: string) => { + const lt = //g, + ap = /'/g, + ic = /"/g + return html + .toString() + .replace(lt, '<') + .replace(gt, '>') + .replace(ap, ''') + .replace(ic, '"') +}