Merge branch 'master' into discussions

This commit is contained in:
Riyad Preukschas 2013-01-15 00:53:00 +01:00
commit bda7fe38d0
70 changed files with 571 additions and 311 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 749 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

View file

@ -1,7 +1,4 @@
$ ->
dashboardPage()
dashboardPage = ->
window.dashboardPage = ->
Pager.init 20, true
$(".event_filter_link").bind "click", (event) ->
event.preventDefault()

View file

@ -32,6 +32,7 @@
@import "sections/profile.scss";
@import "sections/login.scss";
@import "sections/editor.scss";
@import "sections/admin.scss";
@import "highlight/white.scss";
@import "highlight/dark.scss";

View file

@ -371,6 +371,7 @@ li.note {
font-size: 48px;
padding: 20px;
text-align: center;
font-weight: normal;
}
}
}
@ -445,6 +446,19 @@ li.note {
}
}
.warning_message {
border-left: 4px solid #ed9;
color: #b90;
padding: 10px;
margin-bottom: 10px;
background: #ffffe6;
padding-left: 20px;
&.centered {
text-align: center;
}
}
.oauth_select_holder {
padding: 20px;
img {

View file

@ -37,24 +37,6 @@
background: #fff;
font-size: 11px;
&.wiki {
font-size: 13px;
code {
padding: 0 4px;
}
padding: 20px;
h1 { font-size: 26px; line-height: 46px; }
h2 { font-size: 22px; line-height: 42px; }
h3 { font-size: 20px; line-height: 40px; }
h4 { font-size: 18px; line-height: 32px; }
h5 { font-size: 16px; line-height: 26px; }
.white .highlight pre {
background: #f5f5f5;
}
}
&.image_file {
background: #eee;
text-align: center;
@ -64,6 +46,11 @@
}
}
&.wiki {
padding: 20px;
font-size: 13px;
}
&.blob_file {
}

View file

@ -81,3 +81,22 @@ a:focus {
.monospace {
font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace;
}
/**
* Wiki typography
*
*/
.wiki {
font-size: 13px;
code { padding: 0 4px; }
p { font-size: 13px; }
h1 { font-size: 32px; line-height: 40px; margin: 10px 0;}
h2 { font-size: 26px; line-height: 40px; margin: 10px 0;}
h3 { font-size: 22px; line-height: 40px; margin: 10px 0;}
h4 { font-size: 18px; line-height: 20px; margin: 10px 0;}
h5 { font-size: 14px; line-height: 20px; margin: 10px 0;}
h6 { font-size: 12px; line-height: 20px; margin: 10px 0;}
.white .highlight pre { background: #f5f5f5; }
ul { margin: 0 0 9px 25px !important; }
}

View file

@ -0,0 +1,5 @@
.admin-filter form {
label { width: 110px; }
.controls { margin-left: 130px; }
.form-actions { padding-left: 130px; background: #fff }
}

View file

@ -132,21 +132,25 @@
.event_filter {
position: absolute;
width: 40px;
margin-left: -50px;
margin-left: -55px;
.filter_icon {
float: left;
border-left: 3px solid #4bc;
padding: 7px;
background: #f9f9f9;
margin-bottom: 10px;
img {
width: 20px;
a {
text-align:center;
border-left: 3px solid #29B;
background: #f9f9f9;
margin-bottom: 10px;
float: left;
padding: 9px 7px;
font-size: 18px;
width: 26px;
}
&.inactive {
border-left: 3px solid #EEE;
opacity: 0.5;
a {
color: #DDD;
border-left: 3px solid #EEE;
}
}
}
}

View file

@ -80,6 +80,18 @@
margin: 0;
padding: 0;
}
td.blame-commit {
background: #f9f9f9;
min-width: 350px;
}
td.blame-numbers {
pre {
color: #AAA;
white-space: pre;
}
background: #f1f1f1;
border-left: 1px solid #DDD;
}
}
}

View file

@ -4,6 +4,9 @@ class Admin::ProjectsController < AdminController
def index
@projects = Project.scoped
@projects = @projects.where(namespace_id: params[:namespace_id]) if params[:namespace_id].present?
@projects = @projects.where(public: true) if params[:public_only].present?
@projects = @projects.with_push if params[:with_push].present?
@projects = @projects.abandoned if params[:abandoned].present?
@projects = @projects.where(namespace_id: nil) if params[:namespace_id] == Namespace.global_id
@projects = @projects.search(params[:name]) if params[:name].present?
@projects = @projects.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page]).per(20)

View file

@ -0,0 +1,12 @@
class Public::ProjectsController < ApplicationController
skip_before_filter :authenticate_user!,
:reject_blocked, :set_current_user_for_observers,
:add_abilities
layout 'public'
def index
@projects = Project.public
@projects = @projects.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page]).per(20)
end
end

View file

@ -2,20 +2,19 @@ class WikisController < ProjectResourceController
before_filter :authorize_read_wiki!
before_filter :authorize_write_wiki!, only: [:edit, :create, :history]
before_filter :authorize_admin_wiki!, only: :destroy
def pages
@wikis = @project.wikis.group(:slug).order("created_at")
@wiki_pages = @project.wikis.group(:slug).ordered
end
def show
if params[:old_page_id]
@wiki = @project.wikis.find(params[:old_page_id])
@most_recent_wiki = @project.wikis.where(slug: params[:id]).ordered.first
if params[:version_id]
@wiki = @project.wikis.find(params[:version_id])
else
@wiki = @project.wikis.where(slug: params[:id]).order("created_at").last
@wiki = @most_recent_wiki
end
@note = @project.notes.new(noteable: @wiki)
if @wiki
render 'show'
else
@ -29,7 +28,7 @@ class WikisController < ProjectResourceController
end
def edit
@wiki = @project.wikis.where(slug: params[:id]).order("created_at").last
@wiki = @project.wikis.where(slug: params[:id]).ordered.first
@wiki = Wiki.regenerate_from @wiki
end
@ -47,9 +46,9 @@ class WikisController < ProjectResourceController
end
def history
@wikis = @project.wikis.where(slug: params[:id]).order("created_at")
@wiki_pages = @project.wikis.where(slug: params[:id]).ordered
end
def destroy
@wikis = @project.wikis.where(slug: params[:id]).delete_all

View file

@ -30,8 +30,17 @@ module EventsHelper
content_tag :div, class: "filter_icon #{inactive}" do
link_to dashboard_path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do
image_tag "event_filter_#{key}.png"
content_tag :i, nil, class: icon_for_event[key]
end
end
end
def icon_for_event
{
EventFilter.push => "icon-upload-alt",
EventFilter.merged => "icon-check",
EventFilter.comments => "icon-comments",
EventFilter.team => "icon-user",
}
end
end

View file

@ -26,19 +26,17 @@ module ProjectsHelper
# Build avatar image tag
avatar = image_tag(gravatar_icon(author.try(:email)), width: 16, class: "lil_av")
# Build name strong tag
name = content_tag :strong, author.name, class: 'author'
# Build name span tag
name = content_tag :span, author.name, class: 'author'
author_html = avatar + name
tm = project.team_member_by_id(author)
content_tag :span, class: 'member-link' do
if tm
link_to author_html, project_team_member_path(project, tm), class: "author_link"
else
author_html
end
if tm
link_to author_html, project_team_member_path(project, tm), class: "author_link"
else
author_html
end
end

View file

@ -28,7 +28,7 @@ class Project < ActiveRecord::Base
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
:wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
attr_accessible :namespace_id, :creator_id, as: :admin
attr_accessible :namespace_id, :creator_id, :public, as: :admin
attr_accessor :error_code
@ -81,8 +81,21 @@ class Project < ActiveRecord::Base
scope :sorted_by_activity, ->() { order("(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC") }
scope :personal, ->(user) { where(namespace_id: user.namespace_id) }
scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) }
scope :public, where(public: true)
class << self
def abandoned
project_ids = Event.select('max(created_at) as latest_date, project_id').
group('project_id').
having('latest_date < ?', 6.months.ago).map(&:project_id)
where(id: project_ids)
end
def with_push
includes(:events).where('events.action = ?', Event::Pushed)
end
def active
joins(:issues, :notes, :merge_requests).order("issues.created_at, notes.created_at, merge_requests.created_at DESC")
end

View file

@ -151,12 +151,12 @@ class Repository
return nil unless commit
# Build file path
file_name = self.path + "-" + commit.id.to_s + ".tar.gz"
storage_path = Rails.root.join("tmp", "repositories", self.path_with_namespace)
file_name = self.path_with_namespace + "-" + commit.id.to_s + ".tar.gz"
storage_path = Rails.root.join("tmp", "repositories")
file_path = File.join(storage_path, file_name)
# Put files into a directory before archiving
prefix = self.path + "/"
prefix = self.path_with_namespace + "/"
# Create file if not exists
unless File.exists?(file_path)

View file

@ -25,6 +25,8 @@ class Wiki < ActiveRecord::Base
before_update :set_slug
scope :ordered, order("created_at DESC")
def to_param
slug
end

View file

@ -25,17 +25,51 @@
= link_to 'New User', new_admin_user_path, class: "btn small"
.row
.span6
%h3 Latest projects
.span4
%h4 Latest projects
%hr
- @projects.each do |project|
%p
= link_to project.name_with_namespace, [:admin, project]
.span6
%h3 Latest users
%span.light.right
= time_ago_in_words project.created_at
ago
.span4
%h4 Latest users
%hr
- @users.each do |user|
%p
= link_to [:admin, user] do
= user.name
%small= user.email
%span.light.right
= time_ago_in_words user.created_at
ago
.span4
%h4 Stats
%hr
%p
Issues
%span.light.right
= Issue.count
%p
Merge Requests
%span.light.right
= MergeRequest.count
%p
Notes
%span.light.right
= Note.count
%p
Snippets
%span.light.right
= Snippet.count
%p
SSH Keys
%span.light.right
= Key.count
%p
Milestones
%span.light.right
= Milestone.count

View file

@ -5,6 +5,8 @@
= link_to "application.log", "#application", 'data-toggle' => 'tab'
%li
= link_to "production.log", "#production", 'data-toggle' => 'tab'
%li
= link_to "sidekiq.log", "#sidekiq", 'data-toggle' => 'tab'
%p.light To prevent perfomance issues admin logs output the last 2000 lines
.tab-content
@ -50,3 +52,17 @@
- Gitlab::Logger.read_latest_for('production.log').each do |line|
%li
%p= line
.tab-pane#sidekiq
.file_holder#README
.file_title
%i.icon-file
sidekiq.log
.right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
Scroll down
.file_content.logs
%ol
- Gitlab::Logger.read_latest_for('sidekiq.log').each do |line|
%li
%p= line

View file

@ -43,6 +43,13 @@
= f.label :wiki_enabled, "Wiki"
.input= f.check_box :wiki_enabled
%fieldset.features
%legend Public mode:
.clearfix
= f.label :public do
%span Allow public http clone
.input= f.check_box :public
%fieldset.features
%legend Transfer:
.control-group

View file

@ -1,38 +1,61 @@
%h3.page_title
Projects (#{Project.count})
Projects
= link_to 'New Project', new_project_path, class: "btn small right"
%br
= form_tag admin_projects_path, method: :get, class: 'form-inline' do
= select_tag :namespace_id, namespaces_options(params[:namespace_id], :all), class: "chosen xlarge", prompt: "Project namespace"
= text_field_tag :name, params[:name], class: "xlarge"
= submit_tag "Search", class: "btn submit primary"
%table
%thead
%tr
%th
Name
%i.icon-sort-down
%th Path
%th Team Members
%th Owner
%th Last Commit
%th Edit
%th.cred Danger Zone!
%hr
- @projects.each do |project|
%tr
%td
= link_to project.name_with_namespace, [:admin, project]
%td
%span.monospace= project.path_with_namespace + ".git"
%td= project.users_projects.count
%td
- if project.owner
= link_to project.owner.name, [:admin, project.owner]
.row
.span4
.admin-filter
= form_tag admin_projects_path, method: :get, class: 'form-inline' do
.control-group
= label_tag :name, 'Name:', class: 'control-label'
.controls
= text_field_tag :name, params[:name], class: "span2"
.control-group
= label_tag :namespace_id, 'Namespace:', class: 'control-label'
.controls
= select_tag :namespace_id, namespaces_options(params[:namespace_id], :all), class: "chosen span2", prompt: "Any"
.control-group
= label_tag :public_only, 'Public Only', class: 'control-label'
.controls
= check_box_tag :public_only, 1, params[:public_only]
.control-group
= label_tag :with_push, 'Not empty', class: 'control-label'
.controls
= check_box_tag :with_push, 1, params[:with_push]
&nbsp;
%span.light Projects with push events
.control-group
= label_tag :abandoned, 'Abandoned', class: 'control-label'
.controls
= check_box_tag :abandoned, 1, params[:abandoned]
&nbsp;
%span.light No activity over 6 month
.form-actions
= submit_tag "Search", class: "btn submit primary"
= link_to "Reset", admin_projects_path, class: "btn"
.span8
.ui-box
%h5.title
Projects (#{@projects.total_count})
%ul.well-list
- @projects.each do |project|
%li
- if project.public
%i.icon-unlock.cred
- else
%i.icon-lock.cgreen
= link_to project.name_with_namespace, [:admin, project]
.right
= link_to 'Edit', edit_admin_project_path(project), id: "edit_#{dom_id(project)}", class: "btn small"
= link_to 'Destroy', [:admin, project], confirm: "REMOVE #{project.name}? Are you sure?", method: :delete, class: "btn small danger"
- if @projects.blank?
%p.nothing_here_message 0 projects matches
- else
(deleted)
%td= last_commit(project)
%td= link_to 'Edit', edit_admin_project_path(project), id: "edit_#{dom_id(project)}", class: "btn small"
%td.bgred= link_to 'Destroy', [:admin, project], confirm: "REMOVE #{project.name}? Are you sure?", method: :delete, class: "btn small danger"
= paginate @projects, theme: "admin"
%li.bottom
= paginate @projects, theme: "gitlab"

View file

@ -77,6 +77,13 @@
SSH:
%td
= link_to @project.ssh_url_to_repo
- if @project.public
%tr.bgred
%td
%b
Public Read-Only Code access:
%td
= check_box_tag 'public', nil, @project.public
- if @repository
%table.zebra-striped

View file

@ -20,16 +20,27 @@
%span.options= render "tree/blob_actions"
.file_content.blame
%table
- current_line = 1
- @blame.each do |commit, lines|
- commit = Commit.new(commit)
- commit = CommitDecorator.decorate(commit)
- commit = CommitDecorator.decorate(Commit.new(commit))
%tr
%td.author= commit.author_link avatar: true, size: 16
%td.blame_commit
&nbsp;
%code= link_to commit.short_id, project_commit_path(@project, commit)
= link_to_gfm truncate(commit.title, length: 30), project_commit_path(@project, commit), class: "row_title" rescue "--broken encoding"
%td.blame-commit
%span.commit
= link_to commit.short_id(8), project_commit_path(@project, commit), class: "commit_short_id"
&nbsp;
= commit.author_link avatar: true, size: 16
&nbsp;
= link_to_gfm truncate(commit.title, length: 20), project_commit_path(@project, commit.id), class: "row_title"
%td.lines.blame-numbers
%pre
- if lines.empty?
= current_line
- current_line += 1
- else
- lines.each do |line|
= current_line
- current_line += 1
%td.lines
= preserve do
%pre
= lines.join("\n")
%pre
- lines.each do |line|
= line

View file

@ -7,3 +7,6 @@
- else
= render "zero_authorized_projects"
:javascript
dashboardPage();

View file

@ -12,9 +12,9 @@
- if @issues.any?
- @issues.group_by(&:project).each do |group|
%div.ui-box
- @project = group[0]
- project = group[0]
%h5.title
= link_to_project @project
= link_to_project project
%ul.well-list.issues_table
- group[1].each do |issue|
= render(partial: 'issues/show', locals: {issue: issue})

View file

@ -8,17 +8,4 @@
.span3
= render 'filter', entity: 'merge_request'
.span9
- if @merge_requests.any?
- @merge_requests.group_by(&:project).each do |group|
.ui-box
- @project = group[0]
%h5.title
= link_to_project @project
%ul.well-list
- group[1].each do |merge_request|
= render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
%hr
= paginate @merge_requests, theme: "gitlab"
- else
%h3.nothing_here_message Nothing to show here
= render 'shared/merge_requests'

View file

@ -1,7 +1,5 @@
- if show_last_push_widget?(event)
.event_lp
= image_tag "event_push.png"
&nbsp;
%span You pushed to
= link_to project_commits_path(event.project, event.ref_name) do
%strong= truncate(event.ref_name, length: 28)

View file

@ -11,9 +11,9 @@
- if @issues.any?
- @issues.group_by(&:project).each do |group|
%div.ui-box
- @project = group[0]
- project = group[0]
%h5.title
= link_to_project @project
= link_to_project project
%ul.well-list.issues_table
- group[1].each do |issue|
= render(partial: 'issues/show', locals: {issue: issue})

View file

@ -8,17 +8,4 @@
.span3
= render 'filter', entity: 'merge_request'
.span9
- if @merge_requests.any?
- @merge_requests.group_by(&:project).each do |group|
.ui-box
- @project = group[0]
%h5.title
= link_to_project @project
%ul.well-list
- group[1].each do |merge_request|
= render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
%hr
= paginate @merge_requests, theme: "gitlab"
- else
%h3.nothing_here_message Nothing to show here
= render 'shared/merge_requests'

View file

@ -47,3 +47,5 @@
%li
%span= link_to "System Hooks", help_system_hooks_path
%li
%span= link_to "Public Area", help_public_area_path

View file

@ -0,0 +1,16 @@
%h3.page_title Public Area
.back_link
= link_to help_path do
&larr; to index
%hr
%p
Public area - is part of application with public access.
%br
It used to list all projects with public read-only access.
%br
If you enable public http access to the project - it will appears there
%br
Follow #{link_to "this link", public_root_path} to visit Public Area

View file

@ -51,8 +51,9 @@
- if @issue.description.present?
.ui-box-bottom
= preserve do
= markdown @issue.description
.wiki
= preserve do
= markdown @issue.description
.voting_notes#notes= render "notes/notes_with_form"

View file

@ -1,9 +0,0 @@
- if @key.valid?
:plain
$("#new_key_dialog").dialog("close");
$("#keys-table .data").append("#{escape_javascript(render(partial: 'show', locals: {key: @key}))}");
$("#no_ssh_key_defined").hide();
- else
:plain
$("#new_key_dialog").empty();
$("#new_key_dialog").append("#{escape_javascript(render('form'))}");

View file

@ -1,11 +0,0 @@
:plain
var new_key_dialog = $("<div id='new_key_dialog'></div>");
new_key_dialog.html("#{escape_javascript(render('form'))}");
$(new_key_dialog).dialog({
width: 350,
resizable: false,
draggable: false,
title: "Add new public key",
close: function(event, ui) { $("#new_key_dialog").remove();},
modal: true
});

View file

@ -6,12 +6,14 @@
= favicon_link_tag 'favicon.ico'
= stylesheet_link_tag "application"
= javascript_include_tag "application"
-# Atom feed
- if controller_name == 'projects' && action_name == 'index'
= auto_discovery_link_tag :atom, projects_url(:atom, private_token: current_user.private_token), title: "Dashboard feed"
- if @project && !@project.new_record?
- if current_controller?(:tree, :commits)
= auto_discovery_link_tag(:atom, project_commits_url(@project, @ref, format: :atom, private_token: current_user.private_token), title: "Recent commits to #{@project.name}:#{@ref}")
- if current_controller?(:issues)
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, private_token: current_user.private_token), title: "#{@project.name} issues")
= csrf_meta_tags
-# Atom feed
- if current_user
- if controller_name == 'projects' && action_name == 'index'
= auto_discovery_link_tag :atom, projects_url(:atom, private_token: current_user.private_token), title: "Dashboard feed"
- if @project && !@project.new_record?
- if current_controller?(:tree, :commits)
= auto_discovery_link_tag(:atom, project_commits_url(@project, @ref, format: :atom, private_token: current_user.private_token), title: "Recent commits to #{@project.name}:#{@ref}")
- if current_controller?(:issues)
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, private_token: current_user.private_token), title: "#{@project.name} issues")

View file

@ -18,7 +18,7 @@
%span.count= current_user.cared_merge_requests.opened.count
= nav_link(path: 'search#show') do
= link_to "Search", search_path
= nav_link(path: 'help#index') do
= nav_link(controller: :help) do
= link_to "Help", help_path
.content= yield

View file

@ -0,0 +1,17 @@
!!! 5
%html{ lang: "en"}
= render "layouts/head", title: "Public Area"
%body{class: "#{app_theme} application"}
%header.navbar.navbar-static-top.navbar-gitlab
.navbar-inner
.container
%div.app_logo
%span.separator
= link_to root_path, class: "home" do
%h1 GITLAB
%span.separator
%h1.project_name Public Area
.container
.content
.prepend-top-20
= yield

View file

@ -0,0 +1,17 @@
%h3.page_title
Projects
%small Read-Only Access
%hr
%ul.unstyled
- @projects.each do |project|
%li.clearfix
%h5
%i.icon-star.cgreen
= project.name_with_namespace
.right
%span.monospace.tiny
git clone #{project.http_url_to_repo}
= paginate @projects, theme: "admin"

View file

@ -1,4 +1,5 @@
.input-prepend.project_clone_holder
%button{class: "btn active", :"data-clone" => @project.ssh_url_to_repo} SSH
%button{class: "btn", :"data-clone" => @project.http_url_to_repo}= Gitlab.config.gitlab.protocol.upcase
= text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select input-xxlarge"

View file

@ -0,0 +1,14 @@
- if @merge_requests.any?
- @merge_requests.group_by(&:project).each do |group|
.ui-box
- project = group[0]
%h5.title
= link_to_project project
%ul.well-list
- group[1].each do |merge_request|
= render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
%hr
= paginate @merge_requests, theme: "gitlab"
- else
%h3.nothing_here_message Nothing to show here

View file

@ -1,3 +1,8 @@
%h3.page_title Editing page
%hr
= render 'form'
.right
- if 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 small danger" do
Delete this page

View file

@ -1,4 +1,4 @@
%h3.page_title Empty page
%hr
.alert-message.block-message.warning
%span You are not allowed to create wiki pages
.error_message
You are not allowed to create wiki pages

View file

@ -1,20 +1,23 @@
%h3.page_title
%span.cgray History for
= @wikis.last.title
= @wiki_pages.first.title
%br
%table
%thead
%tr
%th #
%th last edit
%th created by
%th Page version
%th Last updated
%th Updated by
%tbody
- @wikis.each_with_index do |wiki_page, i|
- @wiki_pages.each_with_index do |wiki_page, i|
%tr
%td= i + 1
%td
= link_to wiki_page.created_at.to_s(:short), project_wiki_path(@project, wiki_page, old_page_id: wiki_page.id)
%strong
= link_to project_wiki_path(@project, wiki_page, version_id: wiki_page.id) do
Version
= @wiki_pages.count - i
%td
= wiki_page.created_at.to_s(:short)
(#{time_ago_in_words(wiki_page.created_at)}
ago)
%td= wiki_page.user.name
%td= link_to_member(@project, wiki_page.user)

View file

@ -4,15 +4,17 @@
%thead
%tr
%th Title
%th slug
%th created by
%th Slug
%th Last updated
%th Updated by
%tbody
- @wikis.each_with_index do |wiki_page, i|
- @wiki_pages.each do |wiki_page|
%tr
%td
= link_to wiki_page.title, project_wiki_path(@project, wiki_page, old_page_id: wiki_page.id)
(#{time_ago_in_words(wiki_page.created_at)}
ago)
%strong= link_to wiki_page.title, project_wiki_path(@project, wiki_page)
%td= wiki_page.slug
%td= wiki_page.user.name
%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)

View file

@ -10,12 +10,14 @@
%i.icon-edit
Edit
%br
- if @wiki != @most_recent_wiki
.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)}.
.file_holder
.file_content.wiki
= preserve do
= markdown @wiki.content
%p.time Last edited by #{@wiki.user.name}, #{time_ago_in_words @wiki.created_at} ago
- if 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 do
Delete this page
%p.time Last edited by #{link_to_member @project, @wiki.user}, #{time_ago_in_words @wiki.created_at} ago