Merge branch 'use_gollum_wikis' of https://github.com/DanKnox/gitlabhq into DanKnox-use_gollum_wikis
Conflicts: app/views/layouts/project_resource.html.haml app/views/wikis/edit.html.haml app/views/wikis/pages.html.haml app/views/wikis/show.html.haml spec/features/gitlab_flavored_markdown_spec.rb
This commit is contained in:
commit
71ab011a17
30 changed files with 1252 additions and 86 deletions
|
@ -34,6 +34,7 @@
|
|||
@import "sections/login.scss";
|
||||
@import "sections/editor.scss";
|
||||
@import "sections/admin.scss";
|
||||
@import "sections/wiki.scss";
|
||||
|
||||
@import "highlight/white.scss";
|
||||
@import "highlight/dark.scss";
|
||||
|
|
6
app/assets/stylesheets/sections/wiki.scss
Normal file
6
app/assets/stylesheets/sections/wiki.scss
Normal file
|
@ -0,0 +1,6 @@
|
|||
h3.page_title .edit-wiki-header {
|
||||
width: 780px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-right: 7px;
|
||||
}
|
|
@ -2,58 +2,94 @@ class WikisController < ProjectResourceController
|
|||
before_filter :authorize_read_wiki!
|
||||
before_filter :authorize_write_wiki!, only: [:edit, :create, :history]
|
||||
before_filter :authorize_admin_wiki!, only: :destroy
|
||||
before_filter :load_gollum_wiki
|
||||
|
||||
def pages
|
||||
@wiki_pages = @project.wikis.group(:slug).ordered
|
||||
@wiki_pages = @gollum_wiki.pages
|
||||
end
|
||||
|
||||
def show
|
||||
@most_recent_wiki = @project.wikis.where(slug: params[:id]).ordered.first
|
||||
if params[:version_id]
|
||||
@wiki = @project.wikis.find(params[:version_id])
|
||||
else
|
||||
@wiki = @most_recent_wiki
|
||||
end
|
||||
@wiki = @gollum_wiki.find_page(params[:id], params[:version_id])
|
||||
|
||||
if @wiki
|
||||
render 'show'
|
||||
else
|
||||
if can?(current_user, :write_wiki, @project)
|
||||
@wiki = @project.wikis.new(slug: params[:id])
|
||||
render 'edit'
|
||||
else
|
||||
render 'empty'
|
||||
end
|
||||
return render('empty') unless can?(current_user, :write_wiki, @project)
|
||||
@wiki = WikiPage.new(@gollum_wiki)
|
||||
@wiki.title = params[:id]
|
||||
|
||||
render 'edit'
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
@wiki = @project.wikis.where(slug: params[:id]).ordered.first
|
||||
@wiki = Wiki.regenerate_from @wiki
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
end
|
||||
|
||||
def update
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
|
||||
return render('empty') unless can?(current_user, :write_wiki, @project)
|
||||
|
||||
if @wiki.update(content, format, message)
|
||||
redirect_to [@project, @wiki], notice: 'Wiki was successfully updated.'
|
||||
else
|
||||
render 'edit'
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
@wiki = @project.wikis.new(params[:wiki])
|
||||
@wiki.user = current_user
|
||||
@wiki = WikiPage.new(@gollum_wiki)
|
||||
|
||||
respond_to do |format|
|
||||
if @wiki.save
|
||||
format.html { redirect_to [@project, @wiki], notice: 'Wiki was successfully updated.' }
|
||||
else
|
||||
format.html { render action: "edit" }
|
||||
end
|
||||
if @wiki.create(wiki_params)
|
||||
redirect_to project_wiki_path(@project, @wiki), notice: 'Wiki was successfully updated.'
|
||||
else
|
||||
render action: "edit"
|
||||
end
|
||||
end
|
||||
|
||||
def history
|
||||
@wiki_pages = @project.wikis.where(slug: params[:id]).ordered
|
||||
unless @wiki = @gollum_wiki.find_page(params[:id])
|
||||
redirect_to project_wiki_path(@project, :home), notice: "Page not found"
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@wikis = @project.wikis.where(slug: params[:id]).delete_all
|
||||
|
||||
respond_to do |format|
|
||||
format.html { redirect_to project_wiki_path(@project, :index), notice: "Page was successfully deleted" }
|
||||
end
|
||||
@wiki = @gollum_wiki.find_page(params[:id])
|
||||
@wiki.delete if @wiki
|
||||
redirect_to project_wiki_path(@project, :home), notice: "Page was successfully deleted"
|
||||
end
|
||||
|
||||
def git_access
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_gollum_wiki
|
||||
@gollum_wiki = GollumWiki.new(@project, current_user)
|
||||
|
||||
# Call #wiki to make sure the Wiki Repo is initialized
|
||||
@gollum_wiki.wiki
|
||||
rescue GollumWiki::CouldNotCreateWikiError => ex
|
||||
flash[:notice] = "Could not create Wiki Repository at this time. Please try again later."
|
||||
redirect_to @project
|
||||
return false
|
||||
end
|
||||
|
||||
def wiki_params
|
||||
params[:wiki].slice(:title, :content, :format, :message)
|
||||
end
|
||||
|
||||
def content
|
||||
params[:wiki][:content]
|
||||
end
|
||||
|
||||
def format
|
||||
params[:wiki][:format]
|
||||
end
|
||||
|
||||
def message
|
||||
params[:wiki][:message]
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -49,4 +49,12 @@ module GitlabMarkdownHelper
|
|||
|
||||
@markdown.render(text).html_safe
|
||||
end
|
||||
|
||||
def render_wiki_content(wiki_page)
|
||||
if wiki_page.format == :markdown
|
||||
markdown(wiki_page.content)
|
||||
else
|
||||
wiki_page.formatted_content.html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
118
app/models/gollum_wiki.rb
Normal file
118
app/models/gollum_wiki.rb
Normal file
|
@ -0,0 +1,118 @@
|
|||
class GollumWiki
|
||||
|
||||
MARKUPS = {
|
||||
"Markdown" => :markdown,
|
||||
"RDoc" => :rdoc
|
||||
}
|
||||
|
||||
class CouldNotCreateWikiError < StandardError; end
|
||||
|
||||
# Returns a string describing what went wrong after
|
||||
# an operation fails.
|
||||
attr_reader :error_message
|
||||
|
||||
def initialize(project, user = nil)
|
||||
@project = project
|
||||
@user = user
|
||||
end
|
||||
|
||||
def path_with_namespace
|
||||
@project.path_with_namespace + ".wiki"
|
||||
end
|
||||
|
||||
def url_to_repo
|
||||
gitlab_shell.url_to_repo(path_with_namespace)
|
||||
end
|
||||
|
||||
def ssh_url_to_repo
|
||||
url_to_repo
|
||||
end
|
||||
|
||||
def http_url_to_repo
|
||||
http_url = [Gitlab.config.gitlab.url, "/", path_with_namespace, ".git"].join('')
|
||||
end
|
||||
|
||||
# Returns the Gollum::Wiki object.
|
||||
def wiki
|
||||
@wiki ||= begin
|
||||
Gollum::Wiki.new(path_to_repo)
|
||||
rescue Grit::NoSuchPathError
|
||||
create_repo!
|
||||
end
|
||||
end
|
||||
|
||||
# Returns an Array of Gitlab WikiPage instances or an
|
||||
# empty Array if this Wiki has no pages.
|
||||
def pages
|
||||
wiki.pages.map { |page| WikiPage.new(self, page, true) }
|
||||
end
|
||||
|
||||
# Returns the last 30 Commit objects accross the entire
|
||||
# repository.
|
||||
def recent_history
|
||||
Commit.fresh_commits(wiki.repo, 30)
|
||||
end
|
||||
|
||||
# Finds a page within the repository based on a tile
|
||||
# or slug.
|
||||
#
|
||||
# title - The human readable or parameterized title of
|
||||
# the page.
|
||||
#
|
||||
# Returns an initialized WikiPage instance or nil
|
||||
def find_page(title, version = nil)
|
||||
if page = wiki.page(title, version)
|
||||
WikiPage.new(self, page, true)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def create_page(title, content, format = :markdown, message = nil)
|
||||
commit = commit_details(:created, message, title)
|
||||
|
||||
wiki.write_page(title, format, content, commit)
|
||||
rescue Gollum::DuplicatePageError => e
|
||||
@error_message = "Duplicate page: #{e.message}"
|
||||
return false
|
||||
end
|
||||
|
||||
def update_page(page, content, format = :markdown, message = nil)
|
||||
commit = commit_details(:updated, message, page.title)
|
||||
|
||||
wiki.update_page(page, page.name, format, content, commit)
|
||||
end
|
||||
|
||||
def delete_page(page, message = nil)
|
||||
wiki.delete_page(page, commit_details(:deleted, message, page.title))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_repo!
|
||||
if gitlab_shell.add_repository(path_with_namespace)
|
||||
Gollum::Wiki.new(path_to_repo)
|
||||
else
|
||||
raise CouldNotCreateWikiError
|
||||
end
|
||||
end
|
||||
|
||||
def commit_details(action, message = nil, title = nil)
|
||||
commit_message = message || default_message(action, title)
|
||||
|
||||
{email: @user.email, name: @user.name, message: commit_message}
|
||||
end
|
||||
|
||||
def default_message(action, title)
|
||||
"#{@user.username} #{action} page: #{title}"
|
||||
end
|
||||
|
||||
def gitlab_shell
|
||||
@gitlab_shell ||= Gitlab::Shell.new
|
||||
end
|
||||
|
||||
def path_to_repo
|
||||
@path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git")
|
||||
end
|
||||
|
||||
end
|
181
app/models/wiki_page.rb
Normal file
181
app/models/wiki_page.rb
Normal file
|
@ -0,0 +1,181 @@
|
|||
class WikiPage
|
||||
include ActiveModel::Validations
|
||||
include ActiveModel::Conversion
|
||||
include StaticModel
|
||||
extend ActiveModel::Naming
|
||||
|
||||
def self.primary_key
|
||||
'slug'
|
||||
end
|
||||
|
||||
def self.model_name
|
||||
ActiveModel::Name.new(self, nil, 'wiki')
|
||||
end
|
||||
|
||||
def to_key
|
||||
[:slug]
|
||||
end
|
||||
|
||||
validates :title, presence: true
|
||||
validates :content, presence: true
|
||||
|
||||
# The Gitlab GollumWiki instance.
|
||||
attr_reader :wiki
|
||||
|
||||
# The raw Gollum::Page instance.
|
||||
attr_reader :page
|
||||
|
||||
# The attributes Hash used for storing and validating
|
||||
# new Page values before writing to the Gollum repository.
|
||||
attr_accessor :attributes
|
||||
|
||||
def initialize(wiki, page = nil, persisted = false)
|
||||
@wiki = wiki
|
||||
@page = page
|
||||
@persisted = persisted
|
||||
@attributes = {}.with_indifferent_access
|
||||
|
||||
set_attributes if persisted?
|
||||
end
|
||||
|
||||
# The escaped URL path of this page.
|
||||
def slug
|
||||
@attributes[:slug]
|
||||
end
|
||||
|
||||
alias :to_param :slug
|
||||
|
||||
# The formatted title of this page.
|
||||
def title
|
||||
@attributes[:title] || ""
|
||||
end
|
||||
|
||||
# Sets the title of this page.
|
||||
def title=(new_title)
|
||||
@attributes[:title] = new_title
|
||||
end
|
||||
|
||||
# The raw content of this page.
|
||||
def content
|
||||
@attributes[:content]
|
||||
end
|
||||
|
||||
# The processed/formatted content of this page.
|
||||
def formatted_content
|
||||
@attributes[:formatted_content]
|
||||
end
|
||||
|
||||
# The markup format for the page.
|
||||
def format
|
||||
@attributes[:format] || :markdown
|
||||
end
|
||||
|
||||
# The commit message for this page version.
|
||||
def message
|
||||
version.try(:message)
|
||||
end
|
||||
|
||||
# The Gitlab Commit instance for this page.
|
||||
def version
|
||||
return nil unless persisted?
|
||||
|
||||
@version ||= Commit.new(@page.version)
|
||||
end
|
||||
|
||||
# Returns an array of Gitlab Commit instances.
|
||||
def versions
|
||||
return [] unless persisted?
|
||||
|
||||
@page.versions.map { |v| Commit.new(v) }
|
||||
end
|
||||
|
||||
# Returns the Date that this latest version was
|
||||
# created on.
|
||||
def created_at
|
||||
@page.version.date
|
||||
end
|
||||
|
||||
# Returns boolean True or False if this instance
|
||||
# is an old version of the page.
|
||||
def historical?
|
||||
@page.historical?
|
||||
end
|
||||
|
||||
# Returns boolean True or False if this instance
|
||||
# has been fully saved to disk or not.
|
||||
def persisted?
|
||||
@persisted == true
|
||||
end
|
||||
|
||||
# Creates a new Wiki Page.
|
||||
#
|
||||
# attr - Hash of attributes to set on the new page.
|
||||
# :title - The title for the new page.
|
||||
# :content - The raw markup content.
|
||||
# :format - Optional symbol representing the
|
||||
# content format. Can be any type
|
||||
# listed in the GollumWiki::MARKUPS
|
||||
# Hash.
|
||||
# :message - Optional commit message to set on
|
||||
# the new page.
|
||||
#
|
||||
# Returns the String SHA1 of the newly created page
|
||||
# or False if the save was unsuccessful.
|
||||
def create(attr = {})
|
||||
@attributes.merge!(attr)
|
||||
|
||||
save :create_page, title, content, format, message
|
||||
end
|
||||
|
||||
# Updates an existing Wiki Page, creating a new version.
|
||||
#
|
||||
# new_content - The raw markup content to replace the existing.
|
||||
# format - Optional symbol representing the content format.
|
||||
# See GollumWiki::MARKUPS Hash for available formats.
|
||||
# message - Optional commit message to set on the new version.
|
||||
#
|
||||
# Returns the String SHA1 of the newly created page
|
||||
# or False if the save was unsuccessful.
|
||||
def update(new_content = "", format = :markdown, message = nil)
|
||||
@attributes[:content] = new_content
|
||||
@attributes[:format] = format
|
||||
|
||||
save :update_page, @page, content, format, message
|
||||
end
|
||||
|
||||
# Destroys the WIki Page.
|
||||
#
|
||||
# Returns boolean True or False.
|
||||
def delete
|
||||
if wiki.delete_page(@page)
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_attributes
|
||||
attributes[:slug] = @page.escaped_url_path
|
||||
attributes[:title] = @page.title
|
||||
attributes[:content] = @page.raw_data
|
||||
attributes[:formatted_content] = @page.formatted_data
|
||||
attributes[:format] = @page.format
|
||||
end
|
||||
|
||||
def save(method, *args)
|
||||
if valid? && wiki.send(method, *args)
|
||||
@page = wiki.wiki.paged(title)
|
||||
|
||||
set_attributes
|
||||
|
||||
@persisted = true
|
||||
else
|
||||
errors.add(:base, wiki.error_message) if wiki.error_message
|
||||
@persisted = false
|
||||
end
|
||||
@persisted
|
||||
end
|
||||
|
||||
end
|
|
@ -18,6 +18,11 @@ class ProjectObserver < ActiveRecord::Observer
|
|||
project.path_with_namespace
|
||||
)
|
||||
|
||||
GitlabShellWorker.perform_async(
|
||||
:remove_repository,
|
||||
project.path_with_namespace + ".wiki"
|
||||
)
|
||||
|
||||
project.satellite.destroy
|
||||
|
||||
log_info("Project \"#{project.name}\" was removed")
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
%span.count.merge_counter= @project.merge_requests.opened.count
|
||||
|
||||
= nav_link(html_options: {class: "#{project_wiki_tab_class}"}) do
|
||||
= link_to 'Wiki', project_wiki_path(@project, :index)
|
||||
= link_to 'Wiki', project_wiki_path(@project, :home)
|
||||
|
||||
- if can? current_user, :admin_project, @project
|
||||
= nav_link(html_options: {class: "#{project_tab_class}"}) do
|
||||
|
|
|
@ -8,9 +8,12 @@
|
|||
|
||||
.ui-box.ui-box-show
|
||||
.ui-box-head
|
||||
= f.label :title
|
||||
.input= f.text_field :title, class: 'span8'
|
||||
= f.hidden_field :slug
|
||||
%h3.page_title
|
||||
.edit-wiki-header
|
||||
= @wiki.title.titleize
|
||||
= f.hidden_field :title, value: @wiki.title
|
||||
= f.select :format, options_for_select(GollumWiki::MARKUPS, {selected: @wiki.format}), {}, class: "pull-right input-medium"
|
||||
= f.label :format, class: "pull-right", style: "padding-right: 20px;"
|
||||
.ui-box-body
|
||||
.input
|
||||
%span.cgray
|
||||
|
@ -22,6 +25,9 @@
|
|||
.ui-box-bottom
|
||||
= f.label :content
|
||||
.input= f.text_area :content, class: 'span8 js-gfm-input'
|
||||
.ui-box-bottom
|
||||
= f.label :commit_message
|
||||
.input= f.text_field :message, class: 'span8'
|
||||
.actions
|
||||
= f.submit 'Save', class: "btn-save btn"
|
||||
= link_to "Cancel", project_wiki_path(@project, :index), class: "btn btn-cancel"
|
||||
|
|
16
app/views/wikis/_main_links.html.haml
Normal file
16
app/views/wikis/_main_links.html.haml
Normal file
|
@ -0,0 +1,16 @@
|
|||
%span.pull-right
|
||||
= link_to project_wiki_path(@project, :home), class: "btn btn-small grouped" do
|
||||
Home
|
||||
= link_to pages_project_wikis_path(@project), class: "btn btn-small grouped" do
|
||||
Pages
|
||||
- if (@wiki && @wiki.persisted?)
|
||||
= link_to history_project_wiki_path(@project, @wiki), class: "btn btn-small grouped" do
|
||||
History
|
||||
- if can?(current_user, :write_wiki, @project)
|
||||
- if @wiki && @wiki.persisted?
|
||||
= link_to edit_project_wiki_path(@project, @wiki), class: "btn btn-small grouped" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
= link_to git_access_project_wikis_path(@project), class: "btn btn-small grouped" do
|
||||
%i.icon-download-alt
|
||||
Git Access
|
|
@ -1,7 +1,9 @@
|
|||
%h3.page_title Editing page
|
||||
%h3.page_title
|
||||
Editing page
|
||||
= render partial: 'main_links'
|
||||
= render 'form'
|
||||
|
||||
.pull-right
|
||||
- if can? current_user, :admin_wiki, @project
|
||||
- if @wiki.persisted? && can?(current_user, :admin_wiki, @project)
|
||||
= link_to project_wiki_path(@project, @wiki), confirm: "Are you sure you want to delete this page?", method: :delete, class: "btn btn-small btn-remove" do
|
||||
Delete this page
|
||||
|
|
36
app/views/wikis/git_access.html.haml
Normal file
36
app/views/wikis/git_access.html.haml
Normal file
|
@ -0,0 +1,36 @@
|
|||
%h3.page_title
|
||||
Git Access
|
||||
%strong= @gollum_wiki.path_with_namespace
|
||||
= render partial: 'main_links'
|
||||
|
||||
%br
|
||||
.content
|
||||
.project_clone_panel
|
||||
.row
|
||||
.span7
|
||||
.form-horizontal
|
||||
.input-prepend.project_clone_holder
|
||||
%button{class: "btn active", :"data-clone" => @gollum_wiki.ssh_url_to_repo} SSH
|
||||
%button{class: "btn", :"data-clone" => @gollum_wiki.http_url_to_repo}= Gitlab.config.gitlab.protocol.upcase
|
||||
= text_field_tag :project_clone, @gollum_wiki.url_to_repo, class: "one_click_select input-xxlarge", readonly: true
|
||||
.git-empty
|
||||
%fieldset
|
||||
%legend Install Gollum:
|
||||
%pre.dark
|
||||
:preserve
|
||||
gem install gollum
|
||||
|
||||
%legend Clone Your Wiki:
|
||||
%pre.dark
|
||||
:preserve
|
||||
git clone #{@gollum_wiki.path_with_namespace}.git
|
||||
cd #{@gollum_wiki.path_with_namespace}
|
||||
|
||||
%legend Start Gollum And Edit Locally:
|
||||
%pre.dark
|
||||
:preserve
|
||||
gollum
|
||||
== Sinatra/1.3.5 has taken the stage on 4567 for development with backup from Thin
|
||||
>> Thin web server (v1.5.0 codename Knife)
|
||||
>> Maximum connections set to 1024
|
||||
>> Listening on 0.0.0.0:4567, CTRL+C to stop
|
|
@ -1,23 +1,29 @@
|
|||
%h3.page_title
|
||||
%span.cgray History for
|
||||
= @wiki_pages.first.title
|
||||
= @wiki.title.titleize
|
||||
= render partial: 'main_links'
|
||||
%br
|
||||
%table
|
||||
%thead
|
||||
%tr
|
||||
%th Page version
|
||||
%th Author
|
||||
%th Commit Message
|
||||
%th Last updated
|
||||
%th Updated by
|
||||
%th Format
|
||||
%tbody
|
||||
- @wiki_pages.each_with_index do |wiki_page, i|
|
||||
- @wiki.versions.each do |version|
|
||||
- commit = CommitDecorator.new(version)
|
||||
%tr
|
||||
%td
|
||||
%strong
|
||||
= link_to project_wiki_path(@project, wiki_page, version_id: wiki_page.id) do
|
||||
Version
|
||||
= @wiki_pages.count - i
|
||||
= link_to project_wiki_path(@project, @wiki, version_id: commit.id) do
|
||||
= commit.short_id
|
||||
%td= commit.author_link avatar: true, size: 24
|
||||
%td
|
||||
= wiki_page.created_at.to_s(:short)
|
||||
(#{time_ago_in_words(wiki_page.created_at)}
|
||||
ago)
|
||||
%td= link_to_member(@project, wiki_page.user)
|
||||
= commit.title
|
||||
%td
|
||||
= time_ago_in_words(version.date)
|
||||
ago
|
||||
%td
|
||||
%strong
|
||||
= @wiki.page.wiki.page(@wiki.page.name, commit.id).try(:format)
|
||||
|
|
|
@ -1,21 +1,25 @@
|
|||
= render 'wikis/nav'
|
||||
%h3.page_title All Pages
|
||||
%h3.page_title
|
||||
All Pages
|
||||
= render partial: 'main_links'
|
||||
%br
|
||||
%table
|
||||
%thead
|
||||
%tr
|
||||
%th Title
|
||||
%th Slug
|
||||
%th Format
|
||||
%th Last updated
|
||||
%th Updated by
|
||||
%tbody
|
||||
- @wiki_pages.each do |wiki_page|
|
||||
%tr
|
||||
%td
|
||||
%strong= link_to wiki_page.title, project_wiki_path(@project, wiki_page)
|
||||
%td= wiki_page.slug
|
||||
%strong= link_to wiki_page.title.titleize, project_wiki_path(@project, wiki_page)
|
||||
%td
|
||||
%strong= wiki_page.format
|
||||
%td
|
||||
= wiki_page.created_at.to_s(:short) do
|
||||
(#{time_ago_in_words(wiki_page.created_at)}
|
||||
ago)
|
||||
%td= link_to_member(@project, wiki_page.user)
|
||||
- commit = CommitDecorator.decorate(wiki_page.version)
|
||||
%td= commit.author_link avatar: true, size: 24
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
= render 'wikis/nav'
|
||||
- if @wiki != @most_recent_wiki
|
||||
.alert
|
||||
%h3.page_title
|
||||
= @wiki.title.titleize
|
||||
= render partial: 'main_links'
|
||||
%br
|
||||
- if @wiki.historical?
|
||||
.warning_message
|
||||
This is an old version of this page.
|
||||
You can view the #{link_to "most recent version", project_wiki_path(@project, @wiki)} or browse the #{link_to "history", history_project_wiki_path(@project, @wiki)}.
|
||||
|
||||
|
@ -19,6 +23,7 @@
|
|||
|
||||
.file_content.wiki
|
||||
= preserve do
|
||||
= markdown @wiki.content
|
||||
= render_wiki_content(@wiki)
|
||||
|
||||
%p.time Last edited by #{link_to_member @project, @wiki.user}, #{time_ago_in_words @wiki.created_at} ago
|
||||
- commit = CommitDecorator.new(@wiki.version)
|
||||
%p.time Last edited by #{commit.author_link(avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue