Merge branch 'master' into discussions

Conflicts:
	app/assets/stylesheets/main.scss
	app/models/project.rb
	app/views/notes/_common_form.html.haml
	app/views/notes/_per_line_form.html.haml
	lib/gitlab/markdown.rb
	spec/models/note_spec.rb
This commit is contained in:
Riyad Preukschas 2012-12-23 01:03:57 +01:00
commit db2c15369c
276 changed files with 4466 additions and 2603 deletions

View file

@ -1,12 +0,0 @@
= form_for [:admin, @group] do |f|
- if @group.errors.any?
.alert-message.block-message.error
%span= @group.errors.full_messages.first
.clearfix.group_name_holder
= f.label :name do
Group name is
.input
= f.text_field :name, placeholder: "Example Group", class: "xxlarge"
.form-actions
= f.submit 'Save group', class: "btn save-btn"

View file

@ -1,3 +1,28 @@
%h3.page_title Edit Group
%br
= render 'form'
%h3.page_title Rename Group
%hr
= form_for [:admin, @group] do |f|
- if @group.errors.any?
.alert-message.block-message.error
%span= @group.errors.full_messages.first
.clearfix.group_name_holder
= f.label :name do
Group name is
.input
= f.text_field :name, placeholder: "Example Group", class: "xxlarge"
.clearfix.group_name_holder
= f.label :path do
%span.cred Group path is
.input
= f.text_field :path, placeholder: "example-group", class: "xxlarge danger"
%ul.cred
%li Changing group path can have unintended side effects.
%li Renaming group path will rename directory for all related projects
%li It will change web url for access group and group projects.
%li It will change the git path to repositories under this group.
.form-actions
= f.submit 'Rename group', class: "btn danger"
= link_to 'Cancel', admin_groups_path, class: "btn cancel-btn"

View file

@ -12,17 +12,24 @@
%table
%thead
%th Name
%th Path
%th Projects
%th Edit
%th.cred Danger Zone!
%tr
%th
Name
%i.icon-sort-down
%th Path
%th Projects
%th Owner
%th.cred Danger Zone!
- @groups.each do |group|
%tr
%td= link_to group.name, [:admin, group]
%td
%strong= link_to group.name, [:admin, group]
%td= group.path
%td= group.projects.count
%td= link_to 'Edit', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: "btn small"
%td.bgred= link_to 'Destroy', [:admin, group], confirm: "REMOVE #{group.name}? Are you sure?", method: :delete, class: "btn small danger"
%td
= link_to group.owner_name, admin_user_path(group.owner_id)
%td.bgred
= link_to 'Rename', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: "btn small"
= link_to 'Destroy', [:admin, group], confirm: "REMOVE #{group.name}? Are you sure?", method: :delete, class: "btn small danger"
= paginate @groups, theme: "admin"

View file

@ -1,8 +1,5 @@
%h3.page_title
Group: #{@group.name}
= link_to edit_admin_group_path(@group), class: "btn right" do
%i.icon-edit
Edit
%br
%table.zebra-striped
@ -16,36 +13,64 @@
Name:
%td
= @group.name
 
= link_to edit_admin_group_path(@group), class: "btn btn-small right" do
%i.icon-edit
Rename
%tr
%td
%b
Path:
%td
%span.monospace= File.join(Gitlab.config.git_base_path, @group.path)
%span.monospace= File.join(Gitlab.config.gitolite.repos_path, @group.path)
%tr
%td
%b
Owner:
%td
= @group.owner_name
.ui-box
%h5
Projects
%small
(#{@group.projects.count})
%ul.unstyled
.right
= link_to "#", class: "btn btn-small change-owner-link" do
%i.icon-edit
Change owner
%tr.change-owner-holder.hide
%td.bgred
%b.cred
New Owner:
%td.bgred
= form_for [:admin, @group] do |f|
= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
%div
= f.submit 'Change Owner', class: "btn danger"
= link_to "Cancel", "#", class: "btn change-owner-cancel-link"
%fieldset
%legend Projects (#{@group.projects.count})
%table
%thead
%tr
%th Project name
%th Path
%th Users
%th.cred Danger Zone!
- @group.projects.each do |project|
%li.wll
%strong
= link_to project.name, [:admin, project]
.right
= link_to 'Remove from group', remove_project_admin_group_path(@group, project_id: project.id), confirm: 'Are you sure?', method: :delete, class: "btn danger small"
.clearfix
%tr
%td
= link_to project.name_with_namespace, [:admin, project]
%td
%span.monospace= project.path_with_namespace + ".git"
%td= project.users.count
%td.bgred
= link_to 'Transfer project to global namespace', remove_project_admin_group_path(@group, project_id: project.id), confirm: 'Remove project from group and move to global namespace. Are you sure?', method: :delete, class: "btn danger small"
= form_tag project_update_admin_group_path(@group), class: "bulk_import", method: :put do
%fieldset
%legend Move projects to group
.alert
You can move only projects with existing repos
%br
Group projects will be moved in group directory and will not be accessible by old path
.clearfix
= label_tag :project_ids do
Projects
@ -53,3 +78,17 @@
= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name_with_namespace), multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5'
.form-actions
= submit_tag 'Add', class: "btn primary"
:javascript
$(function(){
var modal = $('.change-owner-holder');
$('.change-owner-link').bind("click", function(){
$(this).hide();
modal.show();
});
$('.change-owner-cancel-link').bind("click", function(){
modal.hide();
$('.change-owner-link').show();
})
})

View file

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

View file

@ -19,40 +19,47 @@
.input
= text_field_tag :ppath, @project.path_to_repo, class: "xlarge", disabled: true
- unless project.new_record?
- if project.repo_exists?
.clearfix
= f.label :namespace_id
.input= f.select :namespace_id, namespaces_options(@project.namespace_id), {}, {class: 'chosen'}
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, project.heads.map(&:name), {}, style: "width:210px;")
- if project.repo_exists?
.clearfix
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, project.heads.map(&:name), {}, style: "width:210px;")
%fieldset.adv_settings
%legend Features:
- unless project.new_record?
%fieldset.adv_settings
%legend Features:
.clearfix
= f.label :issues_enabled, "Issues"
.input= f.check_box :issues_enabled
.clearfix
= f.label :issues_enabled, "Issues"
.input= f.check_box :issues_enabled
.clearfix
= f.label :merge_requests_enabled, "Merge Requests"
.input= f.check_box :merge_requests_enabled
.clearfix
= f.label :merge_requests_enabled, "Merge Requests"
.input= f.check_box :merge_requests_enabled
.clearfix
= f.label :wall_enabled, "Wall"
.input= f.check_box :wall_enabled
.clearfix
= f.label :wall_enabled, "Wall"
.input= f.check_box :wall_enabled
.clearfix
= f.label :wiki_enabled, "Wiki"
.input= f.check_box :wiki_enabled
.clearfix
= f.label :wiki_enabled, "Wiki"
.input= f.check_box :wiki_enabled
%fieldset.features
%legend Transfer:
.control-group
= f.label :namespace_id do
%span Namespace
.controls
= f.select :namespace_id, namespaces_options(@project.namespace_id, :all), {}, {class: 'chosen'}
%br
%ul.prepend-top-10.cred
%li Be careful. Changing project namespace can have unintended side effects
%li You can transfer project only to namespaces you can manage
%li You will need to update your local repositories to point to the new location.
- unless project.new_record?
.actions
= f.submit 'Save Project', class: "btn save-btn"
= link_to 'Cancel', admin_projects_path, class: "btn cancel-btn"
.actions
= f.submit 'Save Project', class: "btn save-btn"
= link_to 'Cancel', admin_projects_path, class: "btn cancel-btn"

View file

@ -1,5 +1,5 @@
%h3.page_title
Projects
Projects (#{@projects.count})
= link_to 'New Project', new_project_path, class: "btn small right"
%br
= form_tag admin_projects_path, method: :get, class: 'form-inline' do
@ -9,12 +9,15 @@
%table
%thead
%th Name
%th Path
%th Team Members
%th Last Commit
%th Edit
%th.cred Danger Zone!
%tr
%th
Name
%i.icon-sort-down
%th Path
%th Team Members
%th Last Commit
%th Edit
%th.cred Danger Zone!
- @projects.each do |project|
%tr

View file

@ -4,14 +4,24 @@
%i.icon-edit
Edit
- if !@project.has_post_receive_file? && @project.has_commits?
%br
.alert.alert-error
%span
%strong Important!
Project has commits but missing post-receive file.
%br
If you exported project manually - copy post-receive hook to bare repository
- if @project.has_commits?
- if !@project.has_post_receive_file?
%br
.alert.alert-error
%span
%strong Project has commits but missing post-receive file.
%br
If you exported project manually - make a link of post-receive hook file from gitolite to project repository
- elsif !@project.valid_post_receive_file?
%br
.alert.alert-error
%span
%strong Project has invalid post-receive file.
%br
1. Make sure your gitolite instace has latest post-receive file.
%br
2. Make a link of post-receive hook file from gitolite to project repository
%br
%table.zebra-striped
@ -37,23 +47,63 @@
%tr
%td
%b
Path:
Owned by:
%td
%code= @project.path_to_repo
- if @project.chief
= link_to @project.chief.name, admin_user_path(@project.chief)
- else
(deleted)
%tr
%td
%b
Created by:
%td
= @project.owner_name || '(deleted)'
%tr
%td
%b
Created at:
%td
= @project.created_at.stamp("March 1, 1999")
%table.zebra-striped
%thead
%tr
%th Repository
%th
%tr
%td
%b
FS Path:
%td
%code= @project.path_to_repo
%tr
%td
%b
Smart HTTP:
%td
= link_to @project.http_url_to_repo
%tr
%td
%b
SSH:
%td
= link_to @project.ssh_url_to_repo
%tr
%td
%b
Last commit at:
%td
= last_commit(@project)
%tr
%td
%b
Post Receive File:
%td
= check_box_tag :post_receive_file, 1, @project.has_post_receive_file?, disabled: true
%br
%h3
%h5
Team
%small
(#{@project.users_projects.count})
@ -75,7 +125,7 @@
%td= link_to 'Remove from team', admin_team_member_path(tm), confirm: 'Are you sure?', method: :delete, class: "btn danger small"
%br
%h3 Add new team member
%h5 Add new team member
%br
= form_tag team_update_admin_project_path(@project), class: "bulk_import", method: :put do
%table.zebra-striped

View file

@ -1,5 +1,5 @@
%h3.page_title
Users
Users (#{@admin_users.count})
= link_to 'New User', new_admin_user_path, class: "btn small right"
%br
@ -21,13 +21,16 @@
%table
%thead
%th Admin
%th Name
%th Username
%th Email
%th Projects
%th Edit
%th.cred Danger Zone!
%tr
%th Admin
%th
Name
%i.icon-sort-down
%th Username
%th Email
%th Projects
%th Edit
%th.cred Danger Zone!
- @admin_users.each do |user|
%tr
@ -38,10 +41,13 @@
%td= user.users_projects.count
%td= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn small"
%td.bgred
- if user.blocked
= link_to 'Unblock', unblock_admin_user_path(user), method: :put, class: "btn small success"
- if user == current_user
%span.cred It's you!
- else
= link_to 'Block', block_admin_user_path(user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger"
= link_to 'Destroy', [:admin, user], confirm: "USER #{user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn small danger"
- if user.blocked
= link_to 'Unblock', unblock_admin_user_path(user), method: :put, class: "btn small success"
- else
= link_to 'Block', block_admin_user_path(user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger"
= link_to 'Destroy', [:admin, user], confirm: "USER #{user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn small danger"
= paginate @admin_users, theme: "admin"

View file

@ -37,6 +37,12 @@
%b
Blocked:
%td= check_box_tag "blocked", 1, @admin_user.blocked, disabled: :disabled
%tr
%td
%b
Created at:
%td
= @admin_user.created_at.stamp("March 1, 1999")
%tr
%td
%b
@ -66,7 +72,7 @@
= @admin_user.twitter
%br
%h3 Add User to Projects
%h5 Add User to Projects
%br
= form_tag team_update_admin_user_path(@admin_user), class: "bulk_import", method: :put do
%table
@ -76,7 +82,7 @@
%th Project Access:
%tr
%td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name), multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5'
%td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name_with_namespace), multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5'
%td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select chosen span3"
%tr
@ -86,8 +92,22 @@
%strong= link_to "here", help_permissions_path, class: "vlink"
%br
- if @admin_user.groups.present?
%h5 Owner of groups:
%br
%table.zebra-striped
%thead
%tr
%th Name
- @admin_user.groups.each do |group|
%tr
%td= link_to group.name, admin_group_path(group)
- if @admin_user.projects.present?
%h3 Projects
%h5 Projects:
%br
%table.zebra-striped
@ -101,7 +121,7 @@
- @admin_user.users_projects.each do |tm|
- project = tm.project
%tr
%td= link_to project.name, admin_project_path(project)
%td= link_to project.name_with_namespace, admin_project_path(project)
%td= tm.project_access_human
%td= link_to 'Edit Access', edit_admin_team_member_path(tm), class: "btn small"
%td= link_to 'Remove from team', admin_team_member_path(tm), confirm: 'Are you sure?', method: :delete, class: "btn small danger"

View file

@ -3,4 +3,4 @@
%h5.small
%i.icon-calendar
= day.stamp("28 Aug, 2010")
%ul.unstyled= render commits
%ul.well-list= render commits

View file

@ -1,23 +1,30 @@
%div
%p.slead
Fill input field with commit id like
%code.label_branch 4eedf23
or branch/tag name like
%code.label_branch master
and press compare button for commits list, code diff.
- unless params[:to]
%p.slead
Fill input field with commit id like
%code.label_branch 4eedf23
or branch/tag name like
%code.label_branch master
and press compare button for commits list, code diff.
%br
%br
= form_tag project_compare_index_path(@project), method: :post do
.clearfix
= text_field_tag :from, params[:from], placeholder: "master", class: "xlarge"
= "..."
= text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge"
.pull-left
- if params[:to] && params[:from]
= link_to 'switch', {from: params[:to], to: params[:from]}, {class: 'commits-compare-switch has_tooltip', title: 'Switch base of comparison'}
= text_field_tag :from, params[:from], placeholder: "master", class: "xlarge"
= "..."
= text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge"
.pull-left
 
= submit_tag "Compare", class: "btn primary wide commits-compare-btn"
- if @refs_are_same
.alert
%span Refs are the same
.actions
= submit_tag "Compare", class: "btn primary wide commits-compare-btn"
:javascript
$(function() {

View file

@ -9,7 +9,7 @@
- if @commits.present?
%div.ui-box
%h5.small Commits (#{@commits.count})
%ul.unstyled= render @commits
%ul.well-list= render @commits
- unless @diffs.empty?
%h4 Diff

View file

@ -0,0 +1,13 @@
= render "events/event_last_push", event: @last_push
.event_filter
= event_filter_link EventFilter.push, 'Push events'
= event_filter_link EventFilter.merged, 'Merge events'
= event_filter_link EventFilter.comments, 'Comments'
= event_filter_link EventFilter.team, 'Team'
- if @events.any?
.content_list= render @events
- else
%p.nothing_here_message Projects activity will be displayed here
.loading.hide

View file

@ -8,11 +8,11 @@
= link_to new_admin_group_path, class: "btn very_small info" do
%i.icon-plus
New Group
%ul.unstyled
%ul.well-list
- groups.each do |group|
%li.wll
%li
= link_to group_path(id: group.path), class: dom_class(group) do
%strong.group_name= truncate(group.name, length: 25)
%strong.well-title= truncate(group.name, length: 35)
%span.arrow
→
%span.last_activity

View file

@ -16,18 +16,21 @@
= nav_tab :scope, 'joined' do
= link_to "Joined", dashboard_path(scope: 'joined')
%ul.unstyled
%ul.well-list
- projects.each do |project|
%li.wll
%li
= link_to project_path(project), class: dom_class(project) do
- if project.namespace
= project.namespace.human_name
\/
%strong.project_name
%strong.well-title
= truncate(project.name, length: 25)
%span.arrow
→
%span.last_activity
%strong Last activity:
%span= project_last_activity(project)
- if projects.blank?
%li
%h3.nothing_here_message There are no projects here.
.bottom= paginate projects, theme: "gitlab"

View file

@ -0,0 +1,14 @@
- if @groups.present?
= render "groups", groups: @groups
= render "projects", projects: @projects
%div
%span.rss-icon
= link_to dashboard_path(:atom, { private_token: current_user.private_token }) do
= image_tag "rss_ui.png", title: "feed"
%strong News Feed
%hr
.gitlab-promo
= link_to "Homepage", "http://gitlabhq.com"
= link_to "Blog", "http://blog.gitlabhq.com"
= link_to "@gitlabhq", "https://twitter.com/gitlabhq"

View file

@ -0,0 +1,12 @@
%h3.nothing_here_message
There are no projects you have access to.
%br
- if current_user.can_create_project?
You can create up to
= current_user.projects_limit
projects. Click on button below to add a new one
.link_holder
= link_to new_project_path, class: "btn primary" do
New Project »
- else
If you will be added to project - it will be displayed here

View file

@ -7,7 +7,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear
xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any?
@events.each do |event|
if event.allowed?
if event.proper?
event = EventDecorator.decorate(event)
xml.entry do
event_link = event.feed_url

View file

@ -1,50 +1,11 @@
- if @projects.any?
- if @has_authorized_projects
.projects
.activities.span8
= render "events/event_last_push", event: @last_push
.event_filter
= event_filter_link EventFilter.push, 'Push events'
= event_filter_link EventFilter.merged, 'Merge events'
= event_filter_link EventFilter.comments, 'Comments'
= event_filter_link EventFilter.team, 'Team'
- if @events.any?
.content_list= render @events
- else
%p.nothing_here_message Projects activity will be displayed here
.loading.hide
.side
- if @groups.present?
= render "groups", groups: @groups
= render "projects", projects: @projects
%div
%span.rss-icon
= link_to dashboard_path(:atom, { private_token: current_user.private_token }) do
= image_tag "rss_ui.png", title: "feed"
%strong News Feed
%hr
.gitlab-promo
= link_to "Homepage", "http://gitlabhq.com"
= link_to "Blog", "http://blog.gitlabhq.com"
= link_to "@gitlabhq", "https://twitter.com/gitlabhq"
= render 'activities'
.side.span4
= render 'sidebar'
- else
%h3.nothing_here_message There are no projects you have access to.
%br
%h4.nothing_here_message
- if current_user.can_create_project?
You can create up to
= current_user.projects_limit
projects. Click on button below to add a new one
.link_holder
= link_to new_project_path, class: "btn primary" do
New Project »
- else
If you will be added to project - it will be displayed here
= render "zero_authorized_projects"
:javascript
$(function(){ Pager.init(20); });

View file

@ -13,8 +13,8 @@
- @issues.group_by(&:project).each do |group|
%div.ui-box
- @project = group[0]
%h5= link_to(@project.name, project_path(@project))
%ul.unstyled.issues_table
%h5= link_to_project @project
%ul.well-list.issues_table
- group[1].each do |issue|
= render(partial: 'issues/show', locals: {issue: issue})
%hr

View file

@ -10,11 +10,12 @@
.span9
- if @merge_requests.any?
- @merge_requests.group_by(&:project).each do |group|
%ul.unstyled.ui-box
.ui-box
- @project = group[0]
%h5= @project.name
- group[1].each do |merge_request|
= render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
%h5= 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"

View file

@ -3,7 +3,7 @@
- else
= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f|
= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo"
= f.text_field :email, :class => "text top", :placeholder => "Email"
= f.email_field :email, :class => "text top", :placeholder => "Email", :autofocus => "autofocus"
= f.password_field :password, :class => "text bottom", :placeholder => "Password"
- if devise_mapping.rememberable?
.clearfix.inputs-list

View file

@ -21,5 +21,5 @@
Permissions:
%pre
= preserve do
sudo chmod -R 770 #{Gitlab.config.git_base_path}
sudo chown -R git:git #{Gitlab.config.git_base_path}
sudo chown -R git:git #{Gitlab.config.gitolite.repos_path}
sudo chmod -R ug+rwXs #{Gitlab.config.gitolite.repos_path}

View file

@ -1,15 +1,15 @@
- if event.allowed?
- if event.proper?
%div.event-item
= event_image(event)
%span.cgray.right
#{time_ago_in_words(event.created_at)} ago.
= image_tag gravatar_icon(event.author_email), class: "avatar s24"
- if event.push?
= render "events/event/push", event: event
.clearfix
- elsif event.note?
= render "events/event/note", event: event
- else
= render "events/event/common", event: event
.clearfix
%span.cgray.right
= time_ago_in_words(event.created_at)
ago.
.clearfix

View file

@ -6,7 +6,7 @@
= link_to project_commits_path(event.project, event.ref_name) do
%strong= truncate(event.ref_name, length: 28)
at
%strong= link_to event.project.name, event.project
%strong= link_to_project event.project
%span
= time_ago_in_words(event.created_at)
ago.

View file

@ -0,0 +1,25 @@
.event-title
%span.author_name= link_to_author event
%span.event_label commented on #{event.note_target_type}
- if event.note_target
- if event.note_commit?
= link_to event.note_short_commit_id, project_commit_path(event.project, event.note_commit_id), class: "commit_short_id"
- else
= link_to [event.project, event.note_target] do
%strong= truncate event.note_target_id
- elsif event.wall_note?
-# nothing here
- else
%strong (deleted)
at
- if event.project
= link_to_project event.project
- else
= event.project_name
.event-body
%span.hint
 
%i.icon-comment
= truncate event.target.note, length: 70

View file

@ -7,12 +7,12 @@
= link_to project_commits_path(event.project, event.ref_name) do
%strong= event.ref_name
at
%strong= link_to event.project.name, event.project
%strong= link_to_project event.project
- if event.push_with_commits?
- project = event.project
.event-body
%ul.unstyled.event_commits
%ul.well-list.event_commits
- few_commits = event.commits[0...2]
- few_commits.each do |commit|
= render "events/commit", commit: commit, project: project

View file

@ -8,13 +8,13 @@
= link_to new_project_path(namespace_id: @group.id), class: "btn very_small info" do
%i.icon-plus
New Project
%ul.unstyled
%ul.well-list
- if projects.blank?
%p.nothing_here_message This groups has no projects yet
- projects.each do |project|
%li.wll
%li
= link_to project_path(project), class: dom_class(project) do
%strong.project_name= truncate(project.name, length: 25)
%strong.well-title= truncate(project.name, length: 25)
%span.arrow
→
%span.last_activity

View file

@ -10,7 +10,7 @@
%div.ui-box
- @project = group[0]
%h5= @project.name
%ul.unstyled.issues_table
%ul.well-list.issues_table
- group[1].each do |issue|
= render(partial: 'issues/show', locals: {issue: issue})
%hr

View file

@ -6,7 +6,7 @@
%br
- if @merge_requests.any?
- @merge_requests.group_by(&:project).each do |group|
%ul.unstyled.ui-box
%ul.well-list.ui-box
- @project = group[0]
%h5= @project.name
- group[1].each do |merge_request|

View file

@ -9,9 +9,9 @@
Team
%small
(#{@users.size})
%ul.unstyled
%ul.well-list
- @users.each do |user|
%li.wll
%li
= image_tag gravatar_icon(user.email, 16), class: "avatar s16"
%strong= user.name
%span.cgray= user.email

View file

@ -7,7 +7,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://sear
xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any?
@events.each do |event|
if event.allowed?
if event.proper?
event = EventDecorator.decorate(event)
xml.entry do
event_link = event.feed_url

View file

@ -11,7 +11,7 @@
- else
%p.nothing_here_message Projects activity will be displayed here
.loading.hide
.side
.side.span4
= render "projects", projects: @projects
%div
%span.rss-icon

View file

@ -4,61 +4,66 @@
← to index
%hr
.row
.ui-box.span2
%h5 Guest
%ul.unstyled
%li Create new issue
%li Leave comments
%li Write on project wall
%fieldset
%legend Guest
%ul
%li Create new issue
%li Leave comments
%li Write on project wall
.ui-box.span3
%h5 Reporter
%ul.unstyled
%li Create new issue
%li Leave comments
%li Write on project wall
%li Pull project code
%li Download project
%li Create new merge request
%li Create a code snippets
%fieldset
%legend Reporter
%ul
%li Create new issue
%li Leave comments
%li Write on project wall
%li Pull project code
%li Download project
%li Create new merge request
%li Create a code snippets
.ui-box.span3
%h5 Developer
%ul.unstyled
%li Create new issue
%li Leave comments
%li Write on project wall
%li Pull project code
%li Download project
%li Create new merge request
%li Create a code snippets
%li Create new branches
%li Push to non-protected branches
%li Remove non-protected branches
%li Add tags
%li Write a wiki
%fieldset
%legend Developer
%ul
%li Create new issue
%li Leave comments
%li Write on project wall
%li Pull project code
%li Download project
%li Create new merge request
%li Create a code snippets
%li Create new branches
%li Push to non-protected branches
%li Remove non-protected branches
%li Add tags
%li Write a wiki
.ui-box.span3
%h5 Master
%ul.unstyled
%li Create new issue
%li Leave comments
%li Write on project wall
%li Pull project code
%li Download project
%li Create new merge request
%li Create a code snippets
%li Create new branches
%li Push to non-protected branches
%li Remove non-protected branches
%li Add tags
%li Write a wiki
%li Add new team members
%li Push to protected branches
%li Remove protected branches
%li Push with force option
%li Edit project
%li Add Deploy Keys to project
%li Configure Project Hooks
%fieldset
%legend Master
%ul
%li Create new issue
%li Leave comments
%li Write on project wall
%li Pull project code
%li Download project
%li Create new merge request
%li Create a code snippets
%li Create new branches
%li Push to non-protected branches
%li Remove non-protected branches
%li Add tags
%li Write a wiki
%li Add new team members
%li Push to protected branches
%li Remove protected branches
%li Push with force option
%li Edit project
%li Add Deploy Keys to project
%li Configure Project Hooks
%fieldset
%legend Owner
%ul
%li Transfer project to another namespace
%li Remove project

View file

@ -22,22 +22,21 @@
%hr
-if @hooks.any?
%h3
Hooks
%small (#{@hooks.count})
%h3.page_title
Hooks (#{@hooks.count})
%br
%table
%thead
%tr
%th URL
%th Method
%th
- @hooks.each do |hook|
%tr
%td
%span.badge.badge-info POST
= link_to project_hook_path(@project, hook) do
%strong= hook.url
= link_to 'Test Hook', test_project_hook_path(@project, hook), class: "btn small right"
%td POST
%td
= link_to 'Remove', project_hook_path(@project, hook), confirm: 'Are you sure?', method: :delete, class: "danger btn small right"
.right
= link_to 'Test Hook', test_project_hook_path(@project, hook), class: "btn small grouped"
= link_to 'Remove', project_hook_path(@project, hook), confirm: 'Are you sure?', method: :delete, class: "danger btn small grouped"

View file

@ -1,18 +1,18 @@
%div.issue-form-holder
%h3.page_title= @issue.new_record? ? "New Issue" : "Edit Issue ##{@issue.id}"
= form_for [@project, @issue], remote: request.xhr? do |f|
= form_for [@project, @issue] do |f|
-if @issue.errors.any?
.alert-message.block-message.error
%ul
- @issue.errors.full_messages.each do |msg|
%li= msg
- @issue.errors.full_messages.each do |msg|
%span= msg
%br
.issue_form_box
.issue_title
.clearfix
= f.label :title do
%strong= "Subject *"
.input
= f.text_field :title, maxlength: 255, class: "xxlarge js-gfm-input", autofocus: true
= f.text_field :title, maxlength: 255, class: "xxlarge js-gfm-input", autofocus: true, required: true
.issue_middle_block
.issue_assignee
= f.label :assignee_id do
@ -47,11 +47,38 @@
-else
= f.submit 'Save changes', class: "save-btn btn"
- cancel_class = 'btn cancel-btn'
- if request.xhr?
= link_to "Cancel", "#back", onclick: "backToIssues();", class: cancel_class
- else
- if @issue.new_record?
= link_to "Cancel", project_issues_path(@project), class: cancel_class
- else
= link_to "Cancel", project_issue_path(@project, @issue), class: cancel_class
- cancel_path = @issue.new_record? ? project_issues_path(@project) : project_issue_path(@project, @issue)
= link_to "Cancel", cancel_path, class: 'btn cancel-btn'
:javascript
$(function(){
$("#issue_label_list")
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function( request, response ) {
response( $.ui.autocomplete.filter(
#{raw labels_autocomplete_source}, extractLast( request.term ) ) );
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split( this.value );
terms.pop();
terms.push( ui.item.value );
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
});

View file

@ -6,7 +6,7 @@
.row
.span7= paginate @issues, remote: true, theme: "gitlab"
.span3.right
%span.cgray.right
%span.cgray.right
%span.issue_counter #{@issues.total_count}
issues for this filter
- else

View file

@ -1,4 +1,4 @@
%li.wll{ id: dom_id(issue), class: issue_css_classes(issue), url: project_issue_path(issue.project, issue) }
%li{ id: dom_id(issue), class: issue_css_classes(issue), url: project_issue_path(issue.project, issue) }
- if controller.controller_name == 'issues'
.issue_check
= check_box_tag dom_id(issue,"selected"), nil, false, 'data-id' => issue.id, class: "selected_issue", disabled: !can?(current_user, :modify_issue, issue)
@ -16,7 +16,7 @@
= link_to 'Reopen', project_issue_path(issue.project, issue, issue: {closed: false }, status_only: true), method: :put, class: "btn small grouped reopen_issue", remote: true
- else
= link_to 'Close', project_issue_path(issue.project, issue, issue: {closed: true }, status_only: true), method: :put, class: "btn small grouped close_issue", remote: true
= link_to edit_project_issue_path(issue.project, issue), class: "btn small edit-issue-link grouped", remote: true do
= link_to edit_project_issue_path(issue.project, issue), class: "btn small edit-issue-link grouped" do
%i.icon-edit
Edit
@ -28,7 +28,7 @@
%p= link_to_gfm truncate(issue.title, length: 100), project_issue_path(issue.project, issue), class: "row_title"
%span.update-author
%small.cdark= "##{issue.id}"
%span.cdark= "##{issue.id}"
- if issue.assignee
assigned to #{issue.assignee_name}
- else

View file

@ -1,10 +0,0 @@
- if @issue.valid?
:plain
switchFromNewIssue();
$("#issues-table").prepend("#{escape_javascript(render(partial: 'show', locals: {issue: @issue}))}");
$.ajax({type: "GET", url: location.href, dataType: "script"});
- else
:plain
$("#new_issue_dialog").empty();
$("#new_issue_dialog").append("#{escape_javascript(render('form'))}");
$('select#issue_assignee_id').chosen();

View file

@ -1,4 +0,0 @@
:plain
$("#edit_issue_dialog").html("#{escape_javascript(render('form'))}");
switchToEditIssue();

View file

@ -6,7 +6,7 @@
.right
.span5
- if can? current_user, :write_issue, @project
= link_to new_project_issue_path(@project), class: "right btn", title: "New Issue", remote: true, id: "new_issue_link" do
= link_to new_project_issue_path(@project, issue: { assignee_id: params[:assignee_id], milestone_id: params[:milestone_id]}), class: "right btn", title: "New Issue", id: "new_issue_link" do
%i.icon-plus
New Issue
= form_tag search_project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: :right do
@ -27,7 +27,7 @@
.left
= select_tag('update[status]', options_for_select(['open', 'closed']), prompt: "Status")
= select_tag('update[assignee_id]', options_from_collection_for_select(@project.users.all, "id", "name", params[:assignee_id]), prompt: "Assignee")
= select_tag('update[milestone_id]', options_from_collection_for_select(@project.milestones.order("id desc").all, "id", "title", params[:milestone_id]), prompt: "Milestone")
= select_tag('update[milestone_id]', options_from_collection_for_select(issues_active_milestones, "id", "title", params[:milestone_id]), prompt: "Milestone")
= hidden_field_tag 'update[issues_ids]', []
= hidden_field_tag :f, params[:f]
= button_tag "Save", class: "btn update_selected_issues"
@ -51,16 +51,13 @@
= form_tag project_issues_path(@project), method: :get, class: :right do
= select_tag(:label_name, options_for_select(issue_tags, params[:label_name]), prompt: "Labels")
= select_tag(:assignee_id, options_from_collection_for_select([unassigned_filter] + @project.users.all, "id", "name", params[:assignee_id]), prompt: "Assignee")
= select_tag(:milestone_id, options_from_collection_for_select([unassigned_filter] + @project.milestones.order("id desc").all, "id", "title", params[:milestone_id]), prompt: "Milestone")
= select_tag(:milestone_id, options_from_collection_for_select([unassigned_filter] + issues_active_milestones, "id", "title", params[:milestone_id]), prompt: "Milestone")
= hidden_field_tag :f, params[:f]
.clearfix
%ul#issues-table.unstyled.issues_table
%ul#issues-table.well-list.issues_table
= render "issues"
#new_issue_dialog
#edit_issue_dialog
:javascript
$(function(){
issuesPage();

View file

@ -1,3 +0,0 @@
:plain
$("#new_issue_dialog").html("#{escape_javascript(render('form'))}");
switchToNewIssue();

View file

@ -26,22 +26,16 @@
.main_box
.top_box_content
%h4
%h4.box-title
- if @issue.closed
.alert-message.error.status_info Closed
- else
.alert-message.success.status_info Open
.error.status_info Closed
= gfm escape_once(@issue.title)
.middle_box_content
%cite.cgray Created by
= image_tag gravatar_icon(@issue.author_email), width: 16, class: "lil_av"
%strong.author= link_to_issue_author(@issue)
- if @issue.assignee
%cite.cgray and currently assigned to
= image_tag gravatar_icon(@issue.assignee_email), width: 16, class: "lil_av"
%strong.author= link_to_issue_assignee(@issue)
%cite.cgray
Created by #{link_to_member(@project, @issue.author)}
- if @issue.assignee
\ and currently assigned to #{link_to_member(@project, @issue.assignee)}
- if @issue.milestone
- milestone = @issue.milestone

View file

@ -2,13 +2,3 @@
- if @issue.valid?
:plain
$("##{dom_id(@issue)}").fadeOut();
- else
- if @issue.valid?
:plain
updatePage();
switchFromEditIssue();
- else
:plain
$("#edit_issue_dialog").empty();
$("#edit_issue_dialog").append("#{escape_javascript(render('form'))}");
$('select#issue_assignee_id').chosen();

View file

@ -4,5 +4,6 @@
-# num_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%span.page.gap
= raw(t 'views.pagination.truncate')
%li{class: "page"}
%span.page.gap
= raw(t 'views.pagination.truncate')

View file

@ -1,4 +1,4 @@
%li.wll
%li
%strong
%i.icon-tag
= label.name

View file

@ -4,7 +4,7 @@
Labels
%br
%div.ui-box
%ul.unstyled.labels-table
%ul.well-list.labels-table
- @labels.each do |label|
= render 'label', label: label

View file

@ -1,6 +1,6 @@
:javascript
$(function() {
GitLab.GfmAutoComplete.Members.url = "#{ "/api/v2/projects/#{@project.path}/members" if @project }";
GitLab.GfmAutoComplete.Members.url = "#{ "/api/v3/projects/#{@project.id}/members" if @project }";
GitLab.GfmAutoComplete.Members.params.private_token = "#{current_user.private_token}";
GitLab.GfmAutoComplete.Emoji.data = #{raw emoji_autocomplete_source};

View file

@ -3,14 +3,7 @@
%meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
%title
GitLab
:css
.header h1 {color: #BBBBBB !important; font: bold 22px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 32px;}
.header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;}
.content h2 {color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; }
.content p {color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif;}
.content a {color: #0eb6ce; text-decoration: none;}
.footer p {font-size: 11px; color:#7d7a7a; margin: 0; padding: 0; font-family: Helvetica, Arial, sans-serif;}
.footer a {color: #0eb6ce; text-decoration: none;}
%body{bgcolor: "#EAEAEA", style: "margin: 0; padding: 0; background: #EAEAEA"}
%table{align: "center", border: "0", cellpadding: "0", cellspacing: "0", style: "padding: 35px 0; background: #EAEAEA;", width: "100%"}
%tr
@ -19,11 +12,11 @@
%tr
%td{style: "font-size: 0px;", width: "20"}
\ 
%td{align: "left", style: "padding: 18px 0 10px;", width: "580"}
%h1{style: "color: #BBBBBB; font: normal 22px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 32px;"}
%td{align: "left", style: "padding: 10px 0", width: "580"}
%h1{style: "font-size: 24px; color: #BBBBBB; font: normal 22px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 32px;"}
GITLAB
- if @project
| #{@project.name}
→ #{@project.name_with_namespace}
%table{align: "center", bgcolor: "#fff", border: "0", cellpadding: "0", cellspacing: "0", style: "font-family: Helvetica, Arial, sans-serif; background: #fff;", width: "600"}
%tr= yield
%tr
@ -35,5 +28,5 @@
%p{style: "font-size: 11px; color:#7d7a7a; margin: 0; padding: 0; font-family: Helvetica, Arial, sans-serif;"}
You're receiving this notification because you are a member of the
- if @project
#{@project.name}
#{@project.name_with_namespace}
project team.

View file

@ -1,9 +1,9 @@
!!! 5
%html{ lang: "en"}
= render "layouts/head", title: @project.name
= render "layouts/head", title: @project.name_with_namespace
%body{class: "#{app_theme} project"}
= render "layouts/flash"
= render "layouts/head_panel", title: @project.name
= render "layouts/head_panel", title: project_title(@project)
- if can?(current_user, :download_code, @project)
= render 'shared/no_ssh'
.container

View file

@ -32,7 +32,7 @@
.top_box_content
= f.label :title do
%strong= "Title *"
.input= f.text_field :title, class: "input-xxlarge pad js-gfm-input", maxlength: 255, rows: 5
.input= f.text_field :title, class: "input-xxlarge pad js-gfm-input", maxlength: 255, rows: 5, required: true
.merge_requests_middle_box
.merge_requests_assignee
= f.label :assignee_id do

View file

@ -1,4 +1,4 @@
%li.wll{ class: mr_css_classes(merge_request) }
%li{ class: mr_css_classes(merge_request) }
.right
.left
- if merge_request.merged?

View file

@ -2,6 +2,8 @@
= render "merge_requests/show/how_to_merge"
= render "merge_requests/show/mr_box"
= render "merge_requests/show/mr_accept"
- if @project.gitlab_ci?
= render "merge_requests/show/mr_ci"
= render "merge_requests/show/commits"
- if @commits.present?
@ -26,6 +28,8 @@
MergeRequest.init({
url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"},
url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}",
ci_enable: #{@project.gitlab_ci? ? "true" : "false"},
current_state: "#{@merge_request.human_state}",
action: "#{controller.action_name}"
});

View file

@ -30,7 +30,7 @@
= hidden_field_tag :f, params[:f]
.clearfix
%ul.unstyled
%ul.well-list
= render @merge_requests
- if @merge_requests.blank?
%li

View file

@ -5,19 +5,19 @@
Commits (#{@commits.count})
.merge-request-commits
- if @commits.count > 8
%ul.first_mr_commits.unstyled
%ul.first_mr_commits.well-list
- @commits.first(8).each do |commit|
= render "commits/commit", commit: commit
%li.bottom
8 of #{@commits.count} commits displayed.
%strong
%a.mr_show_all_commits Click here to show all
%ul.all_mr_commits.hide.unstyled
%ul.all_mr_commits.hide.well-list
- @commits.each do |commit|
= render "commits/commit", commit: commit
- else
%ul.unstyled
%ul.well-list
- @commits.each do |commit|
= render "commits/commit", commit: commit

View file

@ -1,25 +1,20 @@
.main_box
.top_box_content
%h4
- if @merge_request.closed
.alert-message.error.status_info Closed
- else
.alert-message.success.status_info Open
%h4.box-title
- if @merge_request.merged
.error.status_info
%i.icon-ok
Merged
- elsif @merge_request.closed
.error.status_info Closed
= gfm escape_once(@merge_request.title)
- if @project.gitlab_ci?
.right
= image_tag ci_status_path, class: 'status-badge'
.middle_box_content
%div
%cite.cgray Created at #{@merge_request.created_at.stamp("Aug 21, 2011")} by
= image_tag gravatar_icon(@merge_request.author_email), width: 16, class: "lil_av"
%strong.author= link_to_merge_request_author(@merge_request)
- if @merge_request.assignee
%cite.cgray , currently assigned to
= image_tag gravatar_icon(@merge_request.assignee_email), width: 16, class: "lil_av"
%strong.author= link_to_merge_request_assignee(@merge_request)
%cite.cgray
Created at #{@merge_request.created_at.stamp("Aug 21, 2011")} by #{link_to_member(@project, @merge_request.author)}
- if @merge_request.assignee
\, currently assigned to #{link_to_member(@project, @merge_request.assignee)}
- if @merge_request.milestone
- milestone = @merge_request.milestone
%cite.cgray and attached to milestone
@ -30,10 +25,10 @@
.bottom_box_content
- if @merge_request.merged?
%span
Merged by #{@merge_request.merge_event.author_name}
Merged by #{link_to_member(@project, @merge_request.merge_event.author)}
%small #{time_ago_in_words(@merge_request.merge_event.created_at)} ago.
- elsif @merge_request.closed_event
%span
Closed by #{@merge_request.closed_event.author_name}
Closed by #{link_to_member(@project, @merge_request.closed_event.author)}
%small #{time_ago_in_words(@merge_request.closed_event.created_at)} ago.

View file

@ -0,0 +1,35 @@
- if @merge_request.open? && @commits.any?
.ci_widget.ci-success{style: "display:none"}
.alert.alert-success
%i.icon-ok
%strong CI build passed
for #{@merge_request.last_commit_short_sha}.
= link_to "Build page", ci_build_details_path(@merge_request)
.ci_widget.ci-failed{style: "display:none"}
.alert.alert-error
%i.icon-remove
%strong CI build failed
for #{@merge_request.last_commit_short_sha}.
= link_to "Build page", ci_build_details_path(@merge_request)
- [:running, :pending].each do |status|
.ci_widget{class: "ci-#{status}", style: "display:none"}
.alert
%i.icon-time
%strong CI build #{status}
for #{@merge_request.last_commit_short_sha}.
= link_to "Build page", ci_build_details_path(@merge_request)
.ci_widget
.alert-message
%strong
%i.icon-refresh
Checking for CI status for #{@merge_request.last_commit_short_sha}
.ci_widget.ci-error{style: "display:none"}
.alert.alert-error
%i.icon-remove
%strong Cannot connect to CI server. Please check your setting

View file

@ -6,11 +6,6 @@
%span.label_branch= @merge_request.target_branch
%span.right
- if @merge_request.merged?
%span.btn.small.disabled.grouped
%strong
%i.icon-ok
= "MERGED"
- if can?(current_user, :modify_merge_request, @merge_request)
- if @merge_request.open?
.left.btn-group

View file

@ -1,22 +1,27 @@
%li{class: "milestone", id: dom_id(milestone) }
%li{class: "milestone milestone-#{milestone.closed ? 'closed' : 'open'}", id: dom_id(milestone) }
.right
- if can? current_user, :admin_milestone, milestone.project
- if can?(current_user, :admin_milestone, milestone.project) and milestone.open?
= link_to edit_project_milestone_path(milestone.project, milestone), class: "btn small edit-milestone-link grouped" do
%i.icon-edit
Edit
%h4
= link_to_gfm truncate(milestone.title, length: 100), project_milestone_path(milestone.project, milestone)
- if milestone.expired? and not milestone.closed
%span.cred (Expired)
%small
= milestone.expires_at
.row
.span4
.progress.progress-info
.bar{style: "width: #{milestone.percent_complete}%;"}
.span6
= link_to project_issues_path(milestone.project, milestone_id: milestone.id) do
= pluralize milestone.issues.count, 'Issue'
 
= link_to project_merge_requests_path(milestone.project, milestone_id: milestone.id) do
= pluralize milestone.merge_requests.count, 'Merge Request'
 
%span.light #{milestone.percent_complete}% complete
- if milestone.is_empty?
%span.muted Empty
- else
.row
.span4
.progress.progress-info
.bar{style: "width: #{milestone.percent_complete}%;"}
.span6
= link_to project_issues_path(milestone.project, milestone_id: milestone.id) do
= pluralize milestone.issues.count, 'Issue'
 
= link_to project_merge_requests_path(milestone.project, milestone_id: milestone.id) do
= pluralize milestone.merge_requests.count, 'Merge Request'
 
%span.light #{milestone.percent_complete}% complete

View file

@ -11,15 +11,18 @@
%li{class: ("active" if (params[:f] == "active" || !params[:f]))}
= link_to project_milestones_path(@project, f: "active") do
Active
%li{class: ("active" if params[:f] == "closed")}
= link_to project_milestones_path(@project, f: "closed") do
Closed
%li{class: ("active" if params[:f] == "all")}
= link_to project_milestones_path(@project, f: "all") do
All
%ul.unstyled
%ul.well-list
= render @milestones
- if @milestones.present?
%li.bottom= paginate @milestones, remote: true, theme: "gitlab"
%li.bottom= paginate @milestones, theme: "gitlab"
- else
%li
%h3.nothing_here_message Nothing to show here

View file

@ -1,31 +1,41 @@
%h3.page_title
Milestone ##{@milestone.id}
%small
= @milestone.expires_at
.row
.span6
%h3.page_title
Milestone ##{@milestone.id}
%small
= @milestone.expires_at
.back_link
= link_to project_milestones_path(@project) do
← To milestones list
.span6
.right
- unless @milestone.closed
= link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn small grouped", title: "New Issue" do
%i.icon-plus
New Issue
= link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped"
- if can?(current_user, :admin_milestone, @project)
= link_to edit_project_milestone_path(@project, @milestone), class: "btn small grouped" do
%i.icon-edit
Edit
%span.right
= link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn small grouped", title: "New Issue" do
%i.icon-plus
New Issue
= link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped"
- if can?(current_user, :admin_milestone, @project)
= link_to edit_project_milestone_path(@project, @milestone), class: "btn small grouped" do
%i.icon-edit
Edit
.back_link
= link_to project_milestones_path(@project) do
← To milestones list
- if @milestone.can_be_closed?
%hr
%p
%span All issues for this milestone are closed. You may close milestone now.
= link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {closed: true }), method: :put, class: "btn small danger"
.main_box
.top_box_content
%h5
%h4.box-title
- if @milestone.closed
.alert-message.error.status_info Closed
- else
.alert-message.success.status_info Open
.error.status_info Closed
- elsif @milestone.expired?
.error.status_info Expired
= gfm escape_once(@milestone.title)
%small.right= @milestone.expires_at
.middle_box_content
%h5
@ -34,6 +44,7 @@
#{@milestone.closed_items_count} closed
–
#{@milestone.open_items_count} open
%span.right= @milestone.expires_at
.progress.progress-info
.bar{style: "width: #{@milestone.percent_complete}%;"}
@ -43,14 +54,16 @@
= preserve do
= markdown @milestone.description
.row
.span6
%table.milestone-issue-filter
%thead
%th
%ul.nav.nav-pills
%li.active= link_to('Open Issues', '#')
%li=link_to('All Issues', '#')
%tr
%th
%ul.nav.nav-pills
%li.active= link_to('Open Issues', '#')
%li=link_to('All Issues', '#')
- @issues.each do |issue|
%tr{data: {closed: issue.closed}}
%td
@ -62,10 +75,11 @@
.span6
%table.milestone-merge-requests-filter
%thead
%th
%ul.nav.nav-pills
%li.active= link_to('Open Merge Requests', '#')
%li=link_to('All Merge Requests', '#')
%tr
%th
%ul.nav.nav-pills
%li.active= link_to('Open Merge Requests', '#')
%li=link_to('All Merge Requests', '#')
- @merge_requests.each do |merge_request|
%tr{data: {closed: merge_request.closed}}
%td

View file

@ -1,6 +1,7 @@
= form_for [@project, @note], remote: true, html: { multipart: true, id: nil, class: "new_note js-new-note-form" } do |f|
= note_target_fields
= f.hidden_field :commit_id
= f.hidden_field :line_code
= f.hidden_field :noteable_id
= f.hidden_field :noteable_type

View file

@ -9,7 +9,7 @@
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
%p{style: "color:#646464 !important; line-height: 26px; font-size: 16px; font-family: Helvetica, Arial, sans-serif; "}
= "Issue ##{@issue.id}"
= link_to_gfm truncate(@issue.title, length: 45), project_issue_url(@issue.project, @issue), title: @issue.title
%br

View file

@ -9,7 +9,7 @@
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
%p{style: "color:#646464 !important; line-height: 26px; font-size: 16px; font-family: Helvetica, Arial, sans-serif; "}
= "Issue ##{@issue.id}"
= link_to_gfm truncate(@issue.title, length: 45), project_issue_url(@issue.project, @issue), title: @issue.title
%br

View file

@ -5,7 +5,8 @@
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= "New Merge Request !#{@merge_request.id}"
= link_to_gfm truncate(@merge_request.title, length: 16), project_merge_request_url(@merge_request.project, @merge_request)
%p{style: "color:#646464 !important; line-height: 26px; font-size: 16px; font-family: Helvetica, Arial, sans-serif; "}
= link_to_gfm truncate(@merge_request.title, length: 40), project_merge_request_url(@merge_request.project, @merge_request)
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}

View file

@ -1,14 +1,15 @@
%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"}
%table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"}
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
%td{width: "21"}
%td
%h2{style: "color:#646464;" }
= "You have been granted #{@users_project.project_access_human} access to project"
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= link_to_gfm truncate(@project.name, length: 45), project_url(@project), title: @project.name
%td{width: "21"}
%td
%h3
= link_to project_url(@project) do
= @project.name_with_namespace
%br

View file

@ -0,0 +1,25 @@
%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"}
%table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #555; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"}
%tr
%td{width: "21"}
%td
%h2
= "Project was moved to another location"
%td{width: "21"}
%tr
%td{width: "21"}
%td
%p
The project is now located under
= link_to project_url(@project) do
= @project.name_with_namespace
%p
To update the remote url in your local repository run:
%br
%table{border: "0", cellpadding: "0", cellspacing: "0", width: "558"}
%tr
%td{valign: "top"}
%p{ style: "background:#f5f5f5; padding:10px; border:1px solid #ddd" }
git remote set-url origin #{@project.ssh_url_to_repo}
%br
%td{ width: "21"}

View file

@ -5,7 +5,7 @@
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= "Reassigned Issue ##{@issue.id}"
= link_to_gfm truncate(@issue.title, length: 16), project_issue_url(@issue.project, @issue)
= link_to_gfm truncate(@issue.title, length: 30), project_issue_url(@issue.project, @issue)
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}

View file

@ -5,7 +5,7 @@
%td{align: "left", style: "padding: 20px 0 0;"}
%h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= "Reassigned Merge Request !#{@merge_request.id}"
= link_to_gfm truncate(@merge_request.title, length: 16), project_merge_request_url(@merge_request.project, @merge_request)
= link_to_gfm truncate(@merge_request.title, length: 30), project_merge_request_url(@merge_request.project, @merge_request)
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}
%tr
%td{style: "font-size: 1px; line-height: 1px;", width: "21"}

View file

@ -1,4 +1,4 @@
- if Gitlab.config.omniauth_enabled?
- if Gitlab.config.omniauth.enabled
%fieldset
%legend Social Accounts
.oauth_select_holder
@ -71,6 +71,9 @@
%span.update-failed.cred.hide
%i.icon-ok
Failed
%ul.cred
%li It will change web url for personal projects.
%li It will change the git path to repositories for personal projects.
.input
= f.submit 'Save username', class: "btn save-btn"

View file

@ -33,11 +33,11 @@
%ul
%li
%p You can change your password on Account page
-unless Gitlab.config.disable_gravatar?
- if Gitlab.config.gravatar.enabled
%li
%p You can change your avatar at #{link_to "gravatar.com", "http://gravatar.com"}
- if Gitlab.config.omniauth_enabled? && @user.provider?
- if Gitlab.config.omniauth.enabled && @user.provider?
%li
%p
You can login through #{@user.provider.titleize}!

View file

@ -17,13 +17,6 @@
.controls
= text_field_tag :ppath, @project.path_to_repo, class: "xxlarge", readonly: true
.control-group
= f.label :namespace_id do
%span Namespace
.controls
= f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}
 
%span.cred Be careful. Changing project namespace can have unintended side effects
- unless @project.heads.empty?
.clearfix
@ -57,11 +50,28 @@
= f.check_box :wiki_enabled
%span.descr Pages for project documentation
- if can? current_user, :change_namespace, @project
%fieldset.features
%legend Transfer:
.control-group
= f.label :namespace_id do
%span Namespace
.controls
= f.select :namespace_id, namespaces_options(@project.namespace_id || Namespace::global_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}
%br
%ul.prepend-top-10.cred
%li Be careful. Changing project namespace can have unintended side effects
%li You can transfer project only to namespaces you can manage
%li You will need to update your local repositories to point to the new location.
%br
.actions
= f.submit 'Save', class: "btn save-btn"
= link_to 'Cancel', @project, class: "btn"
- unless @project.new_record?
.right
= link_to 'Remove', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger"
- if can?(current_user, :remove_project, @project)
.right
= link_to 'Remove', @project, confirm: 'Removed project can not be restored! Are you sure?', method: :delete, class: "btn danger"

View file

@ -9,3 +9,4 @@
$('.project_new_holder').show();
$("#new_project").replaceWith("#{escape_javascript(render('new_form'))}");
$('.save-project-loader').hide();
new Projects();

View file

@ -29,6 +29,6 @@
git remote add origin #{@project.url_to_repo}
git push -u origin master
- if can? current_user, :admin_project, @project
- if can? current_user, :remove_project, @project
.prepend-top-20
= link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right"

View file

@ -17,7 +17,6 @@
= time_ago_in_words(note.created_at)
ago
- else
.alert-message.block-message
%span All files attached to project wall, issues etc will be displayed here
%p.slead All files attached to project wall, issues etc will be displayed here

View file

@ -2,13 +2,15 @@
%br
.graph_holder
%h4
%small You can move around the graph by using arrow keys.
%small You can move around the graph by using the arrow keys.
#holder.graph
.loading.loading-gray
:javascript
var chunk1={commits:#{@commits_json}};
var days=#{@days_json};
initGraph();
var branch_graph;
$(function(){
branchGraph($("#holder")[0]);
GraphNav.init();
branch_graph = new BranchGraph($("#holder"), {
url: '#{url_for controller: 'projects', action: 'graph', format: :json}',
commit_url: '#{url_for controller: 'projects', action: 'show'}/commits/%s'
});
});

View file

@ -0,0 +1,2 @@
:plain
$(".save-project-loader").replaceWith(errorMessage('#{escape_javascript(@error.message)}'));

View file

@ -1,16 +1,19 @@
%h3.page_title
Services → GitLab CI Integration
GitLab CI
%small Continuous integration server from GitLab
.right
.thumbnail
- if @service.active
= image_tag 'service-gitlab-ci.png', class: 'small'
- else
= image_tag 'service-disabled-gitlab-ci.png', class: 'small'
- if @service.active
%small.cgreen Enabled
- else
%small.cgray Disabled
.back_link
= link_to project_services_path(@project) do
← to services
%hr
= form_for(@service, :as => :service, :url => project_service_path(@project, :gitlab_ci), :method => :put) do |f|
- if @service.errors.any?
.alert-message.block-message.error

View file

@ -1,15 +1,31 @@
= render "projects/project_head"
%h3.page_title Services
%hr
.row
.span6
.padded
%p.slead Continuous integration server from GitLab
.thumbnail.left
= link_to edit_project_service_path(@project, :gitlab_ci) do
- if @gitlab_ci_service.try :active
= image_tag 'service-gitlab-ci.png'
- else
= image_tag 'service-disabled-gitlab-ci.png'
%br
%ul.ui-box.well-list
%li
%h4.cgreen
= link_to edit_project_service_path(@project, :gitlab_ci) do
GitLab CI
%small Continuous integration server from GitLab
.right
- if @gitlab_ci_service.try(:active)
%small.cgreen
%i.icon-ok
Enabled
- else
%small.cgray
%i.icon-off
Disabled
%li.disabled
%h4
Jenkins CI
%small An extendable open source continuous integration server
.right
%small Not implemented yet
%li.disabled
%h4
Campfire
%small Web-based group chat tool
.right
%small Not implemented yet

View file

@ -1,4 +1,4 @@
.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.web_protocol.upcase
%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

@ -1,28 +1,41 @@
%h3.page_title
= @snippet.new_record? ? "New Snippet" : "Edit Snippet ##{@snippet.id}"
%hr
= form_for [@project, @snippet] do |f|
-if @snippet.errors.any?
.alert-message.block-message.error
%ul
- @snippet.errors.full_messages.each do |msg|
%li= msg
.snippet-form-holder
= form_for [@project, @snippet] do |f|
-if @snippet.errors.any?
.alert-message.block-message.error
%ul
- @snippet.errors.full_messages.each do |msg|
%li= msg
.clearfix
= f.label :title
.input= f.text_field :title, placeholder: "Example Snippet"
.clearfix
= f.label :file_name
.input= f.text_field :file_name, placeholder: "example.rb"
.clearfix
= f.label "Lifetime"
.input= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'}
.clearfix
= f.label :content, "Code"
.input= f.text_area :content, class: "span8"
.clearfix
= f.label :title
.input= f.text_field :title, placeholder: "Example Snippet", class: 'input-xlarge', required: true
.clearfix
= f.label "Lifetime"
.input= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'}
.clearfix
.file-editor
= f.label :file_name, "File"
.input
.file_holder.snippet
.file_title
= f.text_field :file_name, placeholder: "example.rb", class: 'snippet-file-name', required: true
.file_content.code
%pre#editor= @snippet.content
= f.hidden_field :content, class: 'snippet-file-content'
.form-actions
= f.submit 'Save', class: "save-btn btn"
= link_to "Cancel", project_snippets_path(@project), class: " btn"
- unless @snippet.new_record?
.right= link_to 'Destroy', [@project, @snippet], confirm: 'Are you sure?', method: :delete, class: "btn right danger delete-snippet", id: "destroy_snippet_#{@snippet.id}"
:javascript
var editor = ace.edit("editor");
$(".snippet-form-holder form").submit(function(){
$(".snippet-file-content").val(editor.getValue());
});
.form-actions
= f.submit 'Save', class: "primary btn"
= link_to "Cancel", project_snippets_path(@project), class: " btn"
- unless @snippet.new_record?
.right= link_to 'Destroy', [@project, @snippet], confirm: 'Are you sure?', method: :delete, class: "btn right danger delete-snippet", id: "destroy_snippet_#{@snippet.id}"

View file

@ -1,12 +1,13 @@
%tr
%td
= image_tag gravatar_icon(snippet.author_email), class: "avatar s24"
%a{href: project_snippet_path(snippet.project, snippet)}
%strong= truncate(snippet.title, length: 60)
%td
= snippet.file_name
%td
%span.cgray
- if snippet.expires_at
- if snippet.expires_at
= snippet.expires_at.to_date.to_s(:short)
- else
Never

View file

@ -1,21 +1,21 @@
= render "projects/project_head"
- if can? current_user, :write_snippet, @project
.alert-message.block-message
%h3.page_title
Snippets
%small share code pastes with others out of git repository
- if can? current_user, :write_snippet, @project
= link_to new_project_snippet_path(@project), class: "btn small add_new right", title: "New Snippet" do
Add new snippet
Share code pastes with others if it can't be in a git repository
%br
To add new snippet - click on button.
%br
%table
%thead
%tr
%th Title
%th File Name
%th Expires At
= render @snippets.fresh
- if @snippets.fresh.empty?
= render @snippets
- if @snippets.empty?
%tr
%td{colspan: 3}
%h3.nothing_here_message Nothing here.

View file

@ -1,6 +1,6 @@
= render "projects/project_head"
%h3
%h3.page_title
= @snippet.title
%small= @snippet.file_name
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user

View file

@ -11,7 +11,7 @@
%h6 1. Choose people you want in the team
.clearfix
= f.label :user_ids, "People"
.input= select_tag(:user_ids, options_from_collection_for_select(User.not_in_project(@project).all, :id, :name), {data: {placeholder: "Select users"}, class: "chosen xxlarge", multiple: true})
.input= select_tag(:user_ids, options_from_collection_for_select(User.active.not_in_project(@project).all, :id, :name), {data: {placeholder: "Select users"}, class: "chosen xxlarge", multiple: true})
%h6 2. Set access level for them
.clearfix

View file

@ -1,6 +1,6 @@
- user = member.user
- allow_admin = can? current_user, :admin_project, @project
%li.wll{id: dom_id(member), class: "team_member_row user_#{user.id}"}
%li{id: dom_id(member), class: "team_member_row user_#{user.id}"}
.row
.span6
= link_to project_team_member_path(@project, member), title: user.name, class: "dark" do

View file

@ -1,10 +1,10 @@
- grouper_project_members(@project).each do |access, members|
%fieldset
%legend
.ui-box
%h5
= Project.access_options.key(access).pluralize
%small= members.size
%ul.unstyled
- members.each do |up|
%ul.well-list
- members.sort_by(&:user_name).each do |up|
= render(partial: 'team_members/show', locals: {member: up})

View file

@ -6,7 +6,7 @@
= link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn danger"
.profile_avatar_holder
= image_tag gravatar_icon(user.email, 60), class: "borders"
%h3
%h3.page_title
= user.name
%small
= user.email

View file

@ -16,10 +16,11 @@
- else
%table#tree-slider{class: "table_#{@hex_path} tree-table" }
%thead
%th Name
%th Last Update
%th Last Commit
%th= link_to "history", project_commits_path(@project, @id), class: "btn very_small right"
%tr
%th Name
%th Last Update
%th Last Commit
%th= link_to "history", project_commits_path(@project, @id), class: "btn very_small right"
- if tree.up_dir?
%tr.tree-item