This commit is contained in:
2025-06-30 23:31:39 +09:00
parent 068d0aed14
commit e20f7fcc17
13 changed files with 140 additions and 75 deletions
@@ -20,17 +20,18 @@ class WikiPagesController < ApplicationController
diffs = Diff::LCS.sdiff(wiki_page_from.body, wiki_page_to.body)
diff_json = diffs.map { |change|
case change.action
when ?=
{ type: 'context', content: change.old_element }
when ?|
[{ type: 'removed', content: change.old_element },
{ type: 'added', content: change.new_element }]
when ?+
{ type: 'added', content: change.new_element }
when ?-
{ type: 'removed', content: change.old_element }
end }.flatten.compact
case change.action
when ?=
{ type: 'context', content: change.old_element }
when ?|
[{ type: 'removed', content: change.old_element },
{ type: 'added', content: change.new_element }]
when ?+
{ type: 'added', content: change.new_element }
when ?-
{ type: 'removed', content: change.old_element }
end
}.flatten.compact
render json: { wiki_page_id: wiki_page_from.id,
title: wiki_page_from.title,
@@ -54,14 +55,19 @@ class WikiPagesController < ApplicationController
def update
return head :unauthorized unless current_user
return head :forbidden unless ['admin', 'member'].include?(current_user.role)
return head :forbidden unless current_user.member?
title = params[:title]
body = params[:body]
return head :unprocessable_entity if title.blank? || body.blank?
wiki_page = WikiPage.find(params[:id])
return head :not_found unless wiki_page
wiki_page.title = title
wiki_page.updated_user = current_user
wiki_page.set_body params[:body], user: current_user
wiki_page.set_body(body, user: current_user)
wiki_page.save!
head :ok
end
@@ -71,28 +77,34 @@ class WikiPagesController < ApplicationController
q = WikiPage.all
q = q.where('title LIKE ?', "%#{ WikiPage.sanitize_sql_like(title) }%") if title.present?
render json: q.limit(20).map { |page|
page.sha = nil
page }
render json: q.limit(20)
end
def changes
id = params[:id]
log = id.present? ? wiki.page("#{ id }.md")&.versions : wiki.repo.log('main', nil, max_count: 50)
log = if id.present?
wiki.page("#{ id }.md")&.versions
else
wiki.repo.log('main', nil)
end
return render json: [] unless log
render json: log.map { |commit|
wiki_page = WikiPage.find(commit.message.split(' ')[1].to_i)
wiki_page.sha = commit.id
user = User.find(commit.author.name.to_i)
{ sha: wiki_page.sha,
pred: wiki_page.pred,
succ: wiki_page.succ,
wiki_page = WikiPage.find(commit.message.split(' ')[1].to_i)
wiki_page.sha = commit.id
wiki_page: wiki_page && { id: wiki_page.id, title: wiki_page.title },
user: user && { id: user.id, name: user.name },
change_type: commit.message.split(' ')[0].downcase[0...(-1)],
timestamp: commit.authored_date } }
next nil if wiki_page.sha.blank?
user = User.find(commit.author.name.to_i)
{ sha: wiki_page.sha,
pred: wiki_page.pred,
succ: wiki_page.succ,
wiki_page: wiki_page && { id: wiki_page.id, title: wiki_page.title },
user: user && { id: user.id, name: user.name },
change_type: commit.message.split(' ')[0].downcase[0...(-1)],
timestamp: commit.authored_date }
}.compact
end
private