このコミットが含まれているのは:
2025-08-23 18:01:23 +09:00
コミット e79688783e
28個のファイルの変更126行の追加131行の削除
+1 -1
ファイルの表示
@@ -1,4 +1,4 @@
import ErrorScreen from '@/components/ErrorScreen'
export default () => <ErrorScreen status={403} />
export default () => <ErrorScreen status={403}/>
+1 -1
ファイルの表示
@@ -1,4 +1,4 @@
import ErrorScreen from '@/components/ErrorScreen'
export default () => <ErrorScreen status={404} />
export default () => <ErrorScreen status={404}/>
+1 -1
ファイルの表示
@@ -1,4 +1,4 @@
import ErrorScreen from '@/components/ErrorScreen'
export default () => <ErrorScreen status={503} />
export default () => <ErrorScreen status={503}/>
+8 -8
ファイルの表示
@@ -72,9 +72,9 @@ export default ({ user }: Props) => {
switch (status)
{
case 404:
return <NotFound />
return <NotFound/>
case 503:
return <ServiceUnavailable />
return <ServiceUnavailable/>
}
const url = post ? new URL (post.url) : null
@@ -89,11 +89,11 @@ export default ({ user }: Props) => {
<div className="md:flex md:flex-1">
<Helmet>
{(post?.thumbnail || post?.thumbnailBase) && (
<meta name="thumbnail" content={post.thumbnail || post.thumbnailBase} />)}
<meta name="thumbnail" content={post.thumbnail || post.thumbnailBase}/>)}
{post && <title>{`${ post.title || post.url } | ${ SITE_TITLE }`}</title>}
</Helmet>
<div className="hidden md:block">
<TagDetailSidebar post={post} />
<TagDetailSidebar post={post}/>
</div>
<MainArea>
{post
@@ -103,8 +103,8 @@ export default ({ user }: Props) => {
? (
<NicoViewer id={videoId}
width={640}
height={360} />)
: <img src={post.thumbnail} alt={post.url} className="mb-4 w-full" />}
height={360}/>)
: <img src={post.thumbnail} alt={post.url} className="mb-4 w-full"/>}
<Button onClick={changeViewedFlg}
className={cn ('text-white', viewedClass)}>
{post.viewed ? '閲覧済' : '未閲覧'}
@@ -121,14 +121,14 @@ export default ({ user }: Props) => {
onSave={newPost => {
setPost (newPost)
toast ({ description: '更新しました.' })
}} />
}}/>
</Tab>)}
</TabGroup>
</>)
: 'Loading...'}
</MainArea>
<div className="md:hidden">
<TagDetailSidebar post={post} />
<TagDetailSidebar post={post}/>
</div>
</div>)
}
+3 -3
ファイルの表示
@@ -111,7 +111,7 @@ export default () => {
</title>
</Helmet>
<TagSidebar posts={posts.slice (0, 20)} />
<TagSidebar posts={posts.slice (0, 20)}/>
<MainArea>
<TabGroup>
@@ -124,14 +124,14 @@ export default () => {
scroll: containerRef.current?.scrollTop ?? 0 }
sessionStorage.setItem (`posts:${ tagsQuery }`,
JSON.stringify (statesToSave))
}} />)
}}/>)
: !(loading) && '広場には何もありませんよ.'}
{loading && 'Loading...'}
<div ref={loaderRef} className="h-12"></div>
</Tab>
{tags.length === 1 && (
<Tab name="Wiki">
<WikiBody title={tags[0]} body={wikiPage?.body} />
<WikiBody title={tags[0]} body={wikiPage?.body}/>
<div className="my-2">
<Link to={`/wiki/${ encodeURIComponent (tags[0]) }`}>
Wiki
+6 -6
ファイルの表示
@@ -20,7 +20,7 @@ type Props = { user: User | null }
export default ({ user }: Props) => {
if (!(['admin', 'member'].some (r => user?.role === r)))
return <Forbidden />
return <Forbidden/>
const navigate = useNavigate ()
@@ -125,7 +125,7 @@ export default ({ user }: Props) => {
value={url}
onChange={e => setURL (e.target.value)}
className="w-full border p-2 rounded"
onBlur={handleURLBlur} />
onBlur={handleURLBlur}/>
</div>
{/* タイトル */}
@@ -141,7 +141,7 @@ export default ({ user }: Props) => {
value={title}
placeholder={titleLoading ? 'Loading...' : ''}
onChange={ev => setTitle (ev.target.value)}
disabled={titleAutoFlg} />
disabled={titleAutoFlg}/>
</div>
{/* サムネール */}
@@ -169,11 +169,11 @@ export default ({ user }: Props) => {
setThumbnailFile (file)
setThumbnailPreview (URL.createObjectURL (file))
}
}} />)}
}}/>)}
{thumbnailPreview && (
<img src={thumbnailPreview}
alt="preview"
className="mt-2 max-h-48 rounded border" />)}
className="mt-2 max-h-48 rounded border"/>)}
</div>
{/* タグ */}
@@ -181,7 +181,7 @@ export default ({ user }: Props) => {
<div>
<Label></Label>
<TextArea value={tags}
onChange={ev => setTags (ev.target.value)} />
onChange={ev => setTags (ev.target.value)}/>
</div>
{/* 送信 */}
+3 -3
ファイルの表示
@@ -114,19 +114,19 @@ export default ({ user }: Props) => {
{nicoTags.map ((tag, i) => (
<tr key={i}>
<td className="p-2">
<TagLink tag={tag} withWiki={false} withCount={false} />
<TagLink tag={tag} withWiki={false} withCount={false}/>
</td>
<td className="p-2">
{editing[tag.id]
? (
<TextArea value={rawTags[tag.id]} onChange={ev => {
setRawTags (rawTags => ({ ...rawTags, [tag.id]: ev.target.value }))
}} />)
}}/>)
: tag.linkedTags.map((lt, j) => (
<span key={j} className="mr-2">
<TagLink tag={lt}
linkFlg={false}
withCount={false} />
withCount={false}/>
</span>))}
</td>
{memberFlg && (
+4 -4
ファイルの表示
@@ -55,7 +55,7 @@ export default ({ user, setUser }: Props) => {
return (
<MainArea>
<Helmet>
<meta name="robots" content="noindex" />
<meta name="robots" content="noindex"/>
<title> | {SITE_TITLE}</title>
</Helmet>
@@ -71,7 +71,7 @@ export default ({ user, setUser }: Props) => {
className="w-full border rounded p-2"
value={name}
placeholder="名もなきニジラー"
onChange={ev => setName (ev.target.value)} />
onChange={ev => setName (ev.target.value)}/>
{(user && !(user.name)) && (
<p className="mt-1 text-sm text-red-500">
30 !!!!
@@ -104,10 +104,10 @@ export default ({ user, setUser }: Props) => {
<UserCodeDialogue visible={userCodeVsbl}
onVisibleChange={setUserCodeVsbl}
user={user}
setUser={setUser} />
setUser={setUser}/>
<InheritDialogue visible={inheritVsbl}
onVisibleChange={setInheritVsbl}
setUser={setUser} />
setUser={setUser}/>
</MainArea>)
}
+4 -4
ファイルの表示
@@ -98,7 +98,7 @@ export default () => {
<MainArea>
<Helmet>
<title>{`${ title } Wiki | ${ SITE_TITLE }`}</title>
{!(wikiPage?.body) && <meta name="robots" content="noindex" />}
{!(wikiPage?.body) && <meta name="robots" content="noindex"/>}
</Helmet>
{(wikiPage && version) && (
@@ -120,18 +120,18 @@ export default () => {
<TagLink tag={tag}
withWiki={false}
withCount={false}
{...(version && { to: `/wiki/${ encodeURIComponent (title) }` })} />
{...(version && { to: `/wiki/${ encodeURIComponent (title) }` })}/>
</PageTitle>
<div className="prose mx-auto p-4">
{wikiPage === undefined
? 'Loading...'
: <WikiBody title={title} body={wikiPage?.body} />}
: <WikiBody title={title} body={wikiPage?.body}/>}
</div>
{(!(version) && posts.length > 0) && (
<TabGroup>
<Tab name="広場">
<PostList posts={posts} />
<PostList posts={posts}/>
</Tab>
</TabGroup>)}
</MainArea>)
+1 -1
ファイルの表示
@@ -42,7 +42,7 @@ export default () => {
diff.diff.map (d => (
<span className={cn (d.type === 'added' && 'bg-green-200 dark:bg-green-800',
d.type === 'removed' && 'bg-red-200 dark:bg-red-800')}>
{d.content == '\n' ? <br /> : d.content}
{d.content == '\n' ? <br/> : d.content}
</span>)))
: 'Loading...'}
</div>
+3 -3
ファイルの表示
@@ -21,7 +21,7 @@ type Props = { user: User | null }
export default ({ user }: Props) => {
if (!(['admin', 'member'].some (r => user?.role === r)))
return <Forbidden />
return <Forbidden/>
const { id } = useParams ()
@@ -73,7 +73,7 @@ export default ({ user }: Props) => {
<input type="text"
value={title}
onChange={e => setTitle (e.target.value)}
className="w-full border p-2 rounded" />
className="w-full border p-2 rounded"/>
</div>
{/* 本文 */}
@@ -82,7 +82,7 @@ export default ({ user }: Props) => {
<MdEditor value={body}
style={{ height: '500px' }}
renderHTML={text => mdParser.render (text)}
onChange={({ text }) => setBody (text)} />
onChange={({ text }) => setBody (text)}/>
</div>
{/* 送信 */}
+49 -49
ファイルの表示
@@ -27,54 +27,54 @@ export default () => {
return (
<MainArea>
<Helmet>
<title>{`Wiki 変更履歴 | ${ SITE_TITLE }`}</title>
</Helmet>
<table className="table-auto w-full border-collapse">
<thead>
<tr>
<th></th>
<th className="p-2 text-left"></th>
<th className="p-2 text-left"></th>
<th className="p-2 text-left"></th>
</tr>
</thead>
<tbody>
{changes.map (change => (
<tr key={change.sha}>
<td>
{change.changeType === 'update' && (
<Link to={`/wiki/${ change.wikiPage.id }/diff?from=${ change.pred }&to=${ change.sha }`}>
</Link>)}
</td>
<td className="p-2">
<Link to={`/wiki/${ encodeURIComponent (change.wikiPage.title) }?version=${ change.sha }`}>
{change.wikiPage.title}
</Link>
</td>
<td className="p-2">
{(() => {
switch (change.changeType)
{
case 'create':
return '新規'
case 'update':
return '更新'
case 'delete':
return '削除'
}
}) ()}
</td>
<td className="p-2">
<Link to={`/users/${ change.user.id }`}>
{change.user.name}
</Link>
<br />
{change.timestamp}
</td>
</tr>))}
</tbody>
</table>
<Helmet>
<title>{`Wiki 変更履歴 | ${ SITE_TITLE }`}</title>
</Helmet>
<table className="table-auto w-full border-collapse">
<thead>
<tr>
<th></th>
<th className="p-2 text-left"></th>
<th className="p-2 text-left"></th>
<th className="p-2 text-left"></th>
</tr>
</thead>
<tbody>
{changes.map (change => (
<tr key={change.sha}>
<td>
{change.changeType === 'update' && (
<Link to={`/wiki/${ change.wikiPage.id }/diff?from=${ change.pred }&to=${ change.sha }`}>
</Link>)}
</td>
<td className="p-2">
<Link to={`/wiki/${ encodeURIComponent (change.wikiPage.title) }?version=${ change.sha }`}>
{change.wikiPage.title}
</Link>
</td>
<td className="p-2">
{(() => {
switch (change.changeType)
{
case 'create':
return '新規'
case 'update':
return '更新'
case 'delete':
return '削除'
}
}) ()}
</td>
<td className="p-2">
<Link to={`/users/${ change.user.id }`}>
{change.user.name}
</Link>
<br/>
{change.timestamp}
</td>
</tr>))}
</tbody>
</table>
</MainArea>)
}
+3 -3
ファイルの表示
@@ -21,7 +21,7 @@ type Props = { user: User | null }
export default ({ user }: Props) => {
if (!(['admin', 'member'].some (r => user?.role === r)))
return <Forbidden />
return <Forbidden/>
const location = useLocation ()
const navigate = useNavigate ()
@@ -67,7 +67,7 @@ export default ({ user }: Props) => {
<input type="text"
value={title}
onChange={e => setTitle (e.target.value)}
className="w-full border p-2 rounded" />
className="w-full border p-2 rounded"/>
</div>
{/* 本文 */}
@@ -76,7 +76,7 @@ export default ({ user }: Props) => {
<MdEditor value={body}
style={{ height: '500px' }}
renderHTML={text => mdParser.render (text)}
onChange={({ text }) => setBody (text)} />
onChange={({ text }) => setBody (text)}/>
</div>
{/* 送信 */}