fix: render in files & fix typos
This commit is contained in:
parent
b728ff33ec
commit
9f797613d2
3 changed files with 43 additions and 12 deletions
|
@ -19,6 +19,7 @@ import {
|
||||||
} from './icons';
|
} from './icons';
|
||||||
import Link from './Link';
|
import Link from './Link';
|
||||||
import MutedText from './MutedText';
|
import MutedText from './MutedText';
|
||||||
|
import Markdown from './render/Markdown';
|
||||||
import Type from './Type';
|
import Type from './Type';
|
||||||
|
|
||||||
export function FileMeta({ Icon, title, subtitle, ...other }) {
|
export function FileMeta({ Icon, title, subtitle, ...other }) {
|
||||||
|
@ -45,6 +46,7 @@ export function FileMeta({ Icon, title, subtitle, ...other }) {
|
||||||
|
|
||||||
export default function File({ image, disableMediaPreview, exifEnabled }) {
|
export default function File({ image, disableMediaPreview, exifEnabled }) {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
const [overrideRender, setOverrideRender] = useState(false);
|
||||||
const deleteFile = useFileDelete();
|
const deleteFile = useFileDelete();
|
||||||
const favoriteFile = useFileFavorite();
|
const favoriteFile = useFileFavorite();
|
||||||
const clipboard = useClipboard();
|
const clipboard = useClipboard();
|
||||||
|
@ -124,6 +126,8 @@ export default function File({ image, disableMediaPreview, exifEnabled }) {
|
||||||
sx={{ minHeight: 200 }}
|
sx={{ minHeight: 200 }}
|
||||||
style={{ minHeight: 200 }}
|
style={{ minHeight: 200 }}
|
||||||
disableMediaPreview={false}
|
disableMediaPreview={false}
|
||||||
|
overrideRender={overrideRender}
|
||||||
|
setOverrideRender={setOverrideRender}
|
||||||
/>
|
/>
|
||||||
<Stack>
|
<Stack>
|
||||||
<FileMeta Icon={FileIcon} title='Name' subtitle={image.file} />
|
<FileMeta Icon={FileIcon} title='Name' subtitle={image.file} />
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
import { Box, Center, Group, Image, Text } from '@mantine/core';
|
import { Alert, Box, Button, Card, Center, Container, Group, Image, Text } from '@mantine/core';
|
||||||
import { Prism } from '@mantine/prism';
|
import { Prism } from '@mantine/prism';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { AudioIcon, FileIcon, ImageIcon, PlayIcon } from './icons';
|
import { AudioIcon, FileIcon, ImageIcon, PlayIcon } from './icons';
|
||||||
|
import KaTeX from './render/KaTeX';
|
||||||
|
import Markdown from './render/Markdown';
|
||||||
|
import PrismCode from './render/PrismCode';
|
||||||
|
|
||||||
function PlaceholderContent({ text, Icon }) {
|
function PlaceholderContent({ text, Icon }) {
|
||||||
return (
|
return (
|
||||||
|
@ -13,8 +16,6 @@ function PlaceholderContent({ text, Icon }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function Placeholder({ text, Icon, ...props }) {
|
function Placeholder({ text, Icon, ...props }) {
|
||||||
if (props.disableResolve) props.src = null;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ height: 200 }} {...props}>
|
<Box sx={{ height: 200 }} {...props}>
|
||||||
<Center sx={{ height: 200 }}>
|
<Center sx={{ height: 200 }}>
|
||||||
|
@ -31,8 +32,10 @@ export default function Type({ file, popup = false, disableMediaPreview, ...prop
|
||||||
const media = /^(video|audio|image|text)/.test(type);
|
const media = /^(video|audio|image|text)/.test(type);
|
||||||
|
|
||||||
const [text, setText] = useState('');
|
const [text, setText] = useState('');
|
||||||
|
const shouldRenderMarkdown = name.endsWith('.md');
|
||||||
|
const shouldRenderTex = name.endsWith('.tex');
|
||||||
|
|
||||||
if (type === 'text') {
|
if (type === 'text' && popup) {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
(async () => {
|
(async () => {
|
||||||
const res = await fetch('/r/' + name);
|
const res = await fetch('/r/' + name);
|
||||||
|
@ -43,10 +46,35 @@ export default function Type({ file, popup = false, disableMediaPreview, ...prop
|
||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (media && disableMediaPreview) {
|
const renderRenderAlert = () => {
|
||||||
return (
|
return (
|
||||||
<Placeholder Icon={FileIcon} text={`Click to view file (${name})`} disableResolve={true} {...props} />
|
<Alert color='blue' variant='outline' sx={{ width: '100%' }}>
|
||||||
|
You are{props.overrideRender ? ' not ' : ' '}viewing a rendered version of the file
|
||||||
|
<Button
|
||||||
|
mx='md'
|
||||||
|
onClick={() => props.setOverrideRender(!props.overrideRender)}
|
||||||
|
compact
|
||||||
|
variant='light'
|
||||||
|
>
|
||||||
|
View {props.overrideRender ? 'rendered' : 'raw'}
|
||||||
|
</Button>
|
||||||
|
</Alert>
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
if ((shouldRenderMarkdown || shouldRenderTex) && !props.overrideRender && popup)
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{renderRenderAlert()}
|
||||||
|
<Card p='md' my='sm'>
|
||||||
|
{shouldRenderMarkdown && <Markdown code={text} />}
|
||||||
|
{shouldRenderTex && <KaTeX code={text} />}
|
||||||
|
</Card>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
if (media && disableMediaPreview) {
|
||||||
|
return <Placeholder Icon={FileIcon} text={`Click to view file (${name})`} {...props} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return popup ? (
|
return popup ? (
|
||||||
|
@ -61,9 +89,10 @@ export default function Type({ file, popup = false, disableMediaPreview, ...prop
|
||||||
),
|
),
|
||||||
audio: <audio autoPlay controls {...props} style={{ width: '100%' }} />,
|
audio: <audio autoPlay controls {...props} style={{ width: '100%' }} />,
|
||||||
text: (
|
text: (
|
||||||
<Prism withLineNumbers language={name.split('.').pop()} {...props} style={{}} sx={{}}>
|
<>
|
||||||
{text}
|
{(shouldRenderMarkdown || shouldRenderTex) && renderRenderAlert()}
|
||||||
</Prism>
|
<PrismCode code={text} ext={name.split('.').pop()} {...props} />
|
||||||
|
</>
|
||||||
),
|
),
|
||||||
}[type]
|
}[type]
|
||||||
) : (
|
) : (
|
||||||
|
|
|
@ -34,9 +34,7 @@ export default function Code({ code, id, title, render, renderType }) {
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{renderType === 'tex' && (
|
{renderType === 'tex' && (
|
||||||
<span>
|
<span>You are {overrideRender ? 'not' : 'now'} viewing a KaTeX rendering of the tex file.</span>
|
||||||
You are {overrideRender ? 'not' : 'now'} viewing a KaTeX rendering version of the tex file.
|
|
||||||
</span>
|
|
||||||
)}
|
)}
|
||||||
<Button mx='md' onClick={() => setOverrideRender(!overrideRender)} compact variant='light'>
|
<Button mx='md' onClick={() => setOverrideRender(!overrideRender)} compact variant='light'>
|
||||||
View {overrideRender ? 'rendered' : 'raw'}
|
View {overrideRender ? 'rendered' : 'raw'}
|
||||||
|
|
Loading…
Reference in a new issue