| @@ -49,4 +49,22 @@ class WikiPagesController < ApplicationController | |||||
| render json: q.limit(20) | render json: q.limit(20) | ||||
| end | end | ||||
| def changes | |||||
| id = params[:id] | |||||
| log = id.present? ? wiki.page("#{ id }.md").versions : wiki.repo.log('main', nil, max_count: 50) | |||||
| render json: log.map { |commit| | |||||
| { sha: commit.id, | |||||
| author: commit.author.name, | |||||
| message: commit.message, | |||||
| timestamp: commit.authored_date } } | |||||
| end | |||||
| private | |||||
| WIKI_PATH = Rails.root.join('wiki').to_s | |||||
| def wiki | |||||
| @wiki ||= Gollum::Wiki.new(WIKI_PATH) | |||||
| end | |||||
| end | end | ||||
| @@ -6,6 +6,7 @@ Rails.application.routes.draw do | |||||
| get 'preview/thumbnail', to: 'preview#thumbnail' | get 'preview/thumbnail', to: 'preview#thumbnail' | ||||
| get 'wiki/title/:title', to: 'wiki_pages#show_by_title' | get 'wiki/title/:title', to: 'wiki_pages#show_by_title' | ||||
| get 'wiki/search', to: 'wiki_pages#search' | get 'wiki/search', to: 'wiki_pages#search' | ||||
| get 'wiki/changes', to: 'wiki_pages#changes' | |||||
| get 'wiki/:id', to: 'wiki_pages#show' | get 'wiki/:id', to: 'wiki_pages#show' | ||||
| post 'wiki', to: 'wiki_pages#create' | post 'wiki', to: 'wiki_pages#create' | ||||
| put 'wiki/:id', to: 'wiki_pages#update' | put 'wiki/:id', to: 'wiki_pages#update' | ||||
| @@ -11,6 +11,7 @@ import WikiPage from '@/pages/WikiPage' | |||||
| import WikiNewPage from '@/pages/WikiNewPage' | import WikiNewPage from '@/pages/WikiNewPage' | ||||
| import WikiEditPage from '@/pages/WikiEditPage' | import WikiEditPage from '@/pages/WikiEditPage' | ||||
| import WikiDetailPage from '@/pages/WikiDetailPage' | import WikiDetailPage from '@/pages/WikiDetailPage' | ||||
| import WikiHistoryPage from '@/pages/WikiHistoryPage' | |||||
| import { API_BASE_URL } from '@/config' | import { API_BASE_URL } from '@/config' | ||||
| import axios from 'axios' | import axios from 'axios' | ||||
| import { Toaster } from '@/components/ui/toaster' | import { Toaster } from '@/components/ui/toaster' | ||||
| @@ -66,6 +67,7 @@ export default () => { | |||||
| <Route path="/wiki/:name" element={<WikiDetailPage />} /> | <Route path="/wiki/:name" element={<WikiDetailPage />} /> | ||||
| <Route path="/wiki/new" element={<WikiNewPage />} /> | <Route path="/wiki/new" element={<WikiNewPage />} /> | ||||
| <Route path="/wiki/:id/edit" element={<WikiEditPage />} /> | <Route path="/wiki/:id/edit" element={<WikiEditPage />} /> | ||||
| <Route path="/wiki/changes" element={<WikiHistoryPage />} /> | |||||
| </Routes> | </Routes> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -130,7 +130,7 @@ const TopNav: React.FC = ({ user, setUser }: Props) => { | |||||
| <> | <> | ||||
| <Separator /> | <Separator /> | ||||
| <Link to={`/posts?tags=${ location.pathname.split ('/')[2] }`} className={subClass}>投稿</Link> | <Link to={`/posts?tags=${ location.pathname.split ('/')[2] }`} className={subClass}>投稿</Link> | ||||
| <Link to={`/wiki/${ wikiId || location.pathname.split ('/')[2] }/history`} className={subClass}>履歴</Link> | |||||
| <Link to={`/wiki/changes?id=${ wikiId }`} className={subClass}>履歴</Link> | |||||
| <Link to={`/wiki/${ wikiId || location.pathname.split ('/')[2] }/edit`} className={subClass}>編輯</Link> | <Link to={`/wiki/${ wikiId || location.pathname.split ('/')[2] }/edit`} className={subClass}>編輯</Link> | ||||
| </>} | </>} | ||||
| </div>) | </div>) | ||||
| @@ -0,0 +1,8 @@ | |||||
| import MainArea from '@/components/layout/MainArea' | |||||
| export default () => { | |||||
| return ( | |||||
| <MainArea> | |||||
| </MainArea>) | |||||
| } | |||||