Commit 37169e54 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'ee-7-4' into 'master'

More new code from CE 7.4 into EE

See merge request !191
parents 74ac2df3 7cf86dc4
......@@ -12,6 +12,9 @@ v 7.4.0
- API: Add support for forking a project via the API (Bernhard Kaindl)
- API: filter project issues by milestone (Julien Bianchi)
- Fail harder in the backup script
- Zen mode for wiki and milestones (Robert Schilling)
- Move Emoji parsing to html-pipeline-gitlab (Robert Schilling)
- Font Awesome 4.2 integration (Sullivan Senechal)
v 7.3.2
- Fix creating new file via web editor
......
......@@ -90,7 +90,7 @@ gem "github-markup"
gem 'redcarpet', '~> 3.1.2'
gem 'RedCloth'
gem 'rdoc', '~>3.6'
gem 'org-ruby'
gem 'org-ruby', '= 0.9.9'
gem 'creole', '~>0.3.6'
gem 'wikicloth', '=0.8.1'
gem 'asciidoctor', '= 0.1.4'
......@@ -181,7 +181,7 @@ gem "jquery-ui-rails"
gem "jquery-scrollto-rails"
gem "raphael-rails", "~> 2.1.2"
gem 'bootstrap-sass', '~> 3.0'
gem "font-awesome-rails", '~> 3.2'
gem "font-awesome-rails", '~> 4.2'
gem "gitlab_emoji", "~> 0.0.1.1"
gem "gon", '~> 5.0.0'
gem 'nprogress-rails'
......
......@@ -152,7 +152,7 @@ GEM
net-ssh (>= 2.1.3)
fog-json (1.0.0)
multi_json (~> 1.0)
font-awesome-rails (3.2.1.3)
font-awesome-rails (4.2.0.0)
railties (>= 3.2, < 5.0)
foreman (0.63.0)
dotenv (>= 0.7)
......@@ -332,7 +332,7 @@ GEM
omniauth-twitter (1.0.1)
multi_json (~> 1.3)
omniauth-oauth (~> 1.0)
org-ruby (0.9.8)
org-ruby (0.9.9)
rubypants (~> 0.2)
orm_adapter (0.5.0)
pg (0.15.1)
......@@ -614,7 +614,7 @@ DEPENDENCIES
factory_girl_rails
ffaker
fog (~> 1.14)
font-awesome-rails (~> 3.2)
font-awesome-rails (~> 4.2)
foreman
gemnasium-gitlab-service (~> 0.2)
github-markup
......@@ -656,7 +656,7 @@ DEPENDENCIES
omniauth-google-oauth2
omniauth-shibboleth
omniauth-twitter
org-ruby
org-ruby (= 0.9.9)
pg
poltergeist (~> 1.5.1)
pry
......
......@@ -172,8 +172,8 @@ $ ->
# Show/hide comments on diff
$("body").on "click", ".js-toggle-diff-comments", (e) ->
$(@).find('i').
toggleClass('icon-chevron-down').
toggleClass('icon-chevron-up')
toggleClass('fa fa-chevron-down').
toggleClass('fa fa-chevron-up')
$(@).closest(".diff-file").find(".notes_holder").toggle()
e.preventDefault()
......
......@@ -8,7 +8,7 @@ $ ->
#
$("body").on "click", ".js-toggle-button", (e) ->
$(@).find('i').
toggleClass('icon-chevron-down').
toggleClass('icon-chevron-up')
toggleClass('fa fa-chevron-down').
toggleClass('fa fa-chevron-up')
$(@).closest(".js-toggle-container").find(".js-toggle-content").toggle()
e.preventDefault()
......@@ -27,6 +27,8 @@ class Dispatcher
new ZenMode()
when 'projects:milestones:show'
new Milestone()
when 'projects:milestones:new'
new ZenMode()
when 'projects:issues:new','projects:issues:edit'
GitLab.GfmAutoComplete.setup()
shortcut_handler = new ShortcutsNavigation()
......@@ -87,6 +89,7 @@ class Dispatcher
when 'wikis'
new Wikis()
shortcut_handler = new ShortcutsNavigation()
new ZenMode()
when 'snippets', 'labels', 'graphs'
shortcut_handler = new ShortcutsNavigation()
when 'team_members', 'deploy_keys', 'hooks', 'services', 'protected_branches'
......
......@@ -7,8 +7,8 @@ $(document).ready ->
divHover = "<div class=\"div-dropzone-hover\"></div>"
divSpinner = "<div class=\"div-dropzone-spinner\"></div>"
divAlert = "<div class=\"" + alertClass + "\"></div>"
iconPicture = "<i class=\"icon-picture div-dropzone-icon\"></i>"
iconSpinner = "<i class=\"icon-spinner icon-spin div-dropzone-icon\"></i>"
iconPicture = "<i class=\"fa fa-picture-o div-dropzone-icon\"></i>"
iconSpinner = "<i class=\"fa fa-spinner fa-spin div-dropzone-icon\"></i>"
btnAlert = "<button type=\"button\"" + alertAttr + ">&times;</button>"
project_image_path_upload = window.project_image_path_upload or null
......
......@@ -15,7 +15,7 @@ class MergeRequest
modal = $('#modal_merge_info').modal(show: false)
disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
disableButtonIfEmptyField '#commit_message', '.accept_merge_request'
# Local jQuery finder
......@@ -40,6 +40,8 @@ class MergeRequest
if @opts.ci_enable
$.get @opts.url_to_ci_check, (data) =>
this.showCiState data.status
if data.coverage
this.showCiCoverage data.coverage
, 'json'
bindEvents: ->
......@@ -102,7 +104,11 @@ class MergeRequest
when "running", "pending"
$('.mr-state-widget').addClass("panel-warning")
showCiCoverage: (coverage) ->
cov_html = $('<span>')
cov_html.addClass('ci-coverage')
cov_html.text('Coverage ' + coverage + '%')
$('.ci_widget:visible').append(cov_html)
loadDiff: (event) ->
$.ajax
......
/**
* Styles that apply to all GFM related forms.
*/
.issue-form, .merge-request-form, .wiki-form {
.description {
height: 20em;
}
}
.wiki-form {
.description {
height: 26em;
}
}
.milestone-form {
.description {
height: 14em;
}
}
\ No newline at end of file
/**
* Styles that apply to both issues and merge requests.
*/
.issue-form, .merge-request-form {
.description {
height: 20em;
}
}
......@@ -124,7 +124,7 @@ $list-group-active-bg: $bg_primary;
color: #888;
text-shadow: 0 1px 1px #fff;
}
i[class^="icon-"] {
i[class~="fa"] {
line-height: 14px;
}
}
......
......@@ -113,6 +113,10 @@
margin-bottom: 0;
}
}
.ci-coverage {
float: right;
}
}
.merge-request-show-labels .label {
......
......@@ -119,8 +119,7 @@ ul.notes {
display: none;
float: right;
[class^="icon-"],
[class*="icon-"] {
[class~="fa"] {
font-size: 16px;
line-height: 16px;
vertical-align: middle;
......
......@@ -62,7 +62,7 @@ class ApplicationController < ActionController::Base
end
end
def after_sign_in_path_for resource
def after_sign_in_path_for(resource)
if resource.is_a?(User) && resource.respond_to?(:blocked?) && resource.blocked?
sign_out resource
flash[:alert] = "Your account is blocked. Retry when an admin has unblocked it."
......
class ConfirmationsController < Devise::ConfirmationsController
protected
def after_confirmation_path_for(resource_name, resource)
if signed_in?(resource_name)
signed_in_root_path(resource)
else
sign_in(resource)
if signed_in?(resource_name)
signed_in_root_path(resource)
else
new_session_path(resource_name)
end
end
end
end
......@@ -122,7 +122,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
if @merge_request.open? && @merge_request.can_be_merged?
@merge_request.should_remove_source_branch = params[:should_remove_source_branch]
@merge_request.automerge!(current_user, params[:merge_commit_message])
@merge_request.automerge!(current_user, params[:commit_message])
@status = true
else
@status = false
......@@ -150,8 +150,17 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
def ci_status
status = @merge_request.source_project.ci_service.commit_status(merge_request.last_commit.sha)
response = {status: status}
ci_service = @merge_request.source_project.ci_service
status = ci_service.commit_status(merge_request.last_commit.sha)
if ci_service.respond_to?(:commit_coverage)
coverage = ci_service.commit_coverage(merge_request.last_commit.sha)
end
response = {
status: status,
coverage: coverage
}
render json: response
end
......
......@@ -15,11 +15,11 @@ class RegistrationsController < Devise::RegistrationsController
super
end
def after_sign_up_path_for resource
def after_sign_up_path_for(resource)
new_user_session_path
end
def after_inactive_sign_up_path_for resource
def after_inactive_sign_up_path_for(resource)
new_user_session_path
end
......
......@@ -229,7 +229,7 @@ module ApplicationHelper
css_class << " hide" unless visible
content_tag :div, class: css_class do
content_tag(:i, nil, class: 'icon-spinner icon-spin') + text
content_tag(:i, nil, class: 'fa fa-spinner fa-spin') + text
end
end
......
......@@ -19,7 +19,7 @@ module EventsHelper
[event.action_name, target].join(" ")
end
def event_filter_link key, tooltip
def event_filter_link(key, tooltip)
key = key.to_s
inactive = if @event_filter.active? key
nil
......@@ -36,10 +36,10 @@ module EventsHelper
def icon_for_event
{
EventFilter.push => "icon-upload-alt",
EventFilter.merged => "icon-check",
EventFilter.comments => "icon-comments",
EventFilter.team => "icon-user",
EventFilter.push => 'fa fa-upload',
EventFilter.merged => 'fa fa-check-square-o',
EventFilter.comments => 'fa fa-comments',
EventFilter.team => 'fa fa-user',
}
end
......
module IconsHelper
def boolean_to_icon(value)
if value.to_s == "true"
content_tag :i, nil, class: 'icon-circle cgreen'
content_tag :i, nil, class: 'fa fa-circle cgreen'
else
content_tag :i, nil, class: 'icon-off clgray'
content_tag :i, nil, class: 'fa fa-power-off clgray'
end
end
def public_icon
content_tag :i, nil, class: 'icon-globe'
content_tag :i, nil, class: 'fa fa-globe'
end
def internal_icon
content_tag :i, nil, class: 'icon-shield'
content_tag :i, nil, class: 'fa fa-shield'
end
def private_icon
content_tag :i, nil, class: 'icon-lock'
content_tag :i, nil, class: 'fa fa-lock'
end
end
module IssuesHelper
def issue_css_classes issue
def issue_css_classes(issue)
classes = "issue"
classes << " closed" if issue.closed?
classes << " today" if issue.today?
......@@ -84,7 +84,7 @@ module IssuesHelper
'id', 'name', object.assignee_id)
end
def milestone_options object
def milestone_options(object)
options_from_collection_for_select(object.project.milestones.active,
'id', 'title', object.milestone_id)
end
......
......@@ -24,7 +24,7 @@ module MergeRequestsHelper
}
end
def mr_css_classes mr
def mr_css_classes(mr)
classes = "merge-request"
classes << " closed" if mr.closed?
classes << " merged" if mr.merged?
......
......@@ -69,7 +69,7 @@ module NotesHelper
button_tag class: 'btn reply-btn js-discussion-reply-button',
data: data, title: 'Add a reply' do
link_text = content_tag(:i, nil, class: 'icon-comment')
link_text = content_tag(:i, nil, class: 'fa fa-comment')
link_text << ' Reply'
end
end
......
module NotificationsHelper
def notification_icon(notification)
if notification.disabled?
content_tag :i, nil, class: 'icon-volume-off ns-mute'
content_tag :i, nil, class: 'fa fa-volume-off ns-mute'
elsif notification.participating?
content_tag :i, nil, class: 'icon-volume-down ns-part'
content_tag :i, nil, class: 'fa fa-volume-down ns-part'
elsif notification.watch?
content_tag :i, nil, class: 'icon-volume-up ns-watch'
content_tag :i, nil, class: 'fa fa-volume-up ns-watch'
else
content_tag :i, nil, class: 'icon-circle-blank ns-default'
content_tag :i, nil, class: 'fa fa-circle-o ns-default'
end
end
end
module ProfileHelper
def oauth_active_class provider
def oauth_active_class(provider)
if current_user.provider == provider.to_s
'active'
end
......
......@@ -3,7 +3,7 @@ module ProjectsHelper
"You are going to remove #{user.name} from #{project.name} project team. Are you sure?"
end
def link_to_project project
def link_to_project(project)
link_to project do
title = content_tag(:span, project.name, class: 'project-name')
......@@ -39,7 +39,7 @@ module ProjectsHelper
end
end
def project_title project
def project_title(project)
if project.group
content_tag :span do
link_to(simple_sanitize(project.group.name), group_path(project.group)) + " / " + project.name
......@@ -133,7 +133,7 @@ module ProjectsHelper
'Star'
end
content_tag('i', ' ', class: 'icon-star') + toggle_text
content_tag('i', ' ', class: 'fa fa-star') + toggle_text
end
count_html = content_tag('span', class: 'count') do
......@@ -157,7 +157,7 @@ module ProjectsHelper
end
def link_to_toggle_fork
out = content_tag(:i, '', class: 'icon-code-fork')
out = content_tag(:i, '', class: 'fa fa-code-fork')
out << ' Fork'
out << content_tag(:span, class: 'count') do
@project.forks_count.to_s
......
......@@ -89,7 +89,7 @@ module TabHelper
end
# Use nav_tab for save controller/action but different params
def nav_tab key, value, &block
def nav_tab(key, value, &block)
o = {}
o[:class] = ""
......
module TagsHelper
def tag_path tag
def tag_path(tag)
"/tags/#{tag}"
end
def tag_list project
def tag_list(project)
html = ''
project.tag_list.each do |tag|
html += link_to tag, tag_path(tag)
......
......@@ -36,9 +36,9 @@ module TreeHelper
# type - String type of the tree item; either 'folder' or 'file'
def tree_icon(type)
icon_class = if type == 'folder'
'icon-folder-close'
'fa fa-folder'
else
'icon-file-alt'
'fa fa-file-o'
end
content_tag :i, nil, class: icon_class
......@@ -80,7 +80,7 @@ module TreeHelper
end
end
def up_dir_path tree
def up_dir_path(tree)
file = File.join(@path, "..")
tree_join(@ref, file)
end
......
......@@ -184,7 +184,7 @@ class Ability
]
end
def group_abilities user, group
def group_abilities(user, group)
rules = []
if user.admin? || group.users.include?(user) || ProjectsFinder.new.execute(user, group: group).any?
......@@ -209,7 +209,7 @@ class Ability
rules.flatten
end
def namespace_abilities user, namespace
def namespace_abilities(user, namespace)
rules = []
# Only namespace owner and administrators can manage it
......
......@@ -88,9 +88,24 @@ class Commit
description.present?
end
def hook_attrs(project)
path_with_namespace = project.path_with_namespace
{
id: id,
message: safe_message,
timestamp: committed_date.xmlschema,
url: "#{Gitlab.config.gitlab.url}/#{path_with_namespace}/commit/#{id}",
author: {
name: author_name,
email: author_email
}
}
end
# Discover issues should be closed when this commit is pushed to a project's
# default branch.
def closes_issues project
def closes_issues(project)
Gitlab::ClosingIssueExtractor.closed_by_message_in_project(safe_message, project)
end
......
......@@ -134,7 +134,7 @@ module Issuable
def to_hook_data
{
object_kind: self.class.name.underscore,
object_attributes: self.attributes
object_attributes: hook_attrs
}
end
......
......@@ -10,7 +10,7 @@ module Mentionable
module ClassMethods
# Indicate which attributes of the Mentionable to search for GFM references.
def attr_mentionable *attrs
def attr_mentionable(*attrs)
mentionable_attrs.concat(attrs.map(&:to_s))
end
......@@ -38,7 +38,7 @@ module Mentionable
# Determine whether or not a cross-reference Note has already been created between this Mentionable and
# the specified target.
def has_mentioned? target
def has_mentioned?(target)
Note.cross_reference_exists?(target, local_reference)
end
......@@ -64,7 +64,7 @@ module Mentionable
end
# Extract GFM references to other Mentionables from this Mentionable. Always excludes its #local_reference.
def references p = project, text = mentionable_text
def references(p = project, text = mentionable_text)
return [] if text.blank?
ext = Gitlab::ReferenceExtractor.new
ext.analyze(text)
......@@ -73,7 +73,7 @@ module Mentionable
end
# Create a cross-reference Note for each GFM reference to another Mentionable found in +mentionable_text+.
def create_cross_references! p = project, a = author, without = []
def create_cross_references!(p = project, a = author, without = [])
refs = references(p) - without
refs.each do |ref|
Note.create_cross_reference_note(ref, local_reference, a, p)
......@@ -82,7 +82,7 @@ module Mentionable
# If the mentionable_text field is about to change, locate any *added* references and create cross references for
# them. Invoke from an observer's #before_save implementation.
def notice_added_references p = project, a = author
def notice_added_references(p = project, a = author)
ch = changed_attributes
original, mentionable_changed = "", false
self.class.mentionable_attrs.each do |attr|
......
......@@ -21,6 +21,7 @@ class WebHook < ActiveRecord::Base
default_value_for :push_events, true
default_value_for :issues_events, false
default_value_for :merge_requests_events, false
default_value_for :tag_push_events, false
# HTTParty timeout
default_timeout Gitlab.config.gitlab.webhook_timeout
......
......@@ -48,6 +48,10 @@ class Issue < ActiveRecord::Base
state :closed
end
def hook_attrs
attributes
end
# Mentionable overrides.
def gfm_reference
......
......@@ -77,7 +77,7 @@ class ProjectMember < Member
false
end
def truncate_team project
def truncate_team(project)
truncate_teams [project.id]
end
......
......@@ -211,6 +211,20 @@ class MergeRequest < ActiveRecord::Base
Gitlab::Satellite::MergeAction.new(current_user, self).format_patch
end
def hook_attrs
attrs = {
source: source_project.hook_attrs,
target: target_project.hook_attrs,
last_commit: nil
}
unless last_commit.nil?
attrs.merge!(last_commit: last_commit.hook_attrs(source_project))
end
attributes.merge!(attrs)
end
def for_fork?
target_project != source_project
end
......
......@@ -38,7 +38,7 @@ class Namespace < ActiveRecord::Base
scope :root, -> { where('type IS NULL') }
def self.search query
def self.search(query)
where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
end
......
......@@ -6,7 +6,7 @@ module Network
@max_count ||= 650
end
def initialize project, ref, commit, filter_ref
def initialize(project, ref, commit, filter_ref)
@project = project
@ref = ref
@commit = commit
......
......@@ -346,7 +346,7 @@ class Project < ActiveRecord::Base
path
end
def items_for entity
def items_for(entity)
case entity
when 'issue' then
issues
......@@ -519,7 +519,7 @@ class Project < ActiveRecord::Base
end
# Check if current branch name is marked as protected in the system
def protected_branch? branch_name
def protected_branch?(branch_name)
protected_branches_names.include?(branch_name)
end
......@@ -559,6 +559,16 @@ class Project < ActiveRecord::Base
end
end
def hook_attrs
{
name: name,
ssh_url: ssh_url_to_repo,
http_url: http_url_to_repo,
namespace: namespace.name,
visibility_level: visibility_level
}
end
# Reset events cache related to this project
#
# Since we do cache @event we need to reset cache in special cases:
......
......@@ -27,12 +27,17 @@ class GitlabCiService < CiService
hook.save
end
def commit_status_path sha
def commit_status_path(sha)
project_url + "/builds/#{sha}/status.json?token=#{token}"
end
def commit_status sha
response = HTTParty.get(commit_status_path(sha), verify: false)
def get_ci_build(sha)
@ci_builds ||= {}
@ci_builds[sha] ||= HTTParty.get(commit_status_path(sha), verify: false)
end
def commit_status(sha)
response = get_ci_build(sha)
if response.code == 200 and response["status"]
response["status"]
......@@ -41,7 +46,15 @@ class GitlabCiService < CiService
end
end
def build_page sha
def commit_coverage(sha)
response = get_ci_build(sha)
if response.code == 200 and response["coverage"]
response["coverage"]
end
end
def build_page(sha)
project_url + "/builds/#{sha}"
end
......
......@@ -11,7 +11,7 @@ class ProjectTeam
# @team << [@user, :master]
# @team << [@users, :master]
#
def << args
def <<(args)
users = args.first
if users.respond_to?(:each)
......
......@@ -204,7 +204,7 @@ class User < ActiveRecord::Base
User.where(name: name).first
end
def filter filter_name
def filter(filter_name)
case filter_name
when "admins"; self.admins
when "blocked"; self.blocked
......@@ -214,7 +214,7 @@ class User < ActiveRecord::Base
end
end
def search query
def search(query)
where("lower(name) LIKE :query OR lower(email) LIKE :query OR lower(username) LIKE :query", query: "%#{query.downcase}%")
end
......@@ -334,7 +334,7 @@ class User < ActiveRecord::Base
several_namespaces? || admin
end
def can? action, subject
def can?(action, subject)
abilities.allowed?(self, action, subject)
end
......@@ -355,7 +355,7 @@ class User < ActiveRecord::Base
(personal_projects.count.to_f / projects_limit) * 100
end
def recent_push project_id = nil
def recent_push(project_id = nil)
# Get push events not earlier than 2 hours ago
events = recent_events.code_push.where("created_at > ?", Time.now - 2.hours)
events = events.where(project_id: project_id) if project_id
......@@ -384,11 +384,11 @@ class User < ActiveRecord::Base
project.team_member_by_id(self.id)
end
def already_forked? project
def already_forked?(project)
!!fork_of(project)
end
def fork_of project
def fork_of(project)
links = ForkedProjectLink.where(forked_from_project_id: project, forked_to_project_id: personal_projects)
if links.any?
......@@ -514,7 +514,7 @@ class User < ActiveRecord::Base
NotificationService.new
end
def log_info message
def log_info(message)
Gitlab::AppLogger.info message
end
......
......@@ -25,7 +25,7 @@ class BaseService
EventCreateService.new
end
def log_info message
def log_info(message)
Gitlab::AppLogger.info message
end
......
......@@ -75,7 +75,7 @@ class GitPushService
# Extract any GFM references from the pushed commit messages. If the configured issue-closing regex is matched,
# close the referenced Issue. Create cross-reference Notes corresponding to any other referenced Mentionables.
def process_commit_messages ref
def process_commit_messages(ref)
is_default_branch = is_default_branch?(ref)
@push_commits.each do |commit|
......@@ -154,49 +154,40 @@ class GitPushService
# will be passed as post receive hook data.
#
push_commits_limited.each do |commit|
data[:commits] << {
id: commit.id,
message: commit.safe_message,
timestamp: commit.committed_date.xmlschema,
url: "#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/commit/#{commit.id}",
author: {
name: commit.author_name,
email: commit.author_email
}
}
data[:commits] << commit.hook_attrs(project)
end
data
end
def push_to_existing_branch? ref, oldrev
def push_to_existing_branch?(ref, oldrev)
ref_parts = ref.split('/')
# Return if this is not a push to a branch (e.g. new commits)
ref_parts[1] =~ /heads/ && oldrev != "0000000000000000000000000000000000000000"
end
def push_to_new_branch? ref, oldrev
def push_to_new_branch?(ref, oldrev)
ref_parts = ref.split('/')
ref_parts[1] =~ /heads/ && oldrev == "0000000000000000000000000000000000000000"
end
def push_remove_branch? ref, newrev
def push_remove_branch?(ref, newrev)
ref_parts = ref.split('/')
ref_parts[1] =~ /heads/ && newrev == "0000000000000000000000000000000000000000"
end
def push_to_branch? ref
def push_to_branch?(ref)
ref =~ /refs\/heads/
end
def is_default_branch? ref
def is_default_branch?(ref)
ref == "refs/heads/#{project.default_branch}"
end
def commit_user commit
def commit_user(commit)
User.find_for_commit(commit.author_email, commit.author_name) || user
end
end
......@@ -8,7 +8,7 @@
.panel-body
- if @sidekiq_processes.empty?
%h4.cred
%i.icon-warning-sign
%i.fa.fa-exclamation-triangle
There are no running sidekiq processes. Please restart GitLab
- else
%table.table
......@@ -32,10 +32,10 @@
.clearfix
%p
%i.icon-exclamation-sign
%i.fa.fa-exclamation-circle
If '[25 of 25 busy]' is shown, restart GitLab with 'sudo service gitlab reload'.
%p
%i.icon-exclamation-sign
%i.fa.fa-exclamation-circle
If more than one sidekiq process is listed, stop GitLab, kill the remaining sidekiq processes (sudo pkill -u #{Settings.gitlab.user} -f sidekiq) and restart GitLab.
......
......@@ -3,7 +3,7 @@
%p.light
Broadcast messages are displayed for every user and can be used to notify users about scheduled maintenance, recent upgrades and more.
.broadcast-message-preview
%i.icon-bullhorn
%i.fa.fa-bullhorn
%span Your message here
= form_for [:admin, @broadcast_message], html: { class: 'broadcast-message-form form-horizontal'} do |f|
......@@ -53,7 +53,7 @@
#{broadcast_message.ends_at.to_s(:short)}
&nbsp;
= link_to [:admin, broadcast_message], method: :delete, remote: true, class: 'remove-row btn btn-tiny' do
%i.icon-remove.cred
%i.fa.fa-times.cred
.message= broadcast_message.message
......
......@@ -17,7 +17,7 @@
= f.label :avatar, "Group avatar", class: 'control-label'
.col-sm-10
%a.choose-btn.btn.btn-small.js-choose-group-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
......
......@@ -24,7 +24,7 @@
%h4
= link_to [:admin, group] do
%i.icon-folder-close
%i.fa.fa-folder
= group.name
&rarr;
......
......@@ -2,7 +2,7 @@
Group: #{@group.name}
= link_to edit_admin_group_path(@group), class: "btn pull-right" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Edit
%hr
.row
......@@ -108,6 +108,6 @@
%span.pull-right.light
= member.human_access
= link_to group_group_members_path(@group, member), data: { confirm: remove_user_from_group_message(@group, user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-minus.icon-white
%i.fa.fa-minus.fa-inverse
.panel-footer
= paginate @members, param_name: 'members_page', theme: 'gitlab'
......@@ -13,11 +13,11 @@
.tab-pane.active#githost
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
githost.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
......@@ -27,11 +27,11 @@
.tab-pane#application
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
application.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
......@@ -41,11 +41,11 @@
.tab-pane#production
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
production.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
......@@ -55,11 +55,11 @@
.tab-pane#sidekiq
.file-holder#README
.file-title
%i.icon-file
%i.fa.fa-file
sidekiq.log
.pull-right
= link_to '#', class: 'log-bottom' do
%i.icon-arrow-down
%i.fa.fa-arrow-down
Scroll down
.file-content.logs
%ol
......
%h3.page-title
Project: #{@project.name_with_namespace}
= link_to edit_project_path(@project), class: "btn pull-right" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Edit
%hr
.row
......@@ -98,7 +98,7 @@
group members (#{@group.group_members.count})
.pull-right
= link_to admin_group_path(@group), class: 'btn btn-small' do
%i.icon-edit
%i.fa.fa-pencil-square-o
%ul.well-list
- @group_members.each do |member|
= render 'groups/group_members/group_member', member: member, show_controls: false
......@@ -112,7 +112,7 @@
(#{@project.users.count})
.pull-right
= link_to project_team_index_path(@project), class: "btn btn-tiny" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Manage Access
%ul.well-list.team_members
- @project_members.each do |project_member|
......@@ -127,6 +127,6 @@
- else
%span.light= project_member.human_access
= link_to project_team_member_path(@project, user), data: { confirm: remove_from_project_team_message(@project, user)}, method: :delete, remote: true, class: "btn btn-small btn-remove" do
%i.icon-remove
%i.fa.fa-times
.panel-footer
= paginate @project_members, param_name: 'project_members_page', theme: 'gitlab'
......@@ -23,7 +23,7 @@
.form-group
= search_field_tag :name, params[:name], placeholder: 'Name, email or username', class: 'form-control'
= button_tag class: 'btn btn-primary' do
%i.icon-search
%i.fa.fa-search
%hr
= link_to 'Reset', admin_users_path, class: "btn btn-cancel"
......@@ -39,9 +39,9 @@
%li
.list-item-name
- if user.blocked?
%i.icon-lock.cred
%i.fa.fa-lock.cred
- else
%i.icon-user.cgreen
%i.fa.fa-user.cgreen
= link_to user.name, [:admin, user]
- if user.admin?
%strong.cred (Admin)
......@@ -49,7 +49,7 @@
%span.cred It's you!
.pull-right
%span.light
%i.icon-envelope
%i.fa.fa-envelope
= mail_to user.email, user.email, class: 'light'
&nbsp;
= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn btn-small"
......
......@@ -8,7 +8,7 @@
.pull-right
= link_to edit_admin_user_path(@user), class: "btn btn-grouped" do
%i.icon-edit
%i.fa.fa-pencil-square-o
Edit
%hr
%ul.nav.nav-tabs
......@@ -45,7 +45,7 @@
%span.light Secondary email:
%strong= email.email
= link_to remove_email_admin_user_path(@user, email), data: { confirm: "Are you sure you want to remove #{email.email}?" }, method: :delete, class: "btn-tiny btn btn-remove pull-right", title: 'Remove secondary email', id: "remove_email_#{email.id}" do
%i.icon-remove
%i.fa.fa-times
%li
%span.light Can create groups:
......@@ -86,6 +86,11 @@
- else
never
%li
%span.light Sign-in count:
%strong
= @user.sign_in_count
- if @user.ldap_user?
%li
%span.light LDAP uid:
......@@ -171,8 +176,8 @@
.pull-right
%span.light= user_group.human_access
- unless user_group.owner?
= link_to group_users_group_path(group, user_group), data: { confirm: remove_user_from_group_message(group, @user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-remove.icon-white
= link_to group_group_member_path(group, user_group), data: { confirm: remove_user_from_group_message(group, @user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.fa.fa-times.fa-inverse
- else
.nothing-here-block This user has no groups.
......@@ -211,4 +216,4 @@
- if tm.respond_to? :project
= link_to project_team_member_path(project, @user), data: { confirm: remove_from_project_team_message(project, @user) }, remote: true, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from project' do
%i.icon-remove
%i.fa.fa-times
......@@ -3,7 +3,7 @@
= search_field_tag :filter_group, nil, placeholder: 'Filter by name', class: 'dash-filter form-control'
- if current_user.can_create_group?
= link_to new_group_path, class: "btn btn-new pull-right" do
%i.icon-plus
%i.fa.fa-plus
New group
%ul.well-list.dash-list
- groups.each do |group|
......@@ -13,7 +13,7 @@
%span.group-name.filter-title
= truncate(group.name, length: 35)
%span.arrow
%i.icon-angle-right
%i.fa.fa-angle-right
- if groups.blank?
%li
.nothing-here-block You have no groups yet.
......@@ -9,4 +9,4 @@
%span.project-name.filter-title
= project.name
%span.arrow
%i.icon-angle-right
%i.fa.fa-angle-right
......@@ -3,7 +3,7 @@
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'dash-filter form-control'
- if current_user.can_create_project?
= link_to new_project_path, class: "btn btn-new pull-right" do
%i.icon-plus
%i.fa.fa-plus
New project
%ul.well-list.dash-list
......@@ -21,4 +21,4 @@
.pull-right
= link_to projects_dashboard_path do
Show all
%i.icon-angle-right
%i.fa.fa-angle-right
......@@ -37,7 +37,7 @@
- @groups.each do |group|
%li{ class: (group.name == params[:group]) ? 'active' : 'light' }
= link_to projects_dashboard_filter_path(group: group.name) do
%i.icon-folder-close-alt
%i.fa.fa-folder-o
= group.name
%small.pull-right
= group.projects.count
......@@ -51,5 +51,5 @@
- @tags.each do |tag|
%li{ class: (tag.name == params[:tag]) ? 'active' : 'light' }
= link_to projects_dashboard_filter_path(scope: params[:scope], tag: tag.name) do
%i.icon-tag
%i.fa.fa-tag
= tag.name
......@@ -18,7 +18,7 @@
%span.rss-icon
= link_to dashboard_path(:atom, { private_token: current_user.private_token }) do
%strong
%i.icon-rss
%i.fa.fa-rss
News Feed
%hr
......
......@@ -3,7 +3,7 @@
%hr
%div
.dashboard-intro-icon
%i.icon-bookmark-empty
%i.fa.fa-bookmark-o
%div
%p.slead
You don't have access to any projects right now.
......@@ -23,7 +23,7 @@
%hr
%div
.dashboard-intro-icon
%i.icon-group
%i.fa.fa-users
%div
%p.slead
You can create a group for several dependent projects.
......@@ -37,7 +37,7 @@
%hr
%div
.dashboard-intro-icon
%i.icon-globe
%i.fa.fa-globe
%div
%p.slead
There are
......
......@@ -7,7 +7,7 @@
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'issue'
.col-md-9
......
......@@ -7,7 +7,7 @@
%hr
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'merge_request'
.col-md-9
......
......@@ -40,23 +40,23 @@
- if current_user.can_leave_project?(project)
.pull-right
= link_to leave_project_team_members_path(project), data: { confirm: "Leave project?"}, method: :delete, remote: true, class: "btn-tiny btn remove-row", title: 'Leave project' do
%i.icon-signout
%i.fa.fa-sign-out
Leave
- if project.forked_from_project
%small.pull-right
%i.icon-code-fork
%i.fa.fa-code-fork
Forked from:
= link_to project.forked_from_project.name_with_namespace, project_path(project.forked_from_project)
.project-info
.pull-right
- if project.archived?
%span.label
%i.icon-archive
%i.fa.fa-archive
Archived
- project.tags.each do |tag|
%span.label.label-info
%i.icon-tag
%i.fa.fa-tag
= tag.name
- if project.description.present?
%p= truncate project.description, length: 100
......
......@@ -6,7 +6,7 @@
= render 'sidebar'
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
- else
= render "zero_authorized_projects"
......@@ -9,7 +9,7 @@
.event-body
.event-note
.md
%i.icon-comment-alt.event-note-icon
%i.fa.fa-comment-o.event-note-icon
= event_note(event.target.note)
- note = event.target
- if note.attachment.url
......@@ -18,5 +18,5 @@
= image_tag note.attachment.secure_url, class: 'note-image-attach'
- else
= link_to note.attachment.secure_url, target: "_blank", class: 'note-file-attach' do
%i.icon-paper-clip
%i.fa.fa-paperclip
= note.attachment_identifier
......@@ -36,7 +36,7 @@
.clearfix
%h4
= link_to group_path(id: group.path) do
%i.icon-group
%i.fa.fa-users
= group.name
.clearfix
%p
......
......@@ -21,5 +21,5 @@
&middot;
= link_to pluralize(project.repository.tag_names.count, 'tag'), project_tags_path(project)
- else
%i.icon-warning-sign
%i.fa.fa-exclamation-triangle
Empty repository
.explore-trending-block
%p.lead
%i.icon-comments-alt
%i.fa.fa-comments-o
See most starred projects
%hr
.public-projects
......
.explore-trending-block
%p.lead
%i.icon-comments-alt
%i.fa.fa-comments-o
See most discussed projects for last month
%hr
.public-projects
......
......@@ -4,7 +4,7 @@
- if can? current_user, :create_projects, @group
.panel-head-actions
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do
%i.icon-plus
%i.fa.fa-plus
New project
%ul.well-list
- if projects.blank?
......@@ -18,4 +18,4 @@
%span.project-name
= project.name
%span.arrow
%i.icon-angle-right
%i.fa.fa-angle-right
%ul.nav.nav-pills.nav-stacked.nav-stacked-menu
= nav_link(path: 'groups#edit') do
= link_to edit_group_path(@group) do
%i.icon-edit
%i.fa.fa-pencil-square-o
Group
= nav_link(path: 'groups#projects') do
= link_to projects_group_path(@group) do
%i.icon-folder-close
%i.fa.fa-folder
Projects
= nav_link(controller: :ldap_group_links) do
= link_to group_ldap_group_links_path(@group) do
......
......@@ -31,7 +31,7 @@
- else
You can upload a group avatar here
%a.choose-btn.btn.btn-small.js-choose-group-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
......
......@@ -15,14 +15,14 @@
- if show_controls
- if can?(current_user, :modify, member)
= link_to '#', class: "btn-tiny btn js-toggle-button", title: 'Edit access level' do
%i.icon-edit
%i.fa.fa-pencil-square-o
- if can?(current_user, :destroy, member)
- if current_user == member.user
= link_to leave_profile_group_path(@group), data: { confirm: leave_group_message(@group.name)}, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-minus.icon-white
%i.fa.fa-minus.fa-inverse
- else
= link_to group_group_member_path(@group, member), data: { confirm: remove_user_from_group_message(@group, user) }, method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do
%i.icon-minus.icon-white
%i.fa.fa-minus.fa-inverse
.edit-member.hide.js-toggle-content
= form_for [@group, member], remote: true do |f|
......
......@@ -11,7 +11,7 @@
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'issue'
.col-md-9
......
......@@ -23,7 +23,7 @@
= link_to '#', class: 'btn btn-new js-toggle-button' do
Add members
%i.icon-chevron-down
%i.fa.fa-chevron-down
.js-toggle-content.hide.new-group-member-holder
= render "new_group_member"
......
......@@ -10,7 +10,7 @@
%hr
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'shared/filter', entity: 'merge_request'
.col-md-9
......
......@@ -11,7 +11,7 @@
.row
.fixed.sidebar-expand-button.hidden-lg.hidden-md
%i.icon-list.icon-2x
%i.fa.fa-list.fa-2x
.col-md-3.responsive-side
= render 'groups/filter', entity: 'milestone'
.col-md-9
......
......@@ -17,7 +17,7 @@
= f.label :avatar, "Group avatar", class: 'control-label'
.col-sm-10
%a.choose-btn.btn.btn-small.js-choose-group-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
......
......@@ -9,7 +9,7 @@
- if can? current_user, :manage_group, @group
.panel-head-actions
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do
%i.icon-plus
%i.fa.fa-plus
New Project
%ul.well-list
- @projects.each do |project|
......
......@@ -33,7 +33,7 @@
.prepend-top-20
= link_to group_path(@group, { format: :atom, private_token: current_user.private_token }), title: "Feed" do
%strong
%i.icon-rss
%i.fa.fa-rss
News Feed
%hr
......
......@@ -29,12 +29,12 @@
%tr
%td.shortcut
.key
%i.icon-arrow-up
%i.fa.fa-arrow-up
%td Move selection up
%tr
%td.shortcut
.key
%i.icon-arrow-down
%i.fa.fa-arrow-down
%td Move selection down
%tr
%td.shortcut
......@@ -132,28 +132,28 @@
%tr
%td.shortcut
.key
%i.icon-arrow-left
%i.fa.fa-arrow-left
\/
.key h
%td Scroll left
%tr
%td.shortcut
.key
%i.icon-arrow-right
%i.fa.fa-arrow-right
\/
.key l
%td Scroll right
%tr
%td.shortcut
.key
%i.icon-arrow-up
%i.fa.fa-arrow-up
\/
.key k
%td Scroll up
%tr
%td.shortcut
.key
%i.icon-arrow-down
%i.fa.fa-arrow-down
\/
.key j
%td Scroll down
......@@ -161,7 +161,7 @@
%td.shortcut
.key
shift
%i.icon-arrow-up
%i.fa.fa-arrow-up
\/
.key
shift k
......@@ -170,7 +170,7 @@
%td.shortcut
.key
shift
%i.icon-arrow-down
%i.fa.fa-arrow-down
\/
.key
shift j
......
- if broadcast_message.present?
.broadcast-message{ style: broadcast_styling(broadcast_message) }
%i.icon-bullhorn
%i.fa.fa-bullhorn
= broadcast_message.message
......@@ -10,7 +10,7 @@
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
%span.sr-only Toggle navigation
%i.icon-reorder
%i.fa.fa-bars
.navbar-collapse.collapse
%ul.nav.navbar-nav
......@@ -18,31 +18,31 @@
= render "layouts/search"
%li.visible-sm.visible-xs
= link_to search_path, title: "Search", class: 'has_bottom_tooltip', 'data-original-title' => 'Search area' do
%i.icon-search
%i.fa.fa-search
%li
= link_to help_path, title: 'Help', class: 'has_bottom_tooltip',
'data-original-title' => 'Help' do
%i.icon-question-sign
%i.fa.fa-question-circle
%li
= link_to explore_root_path, title: "Explore", class: 'has_bottom_tooltip', 'data-original-title' => 'Public area' do
%i.icon-globe
%i.fa.fa-globe
%li
= link_to user_snippets_path(current_user), title: "My snippets", class: 'has_bottom_tooltip', 'data-original-title' => 'My snippets' do
%i.icon-paste
%i.fa.fa-clipboard
- if current_user.is_admin?
%li
= link_to admin_root_path, title: "Admin area", class: 'has_bottom_tooltip', 'data-original-title' => 'Admin area' do
%i.icon-cogs
%i.fa.fa-cogs
- if current_user.can_create_project?
%li
= link_to new_project_path, title: "New project", class: 'has_bottom_tooltip', 'data-original-title' => 'New project' do
%i.icon-plus
%i.fa.fa-plus
%li
= link_to profile_path, title: "Profile settings", class: 'has_bottom_tooltip', 'data-original-title' => 'Profile settings"' do
%i.icon-user
%i.fa.fa-user
%li
= link_to destroy_user_session_path, class: "logout", method: :delete, title: "Logout", class: 'has_bottom_tooltip', 'data-original-title' => 'Logout' do
%i.icon-signout
%i.fa.fa-sign-out
%li.hidden-xs
= link_to current_user, class: "profile-pic", id: 'profile-pic' do
= image_tag avatar_icon(current_user.email, 26), alt: 'User activity'
......@@ -10,7 +10,7 @@
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
%span.sr-only Toggle navigation
%i.icon-reorder
%i.fa.fa-bars
.pull-right.hidden-xs
= link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-new'
......
......@@ -52,7 +52,7 @@
&nbsp;
.loading-gif.hide
%p
%i.icon-spinner.icon-spin
%i.fa.fa-spinner.fa-spin
Saving new username
%p.light
= user_url(@user)
......
......@@ -3,7 +3,7 @@
- if current_user.can_create_group?
%span.pull-right
= link_to new_group_path, class: "btn btn-new" do
%i.icon-plus
%i.fa.fa-plus
New Group
%p.light
Group members have access to all a group's projects
......@@ -19,12 +19,12 @@
.pull-right
- if can?(current_user, :manage_group, group)
= link_to edit_group_path(group), class: "btn-small btn btn-grouped" do
%i.icon-cogs
%i.fa.fa-cogs
Settings
- if can?(current_user, :destroy, user_group)
= link_to leave_profile_group_path(group), data: { confirm: leave_group_message(group.name) }, method: :delete, class: "btn-small btn btn-grouped", title: 'Remove user from group' do
%i.icon-signout
%i.fa.fa-sign-out
Leave
= link_to group, class: 'group-name' do
......
%li
%span.notification-icon-holder
%span.notification.fa.fa-holder
- if notification.global?
= notification_icon(@notification)
- else
......
......@@ -78,7 +78,7 @@
or change it at #{link_to "gravatar.com", "http://gravatar.com"}
%hr
%a.choose-btn.btn.btn-small.js-choose-user-avatar-button
%i.icon-paper-clip
%i.fa.fa-paperclip
%span Choose File ...
&nbsp;
%span.file_name.js-avatar-filename File name...
......
- if current_user
.dropdown.pull-right
%a.dropdown-toggle.btn.btn-new{href: '#', "data-toggle" => "dropdown"}
%i.icon-reorder
%i.fa.fa-bars
%ul.dropdown-menu
- if @project.issues_enabled && can?(current_user, :write_issue, @project)
%li
......@@ -23,11 +23,11 @@
%li.divider
%li
= link_to new_project_branch_path(@project) do
%i.icon-code-fork
%i.fa.fa-code-fork
Git branch
%li
= link_to new_project_tag_path(@project) do
%i.icon-tag
%i.fa.fa-tag
Git tag
......@@ -29,7 +29,7 @@
.form-group
.issue-assignee
= f.label :assignee_id, class: 'control-label' do
%i.icon-user
%i.fa.fa-user
Assign to
.col-sm-10
= project_users_select_tag("#{issuable.class.model_name.param_key}[assignee_id]",
......@@ -40,17 +40,29 @@
.form-group
.issue-milestone
= f.label :milestone_id, class: 'control-label' do
%i.icon-time
%i.fa.fa-clock-o
Milestone
.col-sm-10= f.select(:milestone_id, milestone_options(issuable),
{ include_blank: 'Select milestone' }, { class: 'select2' })
.col-sm-10
- if milestone_options(issuable).present?
= f.select(:milestone_id, milestone_options(issuable),
{ include_blank: 'Select milestone' }, { class: 'select2' })
- else
%span.light No open milestones available.
&nbsp;
= link_to 'Create new milestone', new_project_milestone_path(issuable.project)
.form-group
= f.label :label_ids, class: 'control-label' do
%i.icon-tag
Labels
.col-sm-10
= f.collection_select :label_ids, issuable.project.labels.all, :id, :name,
- if issuable.project.labels.any?
= f.collection_select :label_ids, issuable.project.labels.all, :id, :name,
{ selected: issuable.label_ids }, multiple: true, class: 'select2'
- else
%span.light No labels yet.
&nbsp;
= link_to 'Create new label', new_project_label_path(issuable.project)
.form-actions
- if issuable.new_record?
= f.submit "Submit new #{issuable.class.model_name.human.downcase}", class: 'btn btn-create'
......
%ul.nav.nav-pills.nav-stacked.nav-stacked-menu.append-bottom-20.project-settings-nav
= nav_link(path: 'projects#edit') do
= link_to edit_project_path(@project), class: "stat-tab tab " do
%i.icon-edit
%i.fa.fa-pencil-square-o
Project
= nav_link(controller: [:team_members, :teams]) do
= link_to project_team_index_path(@project), class: "team-tab tab" do
%i.icon-group
%i.fa.fa-users
Members
= nav_link(controller: :group_links) do
= link_to project_group_links_path(@project) do
......@@ -13,11 +13,11 @@
Groups
= nav_link(controller: :deploy_keys) do
= link_to project_deploy_keys_path(@project) do
%i.icon-key
%i.fa.fa-key
Deploy Keys
= nav_link(controller: :hooks) do
= link_to project_hooks_path(@project) do
%i.icon-link
%i.fa.fa-link
Web Hooks
= nav_link(controller: :git_hooks) do
= link_to project_git_hooks_path(@project) do
......@@ -25,9 +25,9 @@
Git Hooks
= nav_link(controller: :services) do
= link_to project_services_path(@project) do
%i.icon-cogs
%i.fa.fa-cogs
Services
= nav_link(controller: :protected_branches) do
= link_to project_protected_branches_path(@project) do
%i.icon-lock
%i.fa.fa-lock
Protected branches
......@@ -3,7 +3,7 @@
#tree-holder.tree-holder
.file-holder
.file-title
%i.icon-file
%i.fa.fa-file
%span.file_name
= @path
%small= number_to_human_size @blob.size
......
%ul.breadcrumb.repo-breadcrumb
%li
%i.icon-angle-right
%i.fa.fa-angle-right
= link_to project_tree_path(@project, @ref) do
= @project.path
- tree_breadcrumbs(@tree, 6) do |title, path|
......@@ -22,7 +22,7 @@
%div#tree-content-holder.tree-content-holder
%article.file-holder
.file-title.clearfix
%i.icon-file
%i.fa.fa-file
%span.file_name
= blob.name
%small= number_to_human_size blob.size
......
......@@ -2,6 +2,6 @@
.center
= link_to project_raw_path(@project, @id) do
%h1.light
%i.icon-download-alt
%i.fa.fa-arrow-circle-o-down-alt
%h4
Download (#{number_to_human_size blob.size})
......@@ -10,12 +10,8 @@
.modal-body
= form_tag project_blob_path(@project, @id), method: :delete, class: 'form-horizontal' do
.form-group.commit_message-group
= label_tag 'commit_message', class: "control-label" do
Commit message
.col-sm-10
= render 'shared/commit_message_container', {textarea: text_area_tag('commit_message',
params[:commit_message], placeholder: "Removed this file because...", required: true, rows: 3, class: 'form-control')}
= render 'shared/commit_message_container', params: params,
placeholder: 'Removed this file because...'
.form-group
.col-sm-2
.col-sm-10
......
......@@ -7,19 +7,19 @@
%span.label.label-info default
- if @project.protected_branch? branch.name
%span.label.label-success
%i.icon-lock
%i.fa.fa-lock
protected
.pull-right
- if can?(current_user, :download_code, @project)
= render 'projects/repositories/download_archive', ref: branch.name, btn_class: 'btn-grouped btn-group-small'
- if branch.name != @repository.root_ref
= link_to project_compare_index_path(@project, from: @repository.root_ref, to: branch.name), class: 'btn btn-grouped btn-small', method: :post, title: "Compare" do
%i.icon-copy
%i.fa.fa-files-o
Compare
- if can_remove_branch?(@project, branch.name)
= link_to project_branch_path(@project, branch.name), class: 'btn btn-grouped btn-small btn-remove remove-row', method: :delete, data: { confirm: 'Removed branch cannot be restored. Are you sure?'}, remote: true do
%i.icon-trash
%i.fa.fa-trash-o
- if commit
%ul.list-unstyled
......
......@@ -4,7 +4,7 @@
.pull-right
- if can? current_user, :push_code, @project
= link_to new_project_branch_path(@project), class: 'btn btn-create' do
%i.icon-add-sign
%i.fa.fa-add-sign
New branch
&nbsp;
.dropdown.inline
......
......@@ -3,7 +3,7 @@
%button{ type: "button", class: "close", "data-dismiss" => "alert"} &times;
= @error
%h3.page-title
%i.icon-code-fork
%i.fa.fa-code-fork
New branch
= form_tag project_branches_path, method: :post, class: "form-horizontal" do
.form-group
......
......@@ -2,11 +2,11 @@
%div
- if @notes_count > 0
%span.btn.disabled.btn-grouped
%i.icon-comment
%i.fa.fa-comment
= @notes_count
.pull-left.btn-group
%a.btn.btn-grouped.dropdown-toggle{ data: {toggle: :dropdown} }
%i.icon-download-alt
%i.fa.fa-arrow-circle-o-down-alt
Download as
%span.caret
%ul.dropdown-menu
......
......@@ -18,7 +18,7 @@
- if note_count > 0
%span.label.label-gray
%i.icon-comment= note_count
%i.fa.fa-comment= note_count
- if commit.description?
.commit-row-description.js-toggle-content
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment